При смене пароля на mqtt сервере ардуино нано перестает пинговаться
- Войдите на сайт для отправки комментариев
Чт, 13/08/2020 - 20:45
Здравствуйте.
Подскажите пожалуйста. Есть парк ардуино нано с ENC28J60. Ардуинки по mqtt (мктт сервер москит) отправляют\получают данные. На днях словил баг, видимо в коде. Я мктт сервере я поменял пароль подключения клиентов. И все (10 шт) ардуинки в один момент перестали пинговаться в сети. Возвращаю старый пароль - пинг оживает. Код на всех контроллерах в части подключения к сети и mqtt одинаковый.
Где я в коде скосячил:
#include <UIPEthernet.h> #include <PubSubClient.h> // ======================================================================= // Конфигурация устройства MQTT: uint8_t mac[6] = { 0xDE, 0xAD, 0xBE, 0xD4, 0xD9, 0xD9 }; uint8_t myIP[4] = {10, 12, 10, 115}; uint8_t myDNS[4] = {10, 12, 10, 1}; uint8_t myGW[4] = {10, 12, 10, 1}; uint8_t myMASK[4] = {255, 255, 255, 0}; const char *mqtt_server = "10.12.10.10"; // Имя сервера MQTT const int mqtt_port = 1883; // Порт для подключения к серверу MQTT const char *mqtt_user = "****"; // Логи от сервер const char *mqtt_pass = "****"; // Пароль от сервера EthernetClient ethClient; PubSubClient client(ethClient); char buff[15]; //mqtt broker uint32_t previousMillis_mqtt_connect = 0; // храним время последнего подключения uint32_t interval_mqtt_connect = 60000; //интервал uint32_t currentMillis_mqtt_connect = 0; // ======================================================================= void mqtt_reconnect() { currentMillis_mqtt_connect = millis(); // подключаемся к MQTT серверу if (currentMillis_mqtt_connect - previousMillis_mqtt_connect > interval_mqtt_connect) { String clientId = "nanopirssensor-"; clientId += String(random(0xffff), HEX); client.connect(clientId.c_str(), mqtt_user, mqtt_pass); previousMillis_mqtt_connect = currentMillis_mqtt_connect; client.publish("ihouse/gadget/doorLock", digitalRead(inButtonDoor)); } } // ======================================================================= void setup() { Ethernet.begin(mac, myIP, myDNS, myGW, myMASK); delay(10); client.setServer(mqtt_server, mqtt_port); delay(10); } // ======================================================================= void loop() { if (!client.connected()) { mqtt_reconnect(); } client.loop(); } // =======================================================================
Благодарю
Контроллер не может авторизоваться, висит в процедуре коннекта, не выполняя прием пакетов и не отвечая на них.
Это не баг, это штатное поведение драйвера.
А я таким не пользовался, но на будущее - пароль и логин на устройствах отличается от пароля и логина на сервисе?