完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
长期以来,我一直在努力为物联网系统保持足够低的功耗,电流源非常低。源通过方波脉冲 (MBUS) 发送数据,当接收到新数据帧时需要禁用当前源。
调制解调器睡眠有效,并允许我们使用 gpios 启用/禁用充电。然而,在 modemsleep 中,系统使用大约 23 mA 的平均值,这对应用程序来说是临界值。 一种替代方法是使用深度睡眠。在深度睡眠模式下,功耗平均低于 10 毫安,系统将获得充足的电力。我通过 150 欧姆将 D0 连接到 RST 进行深度睡眠工作。然而,在深度睡眠期间,我无法打开 gpios 充电然后睡眠,因为引脚值在睡眠期间变为默认值。我相信我已经成功地写入了引脚寄存器并设置了在睡眠期间激活高上拉的位。但如果是这样,这也无济于事,因为它们的值在深度睡眠期间也会更改为默认值。希望这是可以修复的,但我一直无法找到如何修复。 第三种选择是使用浅睡眠。这种睡眠形式可以充分降低功耗,还可以让我们按预期使用 gpios。但是,我无法启动 lightsleep。 这是我的代码的相关部分(不包括读取和设置 gpio 寄存器): 代码:全选void setup() { lightSleep = true; // setup gpios to control charging from low current source // Serial setup Serial.begin(74880); Serial.setDebugOutput(true); delay(10); //WiFi setup WiFi.mode(WIFI_STA); if (WiFi.status() != WL_CONNECTED) { WiFi.begin(ssid, password); Serial.print("?"); } WiFi.config(ip, gateway, subnet); IPAddress myip = WiFi.localIP(); // Enable light sleep as alternative to modem sleep if (lightSleep) { wifi_set_sleep_type(LIGHT_SLEEP_T); } sprintf((char*)setupMessage, "Setup done, connected to %u.%u.%u.%u after %d ms.rn", myip[0], myip[1], myip[2], myip[3], millis()); Serial.println((char*)setupMessage); } void loop() { // turn off charging from low current source // receive data from same source, cant charge and receive simultanously // use gpios to set charging if all is well if (doCharge) { // If not, only timing will start digitalWrite(impedancePin, HIGH); // Set input impedance low delay(10); // a delay is used to suppress any transient behaviour digitalWrite(converterPin, HIGH); // enable the DCDC converter with converterPin HIG } Serial.println("Charging has started. Good night..."); // Alternative 1 - use modem sleep or lightsleep if enabled. // Light sleep current(avg)= (8,5 * 1,5 + 1,5 * 70)/10 = 11,775 mA - good enough! if (lightSleep) { delay(1); delay (delayTime - 1); } else { // Modem sleep current(avg)=8,5 * 15 + 1,5 * 70)/10 = 15 * 15,5 = 23,25 mA - too much! int delayCheck; delayCheck = delayTime; while (delayCheck > 0) { // a buffer is already taken into account delay (delayInterval); delayCheck = delayCheck - delayInterval; } } /* // Alternative 2 - use deep sleep. ESP.deepSleep(delayTime * 1000); // GPIO4&5s registers loose values during deepsleep */ } } 所以我的问题是: 1)有没有办法在深度睡眠期间保持 gpio 值? 2) 如何修复上面的代码以激活 ligthsleep? |
|
相关推荐
|
|
只有小组成员才能发言,加入小组>>
598 浏览 1 评论
552浏览 6评论
461浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
443浏览 5评论
445浏览 4评论
415浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-24 00:27 , Processed in 0.894949 second(s), Total 75, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号