Bringebær Pi

Sett opp Raspberry Pi Home Automation

Sett opp Raspberry Pi Home Automation
En av de viktigste tingene for hjemmeautomatisering er å kontrollere høyspennings-vekselstrøm ved hjelp av en lavspent likestrøm. For å kontrollere høyspenningsstrømmen fra Raspberry Pi, trenger du en 5V relébryter. Du kan styre relébryteren ved hjelp av GPIO-pinnene til Raspberry Pi. Relébryteren kan da styre AC-husholdningsapparater gjennom Raspberry Pi.

Denne artikkelen viser deg hvordan du bruker Raspberry Pi og 5V-relébryteren for å slå en lyspære på og av fra mobilenheten din. Artikkelen inneholder en web-app som du kan få tilgang til fra hvilken som helst enhet i nettverket ditt og kontrollere trådløse AC-apparater i hjemmet ditt. Så la oss komme i gang med vårt enkle Raspberry Pi hjemmeautomatiseringseksperiment.

Ting du trenger

Hvis du vil bruke Raspberry Pi hodeløs (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 kvinnelige til kvinnelige tilkoblingsledninger.
5) AC lyspære.
6) AC lyspæreholder.
7) AC-kontakt.
8) Wirecutter og stripper verktø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) Bærbar PC eller stasjonær datamaskin for VNC ekstern 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 artikkelen Slik installerer og bruker du Raspberry Pi Imager.

Hvis du er en Raspberry Pi-nybegynner og trenger hjelp med å installere Raspberry Pi OS på Raspberry Pi, kan du sjekke artikkelen Slik installerer du Raspberry Pi OS på Raspberry Pi 4.

Hvis du trenger hjelp med hodeløst oppsett av Raspberry Pi, kan du sjekke artikkelen Slik installerer og konfigurerer du Raspberry Pi OS på Raspberry Pi 4 uten ekstern skjerm.

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

Slår på Raspberry Pi

Deretter kobler du strømkabelen til Raspberry Pi og slår 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 et tastatur, en mus og en skjerm til Raspberry Pi for å få direkte tilgang til den.

5V reléuttak

Et stafett er i utgangspunktet en bryter. Men i motsetning til en tradisjonell bryter, kan et relé styres av en liten mengde likestrøm.

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


På den ene siden har reléet to lysdioder (en rød og en grønn) og tre pinner (IN, 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-apparatet.

Koble 5V-reléet til Raspberry Pi

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

Koble 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-topptekstene 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, bør det se ut som vist på bildet nedenfor.

Tillater GPIO tilgang til påloggingsbruker

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

Du kan legge til pi brukeren til gpio gruppe med følgende kommando:

$ sudo usermod -aG gpio $ (whoami)


For at endringene skal tre i kraft, må du starte Raspberry Pi på nytt med følgende kommando:

$ sudo omstart

Opprette en prosjektkatalog

Det er også en god ide å holde alle prosjektfilene organisert.

Opprett prosjektkatalogen for å holde prosjektfilene organisert ~ / 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

Bytte 5V-relé fra Raspberry Pi

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

MERK: Veksling er et begrep som brukes i elektronikk. Bytte betyr å kontrollere (i.e. slå på / av) en bestemt elektronisk enhet.

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

$ nano test.py


Skriv inn følgende kodelinjer i testen.py Python-skript.

fra gpiozero import LED
fra tid importerer søvn
mens det er sant:
relé = LED (4)
skriv ut ("Relé: På")
sove (5)
stafett.Lukk()
utskrift ("Relé: Av")
sove (5)

Når du er ferdig, trykker du på + X etterfulgt av Y og for å redde test.py Python-skript.


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


Linje 6-14 er innenfor en uendelig løkke.


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


Linje 8 slår på stafetten ved hjelp av på() metode.

Linje 9 skriver ut en melding i konsollen ved hjelp av skrive ut() funksjon.

Linje 10 forsinker kjøringen av neste kodelinje i fem sekunder ved hjelp av søvn() funksjon.


Linje 12 slår av stafetten ved hjelp av Lukk() metode.

På samme måte skriver linje 9 ut en melding på konsollen ved hjelp av skrive ut() funksjon og linje 10 forsinker kjøringen av neste kodelinje i 5 sekunder ved hjelp av søvn() funksjon.


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

$ python3 test.py


De test.py Python-skript skal begynne å bytte 5V-relé. Du bør høre en klikkelyd hvert femte sekund. Når reléet bytter tilstand (fra på til av eller fra av til på), gir det en klikkelyd. Dette betyr at stafetten fungerer som den skal.


Når reléet er i frakoblet tilstand (normal drift - AC-belastning er frakoblet), er det bare rød LED skal lyse, som du kan se på bildet nedenfor.


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


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

Koble AC lyspære til 5V relé

5V-reléet skal nå fungere skikkelig. Nå kobler du AC-apparatet (en lyspære, i dette tilfellet) til 5V-reléet.

Kutt først den svarte elektriske ledningen som er koblet til lyspæren med en wirecutter.


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


Fjern deretter det utvendige laget for å eksponere omtrent ½ tomme av den elektriske ledningen, som vist på bildet nedenfor.


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


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


Sett inn de synlige ledningene du fjernet og brettet tidligere i de to skrueterminalene, og stram til skruene med en CV-3 skrutrekker.

Testing av relébytte etter tilkobling av vekselstrøm

Når vekselstrømmen er koblet til 5V-reléet, kobler du stikkontakten til stikkontakten.


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

$ python3 test.py


De test.py Python-skriptet skal begynne å slå på 5V-reléet, som igjen vil bytte høyspennings AC-lyspære med fem sekunders mellomrom. AC-lyspæren skal være på i fem sekunder, og deretter være 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éet og kontrollere høyspennings AC lyspære ved hjelp av Python programmeringsspråk. Så trykk + C å avslutte test.py manus.

La oss nå gå videre til neste avsnitt.

Skriver Home Automation Web App

I denne delen vil jeg vise deg hvordan du skriver en API-basert nettapp ved hjelp av Python-programmeringsspråket. Du kan bruke nettappen til å kontrollere reléet og AC-hjemmeapparatet (e) eller elektriske enheter som er koblet til reléet fra en nettleser.

MERK: Alle kodene som vises i denne seksjonen er tilgjengelige i GitHub-depotet mitt shovon8 / bringebær-pi-hjemme-automatisering. Hvis du vil, kan du klone GitHub-depotet mitt og hoppe over alle kodene.

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

$ nano-server.py


Skriv inn følgende kodelinjer i server.py Python-skript.

fra kolbeimport Kolbe, jsonify, url_for, render_template
fra gpiozero import LED
fra uuid importer uuid4
rom =
rom ['Room 1'] = [
'id': uuid4 (),
'name': 'Light 1',
'icon': 'fa fa-lightbulb',
'status': Falsk,
'relayPin': 4,
'relayInstance': False
,
'id': uuid4 (),
'name': 'Fan 1',
'icon': 'fa fa-fan',
'status': Falsk,
'relayPin': 6,
'relayInstance': False
]
rom ['Baderom 1'] = [
'id': uuid4 (),
'name': 'Light 1',
'icon': 'fa fa-lightbulb',
'status': Falsk,
'relayPin': 5,
'relayInstance': False
]
app = kolbe (__ navn__)
app.config ['SEND_FILE_MAX_AGE_DEFAULT'] = 0
@app.rute('/')
def hjem ():
returner render_template ('./ indeks.html ', rom = rom)
def toggle_appliance_status (id):
for rom i rom:
for apparat i rom [rom]:
hvis str (apparat ['id']) == id:
hvis apparat ['relayInstance']:
apparat ['relayInstance'].Lukk()
appliance ['relayInstance'] = Usann
ellers:
apparat ['relayInstance'] = LED (apparat ['relayPin'])
apparat ['relayInstance'].på()
apparat ['status'] = ikke apparat ['status']
returner True
returner Falsk
@app.rute ('/ apparat / veksle /')
def appliance_toggle (id):
returner jsonify ('status': toggle_appliance_status (id))

Når du er ferdig, trykker du på + X etterfulgt av Y og for å redde server.py Python-skript.


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


Linje 5 skaper en tom rom ordbok. I denne ordboken lagrer vi alle AC-apparatdetaljene vi vil kontrollere fra webappen.


De rom detaljer lagres i linjene 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økkel holder en matrise som verdien. Antall matriseelementer er lik antall AC-husholdningsapparater du har i det rommet du også vil kontrollere fra webappen. I dette tilfellet har vi to AC-husholdningsapparater som vi vil kontrollere: Lys 1 og Vifte 1.


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

Et husholdningsapparat har også alt av følgende:

  • navn (lys 1 i dette tilfellet)
  • ikon (Font Awesome-ikonklasse, ettersom vi bruker Font Awesome til ikonene)
  • status (True hvis og Falsk hvis av)
  • relayPin (GPIO-pin-nummeret som brukes til å kontrollere reléet som er koblet til AC-apparatet)
  • relayInstance (initialisert LED gjenstand for gpiozero biblioteket som er ansvarlig for å kontrollere den respektive GPIO-pinnen - relayPin)


Linje 31 initialiserer en kolbe Python-webserver.

Linje 32 konfigurerer kolbe-webserveren.


Linjene 34-36 sender indeks.html fil fra maler / katalogen når du besøker hjemmesiden for automatisering av hjemmet.

Kolbe bruker Jinja2 malingsspråk for å gjengi indeks.html fil. Så jeg har bestått rom ordbok til indeks.html fil. Jinja2 vil gjengi hjemmesiden ved hjelp av rom data.


Funksjonen toggle_appliance_status () i linje 39-52 brukes til å slå på husholdningsapparatet hvis det er av, og slå av husholdningsapparatet hvis det er på ved hjelp av apparatets id.

Det kommer tilbake ekte hvis veksleoperasjonen er vellykket. Hvis det er en feil, kommer den tilbake Falsk.


Linjene 55-57 brukes til å veksle et husholdningsapparat ved hjelp av / apparat / veksle / API-endepunkt for webserveren. Her, id er ID-en til husholdningsapparatet.


Opprett indeks.html filen i maler / katalog over prosjektet ditt som følger:

$ nano maler / indeks.html

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








Hjemmeautomatisering med Raspberry Pi



Raspberry Pi Home Automation


% for rom i rom%

rom



% for apparat i rom [rom]%


appliance ['name']

% endfor%


% endfor%



Når du er ferdig, trykker du på + X etterfulgt av Y og for å redde indeks.html fil.


Lage en stil.css filen i statisk / katalog over prosjektet ditt som følger:

$ nano statisk / stil.css


Skriv inn følgende kodelinjer i stil.css fil.

@import url ('https: // fonter.googleapis.com / css2?familie = BenchNine: [e-postbeskyttet]; 400; 700 & display = bytte ');
*
margin: 0;
polstring: 0;
font-family: 'BenchNine', sans-serif;

#innhold> h1
bakgrunn: lineær gradient (til høyre, rgb (112, 24, 163), rgb (86, 127, 240));
farge: #fff;
tekstjustering: 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;
skjerm: flex;
flex-wrap: wrap;

div.apparat
kantlinje: 2px solid rgb (112, 24, 163);
border-radius: 5px;
bredde: 110px;
høyde: 120px;
tekstjustering: sentrum;
margin: 0 0 .5em .5em;
skjerm: flex;
flex-retning: kolonne;

div.apparatet i.fa
skriftstørrelse: 4em;
flex-grow: 1;
polstring-topp: 0.3em;
farge: rgb (204, 50, 50);

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

div.apparatspenn
skjerm: blokk;
skriftvekt: fet;
bakgrunn: rgb (112, 24, 163);
farge: #fff;

Når du er ferdig, trykker du på + X etterfulgt av Y og for å redde stil.css fil.


Lag en app.js filen i statisk / katalog over prosjektet ditt som følger:

$ nano statisk / app.js


Skriv inn følgende kodelinjer 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.analysere (dette.responseText).status === true)
hvis (e.sti [1].hasAttribute ('data-aktiv'))
e.sti [1].removeAttribute ('data-aktiv')
annet
e.sti [1].setAttribute ('data-aktiv', 'aktiv')




http.åpen ("GET", '/ appliance / toggle / $ id', true);
http.sende();

var apparater = dokument.getElementsByClassName ('apparat');
for (i = 0; i < appliances.length; i++)
apparater [i].addEventListener ('klikk', toggleApplianceState);

Når du er ferdig, trykker du på + X etterfulgt av Y og for å redde app.js fil.


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

I indeks.html fil, er hvert husholdningsapparat vedlagt en apparatet klasse. Linjene 26-29 brukes til å velge hvert husholdningsapparat fra websiden og legge til klikk hendelsen til apparatet. Når noen klikker på et husholdningsapparat fra websiden, blir toggleApplianceState () funksjonen vil kjøre.


I linje 4-23 viser toggleApplianceState () funksjonen brukes til å be om / apparat / veksle / sluttpunktet til webserveren for å endre tilstanden til det klikkede hjemmeapparatet. Forespørselen kommer 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:

$ pakke ut fontawesome-free-5.15.1-nett.glidelås


De fontawesome-free-5.15.1-nett.glidelås filen skal nå pakkes ut.


Den nye katalogen fontawesome-free-5.15.1-nett / skal opprettes i statisk / katalog, som du kan se på skjermbildet nedenfor.

$ ls -lh

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

$ mv -v fontawesome-free-5.15.1-web fontawesome


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 / katalogstrukturen skal se ut som vist på skjermbildet nedenfor.

$ ls -lh


Naviger tilbake til prosjektkatalogen ~ / www som følger:

$ cd ..

Testing av hjemmeautomatiseringsapp

For å teste hjemmesiden for automatisering, kjør følgende kommando i prosjektkatalogen:

$ FLASK_APP = server.py kolbe kjøre


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


Gå til http: // localhost: 5000 fra Chromium-nettleseren. Hjemmeautomatiseringsnettappen skal lastes inn.

Klikk på lyspæreikonet, vist i bildet nedenfor.


AC-lyspæren skal nå være slått på. Ikonefargen bør også endres til grønn, noe som indikerer at lyspæren er på.


Så, hjemme-automatiseringsnettappen fungerer. trykk + C for å avslutte webserveren.

Opprette Systemd Service for Home Automation Web App

I denne delen vil jeg vise deg hvordan du oppretter en systemd-servicefil for hjemmeautomatiseringswebappen slik at den automatisk starter ved oppstart.

Først oppretter du raspi-hjemme-automatisering.service filen i prosjektkatalogen din som følger:

$ nano raspi-hjemme-automatisering.service

Skriv inn følgende linjer i raspi-hjemme-automatiseringen.tjenestefilen.

[Enhet]
Beskrivelse = Raspberry Pi Home Automation Web Service
Etter = nettverk.mål
[Service]
WorkingDirectory = / hjem / pi / www
Miljø = FLASK_APP = server.py
Miljø = FLASK_ENV = produksjon
ExecStart = / usr / bin / flask run --host = 0.0.0.0
Standardutgang = arve
StandardError = arve
Start på nytt = alltid
Bruker = pi
[Installere]
WantedBy = flerbruker.mål

Når du er ferdig, trykker du på + X etterfulgt av Y og for å redde raspi-hjemme-automatisering.service fil.


Kopier raspi-hjemme-automatisering.service filen til / etc / systemd / system / katalog med følgende kommando:

$ sudo cp -v raspi-hjemme-automatisering.service / etc / systemd / system /


Last systemdemonene på nytt for at endringene skal tre i kraft som følger:

$ sudo systemctl daemon-reload


Legg til raspi-hjemme-automatisering tjenesten til systemoppstart av Raspberry Pi OS med følgende kommando:

$ sudo systemctl aktiverer raspi-hjemme-automatisering.service


Start Raspberry Pi på nytt med følgende kommando:

$ sudo omstart


Når Raspberry Pi har startet, er raspi-hjemme-automatisering tjenesten skal være aktiv / kjører, som du kan se på skjermbildet nedenfor.

$ sudo systemctl status raspi-hjemme-automatisering.service

Få tilgang til Home Automation Web App fra andre enheter

For å få tilgang til hjemmeautomatiseringswebappen fra andre enheter i hjemmenettverket ditt, må du vite IP-adressen til Raspberry Pi-enheten din.

Du finner IP-adressen til Raspberry Pi 4-enheten din fra nettadministrasjonsgrensesnittet til hjemmeruteren. 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.

$ vertsnavn -I


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

Som du kan se i skjermbildet nedenfor, har jeg fått tilgang til hjemmeautomatiseringswebappen fra min Android-smarttelefon.


Sørg for å koble lyspærepluggen til stikkontakten.


Lyspæren skal være slått av som standard.


Hvis du trykker på lyspæreikonet fra hjemmeautomatiseringsnettappen, bør lyspæreikonets farge endres 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é til å kontrollere en høyspennings AC-enhet fra Raspberry Pi ved hjelp av Python-programmeringsspråket. Artikkelen viste deg også hvordan du skriver en API-basert Python-kolbe-nettapp for å kontrollere stafetten fra nettleseren. Denne artikkelen skal hjelpe deg med å komme i gang med hjemmeautomatisering ved hjelp av Raspberry Pi.

Beste spillkonsollemulatorer for Linux
Denne artikkelen vil liste opp populære programvare for spillkonsollemulering tilgjengelig for Linux. Emulation er et programvarekompatibilitetslag so...
Beste Linux Distros for spill i 2021
Linux-operativsystemet har kommet langt fra det originale, enkle, serverbaserte utseendet. Dette operativsystemet har forbedret seg enormt de siste år...
Hvordan fange opp og streame spilløkten din på Linux
Tidligere ble spill bare ansett som en hobby, men med tiden så spillindustrien en enorm vekst når det gjelder teknologi og antall spillere. Spillpubli...