Управление контактами Raspberry Pi с помощью облака MQTT на основе Adafruit IO


В одной из предыдущих статей на нашем сайте мы рассмотрели основы протокола 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 с помощью команд:

  1. Установим библиотеки Rpi.gpio и Adafruit blink с помощью команд:

3. Установим библиотеку Adafruit IO.

4. Клонируем примеры adafruit с github с помощью команды:

5. Перейдем в необходимый нам каталог с примерами.

Если вы не знаете в каком каталоге вы находитесь в текущий момент времени вы можете проверить это с помощью команды pwd.

6. Для всех примеров в указанном каталоге вам будут необходимы ADAFRUIT_IO_KEY (ключ) и ADAFRUIT_IO_USERNAME (имя пользователя), которые можно найти в панели инструментов Adafruit.

ADAFRUIT_IO_KEY и ADAFRUIT_IO_USERNAME в панели инструментов Adafruit

Нажмите показанную на рисунке кнопку в панели инструментов Adafruit чтобы увидеть необходимую информацию в терминале Raspberry Pi.

7. Теперь откройте файл subscribe.py в редакторе nano. Это можно сделать с помощью команды:

Мы будем редактировать (писать программу) этот файл чтобы управлять контактами платы из панели инструментов Adafruit.

Объяснение программы для Raspberry Pi

Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты.

Первым делом в программе подключим все необходимые библиотеки для управления контактами GPIO и работы с клиентом Adafruit MQTT.

Далее установим режим работы с контактами GPIO, дадим осмысленное имя используемому контакту и сконфигурируем его в качестве цифрового выхода.

Затем укажем в программе свои AIO key (ключ) и Username (имя пользователя), которые мы раньше получили в панели инструментов Adafruit.

Далее укажем идентификатор используемого нами фида (FEED_ID), через который мы будем управлять включением и выключением светодиода. В данном случае мы используем фид с именем “light”.

Затем запрограммируем функцию, которая будет вызываться при наступлении определенного события. В этой функции мы будем подписываться (subscribe) на фид (Feed) с помощью функции client.subscribe(FEED_ID).

После подписки на фид мы будем проверять поступление нового значения и сохранять его в переменной payload. Если значение переменной payload будет равно “1”, то мы будем включать свет лампы, а если оно будет равно “0” – мы будем выключать свет лампы.

После этого мы создадим MQTT клиент чтобы с его помощью соединяться с платформой Adafruit IO, передавать и принимать от нее сообщения.

После написания всего текста программы (приведен в конце статьи) сохраните ее с помощью ctrl+x и последующим нажатием enter. После этого нам нужно запустить нашу программу на выполнение.

После запуска программы на выполнение вы увидите в окне терминала надпись "Waiting For Feed Data" (ожидание данных фида) как показано на рисунке ниже.

После этого убедитесь в том, что модуль реле подключен к плате Raspberry Pi, затем перейдите в панель инструментов (dashboard) Adafruit IO и изменяйте там наш фид для управления светом лампы (light feed). При приеме “1” лампа должна загораться, а при приеме “0” – гаснуть.

Тестирование работы проекта

С помощью подобной системы вы можете управлять любыми своими домашними устройствами, находясь в любой точке земного шара, где есть доступ в сеть Интернет.

Исходный код программы на Python

Видео, демонстрирующее работу проекта

(Проголосуй первым!)
Загрузка...
529 просмотров

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *