Arduino UNO +sim800l+mqtt(blynk)
- Войдите на сайт для отправки комментариев
Пнд, 10/07/2017 - 13:29
Здравствуйте! Помогите,пожалуйста! Пыталась сделать управление ардуиной через mqtt dashboard, брала готовый код, в итоге подключается к gprs, а к mqtt подключиться не может! Решила попробовать приложение blynk, взяла самый простой код из примеров,чтобы хотя бы просто подключиться! И опять....не может подключиться! Sim800l мигает редко,т.е.сеть поймал, через телефон в инет выходит! Помогите!
Пытаюсь реализовать данный пример.
С передачей данных датчика. Выяснелось, что надо передовать пореже. Раз в 5 минут. Иначи теряется связь с Blynk.
Но всеравно через 4 часа теряет связь.
Здравствуйте. Начала изучать MQTT. Возникло много вопросов.
https://github.com/martinhol221/SIM800L_MQTT/wiki/Управление-реле-по-протоколу-MQTT-используя-Arduino-и-Sim800L.
Прочитала эту сатью.
Эти команды работают.
Далее не понимаю как осуществить авторизацию и передачу данных.
После команды AT+CIPSEND получаю приглашение ">"
далее нужно авторизоваться и ввести топик текст и т п
кусок кода из указанной мною статьи
Слово CITROEN в ASCII
67 73 84 82 79 69 78
Слово drive2ru в ASCII
100 114 105 118 101 50 114 117
Откуда чего берется, я не поняла
Слово CITROEN в ASCII
67 73 84 82 79 69 78
переведите в HEX и получите как в образце 43 49.....
Этот перевод в HEX обязателен? или можно передавать текст латиницей?
Откуда чего берется, я не поняла
Из описания протокола MQTT, вестимо. Вот, читайте первоисточник: http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.html
Вот немного на русском: https://ipc2u.ru/articles/prostye-resheniya/chto-takoe-mqtt/ - но лучше читать первоисточник, конечно.
10 2D 00 06 4D 51 49 73 64 70 03 C2 00 3C 00 07 43 49 54 52 4F 45 4E 00 08 64 72 69 76 65 32 72 75 00 0C 6D 61 72 74 69 6E 68 6F 6C 32 32 31
Это пакет авторизации
Декодировала, получила следующее:
-MQIsdpВ<CITROENdrive2rumartinhol221
Т.е. чтобы авторизоваться мне нужно:
AT+CIPSEND
>
-MQIsdpВ<CITROENdrive2rumartinhol221 //как правильно записать эту строку и отправить?
Правильно - почитать спецификацию MQTT, формировать пакет байт и просто скармливать его по AT+CIPSEND. MQTT - не текстовый протокол, там пакеты байт.
Не получается отправить данные.
В мониторе порта получаю следующее:
Правильно отправлять наверное одной строкой:
Но все равно не работает
Авторизация и отправка в топик выглядит вот так:
mosquitto_pub -h m10.cloudmqtt.com -p 11481 -u ixboztkc -P kTBxIJNQLdvU -t C5 -m 300
В ответ SEND OK
Но в топике запись не изменилась на "300"
Блин. MQTT - НЕ ТЕКСТОВЫЙ ПРОТОКОЛ, надо отправлять НЕ СТРОКУ, а НАБОР БАЙТ.
Так понятней?
Подскажите, как отправить этот набор байт, пожалуйста.
Irinka , сделайте массив байт с теми байтами какие вам нужны,
byte mss[] = {0x6D, 0x6f, 0x73 и т.д.
потом цикл по этому массиву отправляете все эти байты командой SIM800.write(x)
в конце массива можно сразу добавить байт 26 окончания отправки
и вы уже не первый проект я смотрю делаете на sim800, может быть уже набрались опыта - пора бы уходить от шаблонных копипастных функций sendATCommand и написать самим логику - гораздо проще все будет программировать.
Спасибо за помощь.
Где то я опять накосячила)))
Сделала массив
Отправляю
В ответ:
и вы уже не первый проект я смотрю делаете на sim800, может быть уже набрались опыта - пора бы уходить от шаблонных копипастных функций sendATCommand и написать самим логику - гораздо проще все будет программировать.
Для моих столь маленьких проектов хватает, а так то да, буду совершенствоваться.
Так может беда в сервере MQTT? Отправка то произошла, нет возможности на стороне сервера посмотреть дошло или нет.
И кстати на sim800 вы закрываете сессию отправки? Может в этом причина....
Не нахожу информации по поводу закрытия сессии
"AT+CIPCLOSE" или AT+CIPSHUT ?
Не нахожу информации по поводу закрытия сессии
да, это к http сессии относиться, не ваш случай, команда HTTPTERM
вот из хорошей статьи вырезка (сам не пробовал) - судя по всему все у вас хорошо - разбирайтесь с сервером MQTT
Это я тоже читала. Вот и думаю, что отправка происходит, но почему то не доходит до топика
https://www.youtube.com/watch?v=dcpMa2UwEeA
Наверно я неправильно произвожу авторизацию
Иринка, добрый совет: решение проблем методом ненаучного тыка - путь в никуда. Вы так будете тыкаться до посинения. Единственно верный путь - это ПОНЯТЬ, как формируется пакет MQTT, и научиться формировать эти самые пакеты. Там несложно, в спецификации даже примеры алгоритмов есть. Можете также взять исходники PubSubClient и посмотреть - как формируется пакет MQTT там, но, если честно - там не совсем наглядно.
Короче, написать формирование пакета - не так сложно. Зато потом - вам будет пофиг, какой логин/пароль, какое имя топика, какой тип топика, какой payload - имея под рукой набор функций, вы всегда будете уверены, что пакет сформирован правильно. Иначе - так и будете не понимать, почему и что.
тут рядом недавно спорили спецы кто реально работал с MQTT, ждите их.
но вообще конечно надо смотреть логи сервера, но я так понимаю доступа у вас к нему нет.
Кстати, Энди прав. Нужно посмотреть, что прилетает на москита того же. tcpdump-ом или типа того. А если вы шлете на какой-нить чужой сервер, то там можно чего угодно кроме авторизации ожидать.
Исходя из этого сделала в экселе таблицу
Верно?
Ура ура, разобралась.
Неверно делала и авторизацию, и отправку данных.
Через эксель всё стало ясно.
Иринка, поставьте себе на локальную машину mosquitto - и шлите на него: там можно в консоли смотреть, что происходит. Это будет сильно лучше на первоначальном этапе.
Исходя из этого сделала в экселе таблицу
Верно?
Там, где вы пишете "константа" - это ошибка, почему - подробно описано в документации MQTT. Там не константа, там могут быть данные.
Спасибо.
Теперь еще вопрос, как мне число с запятой перевести в HEX?
Как вообще переводить текст в HEX и обратно.
вопрос не корректный, я конечно скину ссылку
https://ru.wikipedia.org/wiki/%D0%A8%D0%B5%D1%81%D1%82%D0%BD%D0%B0%D0%B4...
но я думаю вы и так знаете что такое шестнадцатиричная система счисления.
любой число в любом формате это тупо набор цифр.
понятие "перевод в HEX" актуально только отображения человеку,
а вопрос "как мне число с запятой перевести в HEX?" непонятен в принципе :(
в каком формате число? в каком формате оно нужно серверу? текст? float?
Как вообще переводить текст в HEX и обратно.
руками, например 2 HEX символа в байт:
Имею:
float temp = 12,63;
С процедурой авторизации понятно, там ничего меняться не будет.
Нужно float temp gtthdtcnb в формат для отправки 31 32 2C 36 33
берете целую часть, разбиваете по разрядам (делением на 100, потом хвост на 10, потом хвост от 10 и т.д.), к каждому разряду прибавляете 0x30 и отправляете, потом отправляете точку 0x2C, потом аналогично дробную часть.
типа так:
С отправкой все более менее понятно.
А вот читать из топика не получается.
82 0E 00 01 00 09 43 35 2F 63 6F 6D 61 6E 64 00
82
маркер пакета подписки0E
- общая длинна всего пакета авторизации 0E (HEX) = 14 (DEC) байт, от следующего байта и до конца00 01 00
- постоянно09
- длинна топика 09 (HEX) = 9 (DEC) байт43 35 2F 63 6F 6D 61 6E 64
- имя топика на которое подписывается устройство, в ASCIIC5/comand
00
- постоянноСоздала топик C5/comand и записала в него значение 555
В итоге получаю:
Алгоритм получения данных из топика, подписка, мне не понятна(
Так есть же команда получения запроса есть ли у сервера ответ, размер ответа, ну и получения ответа - нет?
Опять же если хочется что бы модем сразу в консоль выдавал ответы от сервера - его надо перевести в этот режим.
Ну и главный вопрос :) - а сервер вообще что нибудь отвечает?
Когда отсылаю сообщения, в вебинтерфейсе эти сообщения появляются.
Как перевести можем в этот режим?
Как перевести можем в этот режим?
Не знаю, не помню, не использовал, просто читал что модем не все и не всегда в консоль выдаёт.
https://elementztechblog.wordpress.com/2016/07/18/arduino-mqtt-library-f...
Прошу прощения, изменила своё сообщение (немного накосячила)))
Што-то я не понимаю - чего делает mosquitto_sub в мониторе ардуино иде?
Вот что в мониторе.
Топик StatusRel содержит значение 10
Запрос на чтение из топика выглядит вот так
Изучая MQTT на NodeMCU подсмотрела следующее
Если параметр retain = 0
то информация в топике не сохраняется, а если 1, то сохраняется и соответственно читается.
Получается, скорее всего, я публикую сообщения в топик без сохранения.
Как добавить маркер сохранения при публикации в топик?
Добрый вечер.
Объясните пожалуйста данный кусок кода