Официальный сайт компании Arduino по адресу arduino.cc
Arduino и Sim800l подключение по mqtt
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Пнд, 17/06/2019 - 15:45
Здравствуйте, тема которую создал ранее под таким же именем пропала, сначала была ошибка 500 а затем "не найдено".
Итак, проблема заключается в том что бы собрать все что пришло от модема в одну строчку
Если использовать варинт из интернета с delay(1)
if (Serial3.available()) { while (Serial3.available()) { k = Serial3.read(); at += char(k); delay(1); } Serial.println(at); }
То строчка ответа от модема рандомно приходит то целой то по частям, т.е. я ожидаю ответ в формате
>topicValue
а получаю примерно так:
>topi
>cValue
или:
>topicVal
>ue
иногда приходит все ок.
Если убрать delay(), т.е.
if (Serial3.available()) { while (Serial3.available()) { k = Serial3.read(); at += char(k); } Serial.println(at); }
то все приходит по символу, т.е.
>t
>o
>p
>i
>c
>V
>a
>l
>u
>e
Еще в начале строки которая идет от mqtt сервера приходит значек стрелки вверх и ноль
кто подскажет для чего?
Вопрос в том как получить весь ответ строкой для дальнейшего стравнения? И можно ли разделить "topic" и "value" при обработке?
получать ответ побайтно, сохранять его в буфер и искаь в буфере те ключевые слова которые вы ищите.
как только ключевое слово найдено - выполнять действие и очищать буфер.
ЗЫ. Пример я уже выкладывал, но почему то вы даже не пытаетесь в нем искать отвесты на свои вопросы.
http://arduino.ru/forum/programmirovanie/snova-mqtt-1?page=1#comment-460595
получать ответ побайтно, сохранять его в буфер и искаь в буфере те ключевые слова которые вы ищите.
как только ключевое слово найдено - выполнять действие и очищать буфер.
ЗЫ. Пример я уже выкладывал, но почему то вы даже не пытаетесь в нем искать отвесты на свои вопросы.
http://arduino.ru/forum/programmirovanie/snova-mqtt-1?page=1#comment-460595
Cпасибо большое, получилось, накидываю ответ в строку пока не переполнится или не найду свою команду, затем очистка и снова ожидание
Накидывать в строку до переполнения плохая идея- может начальная часть нужной команды попасть на конец буфера, соответственно команда не дойдёт до МК - не надёжное устройство. Или оператор кинет рекламную смс и забьёт вам весь буфер.
Тогда или использовать кольцевой буфер или обрабатывать все что приходит по uart побайтно в online.