Клиент MQTT на Arduino + SIM900
В прошлом я использовал библиотеку pubsubclient для Arduino для связи с брокером MQTT, однако эта библиотека работает только с подключением Ethernet. Мне нужно использовать GSM в своем приложении, и в данный момент я использую SIM900. Однако я не могу найти никакой библиотеки для связи MQTT, использующей Arduino в качестве клиента MQTT и SIM900 в качестве шлюза. Я нашел это удивительным, так как наверняка должно быть много случаев, когда кто-то хотел бы загрузить данные с Arduino на брокер MQTT в мобильном сценарии, где сотовая сеть является единственным вариантом (вместо Ethernet). Итак, мои вопросы таковы:
- Можно ли использовать Arduino в качестве клиента MQTT и SIM900 в качестве шлюза для связи с брокером MQTT? Есть ли какие-нибудь библиотеки для того же самого?
- Каков текущий стандартный способ (шлюз / коммуникационный протокол) загрузки некоторых сенсорных данных с Arduino на интернет-сервер в мобильном сценарии (т. Е. Там, где Ethernet не является вариантом)?
@user3647150, 👍4
Обсуждение5 ответов
- MQTT по определению является протоколом TCP/IP, поэтому, если у вас нет стека TCP/IP, то это бесполезно.
- Общий шаблон/инфраструктура в IoT заключается в том, чтобы ваши "вещи" подключались к какому-либо концентратору (через BLE, XBee или ... и т. Д.), А Затем концентратор подключится к сети и опубликует данные. Другим вариантом было бы получить сотовое устройство, обеспечивающее подключение для передачи данных (т. Е. 2G/3G) и, следовательно, стек TCP/IP. Похоже, что SIM900 поддерживает только звонки и текстовые сообщения, и на данный момент я не знаю такого устройства, в котором есть библиотеки для Arduino.
На самом деле SIM900 поставляется со встроенным стеком TCP/IP. Также "pubsubclient" принимает универсальный клиент, который определил обычные методы чтения(), печати(), подключения () и т. Д.; Определенно возможно создать эти методы для объекта SIM900 и передать его конструктору pubsubclient и таким образом получить функциональность MQTT., @SoreDakeNoKoto
SIM900 позволяет создавать TCP-сокеты с помощью командного языка AT, поэтому это касается пункта № 1 предыдущих комментариев.
Это только половина истории, хотя вам все равно нужно будет научиться создавать запросы и обрабатывать ответы по протоколу MQTT с использованием протокола SIM900.
В сообществе ESP8266 могут быть полезные примеры для начала, так как их стиль TCP API похож на SIM900.
Взгляните на библиотеку FONA от Adafruit.
https://github.com/adafruit/Adafruit_MQTT_Library/blob/master/examples/mqtt_fona/
Библиотека FONA использует SIM800, который является более новой версией SIM900. Вы найдете MQTT и FONA в одной библиотеке. Они также запускают брокерскую службу MQTT в adafruit.io
Библиотека MQTT для GSM модема SIM800 доступна в ElementzTechBlog, ElementzGithubRepository
Функциональные возможности:
Автоматическое подключение
Автоматическое подключение к TCP и MQTT серверу.
функция подключения
Эта функция может быть использована для подключения вашего клиента к брокеру MQTT.
Используйте только в том случае, если вы не используете функцию автоматического подключения.
При желании вы можете использовать имя пользователя, пароль, тему завещания и сообщение завещания.
Функция обратного вызова OnConnect
Эта функция обратного вызова вызывается при установлении соединения MQTT.
Вы можете вызывать функции подписки и публикации внутри него (в соответствии с вашими потребностями).
функция публикации
Эта функция может быть использована для публикации сообщений на различные темы.
Вы можете выбрать уровни QoS и СОХРАНИТЬ флаг в соответствии с вашими потребностями.
функция подписки
Эта функция может быть использована для подписки на сообщения из разных тем.
Функция обратного вызова onMessage
Эта функция обратного вызова вызывается при получении сообщений из подписанных тем
Topic, TopicLength, Message, messageLength - это аргументы функции обратного вызова onMessage.
Внутри него вы можете написать свой собственный код.
функция отмены подписки
Эта функция может быть использована для отмены подписки на ранее подписанную тему.
функция отключения
Эта функция может быть использована для отключения вашего клиента от брокера MQTT.
Сохранить жизнь
Вы можете указать свою продолжительность KeepAlive во время инициализации.
Запросы Ping отправляются и принимаются автоматически.
Обновление
В настоящее время самым простым решением является использование модема SIM7600 4G/3G/2G. Он поддерживает MQTT с помощью AT - команд !. Для получения более подробной информации следующая ссылка может быть полезна для начала работы.
https://www.elementzonline.com/blog/using-mqtt-at-commands-with-sim7600-and-arduino-for-gsm-iot-projects
Эти учебные пособия должны помочь в начале работы с MQTT на SIM900 или SIM800.
Учебник по протоколу MQTT - ДЕМОНСТРАЦИОННАЯ версия с использованием Mosquitto и CloudMQTT https://youtu.be/Oh3ZYAQBTko
В этом видео рассказывается об основных важных управляющих пакетах протокола MQTT, объясняя, что означает каждый байт в пакете MQTT, а также показано, как отправлять и получать данные с помощью TCP и пользовательского интерфейса Websockets CloudMQTT.com Панель управления. Мы также узнаем, как использовать брокера Mosquitto с открытым исходным кодом на компьютере с Windows для публикации и подписки на сообщения и темы MQTT на локальном хосте и облачных серверах с аутентификацией и без нее.
Учебник по протоколу MQTT с использованием модулей SIM900/SIM800 - ЖИВАЯ ДЕМОНСТРАЦИЯ https://youtu.be/dcpMa2UwEeA
В этом видео демонстрируется, как вы можете использовать легкий протокол MQTT на модулях GSM SIM900 или SIM800 с использованием TCP по GPRS-соединению. Здесь вы узнаете, как использовать TCP-команды SIM900/SIM800 для отправки и получения сообщений в качестве издателя и подписчика практически в реальном времени.
- GPRS SIM900 и GPS NEO-6M не работают вместе
- SIM800L GSM-модуль, нет сигнала сети RSSI
- Как использовать I2C от Arduino Uno, когда у меня установлен GSM-shield?
- Как связаться с GPS SIM900a без serial monitor
- связь между двумя arduino с помощью ENC28J60?
- Как отправить команду на Gsm модуль из Arduino через последовательный порт
- Как заставить Arduino взаимодействовать с тремя другими Ардуино?
- Основная связь Arduino ModBus RTU с проблемой измерителя мощности
У меня тоже была такая же проблема. Мой был автономным(батарейным) комплектом датчиков arduino. Я перепробовал много и наконец ,в качестве последнего средства пришлось использовать обычные HTTP-запросы для отправки данных., @Laksith