Hindbær Pi

Opsæt Raspberry Pi Home Automation

Opsæt Raspberry Pi Home Automation
En af de vigtigste ting til hjemmeautomatisering er styring af højspændingsstrøm ved hjælp af en lavspændingsstrøm. For at kontrollere højspændings AC fra Raspberry Pi skal du bruge en 5V relæafbryder. Du kan styre relæafbryderen ved hjælp af GPIO-benene på Raspberry Pi. Relæafbryderen kan derefter styre AC-husholdningsapparater gennem Raspberry Pi.

Denne artikel viser dig, hvordan du bruger Raspberry Pi og 5V-relæafbryderen til at tænde og slukke for en pære fra din mobile enhed. Artiklen indeholder en webapp, som du kan få adgang til fra en hvilken som helst 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 har brug for

Hvis du vil bruge din Raspberry Pi hovedløs (via SSH eller VNC), har du brug for følgende ting:

1) Raspberry Pi 3 eller Raspberry Pi 4.
2) 5V relæafbryder.
3) Elektriske ledninger.
4) 3 kvindelige til kvindelige forbindelsesledninger.
5) AC-pæ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 blinkede.
12) Netværksforbindelse på Raspberry Pi.
13) Bærbar computer eller en stationær computer til VNC ekstern desktopadgang eller SSH-adgang til Raspberry Pi.

Hvis du ikke ønsker at få adgang til Raspberry Pi eksternt via SSH eller VNC, skal du også have 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, skal du tjekke artiklen Sådan installeres og bruges Raspberry Pi Imager.

Hvis du er en Raspberry Pi-begynder og har brug for hjælp til installation af Raspberry Pi OS på Raspberry Pi, skal du tjekke artiklen Sådan installeres Raspberry Pi OS på Raspberry Pi 4.

Hvis du har brug for hjælp til den hovedløse opsætning af Raspberry Pi, skal du også tjekke 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 forbinde et tastatur, en mus og en skærm til Raspberry Pi for direkte adgang til det.

5V relæudløser

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ændingsstrøm (fra Raspberry Pi), og den anden side bruges til at styre højspændingsstrømmen (i.e., 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 første to ben på den anden side bruges til at styre AC-husholdningsapparatet.

Tilslutning af 5V-relæet til Raspberry Pi

For at forbinde 5V-relæet til Raspberry Pi skal du bruge tre kvindelige til kvindelige tilslutningsledninger.

Sæt den ene side af forbindelsesledningerne i I (gul ledning), GND (sort ledning) og VCC (rød ledning) stifter i 5V-relæet, som vist nedenfor.


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

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 tilsluttet Raspberry Pi, skal det se ud som vist på billedet nedenfor.

Tillader GPIO adgang til loginbruger

For at give adgang til GPIO-benene er standard loginbrugeren af ​​Raspberry Pi OS pi skal føjes til gpio gruppe.

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

$ sudo usermod -aG gpio $ (whoami)


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

$ sudo genstart

Oprettelse af et projektmappe

Det er også en god ide at holde alle projektfiler organiseret.

For at holde projektfilerne organiseret skal du oprette projektmappen ~ / www og de krævede 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

Skift af 5V-relæ 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 Python-programmeringssproget.

BEMÆRK: Skifter er et udtryk, der bruges i elektronik. Skift betyder kontrol (i.e. tænder / slukker) for en bestemt elektronisk enhed.

For at eksperimentere med at skifte relæet ved hjælp af Python programmeringssprog skal du oprette den nye Python script test.py i projektmappen som følger:

$ nano test.py


Skriv følgende linjer med koder i testen.py Python-script.

fra gpiozero import LED
fra tidspunktet import søvn
mens det er sandt:
relæ = LED (4)
print ("Relæ: Til")
sove (5)
relæ.tæt()
print ("Relæ: Fra")
sove (5)

Når du er færdig, skal du trykke på + x efterfulgt af Y og for at redde prøve.py Python-script.


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


Linjer 6-14 er inden for en uendelig løkke.


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


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

Linie 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.


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

På samme måde udskriver linje 9 en besked 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 prøve.py Python-script som følger:

$ python3 test.py


Det prøve.py Python-script skal begynde at skifte 5V-relæ. Du skal høre en kliklyd hvert femte sekund. Når relæet skifter tilstand (fra til eller fra eller fra til), lyder det fra en klik. Dette betyder, at relæet fungerer korrekt.


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


Når relæet er i tændt tilstand (AC-belastning er tilsluttet), er begge grøn LED og det rød LED skal lyse, som du kan se på billedet nedenfor.


Når testen er afsluttet, skal du trykke på + C at afslutte prøve.py manuskript.

Tilslut AC lyspære til 5V relæ

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

Skær først den sorte elektriske ledning, der er tilsluttet pæren med en wirecutter.


Når den sorte elektriske ledning, der er tilsluttet pæren, er skåret med en wirecutter, skal den se ud som vist på billedet nedenfor.


Fjern derefter det ydre lag for at eksponere ca. ½ tomme af den elektriske ledning, som vist på billedet nedenfor.


Fold derefter de eksponerede ledninger, som vist på billedet nedenfor.


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


Sæt de eksponerede ledninger, som du har fjernet og foldet tidligere, i de to skrueterminaler, og stram skruerne med en CV-3 skruetrækker.

Test af relæskift efter tilslutning af AC-belastning

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


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

$ python3 test.py


Det prøve.py Python-script skal begynde at skifte 5V-relæet, som igen skifter højspændings AC-pære med fem sekunders intervaller. AC-pæren skal forblive tændt i fem sekunder og derefter være slukket i fem sekunder og så videre.

Pæren er slukket i nedenstående billede.


Pæren er tændt på billedet nedenfor.


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

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

Skrivning af Home Automation Web App

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

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

Opret serveren.py Python-script i projektmappen som følger:

$ nano-server.py


Skriv følgende linjer med koder i server.py Python-script.

fra kolbeimport Kolbe, jsonify, url_for, render_template
fra gpiozero import LED
fra uuid import uuid4
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 (),
'name': '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.config ['SEND_FILE_MAX_AGE_DEFAULT'] = 0
@app.rute('/')
def hjem ():
returner render_template ('./indeks.html ', værelser = værelser)
def toggle_appliance_status (id):
til værelse i værelser:
til apparat i rum [rum]:
hvis str (apparat ['id']) == id:
hvis apparat ['relayInstance']:
apparat ['relayInstance'].tæt()
apparat ['relayInstance'] = Falsk
andet:
apparat ['relayInstance'] = LED (apparat ['relayPin'])
apparat ['relayInstance'].på()
apparat ['status'] = ikke apparat ['status']
returner sandt
returner Falsk
@app.rute ('/ apparat / skifte /')
def appliance_toggle (id):
returner jsonify ('status': toggle_appliance_status (id))

Når du er færdig, skal du trykke på + x efterfulgt af Y og for at redde server.py Python-script.


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


Linje 5 opretter en tom værelser ordbog. I denne ordbog gemmer vi alle de oplysninger om vekselstrømsapparatet, som vi vil kontrollere 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 holder en matrix som værdien. Antallet af array-elementer er lig med antallet af AC-husholdningsapparater, du har i det rum, som du også vil kontrollere fra webappen. I dette tilfælde har vi to AC-husholdningsapparater, som vi vil kontrollere: 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 vil kontrollere ved hjælp af API'en.

Et husholdningsapparat har også følgende:

  • navn (lys 1 I dette tilfælde)
  • ikon (Font Awesome ikonklasse, da vi bruger Font Awesome til ikonerne)
  • status (sand hvis og Falsk hvis af)
  • relæPin (GPIO-pin-nummeret, der bruges til at styre det relæ, der er tilsluttet AC-hjemmeapparatet)
  • relæInstance (initialiseret LED genstand for gpiozero bibliotek, der er ansvarlig for at kontrollere den respektive GPIO-pin - relæPin)


Linie 31 initialiserer en kolbe Python-webserver.

Linje 32 konfigurerer kolbe-webserveren.


Linie 34-36 sender indeks.html fil fra skabeloner / bibliotek, når du besøger hjemmeautomationswebappen.

Kolben bruger Jinja2 skabelonsprog til gengivelse af indeks.html fil. Så jeg har bestået værelser ordbog til indeks.html fil. Jinja2 gengiver 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 Rigtigt hvis skiftehandlingen er vellykket. Hvis der er en fejl, vender den tilbage Falsk.


Linier 55-57 bruges til at skifte et husholdningsapparat ved hjælp af / apparat / skifte / Web-serverens API-slutpunkt. Her, id er husholdningsapparatets ID.


Opret indeks.html fil i skabeloner / katalog over dit projekt som følger:

$ nano skabeloner / indeks.html

Skriv følgende linjer med koder i indeks.html manuskript.








Hjemmeautomatisering med Raspberry Pi



Raspberry Pi Home Automation


% for værelse i værelser%

værelse



% for apparat i rum [rum]%


appliance ['name']

% endfor%


% endfor%



Når du er færdig, skal du trykke på + x efterfulgt af Y og for at redde indeks.html fil.


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

$ nano statisk / stil.css


Skriv følgende linjer med koder i stil.css fil.

@import url ('https: // skrifttyper.googleapis.com / css2?familie = BenchNine: [e-mail-beskyttet]; 400; 700 & display = swap ');
*
margen: 0;
polstring: 0;
font-familie: 'BenchNine', sans-serif;

#indhold> h1
baggrund: lineær gradient (til højre, rgb (112, 24, 163), rgb (86, 127, 240));
farve: #fff;
tekstjustering: center;
polstring: .5em 0;

div.værelse
margen: .5em;
kant: 2 px solid rgb (112, 24, 163);
border-radius: 5px;

div.værelse h2
/ * baggrund: rgb (9, 76, 121); * /
baggrund: lineær gradient (til højre, rgb (112, 24, 163), rgb (86, 127, 240));
polstring: 0 0 0 .5em;
farve: #fff;

div.hårde hvidevarer
margen: .5 em .5em 0 0;
display: flex;
flex-wrap: wrap;

div.apparat
kant: 2 pix solid rgb (112, 24, 163);
border-radius: 5px;
bredde: 110 px;
højde: 120px;
tekstjustering: center;
margen: 0 0 .5 em .5em;
display: flex;
flex-retning: kolonne;

div.apparat i.fa
skriftstørrelse: 4em;
flex-grow: 1;
polstring-top: 0.3em;
farve: rgb (204, 50, 50);

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

div.apparatspænding
display: blok;
font-vægt: fed;
baggrund: rgb (112, 24, 163);
farve: #fff;

Når du er færdig, skal du trykke på + x efterfulgt af Y og for at redde stil.css fil.


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

$ nano statisk / app.js


Skriv følgende linjer med koder i app.js fil.

vindue.addEventListener ('load', main);
funktion main ()
funktion toggleApplianceState (e)
var id = e.sti [1].id;
var http = ny XMLHttpRequest ();
http.onreadystatechange = funktion ()
hvis (dette.readyState === 4 && dette.status === 200)
hvis (JSON.parse (dette.responseText).status === sand)
hvis (e.sti [1].hasAttribute ('data-aktiv'))
e.sti [1].removeAttribute ('data-aktiv')
andet
e.sti [1].setAttribute ('data-aktiv', 'aktiv')




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

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

Når du er færdig, skal du trykke på + x efterfulgt af Y og for at redde app.js fil.


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

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


I linje 4-23 viser toggleApplianceState () funktionen bruges til at anmode om / apparat / skifte / slutpunkt for webserveren for at ændre tilstanden for det klikkede hjemmeapparat. Anmodningen fremsættes i baggrunden via AJAX. Når svaret er modtaget, opdateres websiden i overensstemmelse hermed.


Naviger til statisk / katalog i din projektmappe som følger:

$ cd statisk /


Download font Awesome med følgende kommando:

$ wget https: // brug.fontawesome.com / udgivelser / v5.15.1 / fontawesome-free-5.15.1-web.lynlås


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

$ ls -lh


Pakk ud fontawesome-free-5.15.1-web.lynlås fil med følgende kommando:

$ udpakke fontawesome-free-5.15.1-web.lynlås


Det fontawesome-free-5.15.1-web.lynlås filen skal nu pakkes ud.


Den nye mappe fontawesome-free-5.15.1-web / skal oprettes i det statiske / bibliotek, som du kan se på skærmbilledet nedenfor.

$ ls -lh

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

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


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

$ rm -v fontawesome-free-5.15.1-web.lynlås


Det statisk / katalogstruktur skal se ud som vist på skærmbilledet nedenfor.

$ ls -lh


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

$ cd ..

Test af Home Automation Web App

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

$ FLASK_APP = server.py kolbe køre


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


Besøg http: // localhost: 5000 fra Chromium-webbrowseren. Hjemmeautomationswebappen skal indlæses.

Klik på pæreikonet, der er angivet i nedenstående billede.


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


Så hjemmeautomationswebappen fungerer. Trykke + C for 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 hjemmeautomationswebappen, så den automatisk starter ved opstart.

Først skal du oprette raspi-hjemmeautomatisering.service fil i din projektmappe som følger:

$ nano raspi-hjemmeautomatisering.service

Skriv følgende linjer i raspi-home-automatisering.servicefil.

[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 / bin / flask run --host = 0.0.0.0
StandardOutput = arve
StandardError = arve
Genstart = altid
Bruger = pi
[Installere]
WantedBy = flerbruger.mål

Når du er færdig, skal du trykke på + x efterfulgt af Y og for at redde raspi-hjemmeautomatisering.service fil.


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

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


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

$ sudo systemctl dæmon-genindlæsning


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

$ sudo systemctl aktiverer raspi-hjemme-automatisering.service


Genstart Raspberry Pi med følgende kommando:

$ sudo genstart


Når Raspberry Pi er startet, er raspi-hjemmeautomatisering tjenesten skal være aktiv / kørende, som du kan se på skærmbilledet nedenfor.

$ sudo systemctl status raspi-hjemme-automatisering.service

Adgang til Home Automation Web App 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 hjemmerouter. I mit tilfælde er IP-adressen 192.168.0.103. Dette vil være anderledes for dig. Så sørg for at erstatte 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 -I


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 i skærmbilledet nedenfor, har jeg adgang til hjemmeautomationswebappen fra min Android-smartphone.


Sørg for at sætte pærestikket i stikkontakten.


Pæren skal som standard være slukket.


Hvis du trykker på lyspæreikonet fra hjemmeautomationswebappen, skal lyspæreikonets farve skifte til grøn, hvilket indikerer, at pæren er tændt.


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

Konklusion

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

Sådan installeres og afspilles Doom på Linux
Introduktion til undergang Doom-serien opstod i 90'erne efter frigivelsen af ​​den originale Doom. Det var et øjeblikkeligt hit, og fra den tid af har...
Vulkan til Linux-brugere
Med hver nye generation af grafikkort ser vi spiludviklere skubbe grænserne for grafisk troskab og komme et skridt tættere på fotorealisme. Men på tro...
OpenTTD vs Simutrans
Oprettelse af din egen transportsimulering kan være sjovt, afslappende og ekstremt lokkende. Derfor skal du sørge for at prøve så mange spil som mulig...