ESP8266 MQTT
- Войдите на сайт для отправки комментариев
Ср, 06/01/2021 - 00:46
Принимаю данные по MQTT всегда фиксированной длинный 8 значений и передаю по UART в формате байта.
можно код как-то упростить , а то через какое то время перезагружается ESP
void callback(const MQTT::Publish& pub)//Прерывание после приема по MQTT { char tp[4] = {0}; //Байтовый буффер char charBufVar1[50]; String payload; unsigned char leng_pay = 0; String string_convert = ""; unsigned int top = 0; char ind = 0; String topic; topic = pub.topic(); //Принимаем тему сообщения из MQTT и пишем в строку top = topic.toInt();//Преобразуем топик в число payload = pub.payload_string();//Пишем сообщение в переменную payload = payload + " ";//Добавляем в конце пробел leng_pay = payload.length() + 1; //Подсчитываем кол-во символов в строке payload.toCharArray(charBufVar1, leng_pay);//Преобразуем строку в массив for (char i = 0; i < leng_pay; i++)//Парсируем массив { if (charBufVar1[i] != 0x20) // если это не пробел { string_convert += charBufVar1[i]; // складываем в строку } else // если это пробел { intData[ind] = string_convert.toInt(); // преобразуем строку в int и кладём в массив string_convert = ""; // очищаем строку ind++; // переходим к парсингу следующего элемента массива } } if(ind==8) { Serial.write(top);//Передаем байт топика for (char i = 0; i < ind; i++) { Serial.write(intData[i]);//Передаем байты сообщения } delay(30); } }
А код привести нормально - никак?
Например, где, когда и как описана переменная "intData"?
Без нормального кода здесь будет только глум и Ваши обиды на форум и мир.
Что то мне подсказывает , в случае приема более 20 байт непрерывно то МК легко перезагрузиться может. Пройдитесь по всем строкам своего кода и попытайтесь понять каждый ход процессора, тогда и придёт понимание.
В строке №80 поставьте заодно и печать ind - узнаете много интересного. Обратите внимание, чему она равна перед перезагрузкой и какое отношение её размер имеет в размеру массива intData.
ну да что-то с размером массива промахнулся занизил его мне постоянно приходят 8 байт.
дело не только и не столько в этом. Поставите 8 или 10 - не поможет. Сделайте то, что я сказал - вставьте печать и понаблюдайте.