Raspberry Pi

Ställ in Raspberry Pi Home Automation

Ställ in Raspberry Pi Home Automation
En av de viktigaste sakerna för hemautomation är att styra högspännings växelström med hjälp av en lågspännings DC. För att kontrollera högspännings växelström från Raspberry Pi behöver du en 5V reläomkopplare. Du kan styra reläomkopplaren med GPIO-stiften på Raspberry Pi. Reläbrytaren kan sedan styra AC-apparater via Raspberry Pi.

Den här artikeln visar hur du använder Raspberry Pi och 5V-reläomkopplaren för att slå på och 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äomkopplare.
3) Elektriska ledningar.
4) 3 kvinnliga till kvinnliga anslutningskablar.
5) AC-lampa.
6) AC-lampahållare.
7) AC-kontakt.
8) Wirecutter och stripper verktyg.
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 en stationär dator för VNC-åtkomst till fjärrskrivbord 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, kolla in artikeln Installera och använda Raspberry Pi Imager.

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

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

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

Slår på 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 direkt åtkomst till den.

5V reläutgångar

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

5V-reläet är väldigt enkelt 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 (i.e., 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 AC-hushållsapparaten.

Ansluter 5V-reläet till Raspberry Pi

För att ansluta 5V-reläet till Raspberry Pi behöver du tre anslutningsledningar mellan kvinnor och kvinnor.

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


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

Den röda ledningen ska gå in i PIN 2 (VCC) av Raspberry Pi.
Den svarta ledningen 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ändaren

För att ge åtkomst till GPIO-stiften, 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:

$ sudo usermod -aG gpio $ (whoami)


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

$ sudo omstart

Skapa en projektkatalog

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

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

$ mkdir -pv ~ / www / mallar, statisk


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

$ cd ~ / www

Växlar 5V-relä från Raspberry Pi

Nu när du har anslutit 5V-reläet till Raspberry Pi, byter du reläet från Raspberry Pi med Python-programmeringsspråket.

NOTERA: Växlande är en term som används inom elektronik. Växling betyder styrning (i.e. slå på / av) en viss elektronisk enhet.

För att experimentera med att byta relä med Python-programmeringsspråket skapar du det nya Python-skripttestet.py i projektkatalogen enligt följande:

$ nano-test.py


Skriv följande rader med koder i testet.py Python-skript.

från gpiozero-import-LED
från tid importera sömn
medan det är sant:
relä = LED (4)
skriva ut ("Relä: På")
sova (5)
relä.stänga()
skriva ut ("Relä: Av")
sova (5)

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


Här importerar rad 1 LED från gpiozero bibliotek, och rad 2 importerar sova funktion från tid bibliotek.


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


Rad 6 initialiserar en lysdiod i GPIO 4 av Raspberry Pi, som är ansluten till I reläets stift.


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

Rad 9 skriver ut ett meddelande i konsolen med hjälp av skriva ut() fungera.

Rad 10 fördröjer körningen av nästa kodrad i fem sekunder med hjälp av sova() fungera.


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

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


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

$ python3-test.py


De testa.py Python-skript bör börja växla 5V-reläet. Du borde höra ett klickljud var femte sekund. När reläet kopplar om (från på till av eller från av till på) ger det ett klickljud. Detta innebär att reläet fungerar som det ska.


När reläet är i frånkopplat läge (normal drift - AC-belastningen är frånkopplad) är det bara röd LED ska tändas, som du kan se på bilden nedan.


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


När testningen är klar trycker du på + C för att avsluta testa.py manus.

Ansluta AC-lampan till 5V-reläet

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

Klipp först den svarta elektriska ledningen som är ansluten till glödlampan med en wirecutter.


När den svarta elektriska ledningen som är ansluten till glödlampan har klippts av med en wirecutter, ska den se ut som bilden visar nedan.


Ta sedan bort det yttre skiktet för att exponera cirka ½ tum av elkabeln, som visas på bilden nedan.


Vik sedan de exponerade ledningarna, enligt bilden nedan.


Lossa reläets markerade skruvar med en CV-3-skruvmejsel.


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

Test av reläväxling efter anslutning av växelström

När AC-belastningen är ansluten till 5V-reläet ansluter du glödlampans kontakt till vägguttaget.


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

$ python3-test.py


De testa.py Python-skript bör börja växla 5V-reläet, som i sin tur kommer att växla högspänningslampan med fem sekunders intervall. AC-glödlampan ska vara tänd i fem sekunder och sedan vara avstängd i fem sekunder och så vidare.

Glödlampan är avstängd på bilden nedan.


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


Som du kan se kan vi växla reläet och styra högspänningslampan med hjälp av Python-programmeringsspråket. Så, tryck + C för att avsluta testa.py manus.

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

Skriva hemautomationswebappen

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

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

Skapa servern.py Python-skript i projektkatalogen enligt följande:

$ nano-server.py


Skriv följande rader med koder i server.py Python-skript.

från kolvimport Kolv, jsonify, url_for, render_template
från gpiozero-import-LED
från uuid importera uuid4
rum =
rum ['Rum 1'] = [
'id': uuid4 (),
'name': 'Light 1',
'ikon': 'fa fa-glödlampa',
'status': Falskt,
'relayPin': 4,
'relayInstance': Falskt
,
'id': uuid4 (),
'name': 'Fan 1',
'icon': 'fa fa-fan',
'status': Falskt,
'relayPin': 6,
'relayInstance': Falskt
]
rum ['Badrum 1'] = [
'id': uuid4 (),
'name': 'Light 1',
'ikon': 'fa fa-glödlampa',
'status': Falskt,
'relayPin': 5,
'relayInstance': Falskt
]
app = kolv (__ namn__)
app.config ['SEND_FILE_MAX_AGE_DEFAULT'] = 0
@app.rutt('/')
def hem ():
returnera render_template ('./index.html ', rum = rum)
def toggle_appliance_status (id):
för rum i rum:
för apparater i rum [rum]:
om str (apparat ['id']) == id:
om apparat ['relayInstance']:
apparat ['relayInstance'].stänga()
apparat ['relayInstance'] = Falskt
annan:
apparat ['relayInstance'] = LED (apparat ['relayPin'])
apparat ['relayInstance'].på()
apparat ['status'] = inte apparat ['status']
återvänd True
återvänd Falskt
@app.rutt ('/ apparat / växla /')
def appliance_toggle (id):
returnera jsonify ('status': toggle_appliance_status (id))

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


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


Rad 5 skapar en tom rum lexikon. I den här ordlistan lagrar vi alla AC-apparater som vi vill kontrollera från webbappen.


De rum detaljer lagras i raderna 7-29.


Låt oss diskutera datastrukturen i ett av rummen.

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


De Rum 1 nyckel innehåller en matris 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 kontrollera: 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 kontrollera med API: et.

En hushållsapparat har också följande:

  • namn (ljus 1 I detta fall)
  • ikon (Font Awesome-ikonklass, eftersom vi kommer att använda Font Awesome för ikonerna)
  • status (True om och Falsk om av)
  • reläPin (GPIO-stiftnumret 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 kontrollera respektive GPIO-stift - reläPin)


Rad 31 initialiserar en kolv Python-webbserver.

Rad 32 konfigurerar flaskwebbservern.


Linjerna 34-36 skickar index.html fil från mallar / katalog när du besöker hemautomationswebappen.

Kolven använder Jinja2 mallspråk för att återge index.html fil. Så jag har passerat rum ordbok till index.html fil. Jinja2 kommer att göra hemsidan med hjälp av rum data.


Funktionen toggle_appliance_status () i rad 39-52 används för att sätta på hushållsapparaten om den är avstängd och stänga av hushållsapparaten om den är påslagen med hjälp av apparatens id.

Den återvänder Sann om växlingsfunktionen lyckas. Om det finns ett fel återkommer det Falsk.


Linjer 55-57 används för att växla en hushållsapparat med hjälp av / apparat / växla / Webbserverns API-slutpunkt. Här, id är ID för hushållsapparaten.


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

$ nano-mallar / index.html

Skriv följande rader med koder i index.html manus.








Hemautomation med Raspberry Pi



Raspberry Pi Home Automation


% för rum i rum%

rum



% för apparat i rum [rum]%


appliance ['name']

% endfor%


% endfor%



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


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

$ nano statisk / stil.css


Skriv följande rader med koder i stil.css fil.

@import url ('https: // typsnitt.googleapis.com / css2?family = BenchNine: [email protected]; 400; 700 & display = swap ');
*
marginal: 0;
stoppning: 0;
font-family: 'BenchNine', sans-serif;

# innehåll> h1
bakgrund: linjär-gradient (till höger, rgb (112, 24, 163), rgb (86, 127, 240));
färg: #fff;
textjustera: centrum;
stoppning: .5em 0;

div.rum
marginal: .5em;
gräns: 2 pixlar solid rgb (112, 24, 163);
gränsradie: 5 pixlar;

div.rum h2
/ * bakgrund: rgb (9, 76, 121); * /
bakgrund: linjär-gradient (till höger, rgb (112, 24, 163), rgb (86, 127, 240));
stoppning: 0 0 0 .5em;
färg: #fff;

div.apparater
marginal: .5em .5em 0 0;
display: flex;
flex-wrap: wrap;

div.apparat
gräns: 2 pixlar solid rgb (112, 24, 163);
gränsradie: 5 pixlar;
bredd: 110px;
höjd: 120px;
textjustera: centrum;
marginal: 0 0 .5em .5em;
display: flex;
flexriktning: kolumn;

div.apparat i.fa
font-storlek: 4em;
flex-grow: 1;
stoppningstopp: 0.3em;
färg: rgb (204, 50, 50);

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

div.apparatens span
display: blockera;
font-vikt: fet;
bakgrund: rgb (112, 24, 163);
färg: #fff;

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


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

$ nano statisk / app.js


Skriv följande rader med koder i app.js fil.

fönster.addEventListener ('load', main);
funktion huvud ()
funktion toggleApplianceState (e)
var id = e.sökväg [1].id;
var http = ny XMLHttpRequest ();
http.onreadystatechange = funktion ()
om det här.readyState === 4 && detta.status === 200)
om (JSON.analysera (detta.responseText).status === true)
om (e.sökväg [1].hasAttribute ('data-aktiv'))
e.sökväg [1].removeAttribute ('data-aktiv')
annat
e.sökväg [1].setAttribute ('data-aktiv', 'aktiv')




http.öppen ("GET", '/ appliance / toggle / $ id', true);
http.skicka();

var apparater = dokument.getElementsByClassName ('apparat');
för (i = 0; i < appliances.length; i++)
apparater [i].addEventListener ('klicka', toggleApplianceState);

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


Här kör rad 1 huvud () funktion när webbsidan är laddad.

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


I raderna 4-23 anger toggleApplianceState () funktionen används för att begära / apparat / växla / slutpunkt för webbservern för att ändra tillståndet för den klickade hushållsapparaten. Förfrågan görs i bakgrunden via AJAX. När svaret har mottagits uppdateras webbsidan därefter.


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

$ cd statisk /


Ladda ner typsnitt Awesome med följande kommando:

$ wget https: // användning.fontawesome.com / utgåvor / v5.15.1 / fontawesome-free-5.15.1-webb.blixtlås


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

$ ls -lh


Packa upp fontawesome-free-5.15.1-webb.blixtlås fil med följande kommando:

$ unzip fontawesome-free-5.15.1-webb.blixtlås


De fontawesome-free-5.15.1-webb.blixtlås filen ska nu packas upp.


Den nya katalogen fontawesome-free-5.15.1-webb / 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-webb / till fontawesome / med följande kommando:

$ mv -v fontawesome-free-5.15.1-webbs fontawesome


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

$ rm -v fontawesome-free-5.15.1-webb.blixtlås


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

$ ls -lh


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

$ cd ..

Testa hemautomationswebappen

För att testa hemautomationswebappen, kör följande kommando i din projektkatalog:

$ FLASK_APP = server.py kolvkörning


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


Från webbläsaren Chromium, besök http: // localhost: 5000. Webbappen för hemautomation ska laddas.

Klicka på glödlampaikonen som anges i bilden nedan.


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


Så, hemautomationswebappen fungerar. Tryck + C för att avsluta webbservern.

Skapa Systemd-tjänst för hemautomationswebappen

I det här avsnittet visar jag hur du skapar en systemd-servicefil för hemautomationswebappen så att den automatiskt startar vid start.

Skapa först raspi-hemautomation.service filen i din projektkatalog enligt följande:

$ nano raspi-hemautomation.service

Skriv följande rader i raspi-home-automation.tjänstfil.

[Enhet]
Beskrivning = Raspberry Pi Home Automation Web Service
Efter = nätverk.mål
[Service]
WorkingDirectory = / home / pi / www
Miljö = FLASK_APP = server.py
Miljö = FLASK_ENV = produktion
ExecStart = / usr / bin / flask run --host = 0.0.0.0
StandardOutput = ärva
StandardError = ärva
Starta om = alltid
Användare = pi
[Installera]
WantedBy = fleranvändare.mål

När du är klar trycker du på + X följd av Y och för att rädda raspi-hemautomation.service fil.


Kopiera raspi-hemautomation.service fil till / etc / systemd / system / katalog med följande kommando:

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


Ladda om systemdemonerna så att ändringarna träder i kraft enligt följande:

$ sudo systemctl daemon-reload


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

$ sudo systemctl aktiverar raspi-hemautomation.service


Starta om Raspberry Pi med följande kommando:

$ sudo omstart


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

$ sudo systemctl status raspi-hemautomation.service

Åtkomst till hemautomationswebappen från andra enheter

För att komma åt hemautomationswebappen från andra enheter i ditt hemnätverk måste du känna till din Raspberry Pi-enhets IP-adress.

Du hittar IP-adressen till din Raspberry Pi 4-enhet från webbhanteringsgränssnittet på din hemrouter. I mitt fall är IP-adressen 192.168.0.103. Detta kommer att vara annorlunda för dig. Så var noga med att ersätta min IP 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 -I


När du väl känner till din Raspberry Pi-enhets IP-adress 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 öppnat hemautomationswebappen från min Android-smartphone.


Se till att ansluta glödlampans kontakt till vägguttaget.


Glödlampan ska vara avstängd som standard.


Om du trycker på glödlampaikonen från hemautomationswebappen, bör glödlampans ikonfärg ändras till grön, vilket indikerar att glödlampan är på.


Som du kan se på bilden nedan är glödlampan 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-enhet från Raspberry Pi med Python-programmeringsspråket. Artikeln visade dig också hur man skriver en API-baserad Python-kolv-webbapp 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.

Shadow of the Tomb Raider for Linux Tutorial
Shadow of the Tomb Raider är det tolfte tillskottet till Tomb Raider-serien - en action-äventyrsspelfranchise skapad av Eidos Montreal. Spelet mottogs...
Hur man förbättrar FPS i Linux?
FPS står för Bildrutor per sekund. FPS: s uppgift är att mäta bildfrekvensen i videouppspelningar eller spelprestanda. Med enkla ord betecknas antalet...
De bästa Oculus App Lab-spelen
Om du är Oculus-headsetägare måste du vara förtjust i sidoladdning. Sideladdning är processen för att installera icke-butiksinnehåll på ditt headset. ...