我有一个小型本地物联网网络,其中包含一些在 Arduino IDe 中编程的 Wemos D1 节点。其中一些连接了两个传感器,例如雨水和湿度。
我想每分钟发送一次值,一分钟下雨,一分钟湿度。
下面的代码通常与 delay(5000);
一起工作,但是一旦我有了类似 delay(60000);
的节点显然开始只发布雨水并跳过湿度(我有一个 mosquitto_sub -h myIP -v -t '#'
正在运行以监听消息。
这是我的loop()
,所有的感应和发送都在这里发生:
void loop() {
if (!client.connected() && WiFi.status() == 3) {
reconnect();
}
client.loop();
int val = digitalRead(rainSensor); // read the input pin
rain_str = String(val);
rain_str.toCharArray(rain, rain_str.length() + 1);
client.publish(rainTopic, rain);
delay(60000);
int val2 = analogRead(humidSensor); // read the input pin
humid_str = String(val2);
humid_str.toCharArray(humid, humid_str.length() + 1);
client.publish(humidTopic, humid);
delay(60000);
}
最佳答案
如果您没有在 MQTT_KEEPALIVE 秒(通常为 15 秒)内调用 client.loop() 函数,您将收到 MQTT_CONNECTION_TIMEOUT。
确保以更短的间隔调用 client.loop()。使用计数器计数到 60 或更好地使用计时器函数,如 Ticker 库。
关于arduino - MQTT client.publish() 和 delay(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42533152/