完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我是 ESP8266 的新手,正在使用
工作,在深度睡眠后设备报告的可靠性方面存在一些问题。设备设置为深度睡眠 10 分钟,通过 MQTT 报告传感器读数,然后返回睡眠状态: 我突出显示了它错过报告的时间段。 这是电路: 这是草图: 代码:全选/* * ESP-12F with DHT22 (battery-powered) * * MQTT Temperature and Humidity Sensor * * Designed for integration with HomeAssistant * */ #include #include #include WiFiClient espClient; PubSubClient client(espClient); DHTesp dht; // Serial debug output #define debug false // Device details #define device "test" // will prefix later parameters #define dhtDataPin 14 // GPIO14 #define dhtPowerPin 12 // GPIO12 // WiFi credentials. #define wifi_hostname device "-sensor" #define wifi_ssid "SSID" #define wifi_password "PASSPHRASE" IPAddress ip(0,0,0,0); IPAddress gateway(0,0,0,0); IPAddress subnet(255,255,255,0); // Reporting #define polling_m 10 // every X minutes #define polling_s polling_m * 60 #define polling_ms polling_s * 1000 #define polling_us polling_ms * 1000 #define mqtt_server "IP.AD.DRE.SS" #define humidity_topic device "/humidity" #define temperature_topic device "/temperature" void setup() { // switch off WiFi until we need it WiFi.mode(WIFI_OFF); WiFi.forceSleepBegin(); delay(1); // switch on the DHT22 sensor pinMode(dhtPowerPin,OUTPUT); digitalWrite(dhtPowerPin, HIGH); dht.setup(dhtDataPin, DHTesp::DHT22); // Connect DHT sensor if (debug) { Serial.begin(115200); while (!Serial) {} Serial.print("Connecting to "); Serial.println(wifi_ssid); } WiFi.forceSleepWake(); delay(1); WiFi.persistent(false); // Bring up the WiFi connection WiFi.mode(WIFI_STA); // Static IP assignment WiFi.config(ip,gateway,subnet); WiFi.hostname(wifi_hostname); WiFi.begin(wifi_ssid, wifi_password); while (WiFi.status() != WL_CONNECTED) { delay(100); if (debug) Serial.print("."); } float humidity = dht.getHumidity(); float temperature = dht.getTemperature(); if (debug) { Serial.println(""); Serial.println("WiFi connected"); Serial.println("IP address: "); Serial.println(WiFi.localIP()); Serial.println(); Serial.print("Temperature (C): "); Serial.println(temperature); Serial.print("Humidity (%): "); Serial.println(humidity); } client.setServer(mqtt_server, 1883); if (!client.connected()) { if (debug) Serial.print("Attempting MQTT connection..."); if (client.connect("ESP8266Client")) { if (debug) Serial.println("connected"); } else { if (debug) { Serial.print("failed, rc="); Serial.print(client.state()); Serial.println(" trying again in 2 seconds"); } // Wait 2 seconds before retrying delay(2000); } } client.publish(temperature_topic, String(temperature).c_str(), true); client.publish(humidity_topic, String(humidity).c_str(), true); client.disconnect(); // make sure the message is sent if (debug) Serial.println("Going to sleep"); // switch off DHT22 sensor digitalWrite(dhtPowerPin, LOW); ESP.deepSleep(polling_us, WAKE_RF_DISABLED ); // in uS } // end setup void loop() { } // end loop 所以我的问题是: 1. 这是预期的吗?我已经阅读了有关芯片/WiFi 一般不可靠的信息,所以我应该对上述结果感到满意吗? 2. 我没有将 RST 拉高,因为我看到有一个 12K 的内部上拉电阻。我还应该添加 10K PULLUP 吗? |
|
相关推荐
1个回答
|
|
造成ESP-12F深度睡眠唤醒时间不一致的原因可能有多种,包括:
1. 外部环境影响:如温度、湿度、电磁干扰等因素,会影响芯片内部晶体振荡器的精度,从而影响唤醒时间的精确度。 2. 代码逻辑问题:程序可能存在一些延时、循环等操作,或者在唤醒后的处理过程中出现异常,导致唤醒时间不一致。 3. 电池电量问题:电池电量不足可能导致芯片在进入深度睡眠时无法完全关闭,从而影响唤醒时间。 解决这些问题的方法包括: 1. 提高硬件稳定性:选择稳定的晶体振荡器、优化电路布局,减少电磁干扰等因素,提高芯片内部时钟精度。 2. 优化代码逻辑:避免长时间延时、循环等操作,确保唤醒后处理程序的正常运行。 3. 管理电池电量:对电池电量进行监测,提前预警电量过低,及时更换电池或充电,确保芯片正常的深度睡眠。 |
|
|
|
只有小组成员才能发言,加入小组>>
545浏览 6评论
457浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
438浏览 5评论
441浏览 4评论
411浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 11:14 , Processed in 1.084868 second(s), Total 76, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号