- Необходими компоненти
- Електрическа схема
- Инсталиране на 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 App
- Автоматизация на дома, управлявана със смарт телефон, използваща Arduino
- IoT базирана в мрежата контролирана домашна автоматизация с помощта на 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 актуализация sudo apt-get ъпгрейд sudo pip3 install - надстройка 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 / примери / основи
Ако не сте сигурни в коя директория се намирате, можете да проверите това, като стартирате 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 режим и дефинирайте LED пинов номер и задайте като изход.
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): client.subscribe (FEED_ID) print ('В очакване на данни за емисия…')
След като се абонираме за емисията, трябва да проверим за новата стойност и да я съхраним в променлива на полезния товар . За това съобщение се извиква функция. Така че, когато в променливата на полезния товар има „1“, направете led пина HIGH, а за „0“ го направете LOW.
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 и да изпращате съобщенията напред-назад.
клиент = MQTTClient (ADAFRUIT_IO_USERNAME, ADAFRUIT_IO_KEY) client.on_connect = свързан client.on_disconnect = прекъснат
Също така, внимавайте за правилното отстъпване в кода, иначе той ще покаже грешка. Пълният код на python е даден в края на урока.
И накрая, запазете програмата с помощта на ctrl + x и натиснете enter. Сега трябва да стартираме скрипта, за да абонираме съобщенията. Така че в терминала напишете python subscribe.py и натиснете enter.
python абонамент.py
Ще видите съобщение Waiting For Feed Data …, както е показано по-долу моментна снимка.
Сега се уверете, че релейният модул е свързан с GPIO щифт на Raspberry Pi и след това отидете до таблото за управление на Adafruit IO и променете подаването на светлина. В крушка трябва да се включи, когато "1" е получена и се изключва, когато "0" се получава, както е показано по-долу.
По този начин можем да контролираме всеки уред от всяка точка на света, като използваме облака Raspberry Pi и MQTT