Ställ in Raspberry Pi Home Automation

Set Up Raspberry Pi Home Automation



En av de viktigaste sakerna för hemautomation är att styra högspännings AC med hjälp av en lågspännings DC. För att styra högspännings AC från Raspberry Pi behöver du en 5V reläbrytare. Du kan styra reläomkopplaren med GPIO -stiften på Raspberry Pi. Reläomkopplaren kan sedan styra AC -hushållsapparaterna via Raspberry Pi.

Den här artikeln visar dig hur du använder Raspberry Pi och 5V -reläbrytaren för att slå på och stänga av en glödlampa från din mobila enhet. Artikeln innehåller en webbapp som du kan komma åt från vilken enhet som helst i ditt nätverk och styra alla AC -hushållsapparater i ditt hem trådlöst. Så låt oss komma igång med vårt enkla Raspberry Pi -hemautomationsexperiment.







Saker du behöver

Om du vill använda din Raspberry Pi utan huvud (via SSH eller VNC) behöver du följande saker:



1) Raspberry Pi 3 eller Raspberry Pi 4.
2) 5V reläbrytare.
3) Elektriska ledningar.
4) 3 hona-till-hona-anslutningskablar.
5) AC -glödlampa.
6) AC glödlampshållare.
7) AC -kontakt.
8) Wirecutter och strippverktyg.
9) CR-V 3 skruvmejsel.
10) Micro-USB (Raspberry Pi 3) eller USB Type-C (Raspberry Pi 4) nätadapter.
11) 16 GB eller 32 GB microSD -kort med Raspberry Pi OS blinkade.
12) Nätverksanslutning på Raspberry Pi.
13) Bärbar dator eller stationär dator för VNC fjärrskrivbordsåtkomst eller SSH -åtkomst till Raspberry Pi.



Om du inte vill komma åt Raspberry Pi på distans via SSH eller VNC behöver du också följande:





14) En bildskärm.
15) HDMI- eller mikro-HDMI-kabel.
16) Ett tangentbord.
17) En mus.

Om du behöver hjälp med att blinka Raspberry Pi OS -bilden till microSD -kortet, läs artikeln Så här installerar och använder du Raspberry Pi Imager.



Om du är en Raspberry Pi -nybörjare och behöver hjälp med att installera Raspberry Pi OS på Raspberry Pi, kolla in artikeln Så här installerar du Raspberry Pi OS på Raspberry Pi 4.

Om du behöver hjälp med den huvudlösa installationen av Raspberry Pi, kolla in artikeln Hur man installerar och konfigurerar Raspberry Pi OS på Raspberry Pi 4 utan extern bildskärm.

Bilder av alla nödvändiga verktyg ges nedan.

Startar Raspberry Pi

Anslut sedan strömkabeln till Raspberry Pi och slå på Raspberry Pi.

När Raspberry Pi är påslagen kan du ansluta till Raspberry Pi via VNC eller SSH. Eller så kan du ansluta ett tangentbord, en mus och en bildskärm till Raspberry Pi för att direkt komma åt den.

5V Relä Pinouts

Ett relä är i grunden en omkopplare. Men, till skillnad från en traditionell omkopplare, kan ett relä styras av en liten mängd likspänning.

5V -reläet är mycket lätt att använda. Den har två sidor: ena sidan används för att styra reläet via lågspännings DC (från Raspberry Pi), och den andra sidan används för att styra högspännings AC (dvs. glödlampan), beroende på reläets tillstånd .


På ena sidan har reläet två lysdioder (en röd och en grön) och tre stift ( IN, GND, och VCC ). Dessa tre stift används för att styra reläet från Raspberry Pi.

De två första stiften på andra sidan används för att styra hushållsapparaten.

Ansluter 5V -reläet till Raspberry Pi

För att ansluta 5V-reläet till Raspberry Pi behöver du tre kvinnliga till kvinnliga anslutningskablar.

Anslut ena sidan av anslutningskablarna till I (gul tråd), GND (svart tråd) och VCC (röd tråd) stift i 5V -reläet, som visas nedan.


Den andra sidan av trådarna går in i GPIO -huvudstiften på Raspberry Pi, som visas på bilden nedan.

Den röda tråden ska gå in i PIN 2 (VCC) av Raspberry Pi.
Den svarta tråden ska gå in i PIN 6 (GND) av Raspberry Pi.
Den gula tråden ska gå in i PIN 7 (GPIO 4) av Raspberry Pi.


När 5V -reläet är anslutet till Raspberry Pi ska det se ut som på bilden nedan.

Tillåter GPIO -åtkomst till inloggningsanvändare

För att ge åtkomst till GPIO -stiften är standardinloggningsanvändaren för Raspberry Pi OS pi bör läggas till gpio grupp.

Du kan lägga till pi användare till gpio grupp med följande kommando:

$sudoanvändarmod-aGgpio $(vem är jag)


För att ändringarna ska träda i kraft startar du om Raspberry Pi med följande kommando:

$sudostarta om

Skapa en projektkatalog

Det är också en bra idé att hålla alla projektfiler organiserade.

För att hålla projektfilerna organiserade, skapa projektkatalogen ~/www och de nödvändiga underkatalogerna med följande kommando:

$mkdir -pv~/www/{mallar, statiska}


När projektkatalogen har skapats, navigerar du till projektkatalogen enligt följande:

$CD~/www

Byta 5V -relä från Raspberry Pi

Nu när du har anslutit 5V -reläet till Raspberry Pi, kommer du att byta reläet från Raspberry Pi med hjälp av programmeringsspråket Python.

OBS: Växling är en term som används inom elektronik. Koppling innebär att man styr (dvs. slår på/av) en viss elektronisk enhet.

För att experimentera med att byta relä med Python -programmeringsspråket, skapa det nya Python -scriptet test.py i projektkatalogen enligt följande:

$nanotest.py


Skriv följande koderader i Python -skriptet test.py.

frångpiozeroimporteraLED
från tid importerasömn

medan Sann:
relä=LED(4)
skriva ut('Lita på')
sömn(5)

relä.stänga()
skriva ut('Relä: Av')
sömn(5)

När du är klar trycker du på + X följd av OCH och för att spara test.py Python -skript.


Här importerar rad 1 LED från gpiozero bibliotek och rad 2 importerar sömn funktion från tid bibliotek.


Linjer 6-14 finns inom en oändlig slinga.


Rad 6 initierar en lysdiod i GPIO 4 av Raspberry Pi, som är ansluten till I stift på reläet.


Linje 8 slår på reläet med på() metod.

Rad 9 skriver ut ett meddelande i konsolen med skriva ut() fungera.

Rad 10 fördröjer utförandet av nästa kodrad i fem sekunder med hjälp av sömn() fungera.


Linje 12 stänger av reläet med stänga() metod.

På samma sätt skriver rad 9 ut ett meddelande på konsolen med skriva ut() funktion och rad 10 fördröjer utförandet av nästa kodrad i 5 sekunder med hjälp av sömn() fungera.


Kör sedan test.py Python -skript enligt följande:

$python3 test.py


De test.py Python -skript bör börja byta 5V -relä. Du bör höra ett klickljud var femte sekund. När reläet växlar tillstånd (från på till av eller från av till på), ger det ett klickljud. Det betyder att reläet fungerar korrekt.


När reläet är i avstängt läge (normal drift-AC-belastning är frånkopplad) är det bara netto Lysdioden ska lysa, som du kan se på bilden nedan.


När reläet är i på-läge (AC-belastning är ansluten), både grön LED och de netto Lysdioden ska lysa, som du kan se på bilden nedan.


När testet är klart trycker du på + C att avsluta test.py manus.

Ansluter AC -lampan till 5V -reläet

5V -reläet ska nu fungera korrekt. Nu ansluter du din AC -hushållsapparat (en glödlampa, i detta fall) till 5V -reläet.

Klipp först av den svarta elektriska ledningen som är ansluten till glödlampan med en trådledare.


När den svarta elektriska ledningen som är ansluten till glödlampan har klippts med en trådledare ska den se ut som på bilden nedan.


Ta sedan bort det yttre lagret för att exponera cirka ½ tum av den elektriska ledningen, som visas på bilden nedan.


Vik sedan de exponerade trådarna, som visas på bilden nedan.


Lossa de markerade skruvarna på reläet med en CV-3-skruvmejsel.


Sätt i de exponerade trådarna som du tog bort och vikt tidigare i de två skruvplintarna och dra åt skruvarna med en CV-3-skruvmejsel.

Testar reläväxling efter anslutning av AC -belastning

När AC -belastningen är ansluten till 5V -reläet, anslut lampan till vägguttaget.


Springa det test.py Python -skript från projektkatalogen enligt följande:

$python3 test.py


De test.py Python-skript bör börja byta 5V-reläet, vilket i sin tur kommer att växla högspännings AC-lampan med fem sekunders intervall. AC -lampan ska vara på i fem sekunder, sedan stänga av i fem sekunder och så vidare.

Glödlampan är släckt på bilden nedan.


Glödlampan är tänd i bilden nedan.


Som du kan se kan vi byta relä och styra högspännings AC -lampan med hjälp av programmeringsspråket Python. Så tryck + C att avsluta test.py manus.

Låt oss nu gå vidare till nästa avsnitt.

Skriver webbapp för hemautomation

I det här avsnittet visar jag dig hur du skriver en API-baserad webbapp med programmeringsspråket Python. Du kan använda webbappen för att styra reläet och AC -hushållsapparaten eller elektriska enheter som är anslutna till reläet från en webbläsare.

NOTERA: Alla koder som visas i det här avsnittet är tillgängliga i mitt GitHub -arkiv shovon8 / hallon-pi-hemautomation . Om du vill kan du klona mitt GitHub -arkiv och hoppa över alla koder.

Skapa server.py Python -skriptet i projektkatalogen enligt följande:

$nanoserver.py


Skriv följande koderader i server.py Python -skript.

frånflaskaimporteraFlaska,jsonify,url_for,render_template
frångpiozeroimporteraLED
frånuuidimporterauuid4
rum= {}
rum['Rum 1'] = [{
'id': uuid4(),
'namn':'Light 1',
'ikon':'fa fa-glödlampa',
'status':Falsk,
'relayPin':4,
'relayInstance':Falsk
}, {
'id': uuid4(),
'namn':'Fläkt 1',
'ikon':'fa fa-fan',
'status':Falsk,
'relayPin':6,
'relayInstance':Falsk
}]
rum['Badrum 1'] = [{
'id': uuid4(),
'namn':'Light 1',
'ikon':'fa fa-glödlampa',
'status':Falsk,
'relayPin':5,
'relayInstance':Falsk
}]
app=Flaska(__namn__)
app.config['SEND_FILE_MAX_AGE_DEFAULT'] = 0
@app.rutt('/')
defHem():
lämna tillbakarender_template('./index.html',rum=rum)
deftoggle_appliance_status(id):
förrumirum:
förapparatirum[rum]:
om sid(apparat['id']) == id:
omapparat['relayInstance']:
apparat['relayInstance'].stänga()
apparat['relayInstance'] = Falsk
annan:
apparat['relayInstance'] =LED(apparat['relayPin'])
apparat['relayInstance'].()
apparat['status'] = inteapparat['status']
lämna tillbaka Sann
lämna tillbaka Falsk
@app.rutt('/apparat/växla/')
defdevice_toggle(id):
lämna tillbakajsonify({'status': toggle_appliance_status(id)})

När du är klar trycker du på + X följd av OCH och för att spara server.py Python -skript.


Här importerar rad 1-3 alla nödvändiga komponenter från sina respektive bibliotek.


Rad 5 skapar en tom rum ordbok. I denna ordbok kommer vi att lagra alla AC -apparatinformation som vi vill styra från webbappen.


De rum detaljer lagras på rad 7-29.


Låt oss diskutera datastrukturen för ett av rummen.

Här kommer rumsnamnet att vara Rum 1. Så, Rum 1 är nyckeln till rum ordbok.


De Rum 1 nyckel innehåller en array som värdet. Antalet arrayelement är lika med antalet AC -hushållsapparater du har i det rummet som du också vill styra från webbappen. I det här fallet har vi två AC -hushållsapparater som vi vill styra: Ljus 1 och Fläkt 1 .


Varje definition av hushållsapparater har en id . De id är ett slumpmässigt genererat UUID. Detta används för att identifiera vilket rum vi vill styra med API: et.

En hushållsapparat har också allt av följande:

  • namn (Light 1 I detta fall)
  • ikon (Ikonklass Font Awesome, eftersom vi kommer att använda Font Awesome för ikonerna)
  • status (sant om och Falsk om av )
  • reläPin (GPIO -PIN -numret som används för att styra reläet som är anslutet till AC -hushållsapparaten)
  • reläInstans (den initialiserade LED föremål för gpiozero bibliotek som ansvarar för att styra respektive GPIO -pin - reläPin )


Rad 31 initierar en kolv Python -webbserver.

Rad 32 konfigurerar kolvens webbserver.


Linjer 34-36 skicka index.html fil från mallar/ katalog när du besöker webbapp för hemautomation.

Kolv använder Jinja2 mallspråk för att göra index.html fil. Så jag har klarat rum ordlistan till index.html fil. Jinja2 kommer att göra hemsidan med rum data.


Funktionen toggle_appliance_status () i raderna 39-52 används för att slå på hushållsapparaten om den är avstängd och stänga av hushållsapparaten om den är på med apparatens id .

Det återkommer Sann om växling lyckas. Om det finns ett fel kommer det att återvända Falsk .


Linjer 55-57 används för att växla mellan hushållsapparater med hjälp av /apparat/växla/ API -slutpunkt för webbservern. Här, id är hushållsapparatens ID.


Skapa index.html filen i mallar/ katalog över ditt projekt enligt följande:

$nanomallar/index.html

Skriv följande koderader i index.html manus.


< html lång='på'>
< huvud >
< meta teckenuppsättning='UTF-8'>
< meta namn='viewport' innehåll='width = device-width, initial-scale = 1.0'>
< länk rel='formatmall' href='{{url_for (' static ', filnamn =' fontawesome/css/all.min.css ')}}'>
< länk rel='formatmall' href='{{url_for (' static ', filnamn =' style.css ')}}'>
< titel >Hemmautomation med Raspberry Pi</ titel >
</ huvud >
< kropp >
< div id='innehåll'>
< h1 >Raspberry Pi Home Automation</ h1 >

{ % för rum i rum %}
< div klass='rum'>
< h2 >{{rum}}</ h2 >
< div klass='apparater'>
{ % för apparater i rum [rum] %}
< div klass='apparat' id='{{device [' id ']}}'> ='aktiva'>
< i klass='{{device [' icon ']}}'></ i >
< spänna >{{device ['name']}}</ spänna >
</ div >
{ % endfor %}
</ div >
</ div >
{ % endfor %}

</ div >

< manus src='{{url_for (' static ', filnamn =' app.js ')}}' typ='text/javascript'></ manus >
</ kropp >
</ html >

När du är klar trycker du på + X följd av OCH och för att spara index.html fil.


Skapa en style.css filen i statisk/ katalog över ditt projekt enligt följande:

$nanostatisk/style.css


Skriv följande koderader i style.css fil.

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

* {
marginal: 0;
stoppning: 0;
typsnittsfamilj: 'BenchNine', sans serif;
}

#innehåll >h1{
bakgrund:linjär gradient(tillhöger, rgb(112, 24, 163), rgb(86, 127, 240));
Färg: #fff;
textjustera: Centrum;
stoppning: .5em 0;
}

div.rum {
marginal: .5em;
gräns: 2px fast rgb(112, 24, 163);
gränsradie: 5px;
}

div.rumh2{
/* bakgrund: rgb (9, 76, 121); */
bakgrund:linjär gradient(tillhöger, rgb(112, 24, 163), rgb(86, 127, 240));
stoppning: 0 0 0 .5em;
Färg: #fff;
}

div.apparater {
marginal: .5em .5em 0 0;
visa:böja;
flex-wrap:slå in;
}

div.apparat {
gräns: 2px fast rgb(112, 24, 163);
gränsradie: 5px;
bredd: 110px;
höjd: 120px;
textjustera: Centrum;
marginal: 0 0 .5em .5em;
visa:böja;
flexriktning:kolumn;
}

div.apparati.fa {
textstorlek: 4em;
flex-växa: 1;
vadderingstopp: 0,3 em;
Färg: rgb(204, femtio, femtio);
}

div. apparat[data-aktiv='aktiva']i.fa {
Färg: rgb(32, 177, 51);
}

div.apparatspänna{
visa: blockera;
font-vikt: djärv;
bakgrund: rgb(112, 24, 163);
Färg: #fff;
}

När du är klar trycker du på + X följd av OCH och för att spara style.css fil.


Skapa en app.js filen i statisk/ katalog över ditt projekt enligt följande:

$nanostatisk/app.js


Skriv följande koderader i app.js fil.

fönster.addEventListener('ladda',huvud);

fungerahuvud() {
fungeratoggleApplianceState(Och) {
varid=Och.väg[1].id;

varhttp= nyXMLHttpRequest();

http.onreadystatechange = fungera() {
om(detta.readyState === 4 && detta.status === 200) {
om(JSON.analysera(detta.responseText).status === Sann) {
om(Och.väg[1].hasAttribute('data-aktiv')) {
Och.väg[1].removeAttribute('data-aktiv')
} annan {
Och.väg[1].setAttribute('data-aktiv', 'aktiva')
}
}
}
}

http.öppen('SKAFFA SIG',''/apparat/växla/${id}'', Sann);
http.skicka();
}


varapparater=dokumentera.getElementsByClassName('apparat');
för(i=0;i<apparater.längd;i++) {
apparater[i].addEventListener('klick',toggleApplianceState);
}
}

När du är klar trycker du på + X följd av OCH och för att spara app.js fil.


Här kör rad 1 main () funktion när webbsidan laddas klart.

I index.html fil, ingår varje hushållsapparat i en apparat klass. Linjer 26-29 används för att välja varje hushållsapparat från webbsidan och bifoga klick händelse för apparaten. När någon klickar på en hushållsapparat från webbsidan visas toggleApplianceState () funktionen körs.


På rad 4-23, toggleApplianceState () funktionen används för att begära /apparat/växla/ slutpunkten för webbservern för att ändra tillståndet för den klickade hushållsapparaten. Begäran görs i bakgrunden via AJAX. När svaret har mottagits uppdateras webbsidan i enlighet därmed.


Navigera till statisk/ katalog i din projektkatalog enligt följande:

$CDstatisk/


Ladda ner Font Awesome med följande kommando:

$wgethttps://use.fontawesome.com/släpper/v5.15.1/fontawesome-free-5.15.1-web.zip


När Font Awesome har laddats ner bör du hitta den nya zip -filen fontawesome-free-5.15.1-web.zip i statisk/ katalog.

$ls -lh


Packa upp fontawesome-free-5.15.1-web.zip fil med följande kommando:

$packa uppfontawesome-free-5.15.1-web.zip


De fontawesome-free-5.15.1-web.zip filen ska nu packas upp.


Den nya katalogen fontawesome-free-5.15.1-web/ ska skapas i den statiska/ katalogen, som du kan se på skärmdumpen nedan.

$ls -lh

Byt namn på katalogen fontawesome-free-5.15.1-web/ till typiskt/ med följande kommando:

$mv -vfontawesome-free-5.15.1-web fontawesome


Nu behöver du inte längre fontawesome-free-5.15.1-web.zip fil. Så ta bort fontawesome-free-5.15.1-web.zip fil med följande kommando:

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


De statisk/ katalogstrukturen ska se ut som visas på skärmdumpen nedan.

$ls -lh


Navigera tillbaka till projektkatalogen ~/www som följer:

$CD..

Testar webbapp för hemautomation

Kör följande kommando i projektkatalogen för att testa webbapp för hemautomation:

$FLASK_APP= server.py kolvkörning


Webbappen ska vara tillgänglig på port 5000 på din Raspberry Pi.


Besök från Chromium -webbläsaren http: // lokal värd: 5000 . Hemmautomationens webbapp bör laddas.

Klicka på glödlampans ikon, som visas på bilden nedan.


AC -lampan ska nu vara påslagen. Ikonfärgen bör också ändras till grön, vilket indikerar att lampan är på.


Så, webbautomatiseringswebbappen fungerar. Tryck + C att avsluta webbservern.

Skapar Systemd -tjänst för webbapp för hemautomation

I det här avsnittet kommer jag att visa dig hur du skapar en systemd servicefil för hemautomation webbappen så att den automatiskt startar vid start.

Skapa först raspi-home-automation.service fil i din projektkatalog enligt följande:

$nanoraspi-home-automation.service

Skriv följande rader i filen raspi-home-automation.service.

[Enhet]
Beskrivning= Raspberry Pi Web Automation Web Service
Efter= network.target
[Service]
WorkingDirectory=/Hem/pi/www
Miljö=FLASK_APP= server.py
Miljö=FLASK_ENV= produktion
ExecStart=/usr/am/kolvkörning--värd= 0.0.0.0
Standardutgång= ärva
Standard fel= ärva
Omstart= alltid
Användare= pi
[Installera]
WantedBy= multi-user.target

När du är klar trycker du på + X följd av OCH och för att spara raspi-home-automation.service fil.


Kopiera raspi-home-automation.service filen till /etc/systemd/system/ katalog med följande kommando:

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


Ladda om systemd -demonerna för att ändringarna ska träda i kraft enligt följande:

$sudosystemctl daemon-reload


Lägg till raspi-hemautomation service till systemstart av Raspberry Pi OS med följande kommando:

$sudosystemctlGör det möjligtraspi-home-automation.service


Starta om Raspberry Pi med följande kommando:

$sudostarta om


När Raspberry Pi väl startat, raspi-hemautomation tjänsten ska vara aktiv/igång, som du kan se på skärmdumpen nedan.

$sudosystemctl status raspi-home-automation.service

Få tillgång till webbapp för hemautomation från andra enheter

För att komma åt webbapp för hemautomatisering från andra enheter i ditt hemnätverk måste du veta IP -adressen för din Raspberry Pi -enhet.

Du hittar IP -adressen för din Raspberry Pi 4 -enhet från webbhanteringsgränssnittet i din hemrouter. I mitt fall är IP -adressen 192.168.0.103. Detta kommer att vara annorlunda för dig. Så se till att byta ut min IP -adress med din från och med nu.


Om du har tillgång till Raspberry Pi -konsolen kan du också köra följande kommando för att hitta IP -adressen.

$värdnamn -Jag


När du vet IP -adressen för din Raspberry Pi -enhet kan du komma åt den från vilken enhet som helst i ditt hemnätverk.

Som du kan se på skärmdumpen nedan har jag kommit åt hemautomatiseringswebbappen från min Android -smartphone.


Var noga med att ansluta lampan till vägguttaget.


Glödlampan ska vara avstängd som standard.


Om du trycker på glödlampans ikon från hemautomationens webbapp bör lampans ikonfärg ändras till grönt, vilket indikerar att lampan är på.


Som du kan se på bilden nedan är lampan tänd.

Slutsats

Den här artikeln visade dig hur du använder ett 5V-relä för att styra en högspännings AC elektrisk enhet från Raspberry Pi med hjälp av programmeringsspråket Python. Artikeln visade dig också hur du skriver en API -baserad Python -kolvwebbapp för att styra reläet från webbläsaren. Den här artikeln ska hjälpa dig att komma igång med hemautomation med Raspberry Pi.