- Потрібні компоненти
- Кругова діаграма
- Встановлення хмарних бібліотек 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
- Домашня автоматизація інтернету, керована IoT, за допомогою 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 проста, просто підключіть лампочку з релейним модулем до виводу GPIO 35 малинового 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 blink, використовуючи наведені нижче команди
sudo pip3 встановити RPI.GPIO sudo pip3 встановити adafruit-blinka
3. Встановіть бібліотеку Adafruit IO, використовуючи команду нижче
sudo pip3 встановити adafruit-io
4. Клонуйте приклади адафрутів з github, використовуючи команду нижче
клон git https://github.com/adafruit/Adafruit_IO_Python.git
5. Потім перейдіть до папки з прикладами, ввівши в термінал таку команду:
cd Adafruit_IO_Python / приклади / основи
Якщо ви не впевнені, в якому каталозі ви знаходитесь, ви можете перевірити це, запустивши 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 import sys з Adafruit_IO import MQTTClient
Тепер встановіть режим GPIO та визначте номер контакту світлодіода та встановіть як вихід.
GPIO.setmode (GPIO.BOARD) GPIO.setwarnings (False) ledPin = 12 GPIO.setup (ledPin, GPIO.OUT)
Далі ми повинні встановити клавішу AIO та ім’я користувача, які ми знайшли під час створення інформаційної панелі.
ADAFRUIT_IO_KEY = 'YOUR_AIO_KEY' ADAFRUIT_IO_USERNAME = 'YOUR_AIO_USERNAME'
Введіть назву стрічки, яку ви дали, щоб увімкнути та вимкнути світло. Тут воно «світло».
FEED_ID = 'світло'
Тепер визначте функцію, яка буде викликана, коли відбудеться подія. Отже, ми підпишемося на канал, використовуючи client.subscribe (FEED_ID)
def connected (клієнт): client.subscribe (FEED_ID) print ('Очікування даних каналу…')
Підписавшись на канал, ми повинні перевірити наявність нового значення та зберегти його у змінній корисного навантаження . Для цього повідомлення викликається функція. Тож, коли в змінній корисного навантаження є “1”, зробіть світлодіодний штифт ВИСОКИМ, а для “0” зробіть його НИЗКИМ.
повідомлення повідомлення (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 і надсилання повідомлень туди-сюди.
клієнт = MQTTClient (ADAFRUIT_IO_USERNAME, ADAFRUIT_IO_KEY) client.on_connect = підключений client.on_disconnect = відключений
Крім того, подбайте про правильний відступ у коді, інакше він покаже помилку. Повний код python наведено в кінці підручника.
Нарешті, збережіть програму за допомогою ctrl + x і натисніть клавішу Enter. Тепер нам потрібно запустити сценарій, щоб передплатити повідомлення. Отже, у терміналі введіть python subscribe.py і натисніть Enter.
python subscribe.py
Ви побачите повідомлення « Очікування даних каналу …», як показано на знімку нижче.
Тепер переконайтеся, що модуль реле підключений до штиря GPIO Raspberry Pi, а потім перейдіть на панель керування Adafruit IO та змініть подачу світла. Лампочка повинна включити, коли «1» приймається і вимикається, коли «0» буде отримано, як показано нижче.
Таким чином ми можемо керувати будь-яким приладом з будь-якої точки світу за допомогою хмари Raspberry Pi та MQTT