Tento článek vám ukáže, jak používat Raspberry Pi a 5V reléový spínač k zapnutí a vypnutí žárovky z vašeho mobilního zařízení. Tento článek obsahuje webovou aplikaci, ke které můžete přistupovat z libovolného zařízení v síti a bezdrátově ovládat jakékoli domácí domácí spotřebiče. Začněme tedy s naším jednoduchým experimentem domácí automatizace Raspberry Pi.
Věci, které budete potřebovat
Pokud chcete Raspberry Pi používat bez hlavy (přes SSH nebo VNC), budete potřebovat následující věci:
1) Raspberry Pi 3 nebo Raspberry Pi 4.
2) 5V reléový spínač.
3) Elektrické vodiče.
4) 3 propojovací vodiče žena-žena.
5) AC žárovka.
6) Držák AC žárovky.
7) AC zástrčka.
8) Nástroj na odizolování a odizolování.
9) Šroubovák CR-V 3.
10) Napájecí adaptér Micro-USB (Raspberry Pi 3) nebo USB Type-C (Raspberry Pi 4).
11) 16 GB nebo 32 GB microSD karta s Raspberry Pi OS blikala.
12) Síťové připojení na Raspberry Pi.
13) Notebook nebo stolní počítač pro přístup ke vzdálené ploše VNC nebo SSH pro Raspberry Pi.
Pokud nechcete na Raspberry Pi přistupovat vzdáleně přes SSH nebo VNC, budete potřebovat také následující:
14) Monitor.
15) Kabel HDMI nebo micro-HDMI.
16) Klávesnice.
17) Myš.
Pokud potřebujete pomoc s blikáním obrazu Raspberry Pi OS na kartu microSD, podívejte se na článek Jak nainstalovat a používat Raspberry Pi Imager.
Pokud jste začátečník Raspberry Pi a potřebujete pomoc s instalací Raspberry Pi OS na Raspberry Pi, podívejte se na článek Jak nainstalovat Raspberry Pi OS na Raspberry Pi 4.
Pokud také potřebujete pomoc s bezhlavým nastavením Raspberry Pi, podívejte se na článek Jak nainstalovat a konfigurovat OS Raspberry Pi na Raspberry Pi 4 bez externího monitoru.
Níže jsou uvedeny obrázky všech požadovaných nástrojů.
Napájení na Raspberry Pi
Dále připojte napájecí kabel k Raspberry Pi a zapněte Raspberry Pi.
Jakmile je Raspberry Pi zapnutý, můžete se k Raspberry Pi připojit přes VNC nebo SSH. Nebo můžete k Raspberry Pi připojit klávesnici, myš a monitor, abyste k němu měli přímý přístup.
5V reléové pinouty
Relé je v podstatě spínač. Ale na rozdíl od tradičního spínače lze relé ovládat malým množstvím stejnosměrného napětí.
5V relé se velmi snadno používá. Má dvě strany: jedna strana se používá k ovládání relé pomocí nízkonapěťového stejnosměrného proudu (od Raspberry Pi) a druhá strana se používá k ovládání vysokého napětí AC (i.E., žárovka), v závislosti na stavu relé.
Na jedné straně má relé dvě LED (jedna červená a jedna zelená) a tři piny (IN, GND, a VCC). Tyto tři piny se používají k ovládání relé z Raspberry Pi.
První dva kolíky na druhé straně se používají k ovládání domácího spotřebiče.
Připojení 5V relé k Raspberry Pi
K připojení 5V relé k Raspberry Pi budete potřebovat tři propojovací vodiče žena-žena.
Připojte jednu stranu spojovacích vodičů k V (žlutý vodič), GND (černý vodič) a VCC (červený vodič) piny v 5V relé, jak je znázorněno níže.
Druhá strana vodičů jde do pinů záhlaví GPIO Raspberry Pi, jak je znázorněno na obrázku níže.
Červený vodič by měl jít do PIN 2 (VCC) Raspberry Pi.
Černý vodič by měl jít do PIN 6 (GND) Raspberry Pi.
Žlutý vodič by měl jít do PIN 7 (GPIO 4) Raspberry Pi.
Jakmile je 5V relé připojeno k Raspberry Pi, mělo by vypadat, jak je znázorněno na obrázku níže.
Povolení přístupu GPIO přihlašovacímu uživateli
Chcete-li povolit přístup k pinům GPIO, je to výchozí přihlašovací uživatel Raspberry Pi OS pi by měl být přidán do gpio skupina.
Můžete přidat pi uživatele do gpio skupina s následujícím příkazem:
$ sudo usermod -aG gpio $ (whoami)
Aby se změny projevily, restartujte Raspberry Pi pomocí následujícího příkazu:
Vytvoření adresáře projektu
Je také dobré udržovat všechny soubory projektu uspořádané.
Chcete-li mít soubory projektu uspořádané, vytvořte adresář projektu ~ / www a požadované podadresáře s následujícím příkazem:
$ mkdir -pv ~ / www / šablony, statické
Po vytvoření adresáře projektu přejděte do adresáře projektu následujícím způsobem:
Přepínání 5V relé z Raspberry Pi
Nyní, když jste připojili 5V relé k Raspberry Pi, přepnete relé z Raspberry Pi pomocí programovacího jazyka Python.
POZNÁMKA: Přepínání je termín používaný v elektronice. Přepínání znamená ovládání (tj.E. zapnutí / vypnutí) určitého elektronického zařízení.
Chcete-li experimentovat s přepínáním relé pomocí programovacího jazyka Python, vytvořte nový test skriptu Python.py v adresáři projektu takto:
$ nano test.py
Do testu zadejte následující řádky kódů.py Python skript.
od času importu spánku
zatímco je pravda:
relé = LED (4)
tisk ("Relé: zapnuto")
spánek (5)
relé.zavřít()
tisk ("Relé: Vypnuto")
spánek (5)
Po dokončení stiskněte
Zde se importuje řádek 1 VEDENÝ z gpiozero knihovna a řádek 2 importuje soubor spát funkce z čas knihovna.
Řádky 6-14 jsou v nekonečné smyčce.
Řádek 6 inicializuje LED v GPIO 4 Raspberry Pi, který je připojen k V pin relé.
Řádek 8 zapne relé pomocí na() metoda.
Řádek 9 vytiskne zprávu v konzole pomocí tisk() funkce.
Řádek 10 odkládá provádění dalšího řádku kódu o pět sekund pomocí spát() funkce.
Řádek 12 vypne relé pomocí zavřít() metoda.
Stejným způsobem řádek 9 vytiskne zprávu na konzole pomocí tisk() Funkce a řádek 10 zpožďují provádění dalšího řádku kódu o 5 sekund pomocí spát() funkce.
Dále spusťte test.py Skript v Pythonu takto:
The test.py Skript v Pythonu by měl začít přepínat 5V relé. Každých pět sekund byste měli slyšet kliknutí. Když relé přepne stav (ze zapnuto na vypnuto nebo z vypnuto na zapnuto), vydává cvakavý zvuk. To znamená, že relé funguje správně.
Pokud je relé ve vypnutém stavu (normální provoz - zátěž AC je odpojena), pouze Červené LED by se měla rozsvítit, jak vidíte na obrázku níže.
Když je relé v zapnutém stavu (je připojena zátěž AC), obě zelená LED a the Červené LED by se měla rozsvítit, jak vidíte na obrázku níže.
Po dokončení testování stiskněte
Připojení AC žárovky k 5V relé
5V relé by nyní mělo fungovat správně. Nyní připojíte svůj domácí spotřebič (v tomto případě žárovku) k 5V relé.
Nejprve odstřihněte elektrický vodič připojený k žárovce černý elektrický vodič.
Jakmile byl černý elektrický vodič připojený k žárovce přerušen řezačkou drátu, měl by vypadat, jak je znázorněno na obrázku níže.
Poté odstraňte vnější vrstvu, abyste odkryli asi 0,5 palce elektrického drátu, jak je znázorněno na obrázku níže.
Poté ohněte odkryté dráty, jak je znázorněno na obrázku níže.
Povolte označené šrouby relé pomocí šroubováku CV-3.
Vložte odkryté vodiče, které jste dříve odizolovali a složili, do dvou šroubových svorek a šrouby utáhněte šroubovákem CV-3.
Testování přepínání relé po připojení zátěže střídavým proudem
Jakmile je zátěž AC připojena k 5V relé, připojte zástrčku žárovky do zásuvky ve zdi.
Spusťte test.py Skript Pythonu z adresáře projektu takto:
The test.py Skript v Pythonu by měl začít přepínat 5V relé, které zase přepíná vysokonapěťovou střídavou žárovku v pětisekundových intervalech. Žárovka střídavého proudu by měla zůstat rozsvícená po dobu pěti sekund, poté by měla zůstat vypnutá po dobu pěti sekund atd.
Žárovka je na obrázku níže vypnutá.
Žárovka je na obrázku níže zapnutá.
Jak vidíte, můžeme přepínat relé a ovládat vysokonapěťovou střídavou žárovku pomocí programovacího jazyka Python. Takže stiskněte
Pojďme nyní k další části.
Psaní webové aplikace Home Automation
V této části vám ukážu, jak napsat webovou aplikaci založenou na API pomocí programovacího jazyka Python. Pomocí webové aplikace můžete ovládat relé a AC domácí spotřebiče nebo elektrická zařízení připojená k relé z webového prohlížeče.
POZNÁMKA: Všechny kódy zobrazené v této části jsou k dispozici v mém úložišti GitHub shovon8 / raspberry-pi-home-automation. Pokud chcete, můžete klonovat mé úložiště GitHub a přeskočit všechny kódy.
Vytvořte server.py Python skript v adresáři projektu takto:
$ nano server.py
Do řádku zadejte následující řádky kódů serveru.py Skript v Pythonu.
z importu LED gpiozero
z uuid import uuid4
pokoje =
pokoje ['Room 1'] = [
'id': uuid4 (),
'name': 'Light 1',
'icon': 'fa fa-lightbulb',
'status': False,
'reléPin': 4,
'relayInstance': False
,
'id': uuid4 (),
'name': 'Fan 1',
'icon': 'fa fa-fan',
'status': False,
'relayPin': 6,
'relayInstance': False
]
pokoje ['Koupelna 1'] = [
'id': uuid4 (),
'name': 'Light 1',
'icon': 'fa fa-lightbulb',
'status': False,
'reléPin': 5,
'relayInstance': False
]
aplikace = Baňka (__ name__)
aplikace.config ['SEND_FILE_MAX_AGE_DEFAULT'] = 0
@aplikace.trasa('/')
def home ():
vrátit render_template ('./index.html ', místnosti = místnosti)
def toggle_appliance_status (id):
pro pokoj v pokojích:
pro spotřebič v místnostech [místnost]:
if str (appliance ['id']) == id:
pokud zařízení ['reléInstance']:
zařízení ['reléInstance'].zavřít()
appliance ['relayInstance'] = Nepravda
jiný:
zařízení ['reléInstance'] = LED (zařízení ['reléPin'])
zařízení ['reléInstance'].na()
zařízení ['status'] = není zařízení ['stav']
vrátit True
vrátit False
@aplikace.trasa ('/ zařízení / přepnout /
def appliance_toggle (id):
vrátit jsonify ('status': toggle_appliance_status (id))
Po dokončení stiskněte
Zde řádky 1-3 importují všechny potřebné komponenty ze svých příslušných knihoven.
Řádek 5 vytvoří prázdný pokoje slovník. V tomto slovníku uložíme všechny podrobnosti o AC zařízení, které chceme ovládat z webové aplikace.
The pokoje podrobnosti jsou uloženy v řádcích 7-29.
Pojďme diskutovat o datové struktuře jedné z místností.
Zde bude název místnosti Pokoj 1. Tak, Pokoj 1 je klíčem k pokoje slovník.
The Pokoj 1 klíč obsahuje pole jako hodnotu. Počet prvků pole se rovná počtu AC domácích spotřebičů, které máte v dané místnosti a které také chcete ovládat z webové aplikace. V tomto případě máme dva domácí spotřebiče na střídavý proud, které chceme ovládat: Světlo 1 a Ventilátor 1.
Každá definice domácího spotřebiče má id. The id je náhodně generovaný UUID. To se používá k identifikaci, kterou místnost chceme ovládat pomocí API.
Domácí spotřebič má také všechny tyto vlastnosti:
- jméno (světlo 1 v tomto případě)
- ikona (Třída ikon Font Awesome, protože pro ikony budeme používat písmo Awesome)
- status (Pravda -li na a Nepravdivé -li vypnuto)
- reléPin (číslo PINu GPIO použitého k ovládání relé připojeného k domácímu střídavému spotřebiči)
- instance relé (inicializováno VEDENÝ předmět gpiozero knihovna odpovědná za ovládání příslušného pinu GPIO - reléPin)
Řádek 31 inicializuje bankovní webový server Python.
Řádek 32 konfiguruje bankovní webový server.
Řádky 34-36 posílají index.html soubor z šablony / při návštěvě webové aplikace pro automatizaci domácnosti.
Baňka používá Jinja2 šablonový jazyk k vykreslení index.html soubor. Takže jsem prošel pokoje slovník do index.html soubor. Jinja2 vykreslí domovskou stránku pomocí pokoje data.
Funkce toggle_appliance_status () na řádcích 39-52 se používá k zapnutí domácího spotřebiče, pokud je vypnutý, a k vypnutí domácího spotřebiče, pokud je zapnutý, pomocí id.
Vrací se Skutečný pokud je přepínací operace úspěšná. Pokud dojde k chybě, vrátí se Nepravdivé.
Řádky 55-57 se používají k přepínání domácího spotřebiče pomocí / zařízení / přepnout / Koncový bod API webového serveru. Tady, id je ID domácího spotřebiče.
Vytvořte index.html soubor v šablony / adresář projektu takto:
Do řádku zadejte následující řádky kódů index.html skript.
Domácí automatizace Raspberry Pi
% za pokoj v místnostech%
pokoj, místnost
% na zařízení v místnostech [room]%
zařízení ['název']
% endfor%
% endfor%
Po dokončení stiskněte
Vytvořit styl.css soubor v statický/ adresář projektu takto:
Do řádku zadejte následující řádky kódů styl.css soubor.
*
okraj: 0;
výplň: 0;
rodina fontů: 'BenchNine', sans-serif;
#content> h1
background: linear-gradient (to right, rgb (112, 24, 163), rgb (86, 127, 240));
barva: #fff;
zarovnání textu: na střed;
výplň: .5em 0;
div.pokoj, místnost
okraj: .5em;
ohraničení: 2px solid rgb (112, 24, 163);
poloměr ohraničení: 5px;
div.pokoj h2
/ * pozadí: rgb (9, 76, 121); * /
background: linear-gradient (to right, rgb (112, 24, 163), rgb (86, 127, 240));
polstrování: 0 0 0 .5em;
barva: #fff;
div.spotřebiče
okraj: .5em .5em 0 0;
displej: flex;
flex-wrap: zabalit;
div.spotřebič
ohraničení: 2px solid rgb (112, 24, 163);
poloměr ohraničení: 5px;
šířka: 110px;
výška: 120px;
zarovnání textu: na střed;
okraj: 0 0 .5em .5em;
displej: flex;
směr flexu: sloupec;
div.zařízení i.fa
velikost písma: 4em;
flex-grow: 1;
polstrování: 0.3em;
barva: rgb (204, 50, 50);
div.zařízení [data-active = "active"] i.fa
barva: rgb (32, 177, 51);
div.rozpětí zařízení
displej: blok;
váha písma: tučné;
pozadí: rgb (112, 24, 163);
barva: #fff;
Po dokončení stiskněte
Vytvořit aplikace.js soubor v statický/ adresář projektu takto:
Do řádku zadejte následující řádky kódů aplikace.js soubor.
funkce main ()
funkce toggleApplianceState (e)
var id = e.cesta [1].id;
var http = nový XMLHttpRequest ();
http.onreadystatechange = funkce ()
Pokud tohle.readyState === 4 && toto.stav === 200)
pokud (JSON.analyzovat (toto.responseText).status === true)
pokud (např.cesta [1].hasAttribute ('data-active'))
E.cesta [1].removeAttribute ('data-active')
else
E.cesta [1].setAttribute ('data-active', 'active')
http.open ("ZÍSKAT", '/ device / toggle / $ id', true);
http.poslat();
var zařízení = dokument.getElementsByClassName ('zařízení');
pro (i = 0; i < appliances.length; i++)
spotřebiče [i].addEventListener ('click', toggleApplianceState);
Po dokončení stiskněte
Tady řádek 1 provozuje hlavní() funkce po dokončení načítání webové stránky.
V index.html soubor, každý domácí spotřebič je uzavřen v souboru spotřebič třída. Řádky 26-29 slouží k výběru každého domácího spotřebiče z webové stránky a připojení klikněte událost k zařízení. Když někdo klikne na domácí spotřebič z webové stránky, toggleApplianceState () funkce bude spuštěna.
V řádcích 4-23 se toggleApplianceState () funkce se používá k vyžádání / zařízení / přepnout / koncový bod webového serveru pro změnu stavu klikaného domácího zařízení. Požadavek se zadává na pozadí prostřednictvím AJAX. Jakmile je odpověď přijata, webová stránka se odpovídajícím způsobem aktualizuje.
Přejděte na statický/ adresáře v adresáři projektu takto:
Stáhněte si písmo Awesome pomocí následujícího příkazu:
Po stažení písma Awesome byste měli najít nový soubor zip fontawesome-free-5.15.1 web.zip v statický/ adresář.
Rozbalte fontawesome-free-5.15.1 web.zip soubor s následujícím příkazem:
The fontawesome-free-5.15.1 web.zip soubor by nyní měl být rozbalen.
Nový adresář fontawesome-free-5.15.1 web / by měl být vytvořen ve statickém adresáři /, jak vidíte na následujícím obrázku.
Přejmenujte adresář fontawesome-free-5.15.1 web / na fontawesome / s následujícím příkazem:
$ mv -v fontawesome-free-5.15.1-webová písma skvělá
Nyní již nepotřebujete fontawesome-free-5.15.1 web.zip soubor. Takže odstraňte fontawesome-free-5.15.1 web.zip soubor s následujícím příkazem:
The statický/ adresářová struktura by měla vypadat, jak je znázorněno na následujícím obrázku.
Přejděte zpět do adresáře projektu ~ / www jak následuje:
Testování webové aplikace Home Automation
Chcete-li otestovat webovou aplikaci domácí automatizace, spusťte v adresáři projektu následující příkaz:
$ FLASK_APP = server.py baňka běh
Webová aplikace by měla být k dispozici na portu 5000 vašeho Raspberry Pi.
Ve webovém prohlížeči Chromium přejděte na adresu http: // localhost: 5000. Měla by se načíst webová aplikace pro domácí automatizaci.
Klikněte na ikonu žárovky označenou na obrázku níže.
AC žárovka by nyní měla být zapnutá. Barva ikony by se měla změnit také na zelenou, což znamená, že žárovka je zapnutá.
Webová aplikace pro automatizaci domácnosti tedy funguje. lis
Vytváření služby Systemd pro webovou aplikaci Home Automation
V této části vám ukážu, jak vytvořit soubor služby systemd pro webovou aplikaci domácí automatizace tak, aby se automaticky spouštěla při spuštění.
Nejprve vytvořte raspi-home-automation.servis soubor v adresáři projektu takto:
$ nano raspi-home-automation.servis
Zadejte následující řádky v raspi-home-automation.servisní soubor.
[Jednotka]Popis = Webová služba Raspberry Pi Home Automation
After = síť.cílová
[Servis]
WorkingDirectory = / home / pi / www
Prostředí = FLASK_APP = server.py
Prostředí = FLASK_ENV = produkce
ExecStart = / usr / bin / flask run --host = 0.0.0.0
StandardOutput = dědit
StandardError = dědit
Restartovat = vždy
Uživatel = pi
[Nainstalujte]
WantedBy = více uživatelů.cílová
Po dokončení stiskněte
Zkopírujte raspi-home-automation.servis soubor do / etc / systemd / system / adresář s následujícím příkazem:
Znovu načtěte systémové démony, aby se změny projevily následujícím způsobem:
Přidat raspi-home-automation služba spuštění systému Raspberry Pi OS pomocí následujícího příkazu:
Restartujte Raspberry Pi pomocí následujícího příkazu:
Jakmile se Raspberry Pi spustí, raspi-home-automation služba by měla být aktivní / spuštěná, jak vidíte na následujícím obrázku.
Přístup k webové aplikaci Home Automation z jiných zařízení
Pro přístup k webové aplikaci pro automatizaci domácnosti z jiných zařízení ve vaší domácí síti budete potřebovat znát IP adresu vašeho zařízení Raspberry Pi.
IP adresu vašeho zařízení Raspberry Pi 4 najdete z webového rozhraní pro správu vašeho domácího routeru. V mém případě je IP adresa 192.168.0.103. Bude to pro vás jiné. Nezapomeňte tedy od nynějška vyměnit moji IP za vaši.
Pokud máte přístup ke konzole Raspberry Pi, můžete také spustit následující příkaz a vyhledat IP adresu.
Jakmile znáte adresu IP vašeho zařízení Raspberry Pi, můžete k ní přistupovat z libovolného zařízení v domácí síti.
Jak vidíte na následujícím obrázku, přistoupil jsem k webové aplikaci domácí automatizace ze svého smartphonu se systémem Android.
Nezapomeňte zapojit zástrčku žárovky do zásuvky ve zdi.
Žárovka by měla být ve výchozím nastavení vypnutá.
Pokud klepnete na ikonu žárovky z webové aplikace pro domácí automatizaci, barva ikony žárovky by se měla změnit na zelenou, což znamená, že žárovka je zapnutá.
Jak vidíte na obrázku níže, žárovka je zapnutá.
Závěr
Tento článek vám ukázal, jak pomocí 5V relé ovládat vysokonapěťové střídavé elektrické zařízení z Raspberry Pi pomocí programovacího jazyka Python. Článek vám také ukázal, jak napsat webovou aplikaci založenou na API Python flask pro ovládání přenosu z webového prohlížeče. Tento článek by vám měl pomoci začít s domácí automatizací pomocí Raspberry Pi.