我有一个带 DHT22 传感器的 ESP12F,它通过 WiFi 发布到 MQTT,然后进入深度睡眠 10 分钟,然后重试。我正在使用 Arduino IDE。
我有过非常不一致的行为,有时它工作正常,有时它陷入 WiFi 黑洞:启动时它连接正常,但在深度睡眠后,它根本找不到任何网络。
我正在尝试将电池电量降至最低,因此请使用
代码:
全选 WiFi.mode(WIFI_OFF);
WiFi.forceSleepBegin();
delay(1);
在代码的开头,当我知道我需要使用 WiFi 时,请使用:
代码:
全选 WiFi.forceSleepWake();
delay(1);
WiFi.persistent(false);
// Bring up the WiFi connec
tion
WiFi.mode(WIFI_STA);
// Static IP assignment
WiFi.config(ip,gateway,subnet);
WiFi.hostname(wifi_hostname);
WiFi.begin(wifi_ssid, wifi_password);
int count = 0;
while (WiFi.status() != WL_CONNECTED) {
if (count > 50) { // 5 seconds
if (debug) {
Serial.println("WiFi connection timeout, dropping back into deep sleep");
Serial.println(WiFi.status());
int n = WiFi.scanNetworks(false, true);
Serial.print(n);
Serial.println(" WiFi network(s) detected");
String ssid;
uint8_t encryptionType;
int32_t RSSI;
uint8_t* BSSID;
int32_t channel;
bool isHidden;
for (int i = 0; i < n; i++)
{
WiFi.getNetworkInfo(i, ssid, encryptionType, RSSI, BSSID, channel, isHidden);
Serial.printf("%d: %s, Ch:%d (%ddBm) %s %s\n", i + 1, ssid.c_str(), channel, RSSI, encryptionType == ENC_TYPE_NONE ? "open" : "", isHidden ? "hidden" : "");
}
}
ESP.deepSleep(polling_us, WAKE_RF_DISABLED ); // in uS
}
delay(100);
if (debug) Serial.print(".");
count++;
}
这是串行调试的输出:
代码:
全选13:50:36.068 -> Connecting to SSID
13:50:36.172 -> fpm close 3
13:50:36.172 -> mode : sta(dc:4f:22:1d:a3:24)
13:50:36.172 -> add if0
13:50:36.279 -> ............................scandone
13:50:39.026 -> no SSID found, reconnect after 1s
13:50:39.093 -> .reconnect
13:50:39.199 -> ......................WiFi connection timeout, dropping back into deep sleep
13:50:41.293 -> 6
13:50:41.293 -> scandone
13:50:43.490 -> scandone
13:50:43.490 -> 0 WiFi network(s) detected
13:50:43.490 -> del if0
13:50:43.490 -> usl
13:50:43.557 -> enter deep sleep
原理图是:(
我在关闭 USB
电源时遇到同样的错误,所以这不是 MCP1700 的电流消耗问题)。
完整代码在
任何帮助表示赞赏 - 在过去的几周里我一直在尝试不同的事情并且似乎无法动摇 - 希望我错过了一些与新手相关的东西。