Соединение 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, все «офлайн» и ограниченное. В конечном итоге я хотел бы, чтобы сервер мог автоматически распознавать, какие устройства он может «видеть», однако в данный момент я просто хочу получить представление о том, как я могу наиболее легко этого добиться? Или даже если я полностью ошибаюсь в своем подходе?

Спасибо

, 👍1

Обсуждение

esp-link имеет некоторую поддержку mqtt, @Juraj


2 ответа


2

MQTT идеально подходит для этого приложения. Вот обзор возможной конфигурации. Вы сможете найти руководства по каждой части системы.

На Raspberry Pi:

  • Настройте сервер Mosquitto, который может получать сообщения, публикуемые устройствами ESP.
  • Напишите и запустите клиент MQTT на RPi, который подписывается на сообщения, публикуемые устройствами ESP. Этот клиент затем будет сохранять данные в каком-то постоянном хранилище данных (база данных, плоские файлы, что угодно).
  • Напишите и запустите на RPi веб-приложение, которое считывает и представляет данные из хранилища данных.

На устройствах ESP:

  • Подключитесь к той же беспроводной сети, что и RPi (или настройте RPi как точку доступа и подключите к ней устройства)
  • Считывайте данные с датчиков и публикуйте их на сервере MQTT на RPi.

Если вы хотите передавать данные на устройства ESP, пусть они подпишутся на определенные сообщения (темы) на сервере MQTT, а затем опубликуют сообщения в этих темах на сервере. Ваше веб-приложение может это сделать.

Все это можно сделать в изолированной сети.

,

1

Поскольку вы также спрашиваете об оборудовании, я бы рекомендовал следующую настройку:

Для датчиков, которым нужно только отправлять данные, я бы выбрал 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 для дальнейшего чтения.

,