我有一个设备(esp32s2),它启用了IoT并与AWS服务器通信。
该设备通过路由器连接到互联网。我想从设备上检查,路由器是否连接到互联网。如果没有连接,我需要立即断开mqtt代理的连接。
我知道aws_iot_yield正在发生,但是在断开连接后更改客户端状态(~5-10分钟)需要花费太多的时间。那么,有什么其他方法可以让我知道设备是连接到mqtt代理还是不使用AWS呢?
我希望避免使用using到某些地址/服务器,因为它将增加资源的使用。
提前感谢!
发布于 2021-12-22 07:01:46
由于通过因特网与AWS服务器的连接取决于网络元素,因此了解是否连接到internet的唯一可靠方法是将包发送到一个已知地址并接收响应。最简单的方法是使用ICMP (ping)协议。通常,对ping最可靠的目的地是Google服务器8.8.8.8或8.8.4.4,这是一个集群服务,它总是在ping上响应。
您可以控制两个ping之间的暂停,以及您将在一个会话中发送多少个ping,以保留资源。
另一种方法是使用一个路由器,该路由器可以向监视设备发送消息,说明链路状态已经更改(例如SNMP陷阱)。但这不是完全可靠的方法,因为路由器无法检测到AWS服务器连接丢失的所有场景。
https://stackoverflow.com/questions/69028686
复制相似问题