Соединение MQTT с Arduino и ESP8266 — какое ПО следует использовать?
Извините за неопределенность моего вопроса, я просто ищу идеи, которые укажут мне правильное направление...
Я хочу подключить много (читай: 20+) различных датчиков к локальной сети Wi-Fi и регистрировать все данные и управлять ими с помощью одного сервера в сети. Довольно стандартная штука для людей, занимающихся домашней автоматикой и т. д. Некоторые датчики подключаются к платам esp8266 напрямую, другие взаимодействуют через последовательный порт и будут использовать 8266 для обеспечения Wi-Fi.
Мне сложно решить, в каком направлении двигаться или какое программное обеспечение/прошивку объединить, поскольку они быстро меняются и существует довольно много руководств, но у всех разные подходы и конечные цели.
Это должно быть полностью автономно — у меня есть Raspberry Pi, беспроводной маршрутизатор и различные датчики (в основном на базе Arduino).
Теперь, судя по исследованиям, мне нужно настроить последовательный порт в MQTT «мост» — и заставить esps «общаться» с pi по MQTT. И что pi должен работать под управлением «mosquitto», если я хочу, чтобы MQTT был двунаправленным (т.е. я мог получать последовательные данные И отправлять последовательные команды). Я никогда не имел дела с MQTT, поэтому пытаюсь учиться по ходу дела.
Я некоторое время работал с программным обеспечением «ESP-Link» и успешно использовал его в качестве простого моста последовательного порта в TCP-IP и использовал виртуальные последовательные порты для связи с подключенным устройством. Однако использование виртуальных последовательных портов на сервере неуклюже, ненадежно и не то, что я хочу делать — кто-нибудь знает, можно ли настроить его так, чтобы я мог отправлять «сырые» последовательные сообщения по TCP на сервер для использования? И с сервера для управления подключенными устройствами? Или есть более простой способ? Я не могу изменить все последовательные устройства, которые хочу подключить, поэтому просто хочу получать данные из/ввод и управлять ими на сервере при необходимости.
По сути, я хочу получить несколько датчиков, подключенных к маршрутизатору и регистрируемых/контролируемых через веб-интерфейс, размещенный на PI, все «офлайн» и ограниченное. В конечном итоге я хотел бы, чтобы сервер мог автоматически распознавать, какие устройства он может «видеть», однако в данный момент я просто хочу получить представление о том, как я могу наиболее легко этого добиться? Или даже если я полностью ошибаюсь в своем подходе?
Спасибо
@Rendeverance, 👍1
Обсуждение2 ответа
MQTT идеально подходит для этого приложения. Вот обзор возможной конфигурации. Вы сможете найти руководства по каждой части системы.
На Raspberry Pi:
- Настройте сервер Mosquitto, который может получать сообщения, публикуемые устройствами ESP.
- Напишите и запустите клиент MQTT на RPi, который подписывается на сообщения, публикуемые устройствами ESP. Этот клиент затем будет сохранять данные в каком-то постоянном хранилище данных (база данных, плоские файлы, что угодно).
- Напишите и запустите на RPi веб-приложение, которое считывает и представляет данные из хранилища данных.
На устройствах ESP:
- Подключитесь к той же беспроводной сети, что и RPi (или настройте RPi как точку доступа и подключите к ней устройства)
- Считывайте данные с датчиков и публикуйте их на сервере MQTT на RPi.
Если вы хотите передавать данные на устройства ESP, пусть они подпишутся на определенные сообщения (темы) на сервере MQTT, а затем опубликуют сообщения в этих темах на сервере. Ваше веб-приложение может это сделать.
Все это можно сделать в изолированной сети.
Поскольку вы также спрашиваете об оборудовании, я бы рекомендовал следующую настройку:
Для датчиков, которым нужно только отправлять данные, я бы выбрал ATtiny85. Он имеет очень низкое энергопотребление, очень мал и прост в программировании. Если вы используете 10-N из них, то плата программирования и только микроконтроллер будут дешевле и еще меньше.
Для датчиков, на которых есть какая-то логика, может быть, несколько подключенных датчиков, я бы выбрал Wemos D1 Mini. Он имеет встроенный WIFI, вы можете отлаживать его, он все еще очень маленький и есть куча плат расширения (щита) для ускорения разработки.
Что касается связи, я бы отказался от WIFI, так как 20+ устройств могут генерировать довольно большой трафик. Кроме того, WIFI обходится вам дорого с точки зрения энергопотребления, так как он не оптимизирован для IoT (небольшие пакеты данных). Я бы добавил 433mhz Mini Low Power RF Receiver/Transmitter к моему оборудованию IoT и общался бы через него. Он имеет большой радиус действия и очень малое энергопотребление.
Кроме того, вы можете подумать об использовании Wemos в качестве шлюза MQTT между вашими устройствами 433 МГц и WIFI вместо предлагаемого вами решения Raspberry Pi. Приятным преимуществом является то, что у вас будет выделенное устройство, управляющее шлюзом MQTT, который гораздо менее подвержен ошибкам, чем сервер Linux (Raspberry Pi), и вам не нужно обновлять его так часто, как в случае с Pi, чтобы обеспечить его безопасность. Существует Wemos D1 Mini Pro, который имеет лучшую антенну WIFI и немного большую мощность, что может быть идеальным для этого варианта использования.
Протокол MQTT идеально подходит для сенсорной сети, поскольку он оптимизирован для низкой пропускной способности, высокой задержки и нестабильных соединений. Он поддерживает качество обслуживания (QoS), и вы можете настроить, что должно произойти, если устройство отключится или станет недоступным. Для MQTT уже доступно множество библиотек, поэтому настройка выполняется очень быстро. У HiveMq есть хорошее руководство как начать работу с MQTT для дальнейшего чтения.
- Почему мы используем client.flush() в коде, когда мы подключаем Esp8266 к Интернету или серверу?
- Использование ESP8266-01 с Arduino uno R3
- Ручное TCP-соединение с использованием неправильно набранной команды модуля WiFi ESP8266
- ESP-01 не посылает данных по последовательному каналу, как только он подключен к Wi-Fi-маршрутизатору
- Элементы, исключенные из вывода буферного массива после заданной структуры (ESP8266 WifiSniffer) (snifferPacket)
- ESP8266 не подключается к Wi-Fi
- AT-команда не отвечает на последовательный монитор
- Как подключить Wi-Fi Shield ESP-12E-ESP8266-UART-WIFI-Wireless-Shield к Arduino
esp-link имеет некоторую поддержку mqtt, @Juraj