完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我正在尝试使用 SmartConfig 将 SSID 和密码共享给 NodeMCU。但是当我重置它或者它断电时,我必须重新配置它。我该怎么做才能防止这种情况发生,以便模块记住 SSID 密码,除非用户按下按钮启动重启?
我的代码 - #include ; #include ; void setup() { Serial.begin(115200); 延迟(10); WiFi.mode(WIFI_STA); 延迟(500); IP 地址 local_IP(192, 168, 1, 199); IP 地址网关(192、168、1、1); IP 地址子网(255、255、0、0); IP 地址 primaryDNS(8, 8, 8, 8); // 这是可选的 IP 地址 secondaryDNS(8, 8, 4, 4); // 这是可选的 // 如果设置未配置则打印反馈 if (!WiFi.config(local_IP, gateway, subnet, primaryDNS, secondaryDNS)) { Serial.println("STA Failed to configure"); } WiFi.beginSmartConfig(); while (WiFi.status() != WL_CONNECTED) { delay(500); 序列号.print("."); Serial.println(WiFi.smartConfigDone()); } Serial.println(""); Serial.println("WiFi 已连接"); Serial.println("IP地址:"); Serial.println(WiFi.localIP()); } 整数值 = 0; 无效循环(){ } |
|
相关推荐
1个回答
|
|
要实现保存 SSID 和密码,以便在重置或断电后保留配置,您可以在代码中使用 EEPROM(电可擦可编程只读存储器)。EEPROM 存储器可以保存持久性数据,即使您断电或重置设备。
为了使用 EEPROM,您需要添加以下代码来初始化它: #include #define EEPROM_SIZE 512 // 您可以根据需要更改 EEPROM 大小 在 setup() 函数之前,您可以添加以下代码来读取和保存 SSID 和密码: void setup() { // 初始化串口和 EEPROM Serial.begin(115200); EEPROM.begin(EEPROM_SIZE); // 检测是否存在保存的 SSID 和密码 byte ssidLength = EEPROM.read(0); if (ssidLength > 0 && ssidLength < 32) { // 最大 SSID 长度是 32 个字节 byte passwordLength = EEPROM.read(ssidLength + 1); if (passwordLength > 0 && passwordLength < 64) { // 最大密码长度是 64 个字节 char ssid[ssidLength + 1]; char password[passwordLength + 1]; EEPROM.get(1, ssid); EEPROM.get(ssidLength + 2, password); // 配置 WiFi WiFi.mode(WIFI_STA); WiFi.begin(ssid, password); Serial.println("Connecting to WiFi..."); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("Connecting..."); } Serial.println("Connected to WiFi!"); } } } 在这段代码中,我们使用 EEPROM.read() 函数来读取保存的 SSID 和密码的长度,并使用 EEPROM.get() 函数将它们复制到我们的字符数组中。 然后,我们使用 WiFi.mode(WIFI_STA) 和 WiFi.begin() 函数来连接保存的网络。如果存在保存的配置,NodeMCU 将连接该网络,并输出“Connected to WiFi!”消息。如果没有保存的配置,它将进入 SmartConfig 模式。 在 SmartConfig 模式下,您可以使用 Esptouch 或 AirKiss 来向 NodeMCU 发送 SSID 和密码信息。在收到信息后,您可以使用以下代码将其保存到 EEPROM 中: WiFi.beginSmartConfig(); while (!WiFi.smartConfigDone()) { delay(500); Serial.println("Waiting for SmartConfig..."); } Serial.println("SmartConfig sent!"); String ssid = WiFi.SSID(); String password = WiFi.psk(); byte ssidLength = ssid.length(); byte passwordLength = password.length(); if (ssidLength > 0 && ssidLength < 32 && passwordLength > 0 && passwordLength < 64) { char ssidArray[ssidLength + 1]; char passwordArray[passwordLength + 1]; ssid.toCharArray(ssidArray, ssidLength + 1); password.toCharArray(passwordArray, passwordLength + 1); EEPROM.write(0, ssidLength); EEPROM.write(ssidLength + 1, passwordLength); EEPROM.put(1, ssidArray); EEPROM.put(ssidLength + 2, passwordArray); EEPROM.commit(); Serial.println("SSID and password saved to EEPROM!"); } 在这段代码中,我们使用 WiFi.beginSmartConfig() 函数来进入 SmartConfig 模式。在等待 SmartConfig 完成时,我们使用 WiFi.SSID() 和 WiFi.psk() 函数获取 SSID 和密码。一旦收到信息,我们检查 SSID 和密码是否符合限制,并将它们保存到 EEPROM。 记录完毕后,请确保使用 EEPROM.commit() 函数将更改写入 EEPROM。 |
|
|
|
只有小组成员才能发言,加入小组>>
524浏览 6评论
433浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
422浏览 5评论
414浏览 4评论
387浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-3 06:52 , Processed in 0.810509 second(s), Total 79, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号