Opsæt Raspberry Pi Home Automation

Set Up Raspberry Pi Home Automation



En af de vigtigste ting for hjemmeautomatisering er at styre højspændings AC ved hjælp af en lavspændings DC. For at styre højspændings AC fra Raspberry Pi skal du bruge en 5V relæafbryder. Du kan styre relækontakten ved hjælp af GPIO -benene på Raspberry Pi. Relæafbryderen kan derefter styre AC -husholdningsapparaterne via Raspberry Pi.

Denne artikel viser dig, hvordan du bruger Raspberry Pi og 5V relækontakten til at tænde og slukke en pære fra din mobilenhed. Artiklen indeholder en webapp, som du kan få adgang til fra enhver enhed på dit netværk og styre alle AC -husholdningsapparater i dit hjem trådløst. Så lad os komme i gang med vores enkle Raspberry Pi hjemmeautomatiseringseksperiment.







Ting du får brug for

Hvis du vil bruge din Raspberry Pi uden hoved (via SSH eller VNC), skal du bruge følgende ting:



1) Raspberry Pi 3 eller Raspberry Pi 4.
2) 5V relæafbryder.
3) Elektriske ledninger.
4) 3 hun-til-hun-forbindelsestråde.
5) AC lyspære.
6) AC lyspæreholder.
7) AC -stik.
8) Wirecutter og stripper værktøj.
9) CR-V 3 skruetrækker.
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 blinker.
12) Netværksforbindelse på Raspberry Pi.
13) Bærbar computer eller en stationær computer til VNC -adgang til fjernskrivebord eller SSH -adgang til Raspberry Pi.



Hvis du ikke ønsker at få adgang til Raspberry Pi eksternt via SSH eller VNC, skal du også bruge følgende:





14) En skærm.
15) HDMI- eller mikro-HDMI-kabel.
16) Et tastatur.
17) En mus.

Hvis du har brug for hjælp til at blinke Raspberry Pi OS -billedet til microSD -kortet, kan du læse artiklen Sådan installeres og bruges Raspberry Pi Imager.



Hvis du er en Raspberry Pi -nybegynder, og du har brug for hjælp til at installere Raspberry Pi OS på Raspberry Pi, kan du tjekke artiklen Sådan installeres Raspberry Pi OS på Raspberry Pi 4.

Hvis du også har brug for hjælp til den hovedløse opsætning af Raspberry Pi, kan du læse artiklen Sådan installeres og konfigureres Raspberry Pi OS på Raspberry Pi 4 uden ekstern skærm.

Billeder af alle de nødvendige værktøjer er angivet nedenfor.

Tænder på Raspberry Pi

Tilslut derefter strømkablet til Raspberry Pi og tænd for Raspberry Pi.

Når Raspberry Pi er tændt, kan du oprette forbindelse til Raspberry Pi via VNC eller SSH. Eller du kan slutte et tastatur, en mus og en skærm til Raspberry Pi for at få direkte adgang til det.

5V Relæ Pinouts

Et relæ er dybest set en switch. Men i modsætning til en traditionel switch kan et relæ styres af en lille mængde DC -spænding.

5V relæet er meget let at bruge. Den har to sider: den ene side bruges til at styre relæet via lavspændings DC (fra Raspberry Pi), og den anden side bruges til at styre højspændings AC (dvs. pæren), afhængigt af relæets tilstand .


På den ene side har relæet to lysdioder (en rød og en grøn) og tre ben ( IN, GND, og VCC ). Disse tre ben bruges til at styre relæet fra Raspberry Pi.

De to første ben på den anden side bruges til at styre husholdningsapparatet.

Tilslutning af 5V relæet til Raspberry Pi

For at forbinde 5V-relæet til Raspberry Pi skal du bruge tre hun-til-hun-forbindelsestråde.

Sæt den ene side af tilslutningskablet til I (gul ledning), GND (sort ledning) og VCC (rød ledning) ben i 5V relæet, som vist herunder.


Den anden side af ledningerne går ind i GPIO -headerstifterne på Raspberry Pi, som vist på billedet herunder.

Den røde ledning skal gå ind i PIN 2 (VCC) af Raspberry Pi.
Den sorte ledning skal gå ind i PIN 6 (GND) af Raspberry Pi.
Den gule ledning skal gå ind i PIN 7 (GPIO 4) af Raspberry Pi.


Når 5V -relæet er forbundet til Raspberry Pi, skal det se ud som vist på billedet herunder.

Giver GPIO adgang til loginbruger

For at give adgang til GPIO -benene, standard loginbruger i Raspberry Pi OS pi skal tilføjes til gpio gruppe.

Du kan tilføje pi bruger til gpio gruppe med følgende kommando:

$sudobrugerform-aGgpio $(hvem er jeg)


For at ændringerne skal træde i kraft, genstart Raspberry Pi med følgende kommando:

$sudogenstarte

Oprettelse af en projektmappe

Det er også en god idé at holde alle projektfilerne organiseret.

For at holde projektfilerne organiseret skal du oprette projektmappen ~/www og de nødvendige underkataloger med følgende kommando:

$mkdir -pv~/www/{skabeloner, statisk}


Når projektmappen er oprettet, skal du navigere til projektmappen som følger:

$CD~/www

Skifter 5V relæet fra Raspberry Pi

Nu hvor du har tilsluttet 5V -relæet til Raspberry Pi, skifter du relæet fra Raspberry Pi ved hjælp af programmeringssproget Python.

BEMÆRK: Skift er et begreb, der bruges inden for elektronik. Skift betyder at styre (dvs. tænde/slukke) en bestemt elektronisk enhed.

Hvis du vil eksperimentere med at skifte relæ ved hjælp af Python -programmeringssproget, skal du oprette det nye Python -script test.py i projektmappen som følger:

$nanotest.py


Skriv følgende kodelinjer i Python -scriptet test.py.

fragpiozeroimportereLED
fra tid importeresøvn

mens Sand:
relæ=LED(4)
Print('Relæ: Til')
søvn(5)

relæ.tæt()
Print('Relæ: Fra')
søvn(5)

Når du er færdig, skal du trykke på + X efterfulgt af OG og for at gemme test.py Python script.


Her importerer linje 1 LED fra gpiozero bibliotek, og linje 2 importerer søvn funktion fra tid bibliotek.


Linje 6-14 er inden for en uendelig sløjfe.


Linje 6 initialiserer en LED i GPIO 4 af Raspberry Pi, som er forbundet til I pin af relæet.


Linje 8 tænder relæet ved hjælp af på() metode.

Linje 9 udskriver en besked i konsollen ved hjælp af Print() fungere.

Linje 10 forsinker udførelsen af ​​den næste kodelinje i fem sekunder ved hjælp af søvn() fungere.


Linje 12 slukker for relæet ved hjælp af tæt() metode.

På samme måde udskriver linje 9 en meddelelse på konsollen ved hjælp af Print() funktion og linje 10 forsinker udførelsen af ​​den næste kodelinje i 5 sekunder ved hjælp af søvn() fungere.


Kør derefter test.py Python script som følger:

$python3 test.py


Det test.py Python -script skulle begynde at skifte 5V -relæet. Du skal høre en kliklyd hvert femte sekund. Når relæet skifter tilstand (fra tændt til slukket eller fra slukket til tændt), giver det en klikstøj. Det betyder, at relæet fungerer korrekt.


Når relæet er i slukket tilstand (normal drift-AC-belastning er afbrudt), er det kun net LED skal lyse, som du kan se på billedet herunder.


Når relæet er i on-state (vekselstrøm er tilsluttet), både grøn LED og det net LED skal lyse, som du kan se på billedet herunder.


Når testen er færdig, skal du trykke på + C at afslutte test.py manuskript.

Tilslutning af lyspæren til 5V relæet

5V -relæet skulle nu fungere korrekt. Nu tilslutter du dit AC -husholdningsapparat (en pære, i dette tilfælde) til 5V -relæet.

Skær først den sorte elektriske ledning, der er forbundet til lyspæren, med en wirecutter.


Når den sorte elektriske ledning, der er forbundet til lyspæren, er blevet skåret med en wirecutter, skal den se ud som vist på billedet herunder.


Fjern derefter det udvendige lag for at afsløre ca. ½ tommer af den elektriske ledning, som vist på billedet herunder.


Fold derefter de synlige ledninger som vist på billedet herunder.


Løsn de markerede skruer på relæet med en CV-3 skruetrækker.


Indsæt de synlige ledninger, som du fjernede og foldede tidligere i de to skrueterminaler, og stram skruerne med en CV-3 skruetrækker.

Test af relæskift efter tilslutning af vekselstrøm

Når AC -belastningen er tilsluttet 5V -relæet, skal lyspærestikket sluttes til stikkontakten.


Kør test.py Python -script fra projektmappen som følger:

$python3 test.py


Det test.py Python-scriptet skal begynde at skifte 5V-relæet, som igen vil skifte højspændings AC-pæren med fem sekunders intervaller. AC -pæren skal forblive tændt i fem sekunder, derefter slukke i fem sekunder og så videre.

Lyspæren er slukket på billedet herunder.


Lyspæren er tændt på billedet herunder.


Som du kan se, kan vi skifte relæ og styre højspændings AC -pæren ved hjælp af programmeringssproget Python. Så tryk på + C at afslutte test.py manuskript.

Lad os nu gå videre til det næste afsnit.

Skrivning af hjemmeautomatiseringswebappen

I dette afsnit vil jeg vise dig, hvordan du skriver en API-baseret webapp ved hjælp af programmeringssproget Python. Du kan bruge webappen til at styre relæet og AC -husholdningsapparaterne eller elektriske enheder, der er sluttet til relæet fra en webbrowser.

BEMÆRK: Alle koderne vist i dette afsnit er tilgængelige i mit GitHub -depot shovon8 / hindbær-pi-hjemmeautomatisering . Hvis du vil, kan du klone mit GitHub -lager og springe alle koderne over.

Opret server.py Python -scriptet i projektmappen som følger:

$nanoserver.py


Indtast følgende kodelinjer i server.py Python script.

frakolbeimportereKolbe,jsonify,url_for,render_template
fragpiozeroimportereLED
frauuidimportereuuid4
værelser= {}
værelser['Værelse 1'] = [{
'id': uuid4(),
'navn':'Lys 1',
'ikon':'fa fa-lyspære',
'status':Falsk,
'relayPin':4,
'relayInstance':Falsk
}, {
'id': uuid4(),
'navn':'Fan 1',
'ikon':'fa fa-fan',
'status':Falsk,
'relayPin':6,
'relayInstance':Falsk
}]
værelser['Badeværelse 1'] = [{
'id': uuid4(),
'navn':'Lys 1',
'ikon':'fa fa-lyspære',
'status':Falsk,
'relayPin':5,
'relayInstance':Falsk
}]
app=Kolbe(__navn__)
app.konfiguration['SEND_FILE_MAX_AGE_DEFAULT'] = 0
@app.rute('/')
defhjem():
Vend tilbagerender_template('./index.html',værelser=værelser)
deftoggle_appliance_status(id):
tilværelseiværelser:
tilapparativærelser[værelse]:
hvis s(apparat['id']) == id:
hvisapparat['relayInstance']:
apparat['relayInstance'].tæt()
apparat['relayInstance'] = Falsk
andet:
apparat['relayInstance'] =LED(apparat['relayPin'])
apparat['relayInstance'].()
apparat['status'] = ikkeapparat['status']
Vend tilbage Sand
Vend tilbage Falsk
@app.rute('/apparat/skifte/')
defdevice_toggle(id):
Vend tilbagejsonify({'status': toggle_appliance_status(id)})

Når du er færdig, skal du trykke på + X efterfulgt af OG og for at gemme server.py Python script.


Her importerer linje 1-3 alle de nødvendige komponenter fra deres respektive biblioteker.


Linje 5 opretter en tom værelser ordbog. I denne ordbog gemmer vi alle AC -apparatdetaljer, som vi ønsker at styre fra webappen.


Det værelser detaljer gemmes i linje 7-29.


Lad os diskutere datastrukturen i et af værelserne.

Her vil værelsesnavnet være Værelse 1. Så, Værelse 1 er nøglen til værelser ordbog.


Det Værelse 1 nøgle har en matrix som værdien. Antallet af arrayelementer er lig med antallet af AC -husholdningsapparater, du har i det rum, som du også vil styre fra webappen. I dette tilfælde har vi to AC -husholdningsapparater, som vi vil styre: Lys 1 og Ventilator 1 .


Hver definition af husholdningsapparater har en id . Det id er et tilfældigt genereret UUID. Dette bruges til at identificere, hvilket rum vi ønsker at styre ved hjælp af API'en.

Et husholdningsapparat har også alt det følgende:

  • navn (lys 1 I dette tilfælde)
  • ikon (Ikonklasse Font Awesome, da vi vil bruge Font Awesome til ikonerne)
  • status (sandt hvis og Falsk hvis af )
  • relæPin (GPIO -pin -nummeret, der bruges til at styre det relæ, der er sluttet til AC -husholdningsapparatet)
  • relæInstans (den initialiserede LED genstand for gpiozero bibliotek, der er ansvarlig for at kontrollere den respektive GPIO -pin - relæPin )


Linje 31 initialiserer en kolbe Python -webserver.

Linje 32 konfigurerer kolbe -webserveren.


Linje 34-36 sender index.html fil fra skabeloner/ bibliotek, når du besøger web -app til hjemmeautomatisering.

Kolbe bruger Jinja2 skabelonsprog til gengivelse af index.html fil. Så jeg har bestået værelser ordbog til index.html fil. Jinja2 vil gengive hjemmesiden ved hjælp af værelser data.


Funktionen toggle_appliance_status () i linje 39-52 bruges til at tænde husholdningsapparatet, hvis det er slukket, og slukke for husholdningsapparatet, hvis det er tændt ved hjælp af apparatets id .

Det vender tilbage Sand hvis skifteoperationen er vellykket. Hvis der er en fejl, vender den tilbage Falsk .


Linje 55-57 bruges til at skifte et husholdningsapparat med /apparat/skifte/ API -slutpunkt for webserveren. Her, id er husholdningsapparatets ID.


Opret index.html fil i skabeloner/ bibliotek over dit projekt som følger:

$nanoskabeloner/index.html

Indtast følgende kodelinjer i index.html manuskript.


< html lang='på'>
< hoved >
< meta tegnsæt='UTF-8'>
< meta navn='viewport' indhold='width = device-width, initial-scale = 1.0'>
< link rel='stylesheet' href='{{url_for (' statisk ', filnavn =' fontawesome/css/all.min.css ')}}'>
< link rel='stylesheet' href='{{url_for (' statisk ', filnavn =' style.css ')}}'>
< titel >Hjemmeautomatisering med Raspberry Pi</ titel >
</ hoved >
< legeme >
< div id='indhold'>
< h1 >Raspberry Pi hjemmeautomatisering</ h1 >

{ % for værelse i værelser %}
< div klasse='værelse'>
< h2 >{{værelse}}</ h2 >
< div klasse='hårde hvidevarer'>
{ % for apparat i rum [værelse] %}
< div klasse='apparat' id='{{device [' id ']}}'> ='aktiv'>
< jeg klasse='{{device [' icon ']}}'></ jeg >
< spændvidde >{{device ['name']}}</ spændvidde >
</ div >
{ % endfor %}
</ div >
</ div >
{ % endfor %}

</ div >

< manuskript src='{{url_for (' statisk ', filnavn =' app.js ')}}' type='tekst/javascript'></ manuskript >
</ legeme >
</ html >

Når du er færdig, skal du trykke på + X efterfulgt af OG og for at gemme index.html fil.


Lave en stil.css fil i statisk/ bibliotek over dit projekt som følger:

$nanostatisk/stil.css


Indtast følgende kodelinjer i stil.css fil.

@importere url('https://fonts.googleapis.com/css2?family=BenchNine: [email protected]; 400; 700 & display = swap');

* {
margen: 0;
polstring: 0;
skrifttype-familie: 'BenchNine', sans serif;
}

#indhold >h1{
baggrund:lineær-gradient(tilret, rgb(112, 24, 163), rgb(86, 127, 240));
farve: #fff;
tekstjustering: centrum;
polstring: .5em 0;
}

div.værelse {
margen: .5em;
grænse: 2px solid rgb(112, 24, 163);
grænse-radius: 5px;
}

div.værelseh2{
/* baggrund: rgb (9, 76, 121); */
baggrund:lineær-gradient(tilret, rgb(112, 24, 163), rgb(86, 127, 240));
polstring: 0 0 0 .5em;
farve: #fff;
}

div.hårde hvidevarer {
margen: .5em .5em 0 0;
Skærm:flex;
flex-wrap:wrap;
}

div.apparat {
grænse: 2px solid rgb(112, 24, 163);
grænse-radius: 5px;
bredde: 110px;
højde: 120px;
tekstjustering: centrum;
margen: 0 0 .5em .5em;
Skærm:flex;
flex-retning:kolonne;
}

div.apparatjeg.fa {
skriftstørrelse: 4em;
flex-vokse: 1;
polstringstop: 0,3 em;
farve: rgb(204, halvtreds, halvtreds);
}

div. apparat[data-aktive='aktiv']jeg.fa {
farve: rgb(32, 177, 51);
}

div.apparatspændvidde{
Skærm: blok;
skrifttype-vægt: fremhævet;
baggrund: rgb(112, 24, 163);
farve: #fff;
}

Når du er færdig, skal du trykke på + X efterfulgt af OG og for at gemme stil.css fil.


Opret en app.js fil i statisk/ bibliotek over dit projekt som følger:

$nanostatisk/app.js


Indtast følgende kodelinjer i app.js fil.

vindue.addEventListener('belastning',vigtigste);

fungerevigtigste() {
fungeretoggleApplianceState(Og) {
hvorid=Og.sti[1].id;

hvorhttp= nyXMLHttpRequest();

http.onreadystatechange = fungere() {
hvis(det her.readyState === 4 && det her.status === 200) {
hvis(JSON.parse(det her.svarTekst).status === sand) {
hvis(Og.sti[1].har attribut('data-aktiv')) {
Og.sti[1].removeAttribute('data-aktiv')
} andet {
Og.sti[1].setAttribute('data-aktiv', 'aktiv')
}
}
}
}

http.åben('FÅ',``/apparat/skifte/${id}``, sand);
http.sende();
}


hvorhårde hvidevarer=dokument.getElementsByClassName('apparat');
til(jeg=0;jeg<hårde hvidevarer.længde;jeg++) {
hårde hvidevarer[jeg].addEventListener('klik',toggleApplianceState);
}
}

Når du er færdig, skal du trykke på + X efterfulgt af OG og for at gemme app.js fil.


Her kører linje 1 main () funktion, når websiden er færdig med at indlæse.

I index.html fil, er hvert husholdningsapparat vedlagt i en apparat klasse. Linje 26-29 bruges til at vælge hvert husholdningsapparat fra websiden og vedhæfte klik begivenhed for apparatet. Når nogen klikker på et husholdningsapparat fra websiden, vises toggleApplianceState () funktionen kører.


I linje 4-23, den toggleApplianceState () funktion bruges til at anmode om /apparat/skifte/ slutpunkt for webserveren for at ændre tilstanden for det klikede husholdningsapparat. Anmodningen sker i baggrunden via AJAX. Når svaret er modtaget, opdateres websiden i overensstemmelse hermed.


Naviger til statisk/ bibliotek i dit projektmappe som følger:

$CDstatisk/


Download Font Awesome med følgende kommando:

$wgethttps://use.fontawesome.com/udgivelser/v5.15.1/fontawesome-free-5.15.1-web.zip


Når Font Awesome er downloadet, skal du finde den nye zip -fil fontawesome-free-5.15.1-web.zip i statisk/ vejviser.

$ls -lh


Pak den ud fontawesome-free-5.15.1-web.zip fil med følgende kommando:

$udpakkefontawesome-free-5.15.1-web.zip


Det fontawesome-free-5.15.1-web.zip filen skal nu pakkes ud.


Det nye bibliotek fontawesome-free-5.15.1-web/ skal oprettes i statikken/ biblioteket, som du kan se på skærmbilledet herunder.

$ls -lh

Omdøb biblioteket fontawesome-free-5.15.1-web/ til skrifttype/ med følgende kommando:

$mv -vfontawesome-free-5.15.1-web fontawesome


Nu har du ikke længere brug for det fontawesome-free-5.15.1-web.zip fil. Så fjern fontawesome-free-5.15.1-web.zip fil med følgende kommando:

$rm -vfontawesome-free-5.15.1-web.zip


Det statisk/ biblioteksstruktur skal se ud som vist på skærmbilledet herunder.

$ls -lh


Naviger tilbage til projektmappen ~/www som følger:

$CD..

Afprøvning af hjemmeautomatisering -webappen

For at teste hjemmeautomatiseringswebappen, skal du køre følgende kommando i dit projektmappe:

$FLASK_APP= server.py kolbe kørsel


Webappen skal være tilgængelig på port 5000 på din Raspberry Pi.


Besøg fra Chromium -webbrowseren http: // lokal vært: 5000 . Hjemmeautomatiseringsweb -appen skal indlæses.

Klik på lyspæreikonet, der er angivet på billedet herunder.


AC -pæren skal nu tændes. Ikonfarven skal også skifte til grøn, hvilket indikerer, at lyspæren er tændt.


Så hjemmeautomatiseringswebappen fungerer. Trykke + C at afslutte webserveren.

Oprettelse af Systemd Service til Home Automation Web App

I dette afsnit vil jeg vise dig, hvordan du opretter en systemd servicefil til hjemmeautomatisering web -appen, så den automatisk starter ved opstart.

Opret først raspi-home-automation.service fil i dit projektmappe som følger:

$nanoraspi-home-automation.service

Skriv følgende linjer i filen raspi-home-automation.service.

[Enhed]
Beskrivelse= Raspberry Pi Home Automation Web Service
Efter= netværk. mål
[Service]
WorkingDirectory=/hjem/pi/www
Miljø=FLASK_APP= server.py
Miljø=FLASK_ENV= produktion
ExecStart=/usr/er/kolbe løb--vært= 0.0.0.0
Standardoutput= arve
Standard fejl= arve
Genstart= altid
Bruger= pi
[Installere]
WantedBy= multi-user.target

Når du er færdig, skal du trykke på + X efterfulgt af OG og for at gemme raspi-home-automation.service fil.


Kopier raspi-home-automation.service fil til /etc/systemd/system/ bibliotek med følgende kommando:

$sudo cp -vraspi-home-automation.service/etc/system/system/


Genindlæs systemd -dæmonerne, så ændringerne træder i kraft som følger:

$sudosystemctl daemon-reload


Tilføj raspi-hjemmeautomatisering service til systemstart af Raspberry Pi OS med følgende kommando:

$sudosystemctlaktivereraspi-home-automation.service


Genstart Raspberry Pi med følgende kommando:

$sudogenstarte


Når Raspberry Pi støvler, vil raspi-hjemmeautomatisering service skal være aktiv/kørende, som du kan se på skærmbilledet herunder.

$sudosystemctl status raspi-home-automation.service

Adgang til hjemmeautomatisering -webappen fra andre enheder

For at få adgang til hjemmeautomatiseringswebappen fra andre enheder i dit hjemmenetværk skal du kende IP -adressen på din Raspberry Pi -enhed.

Du kan finde IP -adressen på din Raspberry Pi 4 -enhed fra webadministrationsgrænsefladen på din hjemmrouter. I mit tilfælde er IP -adressen 192.168.0.103. Dette vil være anderledes for dig. Så sørg for at udskifte min IP med din fra nu af.


Hvis du har adgang til Raspberry Pi -konsollen, kan du også køre følgende kommando for at finde IP -adressen.

$værtsnavn -JEG


Når du kender IP -adressen på din Raspberry Pi -enhed, kan du få adgang til den fra enhver enhed i dit hjemmenetværk.

Som du kan se på skærmbilledet herunder, har jeg haft adgang til hjemmeautomatisering web -appen fra min Android -smartphone.


Sørg for at sætte lyspæren i stikkontakten i væggen.


Pæren skal som standard slukkes.


Hvis du trykker på lyspæreikonet fra webapplikationen til hjemmeautomatisering, skal pærens ikonfarve skifte til grønt, hvilket angiver, at pæren er tændt.


Som du kan se på billedet herunder, er pæren tændt.

Konklusion

Denne artikel viste dig, hvordan du bruger et 5V relæ til at styre en højspændings AC elektrisk enhed fra Raspberry Pi ved hjælp af programmeringssproget Python. Artiklen viste dig også, hvordan du skriver en API -baseret Python -kolbe -webapp til styring af relæet fra webbrowseren. Denne artikel skal hjælpe dig med at komme i gang med hjemmeautomatisering ved hjælp af Raspberry Pi.