如何搭配使用WifiManager与Adafruit IO,无需硬编码WiFi凭证
问题原因
你遇到的LoadProhibited崩溃是AdafruitIO_WiFi库访问空指针导致的:你给AdafruitIO_WiFi构造函数传入了两个NULL作为WiFi凭证,库内部在执行io.connect()时会尝试读取这两个空指针对应的字符串内容,直接触发内存访问错误崩溃。
修复方案
你已经通过WifiManager完成了WiFi连接,不需要AdafruitIO再处理WiFi连接逻辑,按以下步骤修改即可:
1. 修改config.h
不要给AdafruitIO_WiFi传空指针,填入任意非空的占位字符串即可,反正我们已经提前连好WiFi,库不会用到这两个占位值:
//get this info from the "My Key" section of the Adafruit IO website #define IO_USERNAME "XXX" #define IO_KEY "XXX" // ***************************IGNORE ALL BELOW THIS********************************** #include "AdafruitIO_WiFi.h" // 这里填任意非空的占位字符串即可,不会实际使用 AdafruitIO_WiFi io(IO_USERNAME, IO_KEY, "placeholder_ssid", "placeholder_pass");
2. 修改主程序逻辑
调用io.connect()前确认WiFi已经连接,同时补充AdafruitIO必须的运行逻辑:
#include <WiFiManager.h> #include "config.h" AdafruitIO_Feed *lamp = io.feed("lamp"); void setup() { Serial.begin(115200); Serial.println("Booting Up"); //WIFI STUFF bool res; WiFiManager wifiManager; res = wifiManager.autoConnect("lamp"); if(!res) { Serial.println("Failed to connect, restarting..."); ESP.restart(); } else { Serial.println("WiFi connected successfully"); } //END WIFI STUFF // 连接Adafruit IO,此时WiFi已经连接,库会直接复用现有连接,不会用到占位的ssid和密码 Serial.print("Connecting to Adafruit IO"); io.connect(); // 等待连接成功 while(io.status() < AIO_CONNECTED) { Serial.print("."); delay(500); } Serial.println(); Serial.println("Adafruit IO connected!"); } void loop() { // 必须添加这行,AdafruitIO需要定期运行处理通信 io.run(); // 你的其他业务逻辑写在下面 }
内容的提问来源于stack exchange,提问作者user2570937
相关产品推荐
相关产品推荐

