Mqtt 将ESP8266与arduino一起使用时.connect()函数延迟

Mqtt 将ESP8266与arduino一起使用时.connect()函数延迟,mqtt,arduino-esp8266,esp8266wifi,Mqtt,Arduino Esp8266,Esp8266wifi,我使用ESP8266-7作为我项目中唯一的微控制器,我有一个小问题。有时,internet线路中断,我的ESP尝试重新连接到代理。当这种情况发生时,程序将冻结,直到internet重新联机,ESP重新连接到代理。(更具体地说,我的程序每次都在.connect(device_ID.c_str()、mqtt_user.c_str()、mqtt_pass.c_str())中等待15秒。) 我使用的是PubSubClient.h库,正如我所测试的,当我调用mqtt_client.connect(devi

我使用ESP8266-7作为我项目中唯一的微控制器,我有一个小问题。有时,internet线路中断,我的ESP尝试重新连接到代理。当这种情况发生时,程序将冻结,直到internet重新联机,ESP重新连接到代理。(更具体地说,我的程序每次都在
.connect(device_ID.c_str()、mqtt_user.c_str()、mqtt_pass.c_str())中等待15秒。

我使用的是
PubSubClient.h
库,正如我所测试的,当我调用
mqtt_client.connect(device_ID.c_str(),mqtt_user.c_str(),mqtt_pass.c_str())时会出现这个问题。
。这样,程序运行此函数并等待进程完成。这可能需要15秒

我如何在不使用此代码的情况下尝试连接到代理,或者是否有其他解决方案不冻结我的程序


当我的程序仍在运行时,ESP是否可以在后台连接到代理?

通常这类库/模块上存在连接超时,但如果使用此库/模块(),则没有连接超时。对于这种情况,如果连接时间过长,我会使用看门狗定时器中止连接,并重置电路板…不确定您的用例是否允许这样做。感谢您的及时响应,但正如我所说,它是电路板上唯一的微控制器,我不想关闭它。我希望一切顺利运行,没有任何停顿,我希望在程序的后台连接到代理。我不想上网,用任何方法中断我的程序。我有机会这样做吗?这取决于你的应用程序是如何编写的。例如,我有一个池温度传感器,每五分钟连接一次以发送数据。它首先连接到WiFi,如果看起来不错,则尝试连接到MQTT代理。我有一个90秒的看门狗定时器,如果整个WiFi+MQTT代理连接没有在这个时间范围内发生,它会重置电路板。没有规定说你的传感器必须一直连接(特别是当它只是发送数据而不是接收数据时!)这是正确的。但不幸的是,在我的情况下,我有很多其他的东西可以控制我的ESP;这不仅仅是检查传感器。因此,在我的情况下,不能有任何冻结时间。你有什么建议或解决方案给我吗?JD的物联网规则1:传感器应该是有意义的。PubSub体系结构的要点是节点可以是单一用途的,其他节点可以订阅传感器数据和其中的操作员。如果你让传感器感知,让其他节点处理数据,你的生活就会轻松得多。在我家的物联网系统中,我有一个Docker服务器,我的MQTT代理在其中运行,只需创建容器来处理数据。添加功能就像添加另一个容器并让它订阅数据一样简单。