arduino - 如何使用esp32 ulp中断脉冲计数器和周期性唤醒深度 sleep 模式

标签 arduino esp32

我正在尝试使用 dds353 kWh 仪表测量用电量。该仪表具有脉冲输出。我对使用 esp32 很感兴趣,因为我可以定期通过互联网将数据发送到 nodered 仪表板。我也对在低功耗模式下使用 esp32 并定期唤醒以通过 mqtt 发送数据非常感兴趣。我已经尝试了来自 github 的示例使用 espressif idf 但我不介意 arduino 等效项。我想做硬件中断,当其中一个 rtc gpio 引脚变高时,计数器递增,同时运行一个单独的定时器中断,偶尔会唤醒从 rtc 获取数据并将其发送过来的主 xtensia 内核。我查看了脉冲计数器示例,并且以我有限的知识无法判断中断是在 ulp 处于 sleep 模式时触发还是仅在它打开时触发。如果有人能告诉我如何基本上使用 ulp 来计算脉冲,即使它处于 sleep 模式并定期唤醒主内核,我也会很高兴。我接受 IDF 或 arduino 示例

最佳答案

如果您想在深度 sleep 时计算脉搏,您可以使用 ULP。当电路板唤醒并进入正常功耗模式时,ULP 上的代码继续执行。因此,当它被唤醒时,它仍会在 ULP 处理器上运行计数器,除非您停止 ULP 定期唤醒定时器,ULP 将在主 CPU 处于事件状态时保持唤醒和运行。

因为你已经给了checked with this example ,它应该非常接近您的需要。唯一的区别似乎是该示例设置为在给定数量的脉冲后唤醒,而不是固定的时间量。然而,通过启用定时器唤醒深度 sleep 应该很容易改变这一点。
对于 Arduino you could check
一些附加信息:
ULP 没有 GPIO 中断。所以你使用深度 sleep 唤醒 stub (深度 sleep 后立即运行的一小段代码,在将应用程序从闪存加载到 RAM 之前)你可以增加脉冲计数器变量,然后再次进入休眠状态。通过这种方式,您可以在很短的时间内在运行唤醒 stub (大约 13mA)时获得脉冲之间的低功耗(~5uA)和中等功耗。
因此,您可以根据自己的具体情况进行试验。

关于arduino - 如何使用esp32 ulp中断脉冲计数器和周期性唤醒深度 sleep 模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61484531/

相关文章:

java - Arduino 从 Java 读取信号并显示/使用它们

c - 当没有连接COM(串行)端口或串行监视器打开时,arduino是否运行打印功能(print、println、printf等)?

c - MQTT 回调处理

swift - BLE 在 ESP32 和 Iphone 之间发送字符串

python - 我正在尝试将 idf.py 作为 CMD 命令运行。我已经设置了环境变量,但它仍然无法识别

c++ - 用 <> 传递参数?

c++ - Arduino 打印在大量打印时失败

ssl - ESP32 MQTT TLS 错误(自签名证书)

c - ESP32s NodeMCU 无法识别 SD 卡突破 : "Card Mount Failed"

arduino - ESP32 Arduino BLE 深度 sleep