Установить mqtt explorer на raspberry pi

Обновлено: 04.07.2024

В одной из предыдущих статей на нашем сайте мы рассмотрели основы протокола MQTT и установили на Raspberry Pi локальный MQTT сервер, с помощью которого мы управляли контактами ввода-вывода (GPIO) платы. Очевидным недостатком такого решения является то, что с помощью локального MQTT сервера мы не можем управлять контактами платы Raspberry Pi из любой точки земного шара, где есть сеть интернет. Но если мы установим MQTT сервер на каком-нибудь облачном сервисе (облаке, cloud), тогда мы сможем управлять контактами платы Raspberry Pi глобально (из любой точки Земли).

Внешний вид проекта автоматизации дома на основе Raspberry Pi и MQTT брокера

В данной статье мы будем использовать сервис Adafruit IO в качестве MQTT брокера и с его помощью будем управлять потребителями переменного тока (домашними устройствами), подключенными к контактам платы Raspberry Pi. Фактически, этот проект можно рассматривать как проект автоматизации дома на основе платы Raspberry Pi и MQTT облака (MQTT Cloud).

Также на нашем сайте вы можете посмотреть много других проектов автоматизации дома. Наиболее популярным среди них оказался проект автоматизации дома на Raspberry Pi с управлением с веб-страницы.

Необходимые компоненты

  1. Плата Raspberry Pi (купить на AliExpress).
  2. Модуль реле.
  3. Электрическая лампа переменного тока (Bulb).
  4. Соединительные провода.

В нашем проекте мы использовали удаленное управление платой Raspberry Pi по протоколу SSH. Вы можете использовать любой другой удобный для вас способ взаимодействия с платой Raspberry Pi.

Схема проекта

Схема автоматизации дома на основе платы Raspberry Pi и MQTT облака представлена на следующем рисунке.

Схема автоматизации дома на основе платы Raspberry Pi и MQTT облака

Как видите, схема очень проста – достаточно лишь подключить к контакту GPIO 35 платы Raspberry Pi модуль реле, с помощью которого мы будем управлять включением/выключением лампы переменного тока.

Внешний вид собранной конструкции проекта показан на следующем рисунке.

Внешний вид собранной конструкции проекта

Установка на Raspberry Pi библиотек для работы с MQTT облаком

В данном проекте мы будем использовать платформу Adafruit IO вместе с платой Raspberry Pi в качестве MQTT брокера. Для этого вам необходимо зарегистрироваться на сервисе Adafruit IO и создать себе там фид (feed).

После получения доступа к панели инструментов платформы Adafruit IO необходимо установить на плату Raspberry Pi ряд библиотек чтобы иметь возможность работы с протоколом MQTT. Для этого выполним следующую последовательность шагов.

1. Установим последние обновления на плату и оболочку Python с помощью команд:

Плата Raspberry Pi представляет широкие возможности для реализации различных проектов в тематике интернета вещей (Internet of Things, IoT) для управления различными устройствами. В данной статье мы рассмотрим проект автоматизации дома на Raspberry Pi с управлением домашними устройствами с помощью веб-страницы, в связи с чем появляется возможность управления устройствами из любой точки Земли, где есть сеть интернет. Веб-сервер для данного проекта может быть запущен на любом устройстве, поддерживающем HTML: смартфоны, планшеты, ноутбуки и т.д.

Внешний вид проекта автоматизации дома на Raspberry Pi с управлением с веб-страницы

Ранее на нашем сайте мы рассматривали различные проекты автоматизации дома на основе платы Arduino:

Здесь же, на основе платы Raspberry Pi, появляется возможность реализовать более "продвинутый" проект автоматизации дома, чем указанные проекты на основе платы Arduino.

Внешний вид веб-страницы для проекта автоматизации дома

Необходимые компоненты

  1. Плата Raspberry Pi (купить на AliExpress).
  2. Реле на 5 В.
  3. Транзисторы 2n222.
  4. Диоды.
  5. Светодиоды (купить на AliExpress).
  6. Резисторы 220 или 100 Ом (купить на AliExpress).
  7. Электрические лампы переменного тока.
  8. Макетная плата.
  9. Соединительные провода.

Для данного проекта не понадобится код программы на python поскольку фреймворк WebIOPi сделает за нас всю работу.

Подготовка платы Raspberry Pi

Для подготовки платы Raspberry Pi к данному проекту необходимо будет установить фреймворк WebIOPi, который упростит взаимодействие между веб-страницей и платой Raspberry Pi. Данный фреймворк легче всего установить с помощью фреймворка Flask на python, но в данном проекте мы сделаем это вручную чтобы посмотреть "изнутри" как это выглядит.

Но вначале необходимо установить самые свежие обновления для платы Raspberry Pi и перезагрузить плату чтобы изменения вступили в силу:

После этого можно будет приступать к установке фреймворка (framework) WebIOPi. Но перед этим убедитесь, что вы находитесь в домашнем каталоге:

Используем wget чтобы загрузить необходимые нам файлы WebIOPi из сети интернет:

Когда скачивание завершится, извлеките файлы из архива и смените каталог на папку с WebIOPi:

Поскольку в данном проекте мы использовали плату Raspberry Pi 3 нам понадобилось установить специальный патч поскольку скачанная нами версия WebIOPi не могла должным образом работать с платой Raspberry Pi 3. Для установки данного патча мы использовали следующие команды:

После этого необходимо запустить процесс установки с помощью WebIOPi:

Если во время установки у вас будут появляться различные предупреждения, нажимайте в них на "yes". После завершения процесса установки перезагрузите плату.

Тестирование WebIOPi

Перед тем как переходить к написанию программы для проекта, желательно протестировать работу установленного WebIOPi, чтобы убедиться в том, что с этим вопросом у вас все в порядке.

Выполните следующую команду:

Эту авторизацию можно в дальнейшем удалить из проекта, но если вы заботитесь о возможном несанкционированном доступе к вашей системе автоматизации дома, то ее целесообразно оставить.

После авторизации у вас откроется страница, показанная на следующем рисунке. Нажмите на ней на ссылку с GPIO header.

Главное меню WebIOPi

Для тестирования WebIOPi мы подключим к GPIO 17 светодиод и сконфигурируем GPIO 17 в качестве цифрового выхода.

Конфигурирование GPIO 17 в качестве цифрового выхода

Подключите светодиод с помощью токоограничивающего резистора к контакту GPIO 17 как показано на следующей схеме:

Схема для тестирования работы WebIOPi

После сборки этой схемы вернитесь снова на выше показанную страницу и нажимайте на кнопку напротив контакта 11 (GPIO 17) чтобы включать и выключать светодиод, подключенный к данному контакту. Таким образом можно проверить как осуществляется управление контактами GPIO платы Raspberry Pi с помощью фреймворка WebIOPi.

Если все работает нормально, вернитесь к терминалу и остановите выполнение программы нажав CTRL + C. После этого можно переходить к основной программе нашего проекта.

Разработка веб-приложения для нашего проекта автоматизации дома

В данном разделе мы будем изменять конфигурацию по умолчанию WebIOPi и добавлять в него свой собственный код чтобы он запускался при вызове этой службы. Первое дело, которое нам необходимо сделать, это установить filezilla или другое программное обеспечение, которое способно работать по FTP/SCP. Нам кажется, что вы уже прочувствовали, что программирование Raspberry Pi через терминал является достаточно нелегким делом, поэтому filezilla или другое программное обеспечение работающее через SCP, значительно облегчит нам работу на данном этапе.

Но перед тем, как переходить к написанию html, css и java кодов для нашего проекта автоматизации дома, давайте вначале создадим на компьютере папку, где все это будет храниться. Убедитесь, что вы находитесь в домашнем каталоге, после этого создайте в нем каталог с названием " webapp ", а в нем каталог с названием "html".

Если ваша концепция умного дома "все ресурсы сидят дома", то использования mqtt брокера в облаке вам может казаться очень болезненным. Не будем страдать и сделаем свой сервер дома. На малине, конечно.

MQTT сервер на Raspberry PI

К слову сказать, я бы для такого mqtt брокера лучше бы использовать какой-нибудь Orange PI Zero т.к. он стоит дешевле и питание у него удобнее - 5-и вольтовое.

В файле конфигурации нам нужно включить опцию Expand Filesystem, дающая разрешение на использование всей флешки файловой системой.
Для удаленного доступа Advanced Options — SSH — Enable активирует ssh клиент.
Далее нужно настроить для "малины" параметры подключения к сети или просто запомнить ip адрес, если вы подключились проводом к роутеру:

Параметры подключения Raspberry pi к сети

Теперь нужно перезагрузиться командой:

После запуска системы мы будем подключаться к ней по ssh каналу связи. В качестве клиента на windows можно использовать чудо программу Putty. Если вы используете linux или osx - у вас уже есть bash консоль и больше ничего не потребуется.

Что бы избавиться от неожиданностей в процессе установки нужно обновить все загруженное ПО:

Менеджер пакетов сверится с репозиториями и затянет все обновления.

Подготовка завершена теперь приступим к установки MQTT броккера mosquitto.

Для работы брокера потребуется поддержка websocket. Этим будет заниматься отдельный пакет. Установим его вручную.

Теперь нужно выполнить сборку:

Сборка займет некоторое время. После завершения нам нужно построить все необходимые связи между пакетами и библиотеками. Этим занимается автоматическая утилита ldconfig. Запустим ее:

Теперь нужно заняться развертыванием masquitto. Разворачивание будем проводить в дирректории src.

Нужно будет внести изменения в конфиг. Откроем файл config.mk любым редактором и зададим значение опции WITH_WEBSOCKETS:=yes

После завершения вы увидите что-то такое:

MQTT сервер на Raspberry PI

Не забываем, что mqtt сервер работает должен работать из под учетной записи пользователя и ее нужно сконфигурировать. Добавим строки с данными подключения в конец файла mosquitto.conf

Настроим автозапуск mosquitto. Создадим новый файл в фиддерктории и /etc/init.d

Вставим в него содержимое:

Дадим директории разрешающие права и создадим папку для логирования:

Добавляем сервер в список автозапуска и стартуем его:

На этом все. Наш броекр-сервер MQTT запущен. Убедимся, что он исправлен выполнив в консоли комманду:

Проверка запущенного mqtt сервера

Если вы потерпели феаско, то не расстраивайтесь, а затем смотрите логи:

How to Connect Raspberry Pi with MQTT for IoT Communication

MQTT is a messaging protocol that specifically used for communication in IoT connected devices. The whole MQTT system consists of many clients and one broker. Our devices act as clients. MQTT is supported by most microcontrollers and systems. In this project, we will connect our Raspberry Pi with MQTT. There are several applications that can be used to send and receive through MQTT, but in this project, Mosquitto is used to set up a communication platform between two Raspberry Pi’s. Earlier we have connected the MQTT broker with ESP8266.

Components Required

This project works without much additional hardware. You just need a Raspberry Pi.

What is MQTT?

MQTT stands for Message Queuing Telemetry Transport. MQTT is a machine-to-machine connectivity protocol. It is useful for connections with remote locations where we want to send just a few bytes of data or our sensor values. It is a system where you can publish and receive messages as a client.

By using MQTT you can send commands to control outputs, read and publish data from sensors and much more. Therefore, by using MQTT you can establish communication between multiple devices. Using MQTT you can send a command with a client to control output or you can read data from a sensor and publish it to a client. There are two main terms in MQTT i.e. Client and Broker. Let’s discuss what is client and broker.

MQTT Client: An MQTT client is any device that runs an MQTT library and connects to an MQTT broker over a network. Both publisher and subscriber are MQTT clients. The publisher and subscriber refer that whether the client is publishing messages or subscribing to messages.

MQTT Broker: The broker receives all messages, filter the messages, determine who is subscribed to each message, and send the message to these subscribed clients.

Raspberry Pi MQTT Server Install

To install Mosquitto server and client on your Pi, open Pi terminal and run this command:

After running this command, a Mosquitto server is started automatically.

Now we will open a subscriber in the channel using “test_channel” that will receive messages from publisher:

After subscriber we will open a publisher in the same channel with a message to subscriber:

Note: We are simply transferring data to the same Raspberry Pi. For that just open two putty terminals, one for the subscriber and other for the publisher. If you are using two different Raspberry Pi’s, then enter your second Pi’ IP address rather than localhost. For example:

Raspberry Pi MQTT Server Install

Raspberry Pi MQTT Server Install Window

Raspberry Pi - MQTT Data Exchanging Using Python

The second method to set up a connection between two Raspberry Pi’s using MQTT is using Python code.

In this method, we will use two different python codes for the subscriber and publisher in two different windows or two different Pi’s.

For this first install Paho MQTT library using this command:

Now in the first terminal window, create a subscriber file

Copy this code and paste it to the subscriber file.

Now run this code using:

Now our subscriber setup is complete. To set up publisher open a new putty window and create a publisher file using:

Copy the below code to publisher file.

Note: If you are using two different Pi’s, then enter your second Pi’s IP address in place of ‘localhost’ in MQTT_ SERVER.

And run it using:

Raspberry Pi MQTT data exchange Using Python

Sending Data from Pi to Pi using MQTT Server

Hence, we have successfully sended the data from Pi using MQTT Server. We have also used ESP8266 to send data using MQTT Server.

Читайте также: