Sett opp Raspberry Pi Hjem -automatisering

Sett opp Raspberry Pi Hjem -automatisering
Noe av det viktigste for hjemmeautomatisering er å kontrollere høyspent AC ved bruk av en lavspent DC. For å kontrollere høyspenning AC fra Raspberry Pi, trenger du en 5V -relébryter. Du kan kontrollere relébryteren ved hjelp av GPIO -pinnene til Raspberry Pi. Relébryteren kan deretter kontrollere AC -apparater gjennom Raspberry Pi.

Denne artikkelen vil vise deg hvordan du bruker Raspberry Pi og 5V -relébryteren for å slå en lyspære av og på fra din mobile enhet. Artikkelen inneholder en webapp som du kan få tilgang til fra hvilken som helst enhet i nettverket ditt og kontrollere eventuelle AC -apparater i hjemmet ditt trådløst hjem. Så la oss komme i gang med vårt enkle Raspberry Pi Home Automation Experiment.

Ting du trenger

Hvis du vil bruke Raspberry Pi Headless (via SSH eller VNC), trenger du følgende ting:

1) Raspberry Pi 3 eller Raspberry Pi 4.
2) 5V relébryter.
3) Elektriske ledninger.
4) 3 Kvinne-til-kvinnelige tilkoblingsledninger.
5) AC lyspære.
6) AC lyspæreholder.
7) AC -plugg.
8) Wirecutter og stripperverktøy.
9) CR-V 3 skrutrekker.
10) Micro-USB (Raspberry Pi 3) eller USB Type-C (Raspberry Pi 4) Strømadapter.
11) 16 GB eller 32 GB MICROSD -kort med Raspberry Pi OS Blinket.
12) Nettverkstilkobling på Raspberry Pi.
13) Laptop eller en stasjonær datamaskin for VNC eksternt stasjonær tilgang eller SSH -tilgang til Raspberry Pi.

Hvis du ikke vil få tilgang til Raspberry Pi eksternt via SSH eller VNC, trenger du også følgende:

14) En skjerm.
15) HDMI eller mikro-HDMI-kabel.
16) Et tastatur.
17) En mus.

Hvis du trenger hjelp med å blinke Raspberry Pi OS -bildet til MicroSD -kortet, kan du sjekke ut artikkelen hvordan du installerer og bruker Raspberry Pi Image.

Hvis du er en Raspberry Pi -nybegynner og trenger hjelp med å installere Raspberry Pi OS på Raspberry Pi, sjekk ut artikkelen hvordan du installerer Raspberry Pi OS på Raspberry Pi 4.

Hvis du trenger hjelp med det hodeløse oppsettet av Raspberry Pi, kan du sjekke ut artikkelen hvordan du installerer og konfigurerer Raspberry Pi OS på Raspberry Pi 4 uten ekstern skjerm.

Bilder av alle nødvendige verktøy er gitt nedenfor.

Kraft på Raspberry Pi

Deretter kobler du strømkabelen til Raspberry Pi og strøm på Raspberry Pi.

Når Raspberry Pi er slått på, kan du koble til Raspberry Pi via VNC eller SSH. Eller du kan koble til et tastatur, en mus og en monitor for å bringe Pi for å få tilgang til det direkte.

5V Relay Pinouts

Et relé er i utgangspunktet en bryter. Men i motsetning til en tradisjonell bryter, kan et relé kontrolleres av en liten mengde likespenning.

5V -reléet er veldig enkelt å bruke. Den har to sider: den ene siden brukes til å kontrollere reléet via lavspent DC (fra Raspberry Pi), og den andre siden brukes til å kontrollere høyspenningen AC (i.e., lyspæren), avhengig av tilstanden til stafetten.


På den ene siden har stafetten to lysdioder (en rød og en grønn) og tre pinner (I, GND, og VCC). Disse tre pinnene brukes til å kontrollere stafetten fra Raspberry Pi.

De to første pinnene på den andre siden brukes til å kontrollere AC -hjemmeapparatet.

Koble til 5V -reléet til Raspberry Pi

For å koble 5V-reléet til Raspberry Pi, trenger du tre kvinnelige til kvinnelige koblingsledninger.

Plugg den ene siden av tilkoblingsledningene til I (gul ledning), GND (svart ledning), og VCC (rød ledning) pinner i 5V -reléet, som vist nedenfor.


Den andre siden av ledningene går inn i GPIO -toppene til Raspberry Pi, som vist på bildet nedenfor.

Den røde ledningen skal gå inn i PIN 2 (VCC) av Raspberry Pi.
Den svarte ledningen skal gå inn i PIN 6 (GND) av Raspberry Pi.
Den gule ledningen skal gå inn i PIN 7 (GPIO 4) av Raspberry Pi.


Når 5V -reléet er koblet til Raspberry Pi, skal det se ut som vist på bildet nedenfor.

Tillater GPIO -tilgang til påloggingsbruker

For å gi tilgang til GPIO -pinnene, standard påloggingsbruker av Raspberry Pi OS pi bør legges til GPIO gruppe.

Du kan legge til pi bruker til GPIO Gruppe med følgende kommando:

$ sudo usermod -ag gpio $ (whoami)


For at endringene skal tre i kraft, start Raspberry Pi med følgende kommando:

$ sudo omstart

Opprette en prosjektkatalog

Det er også en god idé å holde alle prosjektfilene organisert.

For å holde prosjektfilene organisert, opprette prosjektkatalogen ~/www og de nødvendige underkatalogene med følgende kommando:

$ mkdir -pv ~/www/maler, statisk


Når prosjektkatalogen er opprettet, navigerer du til prosjektkatalogen som følger:

$ CD ~/www

Bytter 5V -reléet fra Raspberry Pi

Nå som du har koblet til 5V -reléet til Raspberry Pi, vil du bytte reléet fra Raspberry Pi ved hjelp av Python -programmeringsspråket.

Merk: Bytte er et begrep brukt i elektronikk. Bytting betyr å kontrollere (i.e. Støt av/på) en viss elektronisk enhet.

For å eksperimentere med å bytte relé ved hjelp av Python -programmeringsspråket, lag den nye Python -skripttesten.py i prosjektkatalogen som følger:

$ nano test.py


Skriv inn følgende koder i testen.py python manus.

Fra Gpiozero Import LED
Fra tid importer søvn
Mens sant:
relé = LED (4)
trykk ("Relay: ON")
søvn (5)
relé.Lukk()
Print ("Relay: Off")
søvn (5)

Når du er ferdig, trykk + X etterfulgt av Y og For å redde test.py Python -manus.


Her importerer linje 1 Led fra gpiozero bibliotek, og linje 2 importerer sove funksjon fra tid bibliotek.


Linjer 6-14 er innenfor en uendelig sløyfe.


Linje 6 initialiserer en LED i GPIO 4 av Raspberry Pi, som er koblet til I Pin av stafetten.


Linje 8 slår på reléet ved å bruke på() metode.

Linje 9 skriver ut en melding i konsollen ved å bruke skrive ut() funksjon.

Linje 10 forsinker utførelsen av den neste kodelinjen i fem sekunder ved å bruke sove() funksjon.


Linje 12 slår av reléet ved hjelp av Lukk() metode.

På samme måte skriver linje 9 en melding på konsollen ved å bruke skrive ut() Funksjon og linje 10 forsinker utførelsen av neste kodelinje i 5 sekunder ved å bruke sove() funksjon.


Neste, løp test.py Python -manus som følger:

$ python3 -test.py


De test.py Python -skriptet skal begynne å bytte 5V -reléet. Du bør høre en klikkelyd hvert femte sekund. Når reléet bytter tilstand (fra av til av eller fra av til ON), lager det en klikkestøy. Dette betyr at stafetten fungerer ordentlig.


Når reléet er i off -state (normal drift - AC -belastningen er koblet fra), er det bare rød LED skal lyse opp, som du kan se på bildet nedenfor.


Når reléet er i staten (AC-belastningen er tilkoblet), begge grønn LED og de rød LED skal lyse opp, som du kan se på bildet nedenfor.


Når testingen er fullført, trykk + C å avslutte test.py manus.

Koble AC Lightbulb til 5V -reléet

5V -reléet skal nå fungere ordentlig. Nå vil du koble AC -hjemmeapparatet ditt (en lyspære, i dette tilfellet) til 5V -reléet.

Først, kutt den svarte elektriske ledningen koblet til lyspæren med en wirecutter.


Når den svarte elektriske ledningen koblet til lyspæren er kuttet med en wirecutter, skal den se ut som vist på bildet nedenfor.


Deretter striper du bort det ytre laget for å eksponere omtrent ½ tomme av den elektriske ledningen, som vist på bildet nedenfor.


Brett deretter de utsatte ledningene, som vist på bildet nedenfor.


Løsne de markerte skruene på reléet med en CV-3-skrutrekker.


Sett inn de utsatte ledningene du strippet og brettet tidligere i de to skrueterminalene og stram skruene med en CV-3-skrutrekker.

Testing Relay Switching etter tilkobling av AC -belastning

Når vekselstrømbelastningen er koblet til 5V -reléet, kobler du lyspærepluggen til stikkontakten.


Kjør test.py Python -skript fra prosjektkatalogen som følger:

$ python3 -test.py


De test.py Python-skriptet skal begynne å bytte 5V-reléet, som igjen vil bytte høyspenning AC-lyspære med fem sekunders intervaller. AC -lyspæren skal holde på i fem sekunder, og hold deg deretter av i fem sekunder, og så videre.

Lyspæren er av på bildet nedenfor.


Lyspæren er på på bildet nedenfor.


Som du kan se, kan vi bytte relé og kontrollere høyspenning AC Lightbulb ved å bruke Python -programmeringsspråket. Så trykk + C å avslutte test.py manus.

La oss nå gå videre til neste avsnitt.

Skrive hjemmeautomatisering av nettappen

I denne delen vil jeg vise deg hvordan du skriver en API-basert webapp ved hjelp av Python-programmeringsspråket. Du kan bruke webappen til å kontrollere reléet og AC Home Appliance (e) eller Electrical Device (e) koblet til reléet fra en nettleser.

MERK: Alle kodene som vises i denne delen er tilgjengelige i GitHub-depotet Shovon8/Raspberry-Pi-Home-Automation. Hvis du vil, kan du klone mitt GitHub -depot og hoppe over alle kodene.

Opprett serveren.Py Python -skript i prosjektkatalogen som følger:

$ Nano Server.py


Skriv inn følgende koder i server.py Python -manus.

Fra kolbeimportkolbe, jsonify, url_for, gjengivelse_template
Fra Gpiozero Import LED
fra uuid import uuid4
rom =
rom ['rom 1'] = [
'id': uuid4 (),
'Navn': 'Lys 1',
'Icon': 'fa fa-lightbulb',
'Status': falsk,
'Relaypin': 4,
'RelayInstance': falsk
,
'id': uuid4 (),
'Navn': 'Fan 1',
'Ikon': 'fa fa-fan',
'Status': falsk,
'Relaypin': 6,
'RelayInstance': falsk
]
rom ['Baderom 1'] = [
'id': uuid4 (),
'Navn': 'Lys 1',
'Icon': 'fa fa-lightbulb',
'Status': falsk,
'Relaypin': 5,
'RelayInstance': falsk
]
app = kolbe (__ name__)
app.config ['send_file_max_age_default'] = 0
@App.rute('/')
def home ():
Retur Render_Template ('./indeks.html ', rom = rom)
DEF TOGLE_APPLIANCE_STATUS (ID):
For rom i rom:
for apparat i rom [rom]:
Hvis Str (apparat ['id']) == id:
Hvis apparat ['RelayInstance']:
apparat ['RelayInstance'].Lukk()
apparat ['RelayInstance'] = falsk
ellers:
apparat ['RelayInstance'] = LED (Appliance ['RelayPin'])
apparat ['RelayInstance'].på()
apparat ['status'] = ikke apparat ['Status']
Returner sann
return falsk
@App.rute ('/apparat/vipp/')
DEF APPIANCE_TOGGLE (ID):
Returner JSonify ('Status': Toggle_Appliance_Status (ID))

Når du er ferdig, trykk + X etterfulgt av Y og For å redde server.py Python -manus.


Her importerer linjene 1-3 alle nødvendige komponenter fra sine respektive biblioteker.


Linje 5 skaper en tom rom ordbok. I denne ordboken vil vi lagre alle AC -apparatdetaljer som vi vil kontrollere fra webappen.


De rom Detaljer lagres i linjer 7-29.


La oss diskutere datastrukturen til et av rommene.

Her vil romnavnet være Rom 1. Så, Rom 1 er nøkkelen til rom ordbok.


De Rom 1 Nøkkelen har en matrise som verdien. Antall array -elementer er lik antall AC -apparater du har i det rommet du også vil kontrollere fra webappen. I dette tilfellet har vi to AC -apparater som vi ønsker å kontrollere: Lys 1 og Fan 1.


Hver definisjon av hjemmeapparat har en id. De id er en tilfeldig generert UUID. Dette brukes til å identifisere hvilket rom vi ønsker å kontrollere ved hjelp av API.

Et hjemmeapparat har også alt av følgende:

  • Navn (lys 1 i dette tilfellet)
  • ikon (Font Awesome Icon Class, da vi bruker Font Awesome for Icons)
  • status (sant hvis og Falsk hvis av)
  • Relaypin (GPIO -pinnenummeret som brukes til å kontrollere reléet koblet til AC -hjemmeapparatet)
  • RelayInstance (den initialiserte Led objekt av gpiozero Bibliotek som er ansvarlig for å kontrollere den respektive GPIO -pinnen - Relaypin)


Linje 31 initialiserer en kolbe Python webserver.

Linje 32 Konfigurerer Flask webserveren.


Linjer 34-36 Send indeks.html fil fra Maler/ Katalog når du besøker Home Automation Web App.

Kolbe bruker Jinja2 templerende språk for å gjengi indeks.html fil. Så jeg har passert rom ordbok til indeks.html fil. Jinja2 vil gjengi hjemmesiden ved å bruke rom data.


Funksjonen Toggle_appliance_status () I linjer 39-52 brukes til å slå på hjemmeapparatet hvis det er av og slå av hjemmeapparatet hvis det er på å bruke apparatets id.

Det kommer tilbake ekte Hvis vippet operasjonen er vellykket. Hvis det er en feil, kommer den tilbake Falsk.


Linjer 55-57 brukes til å veksle et hjemmeapparat ved hjelp av /apparat/vippe/ API -endepunktet for webserveren. Her, id er IDen til hjemmeapparatet.


Opprett indeks.html fil i Maler/ Katalog for prosjektet ditt som følger:

$ nano maler/indeks.html

Skriv inn følgende koder i indeks.html manus.








Hjemmeautomatisering med Raspberry Pi



Raspberry Pi Hjemmeautomatisering


% for rom i rom %

rom



% for apparat i rom [rom] %


apparat ['navn']

% endfor %


% endfor %



Når du er ferdig, trykk + X etterfulgt av Y og For å redde indeks.html fil.


Lage en stil.CSS fil i statisk/ Katalog for prosjektet ditt som følger:

$ nano statisk/stil.CSS


Skriv inn følgende koder i stil.CSS fil.

@import url ('https: // skrifter.Googleapis.com/css2?familie = benchnine: wght@300; 400; 700 & display = bytte ');
*
Margin: 0;
polstring: 0;
Font-Family: 'Benchnine', Sans-serif;

#content> h1
Bakgrunn: Lineær-gradient (til høyre, RGB (112, 24, 163), RGB (86, 127, 240));
Farge: #FFF;
tekst-align: sentrum;
polstring: .5em 0;

div.rom
margin: .5em;
grense: 2px solid RGB (112, 24, 163);
Border-Radius: 5px;

div.rom H2
/* Bakgrunn: RGB (9, 76, 121); */
Bakgrunn: Lineær-gradient (til høyre, RGB (112, 24, 163), RGB (86, 127, 240));
polstring: 0 0 0 .5em;
Farge: #FFF;

div.apparater
margin: .5em .5em 0 0;
Display: Flex;
Flex-Wrap: Wrap;

div.apparat
grense: 2px solid RGB (112, 24, 163);
Border-Radius: 5px;
Bredde: 110px;
Høyde: 120px;
tekst-align: sentrum;
Margin: 0 0 .5em .5em;
Display: Flex;
Flex-regi: kolonne;

div.apparat i.fa
Font-størrelse: 4EM;
Flex-Grow: 1;
Padding-top: 0.3em;
Farge: RGB (204, 50, 50);

div.apparat [data-aktiv = "aktiv"] i.fa
Farge: RGB (32, 177, 51);

div.apparatspenn
Display: Block;
Fontvekt: fet;
Bakgrunn: RGB (112, 24, 163);
Farge: #FFF;

Når du er ferdig, trykk + X etterfulgt av Y og For å redde stil.CSS fil.


Lage en app.JS fil i statisk/ Katalog for prosjektet ditt som følger:

$ nano statisk/app.JS


Skriv inn følgende koder i app.JS fil.

vindu.AddEventListener ('Last', hoved);
funksjon main ()
funksjon TOGGLEAPPLIANCESTATE (e)
var id = e.Sti [1].id;
var http = ny xmlhttpRequest ();
http.onreadyStateChange = funksjon ()
hvis dette.ReadyState === 4 && dette.status === 200)
hvis (json.Analyse (dette.ResponseText).status === true)
hvis (e.Sti [1].hasAttribute ('data-aktiv'))
e.Sti [1].RemovingAttribute ('Data-Active')
annet
e.Sti [1].setAttribute ('data-aktiv', 'aktiv')




http.Åpen ("Get", '/Appliance/Toggle/$ id', True);
http.sende();

var apparater = dokument.getElementsByClassName ('Appliance');
for (i = 0; i < appliances.length; i++)
apparater [i].AddEventListener ('klikk', ToggleAppliancestate);

Når du er ferdig, trykk + X etterfulgt av Y og for å redde app.JS fil.


Her kjører linje 1 hoved() funksjon når websiden er ferdig med lasting.

I indeks.html fil, hvert hjemmeapparat er vedlagt i en Apparat klasse. Linjer 26-29 brukes til å velge hvert hjemmeapparat fra websiden og legge ved Klikk Arrangement til apparatet. Når noen klikker på et hjemmeapparat fra websiden, er det TOGGLEAPPLIANCESTATE () funksjonen vil kjøre.


I linjer 4-23, TOGGLEAPPLIANCESTATE () funksjon brukes til å be om /apparat/vippe/ Endepunktet for webserveren for å endre tilstanden til det klikkede hjemmeapparatet. Forespørselen fremsettes i bakgrunnen via Ajax. Når svaret er mottatt, oppdateres websiden deretter.


Naviger til statisk/ Katalog i prosjektkatalogen din som følger:

$ CD statisk/


Last ned Font Awesome med følgende kommando:

$ wget https: // bruk.fontawesome.com/utgivelser/v5.15.1/Fontawesome-Free-5.15.1-nett.glidelås


Når Font Awesome er lastet ned, bør du finne den nye ZIP -filen Fontawesome-Free-5.15.1-nett.glidelås i statisk/ katalog.

$ ls -lh


Pakk ut Fontawesome-Free-5.15.1-nett.glidelås fil med følgende kommando:

$ Unzip Fontawesome-Free-5.15.1-nett.glidelås


De Fontawesome-Free-5.15.1-nett.glidelås fil skal nå pakkes ut.


Den nye katalogen Fontawesome-Free-5.15.1-nett/ skal opprettes i statisk/ katalogen, som du kan se på skjermdumpen nedenfor.

$ ls -lh

Gi nytt navn til katalogen Fontawesome-Free-5.15.1-nett/ til fontawesome/ med følgende kommando:

$ mv -v fontawesome-free-5.15.1-nettfontawesome


Nå trenger du ikke lenger Fontawesome-Free-5.15.1-nett.glidelås fil. Så fjern Fontawesome-Free-5.15.1-nett.glidelås fil med følgende kommando:

$ RM -V Fontawesome-Free-5.15.1-nett.glidelås


De statisk/ Katalogstruktur skal se ut som vist på skjermdumpen nedenfor.

$ ls -lh


Naviger tilbake til prosjektkatalogen ~/www følgende:

$ CD ..

Testing av hjemmeautomatisering av nettappen

Hvis du vil teste hjemmeautomatiseringsnett -appen, kjører du følgende kommando i prosjektkatalogen din:

$ Flask_app = server.py kolbe løp


Nettappen skal være tilgjengelig på port 5000 av Raspberry Pi.


Besøk http: // localhost fra Chromium -nettleseren fra http: // localhost: 5000. Hjemmeautomatisering av nettappen skal laste.

Klikk på lyspæreikonet, angitt på bildet nedenfor.


AC -lyspæren skal nå slås på. Ikonfargen bør også endre seg til grønt, noe som indikerer at lyspæren er på.


Så, hjemmeautomatisering av nettappen fungerer. trykk + C å avslutte webserveren.

Opprette SystemD -tjeneste for hjemmeautomatisering av nettappen

I denne delen vil jeg vise deg hvordan du oppretter en SystemD -tjenestefil for Home Automation Web App, slik at den automatisk starter på oppstart.

Først må du lage Raspi-hjemmautomasjon.service fil i prosjektkatalogen din som følger:

$ Nano Raspi-hjemmautomasjon.service

Skriv inn følgende linjer i Raspi-Home-Automation.Servicefil.

[Enhet]
Beskrivelse = Raspberry Pi Home Automation Web Service
Etter = nettverk.mål
[Service]
WorkingDirectory =/Home/Pi/www
Miljø = flask_app = server.py
Miljø = Flask_env = Produksjon
ExecStart =/usr/bin/kolbe Run - -vert = 0.0.0.0
StandardOutput = arve
StandardError = arve
Start på nytt = alltid
Bruker = pi
[Installere]
WantedBy = Multi-User.mål

Når du er ferdig, trykk + X etterfulgt av Y og for å redde Raspi-hjemmautomasjon.service fil.


Kopier Raspi-hjemmautomasjon.service fil til /etc/systemd/system/ Katalog med følgende kommando:

$ sudo cp -v Raspi-hjemmautomasjon.service/etc/systemd/system/


Last inn Systemd -demonene på nytt for at endringene skal tre i kraft som følger:

$ sudo SystemCTL Daemon-Reload


Legg til Raspi-hjemmautomasjon Service til systemstart av Raspberry Pi OS med følgende kommando:

$ sudo SystemCTL Aktiver Raspi-Home-Automation.service


Start Raspberry Pi med følgende kommando:

$ sudo omstart


Når Raspberry Pi støvler, Raspi-hjemmautomasjon Tjenesten skal være aktiv/kjøre, som du kan se på skjermdumpen nedenfor.

$ sudo systemctl status Raspi-hjem-automasjon.service

Få tilgang til hjemmeautomatiseringsnett -appen fra andre enheter

For å få tilgang til Home Automation Web App fra andre enheter i hjemmenettverket, må du kjenne IP -adressen til Raspberry Pi -enheten din.

Du kan finne IP -adressen til Raspberry Pi 4 -enheten din fra webadministrasjonsgrensesnittet til hjemmeruteren din. I mitt tilfelle er IP -adressen 192.168.0.103. Dette vil være annerledes for deg. Så husk å erstatte IP -en min med din fra nå av.


Hvis du har tilgang til Raspberry Pi -konsollen, kan du også kjøre følgende kommando for å finne IP -adressen.

$ hostname -i


Når du kjenner IP -adressen til Raspberry Pi -enheten din, kan du få tilgang til den fra hvilken som helst enhet i hjemmenettverket.

Som du kan se på skjermbildet nedenfor, har jeg fått tilgang til hjemmeautomatiseringsnett -appen fra Android -smarttelefonen min.


Sørg for å plugge lyspærepluggen inn i veggens strømuttak.


Lyspæren skal slås av som standard.


Hvis du trykker på lyspæreikonet fra Home Automation Web App, bør lyspære -ikonfargen endre seg til grønn, noe som indikerer at lyspæren er på.


Som du kan se på bildet nedenfor, er lyspæren på.

Konklusjon

Denne artikkelen viste deg hvordan du bruker et 5V-relé for å kontrollere en høyspent AC-elektrisk enhet fra Raspberry Pi ved hjelp av Python-programmeringsspråket. Artikkelen viste deg også hvordan du skriver en API -basert Python Flask Web -app for å kontrollere stafetten fra nettleseren. Denne artikkelen skal hjelpe deg i gang med hjemmeautomatisering ved hjelp av Raspberry Pi.