ESP32:如何使用 Arduino 物联网云运行的接入点更改 WiFi SSID

问题描述 投票:0回答:1

我一直在尝试将 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 iot esp32 arduino-esp32
1个回答
0
投票

我最近在 Arduino Nano 33 IOT 上遇到了同样的问题。我解决如下:

  • WiFiConnectionHandler 的实例声明为全局指针,在 setup 函数之外(未初始化!因为,在这个阶段,我们不知道我们要连接的 WiFi 网络的凭据!)
  • setup中初始化WiFiConnectionHandler的实例,只有在从EEPROM
  • 中读取凭证后

就我而言,它看起来像这样:

// 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();
}
© www.soinside.com 2019 - 2024. All rights reserved.