- Необходимые компоненты
- Принципиальная электрическая схема
- Установка облачных библиотек MQTT на Raspberry Pi
- Пояснение кодирования для управления Raspberry Pi GPIO с помощью MQTT
В предыдущем руководстве мы обсудили протокол MQTT и установили локальный сервер MQTT на Raspberry Pi для локального управления GPIO. Но недостатком локального сервера MQTT является то, что мы не можем контролировать GPIO из любой точки мира, он предоставляет услуги только локально. Но если этот сервер MQTT размещен в каком-то облаке, то любыми устройствами, подключенными к Raspberry Pi, можно будет управлять глобально.
Здесь, в этом руководстве, мы будем использовать Adafruit IO в качестве брокера MQTT для управления устройством переменного тока, подключенным к Raspberry Pi GPIO. Также ознакомьтесь с другими руководствами по домашней автоматизации под управлением IoT:
- Домашняя автоматизация с голосовым управлением на базе IOT с использованием ESP8266 и приложения для Android
- Домашняя автоматизация под управлением смартфона с использованием Arduino
- Домашняя автоматизация на базе Интернета вещей с использованием микроконтроллера PIC и Adafruit IO
- Домашняя автоматизация на основе Интернета вещей с использованием Raspberry Pi
- Домашняя автоматизация с голосовым управлением на основе Google Assistant с использованием DIY Arduino Wi-Fi Shield
Необходимые компоненты
- Raspberry Pi с установленным в нем Raspbian Stretch.
- Модуль реле
- Лампочка
- Перемычки
Здесь мы будем использовать SSH для доступа к Raspberry Pi на ноутбуке. Вы можете использовать подключение к VNC или удаленному рабочему столу на ноутбуке или подключить Raspberry pi к монитору. Узнайте больше о настройке Raspberry Pi без монитора здесь.
Принципиальная электрическая схема
Принципиальная схема этой управляемой IoT бытовой техники с облаком MQTT и Raspberry Pi проста, просто подключите лампочку с модулем реле к контакту 35 GPIO Raspberry Pi.
Установка облачных библиотек MQTT на Raspberry Pi
Здесь платформа Adafruit IO используется с Raspberry Pi в качестве брокера MQTT. Поскольку мы много раз использовали платформу Adafruit IO в наших предыдущих руководствах, мы можем использовать ее и в Raspberry Pi.
Просто создайте учетную запись на платформе Adafruit IO и создайте фид, если вы не знаете, как сделать фид и настроить панель управления Adafruit, перейдите по ссылке.
После создания панели инструментов установите несколько библиотек в Raspberry Pi, чтобы начать работу с MQTT.
1. Сначала обновите Pi и Python, введя следующие команды
sudo apt-get update sudo apt-get upgrade sudo pip3 install --upgrade setuptools
2. Теперь установите библиотеки мигания Rpi.gpio и Adafruit, используя следующие команды.
sudo pip3 установить RPI.GPIO sudo pip3 установить adafruit-blinka
3. Установите библиотеку Adafruit IO, используя команду ниже.
sudo pip3 установить adafruit-io
4. Клонируйте примеры adafruit из github, используя команду ниже.
git clone https://github.com/adafruit/Adafruit_IO_Python.git
5. Затем перейдите в папку примеров, введя в терминал следующую команду:
cd Adafruit_IO_Python / examples / basics
Если вы не уверены, в каком каталоге находитесь, вы можете проверить это, запустив pwd.
6. Для всех примеров в этой папке вам необходимо установить ADAFRUIT_IO_KEY и ADAFRUIT_IO_USERNAME, которые можно найти на панели управления Adafruit. Как показано ниже
Переключите кнопку на панели инструментов Adafruit IO, и вы должны увидеть следующее в терминале вашего Pi.
7. Теперь откройте файл subscribe.py с помощью редактора nano . Введите следующую команду, чтобы открыть его
sudo nano subscribe.py
Мы должны изменить эту программу, чтобы управлять любым GPIO с панели управления.
Пояснение кодирования для управления Raspberry Pi GPIO с помощью MQTT
Во-первых, импортируйте все необходимые библиотеки для использования контактов GPIO и клиента Adafruit MQTT.
импортировать RPi.GPIO как GPIO импортировать sys из Adafruit_IO импортировать MQTTClient
Теперь установите режим GPIO, определите номер контакта светодиода и установите его как выход.
GPIO.setmode (GPIO.BOARD) GPIO.setwarnings (False) ledPin = 12 GPIO.setup (ledPin, GPIO.OUT)
Затем мы должны установить ключ AIO и имя пользователя, которые мы нашли при создании панели инструментов.
ADAFRUIT_IO_KEY = 'ВАШ_AIO_KEY' ADAFRUIT_IO_USERNAME = 'ВАШЕ_AIO_USERNAME'
Введите название канала, которое вы дали для включения и выключения света. Здесь он «светлый».
FEED_ID = 'светлый'
Теперь определите функцию, которая будет вызываться, когда произойдет событие. Итак, подпишемся на Feed с помощью client.subscribe (FEED_ID)
def connected (client): client.subscribe (FEED_ID) print ('Ожидание данных канала…')
После подписки на канал мы должны проверить новое значение и сохранить его в переменной полезной нагрузки . Для этого сообщения вызывается функция. Поэтому, когда в переменной полезной нагрузки стоит «1», сделайте вывод светодиода ВЫСОКИМ, а для «0» - НИЗКИМ.
def message (client, feed_id, payload): print ('Feed {0} получил новое значение: {1}'. format (feed_id, payload)) if payload == 1: GPIO.output (ledPin, GPIO.HIGH) else: GPIO.output (ledPin, GPIO.LOW)
Теперь создайте MQTT-клиент для подключения к платформе Adafruit IO и отправки сообщений туда и обратно.
client = MQTTClient (ADAFRUIT_IO_USERNAME, ADAFRUIT_IO_KEY) client.on_connect = подключенный клиент.on_disconnect = отключен
Также позаботьтесь о правильном отступе в коде, иначе появится ошибка. Полный код Python приведен в конце руководства.
Наконец, сохраните программу с помощью ctrl + x и нажмите Enter. Теперь мы должны запустить сценарий, чтобы подписаться на сообщения. Итак, в терминале введите python subscribe.py и нажмите Enter.
python subscribe.py
Вы увидите сообщение Waiting For Feed Data …, как показано на снимке ниже.
Теперь убедитесь, что модуль реле подключен к контакту GPIO Raspberry Pi, а затем перейдите на панель управления Adafruit IO и измените световой поток. Лампочка должна включить, когда «1» принимается и выключается, когда «0» будет получен, как показано ниже.
Таким образом, мы можем управлять любым устройством из любой точки мира с помощью Raspberry Pi и облака MQTT.