Imposta l'automazione della casa Raspberry Pi

Imposta l'automazione della casa Raspberry Pi
Una delle cose più importanti per l'automazione domestica è il controllo dell'AC ad alta tensione utilizzando una CC a bassa tensione. Per controllare l'AC ad alta tensione da Raspberry Pi, avrai bisogno di un interruttore di relè da 5 V. È possibile controllare l'interruttore di relè usando i pin GPIO di Raspberry Pi. L'interruttore del relè può quindi controllare gli elettrodomestici CA tramite Raspberry Pi.

Questo articolo ti mostrerà come utilizzare Raspberry Pi e l'interruttore del relè 5V per attivare e disattivare una lampadina dal tuo dispositivo mobile. L'articolo include un'app Web a cui è possibile accedere da qualsiasi dispositivo sulla rete e controllare eventuali elettrodomestici CA nella tua casa in modalità wireless. Quindi, iniziamo con il nostro semplice esperimento di automazione della casa Raspberry Pi.

Cose di cui avrai bisogno

Se vuoi usare il tuo Raspberry Pi Headless (tramite SSH o VNC), avrai bisogno delle seguenti cose:

1) Raspberry Pi 3 o Raspberry Pi 4.
2) interruttore relè 5 V.
3) fili elettrici.
4) 3 fili da femmina a femmina.
5) Borba della luce AC.
6) Porta della lampadina CA.
7) Plug AC.
8) Strumento Wirecutter e Stripper.
9) Cacciavite CR-V 3.
10) Micro-USB (Raspberry PI 3) o USB Type-C (Raspberry PI 4) Adattatore di alimentazione.
11) Card microSD da 16 GB o 32 GB con sistema operativo Raspberry Pi lampeggiato.
12) Connettività di rete su Raspberry Pi.
13) Laptop o un computer desktop per l'accesso al desktop remoto VNC o l'accesso SSH a Raspberry Pi.

Se non si desidera accedere a Raspberry Pi da remoto tramite SSH o VNC, avrai anche bisogno di quanto segue:

14) un monitor.
15) cavo HDMI o Micro-HDMI.
16) Una tastiera.
17) un topo.

Se hai bisogno di assistenza per lampeggiare l'immagine del sistema operativo Raspberry Pi sulla scheda MicroSD, controlla l'articolo come installare e utilizzare Raspberry Pi Imager.

Se sei un principiante di Raspberry Pi e hai bisogno di assistenza per l'installazione del sistema operativo Raspberry Pi su Raspberry Pi, controlla l'articolo come installare il sistema operativo Raspberry Pi su Raspberry Pi 4.

Inoltre, se hai bisogno di assistenza con la configurazione senza testa di Raspberry Pi, dai un'occhiata all'articolo come installare e configurare il sistema operativo Raspberry Pi su Raspberry Pi 4 senza monitor esterno.

Di seguito sono riportate le immagini di tutti gli strumenti richiesti.

Accensione su Raspberry Pi

Quindi, collega il cavo di alimentazione a Raspberry Pi e alimenta su Raspberry Pi.

Una volta che Raspberry Pi è acceso, puoi connetterti a Raspberry Pi tramite VNC o SSH. Oppure, è possibile collegare una tastiera, un mouse e un monitor a Raspberry Pi per accedervi direttamente.

Pinout di relè da 5 V

Un relè è fondamentalmente un interruttore. Ma, a differenza di un interruttore tradizionale, un relè può essere controllato da una piccola quantità di tensione CC.

Il relè 5V è molto facile da usare. Ha due lati: un lato viene utilizzato per controllare il relè tramite CC a bassa tensione (da Raspberry Pi) e l'altro lato viene utilizzato per controllare l'AC ad alta tensione (i.e., la lampadina), a seconda dello stato del relè.


Da un lato, il relè ha due LED (uno rosso e uno verde) e tre pin (In, gnd, E VCC). Questi tre pin sono usati per controllare il relè di Raspberry Pi.

I primi due pin dall'altra parte vengono utilizzati per controllare l'appliance CAS.

Collegamento del relè 5V a Raspberry Pi

Per collegare il relè 5V a Raspberry Pi, avrai bisogno di tre fili di collegamento da femmina a femmina.

Collegare un lato dei fili di collegamento al file IN (filo giallo), GND (filo nero) e VCC (filo rosso) pin nel relè 5V, come mostrato di seguito.


L'altro lato dei fili va nelle pin di intestazione GPIO di Raspberry Pi, come mostrato nell'immagine sottostante.

Il filo rosso dovrebbe andare nel PIN 2 (VCC) di Raspberry Pi.
Il filo nero dovrebbe andare nel PIN 6 (GND) di Raspberry Pi.
Il filo giallo dovrebbe andare nel PIN 7 (GPIO 4) di Raspberry Pi.


Una volta che il relè 5V è collegato a Raspberry Pi, dovrebbe apparire come mostrato nell'immagine sottostante.

Consentendo l'accesso GPIO all'utente di accesso

Per consentire l'accesso ai pin GPIO, l'utente di accesso predefinito del sistema operativo Raspberry Pi pi dovrebbe essere aggiunto al file GPIO gruppo.

Puoi aggiungere il pi utente al GPIO Gruppo con il seguente comando:

$ sudo usermod -ag gpiio $ (whoami)


Per avere effetto le modifiche, riavviare Raspberry Pi con il seguente comando:

$ sudo riavvia

Creazione di una directory di progetto

È anche una buona idea mantenere organizzati tutti i file di progetto.

Per mantenere organizzati i file di progetto, crea la directory del progetto ~/www e le sottodirectory richieste con il seguente comando:

$ mkdir -pv ~/www/templates, static


Una volta creata la directory del progetto, vai alla directory del progetto come segue:

$ cd ~/www

Passa il relè da 5 V da Raspberry Pi

Ora che hai collegato il relè 5V a Raspberry Pi, cambierai il relè dal Raspberry Pi usando il linguaggio di programmazione Python.

Nota: commutazione è un termine usato in elettronica. La commutazione significa controllo (i.e. Accensione Accensione/Off) Un certo dispositivo elettronico.

Per sperimentare il passaggio del relè usando il linguaggio di programmazione Python, crea il nuovo test di script Python.Py nella directory del progetto come segue:

$ nano test.Py


Digita le seguenti righe di codici nel test.Script Py Python.

Dal LED di importazione GPiozero
Dal tempo Import Sleep
mentre è vero:
relè = LED (4)
stampa ("relè: on")
sonno (5)
relè.vicino()
stampa ("relè: off")
sonno (5)

Una volta terminato, premere + X seguito da Y E per salvare il test.Py Script di Python.


Qui, le importazioni della linea 1 GUIDATO dal gpiiozero libreria e la riga 2 importa il sonno funzione da tempo biblioteca.


Le righe 6-14 sono all'interno di un ciclo infinito.


La riga 6 inizializza un LED nel GPIO 4 di Raspberry Pi, che è collegato a IN Pin del relè.


La riga 8 gira sul relè usando il SU() metodo.

La riga 9 stampa un messaggio nella console utilizzando il stampa() funzione.

La riga 10 ritarda l'esecuzione della riga di codice successiva per cinque secondi usando il sonno() funzione.


La riga 12 disattiva il relè usando il vicino() metodo.

Allo stesso modo, la riga 9 stampa un messaggio sulla console utilizzando il stampa() funzione e riga 10 ritarda l'esecuzione della riga di codice successiva per 5 secondi utilizzando il sonno() funzione.


Quindi, esegui il test.Py Script Python come segue:

Test $ Python3.Py


IL test.Py Lo script Python dovrebbe iniziare a cambiare il relè 5V. Dovresti sentire un suono di clic ogni cinque secondi. Quando il relè cambia lo stato (da On a Off o da Off a On), fa un rumore di clic. Ciò significa che il relè funziona correttamente.


Quando il relè è nello stato off (operazione normale - il carico CA è disconnesso), solo il rosso Il LED dovrebbe illuminare, come puoi vedere nell'immagine qui sotto.


Quando il relè è nello stato (carico CA è collegato), sia il verde LED e IL rosso Il LED dovrebbe illuminare, come puoi vedere nell'immagine qui sotto.


Una volta completato il test, premere + C Per terminare il test.Py sceneggiatura.

Collegamento della lampadina CA al relè 5V

Il relè 5V dovrebbe ora funzionare correttamente. Ora collegherai il tuo apparecchio CA Home (una lampadina, in questo caso) al relè 5V.

Innanzitutto, tagli il filo elettrico nero collegato alla lampadina con un wirecutter.


Una volta che il filo elettrico nero si collegava alla lampadina è stato tagliato con un wirecutter, dovrebbe apparire come mostrato nell'immagine sottostante.


Successivamente, spogliare lo strato esterno per esporre circa ½ pollice del filo elettrico, come mostrato nell'immagine sottostante.


Quindi, piegare i fili esposti, come mostrato nell'immagine in basso.


Allentare le viti contrassegnate del relè con cacciavite CV-3.


Inserire i fili esposti che hai spogliato e piegato in precedenza nei due terminali a vite e serrare le viti con un cacciavite CV-3.

Switching relè di test dopo aver collegato il carico CA

Una volta che il carico CA è collegato al relè 5 V, collegare la spina lampadina alla presa a parete.


Corri il test.Py Script Python dalla directory del progetto come segue:

Test $ Python3.Py


IL test.Py Lo script Python dovrebbe iniziare a cambiare il relè 5 V, che, a sua volta, cambierà la lampadina CA ad alta tensione a intervalli di cinque secondi. La lampadina CA dovrebbe rimanere accesa per cinque secondi, quindi rimanere fuori per cinque secondi e così via.

La lampadina è spenta nell'immagine sottostante.


La lampadina è accesa nell'immagine sottostante.


Come puoi vedere, possiamo cambiare il relè e controllare la lampadina CA ad alta tensione usando il linguaggio di programmazione Python. Quindi, premere + C Per terminare il test.Py sceneggiatura.

Passiamo ora alla sezione successiva.

Scrivere l'app Web di automazione domestica

In questa sezione, ti mostrerò come scrivere un'app Web basata su API usando il linguaggio di programmazione Python. È possibile utilizzare l'app Web per controllare il relè e gli elettrodomestici AC Home o i dispositivi elettrici collegati al relè da un browser Web.

NOTA: Tutti i codici mostrati in questa sezione sono disponibili nel mio repository github Shovon8/Raspberry-Pi-Home-Automation. Se vuoi, puoi clonare il mio repository GitHub e saltare tutti i codici.

Crea il server.Script Py Python nella directory del progetto come segue:

$ nano server.Py


Digitare le seguenti righe di codici in server.Py Script di Python.

da Flask Import Flask, JSonify, Url_For, Render_Template
Dal LED di importazione GPiozero
da uuid import uuid4
Rooms =
Rooms ['Room 1'] = [
'id': uuid4 (),
'Nome': 'Light 1',
'icona': 'fa fa-lightbulb',
'Status': falso,
'relaypin': 4,
'RelayInstance': falso
,
'id': uuid4 (),
'Nome': 'Fan 1',
'icon': 'fa fa-fan',
'Status': falso,
'relaypin': 6,
'RelayInstance': falso
]
camere ['bagno 1'] = [
'id': uuid4 (),
'Nome': 'Light 1',
'icona': 'fa fa-lightbulb',
'Status': falso,
'relaypin': 5,
'RelayInstance': falso
]
app = pallone (__ nome__)
app.config ['send_file_max_age_default'] = 0
@App.itinerario('/')
def home ():
return render_template ('./indice.html ', camere = camere)
def toggle_apliance_status (id):
Per stanza nelle camere:
per elettrodomestico nelle camere [stanza]:
if STR (Appliance ['id']) == ID:
Se Appliance ['RelayInstance']:
Appliance ['RelayInstance'].vicino()
Appliance ['relayinstance'] = false
altro:
Appliance ['relayinstance'] = LED (Appliance ['RELAYPIN'])
Appliance ['RelayInstance'].SU()
Appliance ['Status'] = Not Applicance ['Status']
restituire vero
restituire false
@App.Route ('/Appliance/Toggle/')
DEF Applicace_Toggle (ID):
return jsonify ('status': toggle_apliance_status (id))

Una volta terminato, premere + X seguito da Y E per salvare il server.Py Script di Python.


Qui, le righe 1-3 importano tutti i componenti necessari dalle rispettive biblioteche.


La riga 5 crea un vuoto camere dizionario. In questo dizionario, memorizzeremo tutti i dettagli dell'appliance AC che vogliamo controllare dall'app Web.


IL camere I dettagli sono archiviati nelle righe 7-29.


Discutiamo la struttura dei dati di una delle stanze.

Qui, il nome della stanza sarà Sala 1. COSÌ, Sala 1 è la chiave per il camere dizionario.


IL Sala 1 La chiave contiene un array come valore. Il numero di elementi di array è uguale al numero di elettrodomestici CA che hai in quella stanza che si desidera anche controllare dall'app Web. In questo caso, abbiamo due elettrodomestici CA che vogliamo controllare: Luce 1 E Fan 1.


Ogni definizione di apparecchio domestico ha un file id. IL id è un uuid generato in modo casuale. Questo è usato per identificare quale stanza vogliamo controllare usando l'API.

Un apparecchio domestico ha anche tutto quanto segue:

  • nome (luce 1 in questo caso)
  • icona (Font Awesome Icon Class, dato che useremo Font Awesome per le icone)
  • stato (vero Se SU E Falso Se spento)
  • relaypin (Il numero PIN GPIO utilizzato per controllare il relè collegato all'appliance CAS)
  • relayinstance (Inizializzato GUIDATO oggetto di gpiiozero Biblioteca responsabile del controllo del rispettivo pin GPIO - relaypin)


La riga 31 inizializza un server Web Python Flask.

Riga 32 Configura il server Web Flask.


Righe 34-36 Invia il indice.html file da modelli/ Directory Quando visiti l'app Web di automazione domestica.

Usi di pallone Jinja2 linguaggio di modelli per rendere il indice.html file. Quindi, ho superato il camere Dizionario al indice.html file. Jinja2 renderà la homepage usando il camere dati.


La funzione toggle_apliance_status () Nelle righe 39-52 viene utilizzata per accendere l'appliance di casa se è spento e spegnere l'appliance di casa se è acceso utilizzando l'appliance id.

Ritorna VERO Se l'operazione a levetta ha esito positivo. Se c'è un errore, tornerà Falso.


Le righe 55-57 vengono utilizzate per attivare un apparecchio domestico utilizzando il /Appliance/Attiva/disattiva/ Endpoint API del server web. Qui, id è l'ID dell'appliance domestico.


Creare il indice.html file in modelli/ Directory del tuo progetto come segue:

Modelli/indice $ nano.html

Digitare le seguenti righe di codici in indice.html sceneggiatura.








Automazione domestica con Raspberry Pi



Raspberry Pi Home Automation


% per spazio nelle camere %

camera



% per Appliance in Rooms [Room] %


Applicance ['name']

% endfor %


% endfor %



Una volta terminato, premere + X seguito da Y E per salvare il indice.html file.


Creare un stile.CSS file in statico/ Directory del tuo progetto come segue:

$ nano statico/stile.CSS


Digitare le seguenti righe di codici in stile.CSS file.

@import url ('https: // caratteri.Googleapis.com/css2?famiglia = Benchnine: wght@300; 400; 700 & display = swap ');
*
Margine: 0;
imbottitura: 0;
Font-Family: 'Benchnine', sans-serif;

#Content> H1
Sfondo: gradiente lineare (a destra, RGB (112, 24, 163), RGB (86, 127, 240));
Colore: #FFF;
Testo-align: centro;
imbottitura: .5em 0;

div.camera
margine: .5em;
bordo: 2px solido RGB (112, 24, 163);
raggio di confine: 5px;

div.Room H2
/* sfondo: RGB (9, 76, 121); */
Sfondo: gradiente lineare (a destra, RGB (112, 24, 163), RGB (86, 127, 240));
imbottitura: 0 0 0 .5em;
Colore: #FFF;

div.Appliances
margine: .5em .5em 0 0;
display: flex;
Flex-wrap: avvolgimento;

div.Appliance
bordo: 2px solido RGB (112, 24, 163);
raggio di confine: 5px;
larghezza: 110px;
Altezza: 120px;
Testo-align: centro;
Margine: 0 0 .5em .5em;
display: flex;
Direzione flessibile: colonna;

div.Appliance i.fa
Font-size: 4em;
Flex-Crow: 1;
imbottitura: 0.3em;
Colore: RGB (204, 50, 50);

div.Appliance [Data-Active = "Active"] i.fa
Colore: RGB (32, 177, 51);

div.Appliance Span
blocco di visualizzazione;
Font-weight: audace;
Background: RGB (112, 24, 163);
Colore: #FFF;

Una volta terminato, premere + X seguito da Y E per salvare il stile.CSS file.


Creare un app.js file in statico/ Directory del tuo progetto come segue:

$ nano statico/app.js


Digitare le seguenti righe di codici in app.js file.

finestra.addEventListener ('carico', main);
funzione main ()
funzione toggleappliancestate (e)
var id = e.Path [1].id;
var http = new xmlhttpRequest ();
http.onreadystatechange = function ()
se questo.ReadyState === 4 && questo.status === 200)
Se (JSON.analizzare (questo.risposta).status === true)
Se (e.Path [1].HasAttribute ('Data-Active'))
e.Path [1].RemoveAttribute ('Data-Active')
altro
e.Path [1].setAttribute ('Data-Active', 'Active')




http.open ("get", '/Applece/toggle/$ id', true);
http.Inviare();

var Appliances = Document.getElementsByClassName ('Appliance');
per (i = 0; i < appliances.length; i++)
elettrodomestici [i].addEventListener ('Click', toggleappliancestate);

Una volta terminato, premere + X seguito da Y e per salvare il app.js file.


Qui, la riga 1 esegue il principale() funzione Quando la pagina Web termina il caricamento.

Nel indice.html file, ogni elettrodomestico è racchiuso in un apparecchio classe. Le righe 26-29 vengono utilizzate per selezionare ogni apparecchio domestico dalla pagina Web e allegare il clic Evento per l'appliance. Quando qualcuno fa clic su un apparecchio domestico dalla pagina Web, il toggleAppianCestate () la funzione verrà eseguita.


Nelle righe 4-23, il toggleAppianCestate () La funzione viene utilizzata per richiedere il file /Appliance/Attiva/disattiva/ Endpoint del server web per modificare lo stato dell'appliance casalingo cliccato. La richiesta viene effettuata in background tramite Ajax. Una volta ricevuta la risposta, la pagina Web viene aggiornata di conseguenza.


Navigare verso il statico/ Directory nella directory del progetto come segue:

$ cd statico/


Scarica Font Awesome con il seguente comando:

$ wget https: // usa.fontawesome.com/versioni/v5.15.1/fontawesome-free-5.15.1-Web.cerniera lampo


Una volta scaricato Font Awesome, dovresti trovare il nuovo file zip Fontawesome-Free-5.15.1-Web.cerniera lampo nel statico/ directory.

$ ls -lh


Decomprimere il Fontawesome-Free-5.15.1-Web.cerniera lampo file con il seguente comando:

$ Unzip Fontawesome-Free-5.15.1-Web.cerniera lampo


IL Fontawesome-Free-5.15.1-Web.cerniera lampo Il file dovrebbe ora essere decompresso.


La nuova directory Fontawesome-Free-5.15.1-Web/ dovrebbe essere creato nella directory statica, come puoi vedere nello screenshot seguente.

$ ls -lh

Rinominare la directory Fontawesome-Free-5.15.1-Web/ A fontawesome/ con il seguente comando:

$ mv -v fontawesome-free-5.15.Fontawesome da 1-Web


Ora non hai più bisogno del Fontawesome-Free-5.15.1-Web.cerniera lampo file. Quindi, rimuovere il file Fontawesome-Free-5.15.1-Web.cerniera lampo file con il seguente comando:

$ rm -v fontawesome-free-5.15.1-Web.cerniera lampo


IL statico/ La struttura della directory dovrebbe apparire come mostrato nello screenshot seguente.

$ ls -lh


Torna alla directory del progetto ~/www come segue:

$ cd ..

Testare l'app Web di automazione domestica

Per testare l'app Web di automazione domestica, eseguire il seguente comando nella directory del progetto:

$ Flask_app = server.Py Flask Run


L'app Web dovrebbe essere disponibile sulla porta 5000 del tuo Raspberry Pi.


Dal browser Web Chromium, visitare http: // localhost: 5000. L'app Web di automazione domestica dovrebbe caricare.

Fai clic sull'icona della lampadina, indicata nell'immagine qui sotto.


La lampadina CA dovrebbe ora essere attivata. Il colore dell'icona dovrebbe anche cambiare in verde, indicando che la lampadina è accesa.


Quindi, l'app Web di automazione domestica funziona. Premere + C Per terminare il server web.

Creazione del servizio SystemD per l'app Web di automazione domestica

In questa sezione, ti mostrerò come creare un file di servizio SystemD per l'app Web di automazione domestica in modo che inizi automaticamente a boot.

Innanzitutto, crea il RASPI-Home-Automation.servizio File nella directory del progetto come segue:

$ nano raspi-home-automation.servizio

Digita le seguenti righe nell'automa di RASPI-Home.File di servizio.

[Unità]
Descrizione = Raspberry Pi Home Automation Web Service
Dopo = rete.bersaglio
[Servizio]
WorkingDirectory =/home/pi/www
Environment = Flask_App = Server.Py
Ambiente = flask_env = produzione
ExecStart =/usr/bin/blask run -host = 0.0.0.0
StandardOutput = eredità
Standarderror = eredità
Riavvia = sempre
Utente = pi
[Installare]
WANTEDBY = Multi-utente.bersaglio

Una volta terminato, premere + X seguito da Y e per salvare il RASPI-Home-Automation.servizio file.


Copia il RASPI-Home-Automation.servizio file a /etc/systemd/system/ Directory con il seguente comando:

$ sudo cp -v raspi-home-automation.Servizio/etc/systemd/system/


Ricarica i demoni Systemd per le modifiche per avere effetto come segue:

$ sudo systemctl demone-ricaricamento


Aggiungi il RASPI-Home-Automation Servizio all'avvio del sistema del sistema operativo Raspberry Pi con il seguente comando:

$ sudo systemctl abilita raspi-home-automation.servizio


Riavvia Raspberry Pi con il seguente comando:

$ sudo riavvia


Una volta stivali il Raspberry Pi, il RASPI-Home-Automation Il servizio dovrebbe essere attivo/in esecuzione, come puoi vedere nello screenshot seguente.

$ sudo systemctl status raspi-home-automation.servizio

Accesso all'app Web di automazione domestica da altri dispositivi

Per accedere all'app Web di automazione domestica da altri dispositivi nella rete domestica, dovrai conoscere l'indirizzo IP del tuo dispositivo Raspberry Pi.

Puoi trovare l'indirizzo IP del tuo dispositivo Raspberry Pi 4 dall'interfaccia di gestione web del router Home. Nel mio caso, l'indirizzo IP è 192.168.0.103. Questo sarà diverso per te. Quindi, assicurati di sostituire il mio IP con il tuo da ora in poi.


Se hai accesso alla console Raspberry Pi, è possibile eseguire il seguente comando per trovare l'indirizzo IP, anche.

$ hostname -i


Una volta che conosci l'indirizzo IP del tuo dispositivo Raspberry Pi, puoi accedervi da qualsiasi dispositivo nella rete domestica.

Come puoi vedere nello screenshot qui sotto, ho accettato l'app Web di automazione domestica dal mio smartphone Android.


Assicurati di collegare il tappo della lampadina alla presa di potenza a parete.


La lampadina deve essere spenta per impostazione predefinita.


Se si tocca l'icona della lampadina dall'app Web di automazione domestica, il colore dell'icona della lampadina dovrebbe passare al verde, indicando che la lampadina è accesa.


Come puoi vedere nell'immagine qui sotto, la lampadina è accesa.

Conclusione

Questo articolo ha mostrato come utilizzare un relè da 5 V per controllare un dispositivo elettrico CA ad alta tensione da Raspberry Pi usando il linguaggio di programmazione Python. L'articolo ti ha anche mostrato come scrivere un'app Web Python Flask basata su API per controllare il relè dal browser Web. Questo articolo dovrebbe aiutarti a iniziare con l'automazione domestica usando Raspberry Pi.