You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何搭配使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 23:36:08