MQTT订阅/OTA更新深度睡眠/ESP32/FreeRTOS [英] MQTT Subscribe / OTA Update Deep Sleep / ESP32 / FreeRTOS

查看:22
本文介绍了MQTT订阅/OTA更新深度睡眠/ESP32/FreeRTOS的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

目标是在定期从深度休眠中醒来的物联网设备中通过MQTT接收消息。OTA更新与任何其他参数更新存在完全相同的注意事项。在我的情况下,最终,我希望将此用于两者。


进度

它运行

设备唤醒大约15秒。如果在此期间,我向相关主题发布了一串消息,则消息成功到达。在AWS控制台内,我可以发布到:

$aws/things/<device-name>/shadow/update/delta

{
    "state":{
        "desired":{
            "output":true
        }
    }
}

并且为"输出"运行增量回调函数。很棒,但对任何人都没有实际用处。


物联网作业

我在控制台中创建了一个自定义的AWS IoT作业以克服该问题。我的想法是,它可能会保留信息,以确保传递。过去半个小时我一直在做这项工作,但到目前为止什么也没有完成。它已经超时了20分钟,但仍然停留在排队中,甚至还没有在进行中…因此,此方法显然存在缺陷。


AWS CLI测试

出于完整性考虑,我尝试从控制台发出MQTT消息。它的好处是您可以指定QOS,(理论上)确保它至少交付一次。

aws iot-data publish --topic "$aws/things/<device-name>/shadow/update/delta" --qos 1 --payload file://Downloads/outputTrue.json --cli-binary-format raw-in-base64-out

但奇怪的是,这似乎一点也不管用。我根本没有看到消息到达代理:在控制台测试中订阅。


AWS

是时候分享我通过拼凑大量帖子和联系非常乐于助人的推荐答案支持团队找到的答案了。此链接才是真正涵盖它的链接:

https://docs.aws.amazon.com/iot/latest/developerguide/jobs-devices.html#jobs-workflow-device-online

我汇总的伪代码是:

1. init() & connect() to mqtt as before.
2. Subscribe to the following topics & create callback function for each:

  a. Get pending.   
  b. Notify next.    
  c. Get next.
  d. Update rejected.   
  e. Update accepted.   

3.  Create Publish topics:

  a.    Get pending.
  b.    Get Next.

4. Pending topics = optional. But necessary to handle many tasks and select between them. 
5. Aws-iot-jobs-describe() to publish a request for the next job. It links up to the notify next callback (somehow). 
6. In the callback, grab job document, execute job & report Success / Failure. 
7. Done.

esp-aws-iot/samples/linux/jobs-samples/jobs_sample.c.中有一个很有用的示例您需要从示例AWS_IoT_config.h复制一些常量。

完成所有这些操作后,您就可以使用AWS Jobs来管理您的OTA推广,这正是您的初衷。

这篇关于MQTT订阅/OTA更新深度睡眠/ESP32/FreeRTOS的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆