- Componenti richiesti
- Schema elettrico
- Installazione delle librerie cloud MQTT su Raspberry Pi
- Codifica Spiegazione per il controllo di Raspberry Pi GPIO con MQTT
Nel tutorial precedente abbiamo discusso del protocollo MQTT e abbiamo installato il server MQTT locale sul nostro Raspberry Pi per il controllo locale del GPIO. Ma lo svantaggio del server MQTT locale è che non possiamo controllare i GPIO da qualsiasi parte del mondo, fornisce solo servizi localmente. Ma se questo server MQTT è ospitato su un cloud, qualsiasi dispositivo connesso a Raspberry Pi può essere controllato a livello globale.
Qui, in questo tutorial, useremo Adafruit IO come broker MQTT per controllare un'appliance AC collegata a Raspberry Pi GPIO. Controlla anche altri tutorial sull'automazione domestica controllata da IoT:
- Automazione domestica a controllo vocale basata su IOT con ESP8266 e app Android
- Automazione domestica controllata da smartphone tramite Arduino
- Automazione domestica controllata dal Web basata su IoT con microcontrollore PIC e Adafruit IO
- Automazione domestica controllata dal Web basata su IoT utilizzando Raspberry Pi
- Automazione domestica con controllo vocale basato su Assistente Google utilizzando lo scudo Wi-Fi Arduino fai-da-te
Componenti richiesti
- Raspberry Pi con Raspbian Stretch installato al suo interno.
- Modulo relè
- Lampadina
- Cavi per ponticelli
Qui, useremo SSH per accedere a Raspberry Pi sul laptop. Puoi utilizzare la connessione VNC o Desktop remoto sul laptop oppure puoi collegare il tuo Raspberry pi a un monitor. Scopri di più sulla configurazione di Raspberry Pi senza testa qui senza un monitor.
Schema elettrico
Lo schema del circuito per questi elettrodomestici con controllo IoT con cloud MQTT e Raspberry Pi è semplice, basta collegare una lampadina con modulo relè sul pin GPIO 35 del raspberry Pi.
Installazione delle librerie cloud MQTT su Raspberry Pi
Qui la piattaforma Adafruit IO viene utilizzata con Raspberry Pi come broker MQTT. Poiché abbiamo utilizzato più volte la piattaforma Adafruit IO nei nostri tutorial precedenti, possiamo utilizzarla in modo simile in Raspberry Pi.
Crea un account sulla piattaforma IO di Adafruit e crea un feed, se non sai come creare feed e personalizzare la dashboard di Adafruit, segui il link.
Dopo aver creato il dashboard, installa alcune librerie in Raspberry Pi per iniziare con MQTT.
1. Innanzitutto, aggiorna il tuo Pi e Python emettendo i seguenti comandi
sudo apt-get update sudo apt-get upgrade sudo pip3 install --upgrade setuptools
2. Ora, installa le librerie Rpi.gpio e Adafruit blink usando i comandi seguenti
sudo pip3 install RPI.GPIO sudo pip3 install adafruit-blinka
3. Installa la libreria Adafruit IO utilizzando il comando seguente
sudo pip3 installa adafruit-io
4. Clona gli esempi di adafruit da GitHub usando il comando seguente
git clone https://github.com/adafruit/Adafruit_IO_Python.git
5. Quindi, vai alla cartella degli esempi immettendo il seguente comando nel terminale:
cd Adafruit_IO_Python / examples / basics
Se non sei sicuro in quale directory ti trovi, puoi verificarlo eseguendo pwd.
6. Per tutti gli esempi in questa cartella, dovrai impostare ADAFRUIT_IO_KEY e ADAFRUIT_IO_USERNAME, che possono essere trovati dalla dashboard di Adafruit. Come mostrato di seguito
Attiva / disattiva il pulsante sulla dashboard di Adafruit IO e dovresti vedere quanto segue nel terminale del tuo Pi.
7. Ora, apri il file subscribe.py usando nano editor. Digita il seguente comando per aprirlo
sudo nano subscribe.py
Dobbiamo modificare questo programma per controllare qualsiasi GPIO dalla dashboard.
Codifica Spiegazione per il controllo di Raspberry Pi GPIO con MQTT
Innanzitutto, importa tutte le librerie richieste per utilizzare i pin GPIO e il client MQTT di Adafruit.
importa RPi.GPIO come GPIO importa sys da Adafruit_IO importa MQTTClient
Ora, imposta la modalità GPIO e definisci il numero di pin del LED e imposta come output.
GPIO.setmode (GPIO.BOARD) GPIO.setwarnings (False) ledPin = 12 GPIO.setup (ledPin, GPIO.OUT)
Successivamente, dobbiamo impostare la chiave AIO e il nome utente che abbiamo trovato durante la creazione della dashboard.
ADAFRUIT_IO_KEY = 'YOUR_AIO_KEY' ADAFRUIT_IO_USERNAME = 'YOUR_AIO_USERNAME'
Inserisci il nome del feed che hai dato per accendere e spegnere la luce. Qui è "luce".
FEED_ID = 'light'
Ora, definisci una funzione che verrà chiamata quando si verificherà un evento. Quindi, sottoscriveremo il feed utilizzando client.subscribe (FEED_ID)
def connected (client): client.subscribe (FEED_ID) print ('Waiting for feed data…')
Dopo aver sottoscritto il feed, dobbiamo verificare il nuovo valore e memorizzarlo in una variabile di carico utile . Per questo messaggio viene chiamata la funzione. Quindi, ogni volta che c'è "1" nella variabile di carico utile, rendere il pin del led ALTO e per "0" renderlo BASSO.
def messaggio (client, feed_id, payload): print ('Feed {0} ha ricevuto nuovo valore: {1}'. format (feed_id, payload)) if payload == 1: GPIO.output (ledPin, GPIO.HIGH) altro: GPIO.output (ledPin, GPIO.LOW)
Ora, crea un client MQTT per connetterti alla piattaforma IO di Adafruit e inviare i messaggi avanti e indietro.
client = MQTTClient (ADAFRUIT_IO_USERNAME, ADAFRUIT_IO_KEY) client.on_connect = connesso client.on_disconnect = disconnesso
Inoltre, fai attenzione al corretto rientro nel codice altrimenti mostrerà un errore. Il codice Python completo viene fornito alla fine del tutorial.
Infine, salva il programma usando ctrl + x e premi invio. Ora dobbiamo eseguire lo script per sottoscrivere i messaggi. Quindi nel terminale digita python subscribe.py e premi invio.
python subscribe.py
Verrà visualizzato un messaggio Waiting For Feed Data … come mostrato nell'istantanea sottostante.
Ora, assicurati che il modulo relè sia collegato al pin GPIO di Raspberry Pi, quindi vai al dashboard IO di Adafruit e cambia l'alimentazione della luce. La lampadina dovrebbe accendersi quando viene ricevuto "1" e spegnersi quando viene ricevuto "0" come mostrato di seguito.
In questo modo possiamo controllare qualsiasi appliance da qualsiasi parte del mondo utilizzando Raspberry Pi e MQTT cloud