我有一台NodeMcu Lua ESP8266 ESP-12E,我想用它通过Wifi网络控制到继电器。
第一步是编写一个扫描网络并连接到网络的Arduino Sketch。但是,即使示例菜单中的标准示例也不起作用(例如,https://github.com/esp8266/Arduino/blob/master/libraries/ESP8266WiFi/examples/WiFiScan/WiFiScan.ino)。
#include "ESP8266WiFi.h"
void setup() {
Serial.begin(115200);
// Set WiFi to station mode and disconnect from an AP if it was previously connected
WiFi.mode(WIFI_STA);
WiFi.disconnect();
delay(100);
Serial.println("Setup done");
}
void loop() {
Serial.println("scan start");
// WiFi.scanNetworks will return the number of networks found
int n = WiFi.scanNetworks();
Serial.println("scan done");
if (n == 0)
Serial.println("no networks found");
else
{
Serial.print(n);
Serial.println(" networks found");
for (int i = 0; i < n; ++i)
{
Serial.print(WiFi.SSID(i));
delay(10);
}
}
Serial.println("");
// Wait a bit before scanning again
delay(5000);
}
为了排除硬件问题,我尝试了列表API文档中的LUA版本(见下文),该版本有效。
-- print ap list
function listap(t)
for k,v in pairs(t) do
print(k.." : "..v)
end
end
wifi.sta.getap(listap)
使用http://nodemcu.com/index_en.html的固件版本。
之后,我再试一次INO版本,它似乎也有效。但事实证明,只有先前的固件来自http://nodemcu.com/index_en.html
的固件才有效我需要包含一个库或其他东西才能正确初始化wifi? 提前谢谢,
答案 0 :(得分:0)
(通过谷歌搜索)我想出了问题和解决方法。问题似乎是当设备通电或从复位唤醒时,RF模块未正确初始化。
可悲的是,似乎没有手动模式来打开RF模块。
然而,我找到了一个解决方法。首先,我建立连接以启用深度睡眠,为此,我们需要将RST
引脚连接到ESP8266上的D0
/ GPIO 16
。
然后我添加了以下代码来设置
extern "C" {
#include "user_interface.h"
}
void setup(){
if (resetInfo->reason != REASON_DEEP_SLEEP_AWAKE) {
ESP.deepSleep(10, WAKE_RF_DEFAULT)
}
基本上,只要系统从深度睡眠以外的其他方式进入设置,系统就会进入深度睡眠状态,并且在启用RF模块的电源时会启用。