我有一个ESP8266,用于通过MQTT记录天气数据。因为我想节省一些力量,所以我决定使用DeepSleep。由于我想记录数据,如果我可以每分钟发送新条目,那将是件好事。
这曾经用于我的旧草图,其中我在循环部分中有所有数据采集任务,并且我保持与WiFi和MQTT服务器的连接打开。
但这不适用于DeepSleep。我需要在每次唤醒后重新连接,每次唤醒后,ESP8266基本上都会重新启动。
因为每次唤醒都没有完全相同的时间,我想知道是否有办法让ESP8266登录完全相同的时间戳并在两者之间进入DeepSleep?
这是DeepSleep算法的代码示例:
String JSON = "{\"sensor\": \"Outdoor Sensor\", \"data\":[" + String(temp) + "," + String(hum) + "," + String(brightness) + "]}";
client.publish(topic, JSON.c_str(), true); //publish data as JSON to MQTT
delay(10); //somehow if this is not added, the data does not get logged.
Serial.println("Going into deep sleep for 60 seconds");
ESP.deepSleep(56e6); // because of microseconds - processing data takes about 4sec, but this is very unprecise
这是来自PhpMyAdmin,以便更好地可视化问题:
如果ESP8266无法完成,ESP32可能有帮助吗?
答案 0 :(得分:0)
我找到了一个(不完美)的解决方法。 如果我做
Serial.println("Going into deep sleep so that next data gets posted in a minute");
Serial.println(60e6-micros());
ESP.deepSleep(60e6-micros()); // because of microseconds; micros() is reset on wake-up
然后我得到稍微好一点的结果。但我不明白,为什么它不能完美运作。
在我看来应该这样,因为我计算整个启动过程+代码运行所花费的时间,然后减去ESP8266在DeepSleep中的时间。