0
我有一個小的本地IoT網絡,在Arduino IDe中編寫了一些Wemos D1節點。其中一些有兩個連接的傳感器,例如雨和潮溼。 我想每分鐘發一次數值,一分鐘下雨,一分鐘溼度。 下面的代碼通常與delay(5000);
兩個工作,但一旦我有類似delay(60000);
節點顯然開始只出版雨水和跳過溼度(我有一個mosquitto_sub -h myIP -v -t '#'
運行監聽傳遞消息。MQTT client.publish()和delay()
這是我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);
}
也許您的連接在等待60秒後關閉?你是否添加了'Serial'調試來確定'client'對象('boolean PubSubClient :: connected()')的狀態,並且如果在'delay()'之後到達了代碼? –
只是說明:而不是'humid_str.toCharArray(humid,humid_str.length()+ 1); client.publish(humidTopic,humid);''你可以使用'client.publish(humidTopic,humid_str.c_str())',或者你可以直接使用'val2'的'sprintf()'而不是'humid',後者是聲明爲具有足夠大尺寸的'char []'類型,從而避免了由'String'造成的動態內存使用。 –
您可以通過http://arduino.stackexchange.com/獲得更多的信息。 – phuzi