SIM800L не отсылает данные по mqtt
- Войдите на сайт для отправки комментариев
Пнд, 01/10/2018 - 18:27
Доброго времени суток, товарищи!
Столкнулся с проблемой - SIM800L не отсылает данные на брокер. При чем такой эффект достигается при добавлении SoftwareSerial. Он сам подключен через софтовый uart, и прекрасно работает один, но если добавить еще один сериал, то к брокеру подключается, но данные не доходят.
Для работы использую библиотеки TinyGsmClient и PubSubClient.
Заранее благодарю за любую помощь и подсказку
А читал про метод listen у SoftwareSerial? И про то, зачем его употреблять в случае использования нескольких экземпляров класса SoftwareSerial?
Хм, не знал. Прочитал информацию, тем не менее, не помогло. Или я не понял, как использовать. Нужно вызывать до отправки, так ?
Хм, не знал. Прочитал информацию, тем не менее, не помогло. Или я не понял, как использовать. Нужно вызывать до отправки, так ?
Enables the selected software serial port to listen. Only one software serial port can listen at a time; data that arrives for other ports will be discarded.
Что из вышеописанного непонятно? Понимаете, что если мы не будем поочерёдно вызывать listen для каждого из экземпляров SoftwareSerial - то входящие на этот программный порт данные - тю-тю. А вы, вестимо, чего-то там в этом случае ждёте от SIM800 - например, ответа на посланную команду. При этом listen - не вызывается, поэтому ответа - никогда не дождётесь. Так - понятней?
Я вызвал mySerial.listen();, более того, выполнял отправку данных при условии mySerial.isListening(), все равно не доходит информация. А смысл функции я понял
Я вызвал mySerial.listen();, более того, выполнял отправку данных при условии mySerial.isListening(), все равно не доходит информация. А смысл функции я понял
Значит, нужен код. Что у вас там написано - издалека не видать, мутные нынче хрустальные шары пошли.
Ну и где вы переключаетесь по listen между вашими GPRSSerial и mySerial? ГДЕ? Ессно, оно работать не будет.
Так а я нигде mySerial и не использую. Уже в таком варианте оно не работает
Так а я нигде mySerial и не использую. Уже в таком варианте оно не работает
В строке 31 - дядя Вася его использует вместо вас, да? Видимо, да. Так вот - инициализация - это уже ИСПОЛЬЗОВАНИЕ. Закомментируйте строчку 31 и посмотрите.
Тот же результат. Помогает только убрать SofwareSerial mySerial(7, 6);
Тот же результат. Помогает только убрать SofwareSerial mySerial(7, 6);
Помогает правильное использование listen, и всё. Добавьте перед 40-й строкой две строчки:
Что будет?
Темболее, в 34 строке, в сетапе я указал слушать GPRS, и нигде больше не менял
Темболее, в 34 строке, в сетапе я указал слушать GPRS, и нигде больше не менял
Добавьте перед 40-й строкой две строчки:
1
mySerial.listen();
2
GPRSSerial.listen();
Что будет?
Вот этот пример почитайте - там с комментариями, и используются два SoftwareSerial: https://www.arduino.cc/en/Tutorial/TwoPortReceive
Никаких других подводных камней нет? Схему соединения бы, на всякий - что куда подсоединено.
Не изменилось ничего
Никаких других подводных камней нет? Схему соединения бы, на всякий - что куда подсоединено.
Да тут только SIM800, в скетче указаны пины, и конденсатор к нему, по питанию
Вот этот пример почитайте - там с комментариями, и используются два SoftwareSerial: https://www.arduino.cc/en/Tutorial/TwoPortReceive
Смотрел и этот, и еще много подобных примеров, на форумах, на сайтах с документацией по ардуино.
Еще, после 75 строки не выводится текст в сериал порт (аппаратный)
Еще, после 75 строки не выводится текст в сериал порт (аппаратный)
Т.е. зависает на вызове mqtt.publish?
Походу да, и 5 сек задержки нет. Но потом опять перезагружает модем и так далее
Походу да, и 5 сек задержки нет. Но потом опять перезагружает модем и так далее
Что значит "перезагружает модем"? Так зависает или нет?
Программно перезагружаю модем, вначале цикла. Пропускает все, что после 75 строки
Обратитесь к авторам библиотек - наверное им виднее что там внутри перезагружается
P. S. Я например в своих проектах всегда делаю перезагрузку модема если от него нет нужных команд - возможно в библиотеках аналогично.
Так я тоже делаю перезагрузку модема после отправки данных. И в используемой библиотеке аналогично.