我一直在尝试将 WiFi.h、WebServer.h 和 EEPROM.h 与 ArduinoIoTCloud.h 和 Arduino_ConnectionHandler.h 能够在需要时更改 WiFi 凭据,而无需更改草图并重新上传。 问题是移动的时候;
WiFiConnectionHandler ArduinoIoTPreferredConnection(SSID, PASS)
内部 void setup() 无论是使用凭证的常量字符还是修改它以从 EEPROM 读取之后都不起作用,例如
WiFiConnectionHandler ArduinoIoTPreferredConnection(esid.c_str(), epass.c_str());
拜托,有什么方法可以从网络浏览器更改 WiFi 凭据吗?
守则
#include <ArduinoIoTCloud.h>
#include <Arduino_ConnectionHandler.h>
const char DEVICE_LOGIN_NAME[] = "********************";
const char SSID[] = "SECRET_SSID"; // Network SSID (name)
const char PASS[] = "SECRET_OPTIONAL_PASS"; // Network password (use for WPA, or use as key for WEP)
const char DEVICE_KEY[] = "SECRET_DEVICE_KEY"; // Secret device password
void onTemperatureChange();
float temperature;
void initProperties()
{
ArduinoCloud.setBoardId(DEVICE_LOGIN_NAME);
ArduinoCloud.setSecretDeviceKey(DEVICE_KEY);
ArduinoCloud.addProperty(temperature, READWRITE, ON_CHANGE, onTemperatureChange);
}
WiFiConnectionHandler ArduinoIoTPreferredConnection(SSID, PASS);
void setup() {
Serial.begin(9600);
delay(1500);
initProperties();
ArduinoCloud.begin(ArduinoIoTPreferredConnection);
setDebugMessageLevel(2);
ArduinoCloud.printDebugInfo();
}
void loop() {
ArduinoCloud.update();
}
void onTemperatureChange() {
}
所以,当我添加访问点的代码以写入和读取 EEPROM 时,据我所知,我需要将此行移到无效设置中。
WiFiConnectionHandler ArduinoIoTPreferredConnection(SSID, PASS);
例如
void setup() {
Serial.begin(9600);
delay(1500);
// Code for reading from EEPROM and the eeprom_SSID and eeprom_SSID_PASS will then pass to SSID and PASS Chars
//
initProperties();
WiFiConnectionHandler ArduinoIoTPreferredConnection(SSID, PASS);
ArduinoCloud.begin(ArduinoIoTPreferredConnection);
setDebugMessageLevel(2);
ArduinoCloud.printDebugInfo();
}
之后,由于物联网库找不到SSID和PASS,ESP将被强制重启
我已经尝试在 Blynk 和许多其他库中这样做,并且成功了;我可以通过激活服务器并为此创建一个访问点来输入 credentail,然后 blynk 从中读取并完美连接。问题是我必须使用 Arduino IoT 云,而不是 Blynk。 感谢您的支持。
我最近在 Arduino Nano 33 IOT 上遇到了同样的问题。我解决如下:
就我而言,它看起来像这样:
// declaration (outside setup)
WiFiConnectionHandler * iot_connector;
// setup function
void setup() {
// read from EEPROM credentials of WiFi network to connect to
// ssid = readFromEEPROM()
// password = readFromEEPROM()
// initialize the WiFiConnectionHandler pointer
iot_connector = new WiFiConnectionHandler(ssid, password);
ArduinoCloud.begin(*iot_connector);
// setup OTA callback
ArduinoCloud.onOTARequestCb(wifiOTARequestCallback);
// setup debug info
setDebugMessageLevel(DBG_VERBOSE);
ArduinoCloud.printDebugInfo();
}