Ovaj članak će vam pokazati kako koristiti Raspberry Pi i relejni prekidač 5V za uključivanje i isključivanje žarulje s mobilnog uređaja. Članak uključuje web -aplikaciju kojoj možete pristupiti sa bilo kojeg uređaja na mreži i bežično kontrolirati sve kućanske aparate na izmjeničnu struju u vašem domu. Dakle, krenimo s našim jednostavnim eksperimentom kućne automatizacije Raspberry Pi.
Stvari koje će vam trebati
Ako želite koristiti Raspberry Pi bez glave (putem SSH -a ili VNC -a), trebat će vam sljedeće:
1) Raspberry Pi 3 ili Raspberry Pi 4.
2) Relejni prekidač 5V.
3) Električne žice.
4) 3 žice za spajanje žena-žena.
5) AC žarulja.
6) Nosač AC žarulje.
7) AC utikač.
8) Alat za sečenje i skidanje žice.
9) Odvijač CR-V 3.
10) Micro-USB (Raspberry Pi 3) ili USB Type-C (Raspberry Pi 4) adapter za napajanje.
11) MicroSD kartica od 16 GB ili 32 GB s Raspberry Pi OS je bljeskala.
12) Mrežno povezivanje na Raspberry Pi.
13) Prijenosno ili stolno računalo za VNC pristup udaljenoj radnoj površini ili SSH pristup Raspberry Pi.
Ako ne želite daljinski pristupiti Raspberry Pi -u putem SSH -a ili VNC -a, trebat će vam i sljedeće:
14) Monitor.
15) HDMI ili mikro-HDMI kabel.
16) Tipkovnica.
17) Miš.
Ako vam je potrebna pomoć pri prelasku slike Raspberry Pi OS na microSD karticu, pogledajte članak Kako instalirati i koristiti Raspberry Pi Imager.
Ako ste početnik u Raspberry Pi -u i potrebna vam je pomoć pri instaliranju Raspberry Pi OS -a na Raspberry Pi, pogledajte članak Kako instalirati Raspberry Pi OS na Raspberry Pi 4.
Također, ako vam je potrebna pomoć oko bezglavog postavljanja Raspberry Pi, pogledajte članak Kako instalirati i konfigurirati Raspberry Pi OS na Raspberry Pi 4 bez vanjskog monitora.
Slike svih potrebnih alata date su u nastavku.
Uključuje Raspberry Pi
Zatim spojite kabel za napajanje na Raspberry Pi i uključite Raspberry Pi.
Nakon što se Raspberry Pi uključi, možete se povezati s Raspberry Pi putem VNC -a ili SSH -a. Ili možete povezati tipkovnicu, miš i monitor s Raspberry Pi da biste im izravno pristupili.
Izlazi releja 5V
Relej je u osnovi prekidač. No, za razliku od tradicionalnog prekidača, relej se može kontrolirati pomoću male količine istosmjernog napona.
5V relej je vrlo jednostavan za korištenje. Ima dvije strane: jedna strana služi za upravljanje relejem putem niskonaponskog istosmjernog napona (iz Raspberry Pi), a druga strana za upravljanje visokonaponskim izmjeničnim naponom (tj. Žaruljom), ovisno o stanju releja .
Na jednoj strani relej ima dvije LED diode (jednu crvenu i jednu zelenu) i tri pina ( IN, GND, i VCC ). Ove tri pinove koriste se za upravljanje relejem iz Raspberry Pi.
Prva dva pina s druge strane služe za upravljanje kućanskim uređajem na izmjeničnu struju.
Spajanje 5V releja na Raspberry Pi
Za spajanje 5V releja na Raspberry Pi trebat će vam tri žice za spajanje žena-žena.
Priključite jednu stranu spojnih žica u utičnicu U (žuta žica), GND (crna žica), i VCC (crvena žica) pinovi u 5V releju, kao što je prikazano u nastavku.
Druga strana žica ide u pinove zaglavlja GPIO Raspberry Pi, kao što je prikazano na donjoj slici.
Crvena žica bi trebala ući u PIN 2 (VCC) od Raspberry Pi.
Crna žica bi trebala ući u PIN 6 (GND) od Raspberry Pi.
Žuta žica bi trebala ući u PIN 7 (GPIO 4) od Raspberry Pi.
Nakon što je relej 5V spojen na Raspberry Pi, trebao bi izgledati kao što je prikazano na donjoj slici.
Dopuštanje GPIO pristupa korisniku za prijavu
Kako bi se omogućio pristup GPIO pinovima, zadani korisnik za prijavu u Raspberry Pi OS pi treba dodati u gpio skupina.
Možete dodati pi korisnika do gpio grupirajte sa sljedećom naredbom:
$sudousermod-aGgpio $(tko sam ja)
Da bi promjene stupile na snagu, ponovno pokrenite Raspberry Pi sa sljedećom naredbom:
Stvaranje direktorija projekta
Također je dobra ideja da sve projektne datoteke budu organizirane.
Da bi datoteke projekta bile organizirane, stvorite direktorij projekta ~/www i potrebne poddirektorije sa sljedećom naredbom:
$mkdir -pv~/www/{predlošci, statički}
Nakon stvaranja direktorija projekta idite do direktorija projekta na sljedeći način:
Prebacivanje 5V releja s Raspberry Pi
Sada kada ste priključili relej 5V na Raspberry Pi, prebacit ćete relej s Raspberry Pi -a pomoću programskog jezika Python.
NAPOMENA: Prebacivanje je izraz koji se koristi u elektronici. Uključivanje znači upravljanje (tj. Uključivanje/isključivanje) određenog elektroničkog uređaja.
Da biste eksperimentirali s prebacivanjem releja pomoću programskog jezika Python, stvorite novu skriptu Python test.py u direktoriju projekta na sljedeći način:
$nanotest.py
Upišite sljedeće redove kodova u skriptu test.py Python.
iz vrijeme uvozspavati
dok Pravi:
relej=LED(4)
ispisati('Osloniti se na')
spavati(5)
relej.Zatvoriti()
ispisati('Relej: isključeno')
spavati(5)
Kada završite, pritisnite + X slijedi I i za spremanje test.py Python skripta.
Ovdje se uvozi prva linija LED od gpiozero knjižnica, a redak 2 uvozi spavati funkciju iz vrijeme knjižnica.
Linije 6-14 nalaze se unutar beskonačne petlje.
Redak 6 inicijalizira LED u GPIO 4 od Raspberry Pi, koji je povezan sa U pin releja.
Linija 8 uključuje relej pomoću na() metoda.
Redak 9 ispisuje poruku na konzoli pomoću ispis () funkcija.
Redak 10 odgađa izvršavanje sljedećeg retka koda na pet sekundi pomoću spavati() funkcija.
Linija 12 isključuje relej pomoću Zatvoriti() metoda.
Na isti način, redak 9 ispisuje poruku na konzoli pomoću ispis () funkcija i redak 10 odgađa izvršenje sljedećeg retka koda na 5 sekundi pomoću spavati() funkcija.
Zatim pokrenite test.py Python skripta na sljedeći način:
The test.py Python skripta bi trebala početi mijenjati 5V relej. Svakih pet sekundi trebali biste čuti zvuk klikanja. Kad relej prebaci stanje (iz uključenog u isključeno ili iz isključenog u uključeno stanje), stvara škljocanje. To znači da relej radi ispravno.
Kada je relej u isključenom stanju (normalan rad-AC napajanje je isključeno), samo neto LED bi trebao zasvijetliti, kao što možete vidjeti na donjoj slici.
Kada je relej u uključenom stanju (priključeno je AC opterećenje), oba zelena LED i the neto LED bi trebao zasvijetliti, kao što možete vidjeti na donjoj slici.
Nakon što je testiranje završeno, pritisnite + C prekinuti test.py skripta.
Priključivanje žarulje izmjenične struje na relej 5V
Relej 5V sada bi trebao ispravno funkcionirati. Sada ćete svoj kućanski aparat naizmjenične struje (u ovom slučaju žarulju) spojiti na 5V relej.
Prvo izrežite crnu električnu žicu povezanu sa žaruljom rezačem žice.
Nakon što je crna električna žica spojena na žarulju prerezana rezačem žice, trebala bi izgledati kao što je prikazano na donjoj slici.
Zatim skinite vanjski sloj kako biste izložili oko ½ inča električne žice, kao što je prikazano na donjoj slici.
Zatim preklopite izložene žice, kao što je prikazano na donjoj slici.
Otpustite označene vijke releja pomoću odvijača CV-3.
Umetnite izložene žice koje ste ranije skinuli i presavili u dva vijčana priključka i zategnite vijke odvijačem CV-3.
Testiranje prebacivanja releja nakon spajanja AC opterećenja
Nakon što je AC napajanje spojeno na 5V relej, priključite utikač žarulje u zidnu utičnicu.
Pokrenite test.py Python skripta iz direktorija projekta na sljedeći način:
The test.py Python skripta trebala bi početi s prebacivanjem 5V releja, što će zauzvrat mijenjati visokonaponsku AC žarulju u intervalima od pet sekundi. Žarulja izmjenične struje trebala bi ostati uključena pet sekundi, a zatim ostati isključena pet sekundi itd.
Žarulja je isključena na donjoj slici.
Žarulja je uključena na donjoj slici.
Kao što vidite, možemo prebaciti relej i upravljati visokonaponskom AC žaruljom pomoću programskog jezika Python. Dakle, pritisnite + C prekinuti test.py skripta.
Prijeđimo sada na sljedeći odjeljak.
Pisanje web aplikacije Home Automation
U ovom odjeljku pokazat ću vam kako napisati web-aplikaciju temeljenu na API-ju pomoću programskog jezika Python. Web -aplikaciju možete koristiti za upravljanje relejem i kućanskim aparatima naizmjenične struje ili električnim uređajima spojenim na relej iz web -preglednika.
BILJEŠKA: Svi kodovi prikazani u ovom odjeljku dostupni su u mom spremištu GitHub shovon8 / malina-pi-home-automatizacija . Ako želite, možete klonirati moje spremište GitHub i preskočiti sve kodove.
Stvorite server.py Python skriptu u direktoriju projekta na sljedeći način:
$nanoserver.py
Upišite sljedeće redove kodova u server.py Python skripta.
izgpiozerouvozLED
izuuiduvozuuid4
sobe= {}
sobe['Soba 1'] = [{
'iskaznica': uuid4(),
'Ime':'Svjetlo 1',
'ikona':'fa fa-žarulja',
'status':Netočno,
'relejPin':4,
'relejInstance':Netočno
}, {
'iskaznica': uuid4(),
'Ime':'Ventilator 1',
'ikona':'fa fa-fan',
'status':Netočno,
'relejPin':6,
'relejInstance':Netočno
}]
sobe['Kupaonica 1'] = [{
'iskaznica': uuid4(),
'Ime':'Svjetlo 1',
'ikona':'fa fa-žarulja',
'status':Netočno,
'relejPin':5,
'relejInstance':Netočno
}]
app=Boca(__Ime__)
app.config['SEND_FILE_MAX_AGE_DEFAULT'] = 0
@app.rutu('/')
defDom():
povratakrender_template('./index.html',sobe=sobe)
deftoggle_appliance_status(iskaznica):
zasobausobe:
zaaparatomusobe[soba]:
ako str(aparatom['iskaznica']) == iskaznica:
akoaparatom['relejInstance']:
aparatom['relejInstance'].Zatvoriti()
aparatom['relejInstance'] = Netočno
drugo:
aparatom['relejInstance'] =LED(aparatom['relejPin'])
aparatom['relejInstance'].na()
aparatom['status'] = neaparatom['status']
povratak Pravi
povratak Netočno
@app.rutu('/device/toggle/')
defaparat_toggle(iskaznica):
povratakjsonify({'status': toggle_appliance_status(iskaznica)})
Kada završite, pritisnite + X slijedi I i za spremanje server.py Python skripta.
Ovdje retci 1-3 uvoze sve potrebne komponente iz svojih knjižnica.
Redak 5 stvara prazno sobe rječnik. U ovaj ćemo rječnik pohraniti sve pojedinosti o uređaju za izmjeničnu struju koje želimo kontrolirati iz web aplikacije.
The sobe detalji su pohranjeni u retcima 7-29.
Razgovarajmo o strukturi podataka jedne sobe.
Ovdje će naziv sobe biti Soba 1. Tako, Soba 1 je ključ za sobe rječnik.
The Soba 1 ključ drži niz kao vrijednost. Broj elemenata niza jednak je broju AC kućanskih aparata koje imate u toj prostoriji i koje također želite kontrolirati iz web aplikacije. U ovom slučaju imamo dva AC kućna aparata koja želimo kontrolirati: Svjetlo 1 i Ventilator 1 .
Svaka definicija kućanskih aparata ima iskaznica . The iskaznica je nasumično generirani UUID. Ovo se koristi za identifikaciju sobe koju želimo kontrolirati pomoću API -ja.
Kućanski aparat također ima sve sljedeće:
- ime (Svjetlo 1 u ovom slučaju)
- ikona (Klasa ikona Font Awesome, jer ćemo za ikone koristiti Font Awesome)
- status (Istina ako na i Netočno ako isključeno )
- relejPin (GPIO pin broj koji se koristi za upravljanje relejem spojenim na AC kućanski aparat)
- relejInstance (inicijalizirano LED objekt od gpiozero knjižnica odgovorna za kontrolu odgovarajućeg GPIO pina - relejPin )
Redak 31 inicijalizira stakleni Python web poslužitelj.
Redak 32 konfigurira web poslužitelj tikvice.
Linije 34-36 šalju index.html datoteku iz predlošci/ direktorija kada posjetite web aplikaciju za kućnu automatizaciju.
Upotreba tikvica Jinja2 predložak jezika za iskazivanje index.html datoteka. Dakle, prošao sam sobe rječnik za index.html datoteka. Jinja2 će generirati početnu stranicu koristeći sobe podaci.
Funkcija toggle_appliance_status () u retcima 39-52 koristi se za uključivanje kućanskog aparata ako je isključen i isključivanje kućanskog aparata ako je uključen pomoću aparata iskaznica .
Vraća se Pravi ako je operacija prebacivanja uspješna. Ako dođe do pogreške, vratit će se Netočno .
Linije 55-57 koriste se za prebacivanje kućanskih aparata pomoću /aparat/prebaci/ API krajnja točka web poslužitelja. Ovdje, iskaznica je ID kućnog aparata.
Kreirajte index.html datoteku u predlošci/ direktorij vašeg projekta na sljedeći način:
Upišite sljedeće redove kodova u index.html skripta.
< html lang='na'>
< glava >
< meta charset='UTF-8'>
< meta Ime='okvir za prikaz' sadržaj='width = device-width, initial-scale = 1,0'>
< veza rel='stilska tablica' href='{{url_for (' static ', filename =' fontawesome/css/all.min.css ')}}'>
< veza rel='stilska tablica' href='{{url_for (' static ', filename =' style.css ')}}'>
< titula >Kućna automatizacija s Raspberry Pi</ titula >
</ glava >
< tijelo >
< div iskaznica='sadržaj'>
< h1 >Raspberry Pi Kućna automatizacija</ h1 >
{ % za sobu u sobama %}
< div razred='soba'>
< h2 >{{soba}}</ h2 >
< div razred='uređaji'>
{ % za aparat u sobama [soba] %}
< div razred='aparat' iskaznica='{{aparat [' id ']}}'> ='aktivan'>
< i razred='{{aparat [' ikona ']}}'></ i >
< raspon >{{aparat ['ime']}}</ raspon >
</ div >
{ % endfor %}
</ div >
</ div >
{ % endfor %}
</ div >
< skripta src='{{url_for (' static ', filename =' app.js ')}}' tip='tekst/javascript'></ skripta >
</ tijelo >
</ html >
Kada završite, pritisnite + X slijedi I i za spremanje index.html datoteka.
Stvoriti stil.css datoteku u statički/ direktorij vašeg projekta na sljedeći način:
Upišite sljedeće redove kodova u stil.css datoteka.
* {
margina: 0;
punjenje: 0;
font-family: 'BenchNine', sans-serif;
}
#sadržaj >h1{
pozadini:linearno-gradijent(dopravo, rgb(112, 24, 163), rgb(86, 127, 240));
boja: #F F F;
poravnati tekst: centar;
punjenje: .5em 0;
}
div.soba {
margina: .5em;
granica: 2 piksela čvrsta rgb(112, 24, 163);
granica-radijus: 5 piksela;
}
div.sobah2{
/* pozadina: rgb (9, 76, 121); */
pozadini:linearno-gradijent(dopravo, rgb(112, 24, 163), rgb(86, 127, 240));
punjenje: 0 0 0 .5em;
boja: #F F F;
}
div.uređaji {
margina: .5em .5em 0 0;
prikaz:savijati;
flex-wrap:zamotati;
}
div.aparat {
granica: 2 piksela čvrsta rgb(112, 24, 163);
granica-radijus: 5 piksela;
širina: 110 piksela;
visina: 120 piksela;
poravnati tekst: centar;
margina: 0 0 .5em .5em;
prikaz:savijati;
flex-smjer:stupac;
}
div.aparati.fa {
veličina fonta: 4em;
savijati-rasti: 1;
padding-top: 0,3em;
boja: rgb(204, pedeset, pedeset);
}
div.aparat[podaci aktivni='aktivan']i.fa {
boja: rgb(32, 177, 51);
}
div.aparatraspon{
prikaz: blok;
font-weight: podebljano;
pozadini: rgb(112, 24, 163);
boja: #F F F;
}
Kada završite, pritisnite + X slijedi I i za spremanje stil.css datoteka.
Napravite app.js datoteku u statički/ direktorij vašeg projekta na sljedeći način:
Upišite sljedeće redove kodova u app.js datoteka.
funkcijaglavni() {
funkcijatoggleApplianceState(I) {
gdjeiskaznica=I.staza[1].iskaznica;
gdjehttp= noviXMLHttpRequest();
http.onreadystatechange = funkcija() {
ako(ovaj.readyState === 4 && ovaj.status === 200) {
ako(JSON.raščlaniti(ovaj.responseText).status === pravi) {
ako(I.staza[1].hasAttribute('podaci aktivni')) {
I.staza[1].removeAttribute('podaci aktivni')
} drugo {
I.staza[1].setAttribute('podaci aktivni', 'aktivan')
}
}
}
}
http.otvorena('DOBITI',``/aparatom/prebacivanje/${iskaznica}``, pravi);
http.poslati();
}
gdjeuređaji=dokument.getElementsByClassName('aparat');
za(i=0;i<uređaji.duljina;i++) {
uređaji[i].addEventListener('klik',toggleApplianceState);
}
}
Kada završite, pritisnite + X slijedi I i za spremanje app.js datoteka.
Ovdje linija 1 vodi glavni() funkcija kada se web stranica dovrši s učitavanjem.
U index.html datoteku, svaki kućanski aparat je zatvoren u aparatom razred. Redci 26-29 koriste se za odabir svakog kućanskog aparata s web stranice i prilaganje klik događaj na uređaju. Kada netko klikne na kućanski aparat s web stranice, toggleApplianceState () funkcija će se pokrenuti.
U retcima 4-23, toggleApplianceState () funkcija se koristi za traženje /aparat/prebaci/ krajnja točka web poslužitelja za promjenu stanja kućnog aparata na koji je pritisnuta. Zahtjev se vrši u pozadini putem AJAX -a. Nakon što primite odgovor, web stranica se u skladu s tim ažurira.
Idite na statički/ direktorij u direktoriju vašeg projekta na sljedeći način:
Preuzmite Font Awesome sa sljedećom naredbom:
Nakon što preuzmete Font Awesome, trebali biste pronaći novu zip datoteku fontawesome-free-5.15.1-web.zip u statički/ imenik.
Raspakirajte datoteku fontawesome-free-5.15.1-web.zip datoteku sa sljedećom naredbom:
The fontawesome-free-5.15.1-web.zip datoteka bi sada trebala biti raspakirana.
Novi imenik fontawesome-free-5.15.1-web/ treba stvoriti u static/ direktoriju, kao što možete vidjeti na slici ispod.
Preimenujte imenik fontawesome-free-5.15.1-web/ do fontawesome/ sa sljedećom naredbom:
$mv -vfontawesome-free-5.15.1-web fontawesome
Sada vam više ne trebaju fontawesome-free-5.15.1-web.zip datoteka. Dakle, uklonite fontawesome-free-5.15.1-web.zip datoteku sa sljedećom naredbom:
The statički/ Struktura direktorija trebala bi izgledati kako je prikazano na slici ispod.
Vratite se u direktorij projekta ~/www kako slijedi:
Testiranje web aplikacije Home Automation
Da biste testirali web aplikaciju za kućnu automatizaciju, pokrenite sljedeću naredbu u direktoriju projekta:
$FLASK_APP= poslužitelj.py tikvica radi
Web aplikacija trebala bi biti dostupna na priključku 5000 vašeg Raspberry Pi.
Iz web preglednika Chromium posjetite http: // localhost: 5000 . Web aplikacija za kućnu automatizaciju bi se trebala učitati.
Kliknite na ikonu žarulje, naznačenu na donjoj slici.
Sada bi trebala biti uključena žarulja izmjenične struje. Boja ikone također bi se trebala promijeniti u zelenu, što znači da je žarulja uključena.
Dakle, web aplikacija za kućnu automatizaciju radi. Pritisnite + C za prekid web poslužitelja.
Izrada Systemd usluge za web aplikaciju Home Automation
U ovom odjeljku pokazat ću vam kako stvoriti sistemsku datoteku usluge za web aplikaciju kućne automatizacije tako da se automatski pokreće pri pokretanju.
Prvo, stvorite raspi-home-automation.usluga datoteku u direktoriju vašeg projekta na sljedeći način:
$nanoraspi-home-automation.usluga
Upišite sljedeće retke u datoteku raspi-home-automation.service.
[Jedinica]Opis= Raspberry Pi web usluga za kućnu automatizaciju
Nakon= mreža.cilj
[Servis]
WorkingDirectory=/Dom/pi/www
Okoliš=FLASK_APP= server.py
Okoliš=FLASK_ENV= proizvodnja
ExecStart=/usr/am/pokretanje tikvice--domaćin= 0,0,0,0
Standardni izlaz= naslijediti
Standardna pogreška= naslijediti
Ponovo pokrenite= uvijek
Korisnik= pi
[Instalirati]
Traženo od= višekorisnički cilj
Kada završite, pritisnite + X slijedi I i za spremanje raspi-home-automation.service datoteka.
Kopirajte raspi-home-automation.service datoteku u /etc/systemd/system/ imenik sa sljedećom naredbom:
Ponovno učitajte sistemske demone da bi promjene stupile na snagu na sljedeći način:
Dodajte raspi-home-automation uslugu za pokretanje sustava Raspberry Pi OS sa sljedećom naredbom:
Ponovno pokrenite Raspberry Pi sa sljedećom naredbom:
Nakon što se Raspberry Pi digne, raspi-home-automation usluga bi trebala biti aktivna/pokrenuta, kao što možete vidjeti na slici ispod.
Pristup web aplikaciji Home Automation s drugih uređaja
Da biste pristupili web aplikaciji za kućnu automatizaciju s drugih uređaja u vašoj kućnoj mreži, morat ćete znati IP adresu vašeg Raspberry Pi uređaja.
IP adresu vašeg Raspberry Pi 4 uređaja možete pronaći na web sučelju vašeg kućnog usmjerivača. U mom slučaju, IP adresa je 192.168.0.103. Ovo će za vas biti drugačije. Dakle, od sada nadalje zamijenite moj IP s vašim.
Ako imate pristup Raspberry Pi konzoli, možete pokrenuti i sljedeću naredbu da biste pronašli IP adresu.
Nakon što saznate IP adresu vašeg Raspberry Pi uređaja, možete joj pristupiti s bilo kojeg uređaja u vašoj kućnoj mreži.
Kao što možete vidjeti na slici ispod, pristupio sam web aplikaciji za kućnu automatizaciju sa svog Android pametnog telefona.
Uključite utikač žarulje u zidnu utičnicu.
Žarulja bi trebala biti isključena prema zadanim postavkama.
Ako dodirnete ikonu žarulje u web aplikaciji za kućnu automatizaciju, boja ikone žarulje trebala bi se promijeniti u zelenu, što znači da je žarulja uključena.
Kao što možete vidjeti na donjoj slici, žarulja je uključena.
Zaključak
Ovaj vam je članak pokazao kako koristiti 5V relej za upravljanje visokonaponskim izmjeničnim električnim uređajem iz Raspberry Pi-a pomoću programskog jezika Python. Članak vam je također pokazao kako napisati web -aplikaciju Python flask temeljenu na API -ju za upravljanje relejem iz web -preglednika. Ovaj članak trebao bi vam pomoći da započnete s kućnom automatizacijom pomoću Raspberry Pi.