Obsah:

Super jednoduchá domácí automatizace Raspberry Pi 433 MHz: 7 kroků
Super jednoduchá domácí automatizace Raspberry Pi 433 MHz: 7 kroků

Video: Super jednoduchá domácí automatizace Raspberry Pi 433 MHz: 7 kroků

Video: Super jednoduchá domácí automatizace Raspberry Pi 433 MHz: 7 kroků
Video: Zigbee, Thread, Matter a Espressif (Petr Stehlík) 2024, Listopad
Anonim
Super jednoduchá domácí automatizace Raspberry Pi 433 MHz
Super jednoduchá domácí automatizace Raspberry Pi 433 MHz

Tento tutoriál je jedním z mnoha, pokud jde o používání Raspberry Pi k ovládání bezdrátových zařízení v domácnosti. Stejně jako mnoho dalších vám ukáže, jak používat levný pár vysílač/přijímač připojený k vašemu Pi pro interakci se zařízeními pracujícími na běžně používaném rádiovém frekvenčním pásmu 433 MHz. Konkrétně vám ukáže, jak zapnout nebo vypnout jakékoli elektrické zařízení pomocí vašeho Pi přenosem příkazů do sady dálkově ovládaných zásuvek 433 MHz.

Proč jsem vytvořil tento návod, když jich již tolik existuje? Především proto, že se zdálo, že téměř všechny ostatní návody, na které jsem narazil, věci příliš komplikují, zejména po softwarové stránce. Všiml jsem si, že při veškeré práci hodně spoléhají na knihovny, skripty nebo fragmenty kódu třetích stran. Mnozí by ani nevysvětlili, co dělá základní kód - jen by vás požádali, abyste na svůj Pi strčili dva nebo tři kusy softwaru a spustili spoustu příkazů, bez otázek. Opravdu jsem chtěl zkusit a použít svůj Pi k zapnutí a vypnutí elektrických zařízení v okolí mého domova pomocí sady 433MHz dálkově ovládaných zásuvek, ale chtěl jsem vytvořit vlastní verzi systému, které bych rozuměl, doufejme, že eliminuji potřebu použijte cizí knihovny nebo skripty.

O tom je tento návod. Softwarová stránka tohoto systému se skládá ze dvou velmi jednoduchých skriptů Pythonu - jednoho pro příjem a záznam signálů a druhého pro přenos těchto signálů zpět do bezdrátových napájecích zásuvek. Skutečný příjem/přenos signálu závisí pouze na snadno použitelné knihovně RPi. GPIO, která, alespoň pro mě, byla předinstalována s Raspbianem. Tuto knihovnu lze také importovat přímo do Pythonu.

Pro tento projekt budete potřebovat:

Raspberry Pi. Každý model by měl fungovat, použil jsem startovací sadu vše v jednom, ale možná potřebujete pouze centrální jednotku

Dvojice vysílač/přijímač 433 MHz. Zdá se, že nejčastěji používanými v tomto typu projektu jsou tyto. Nákup balíčku pěti kusů, jako je ten propojený, zajistí, že budete mít několik náhradních dílů

Sada dálkově ovládaných zásuvek 433 MHz. Použil jsem tyto, které bych velmi doporučil, ale je k dispozici nespočet modelů. Jen se ujistěte, že fungují na této frekvenci

Některé doplňky pro stavbu obvodů. Doporučil bych použít prkénko a nějaké propojovací kabely, aby byl proces budování obvodu co nejjednodušší.

[Pokud se rozhodnete koupit některý z těchto produktů, velmi bych ocenil, kdybyste k výpisům přistupovali pomocí výše uvedených odkazů - tímto způsobem získám malý podíl na zisku bez dalších nákladů!]

Krok 1: Nastavení přijímací jednotky

Nastavení přijímací jednotky
Nastavení přijímací jednotky

Než budete moci pomocí svého Pi posílat příkazy do dálkově ovládaných zásuvek, musíte vědět, na jaké konkrétní signály reagují. Většina dálkově ovládaných zásuvek je dodávána se sluchátkem, které lze použít k zapnutí nebo vypnutí konkrétních jednotek. V případě těch, které jsem koupil, má sluchátko čtyři řady spárovaných tlačítek ON/OFF, z nichž každé vysílá signál ON nebo OFF do konkrétní zásuvkové jednotky.

Nabízí se otázka - jak poznáme, která tlačítka odpovídají které zásuvce? To skutečně závisí na modelu, který máte. Jedním z hlavních důvodů, proč jsem si vybral svůj konkrétní styl zásuvky (propojený v úvodu), je to, že jednotky lze konfigurovat pomocí fyzického přepínače, aby konkrétní zásuvka reagovala na konkrétní sadu tlačítek ON/OFF na sluchátku. To také znamená, že můžete odpojit a přemístit zásuvky po domě s vědomím, že každá jednotka bude vždy reagovat na stejné signály ON/OFF.

Jakmile zjistíte, jak vaše zásuvky komunikují se sluchátkem, budete muset použít přijímací jednotku 433 MHz (na obrázku výše) k „čichání“kódů vysílaných sluchátkem. Jakmile zaznamenáte průběhy těchto kódů, můžete je replikovat pomocí Pythonu a odeslat pomocí vysílače.

První věcí, kterou zde musíte udělat, je propojit piny na vašem přijímači se správnými piny GPIO na Pi. Přijímací jednotka má čtyři piny, ale jsou potřeba pouze tři. Myslím, že oba centrální piny dávají stejný výstup, takže se stačí připojit pouze k jednomu z nich (pokud nechcete přijímané signály streamovat na dva samostatné piny GPIO).

Obrázek výše do značné míry shrnuje zapojení. Každý pin na přijímači může být připojen přímo k odpovídajícímu kolíku na Pi. Aby to bylo o něco elegantnější, používám strouhanku a propojovací kabely. Všimněte si, že si můžete vybrat jakýkoli datový pin GPIO pro připojení k jakémukoli pinu centrálního přijímače. Na hlavičce Pi jsem použil kolík označený jako „23“.

DŮLEŽITÉ: Pokud připojíte pin označený na výše uvedeném obrázku jako „3v3“k pinu s vyšším napětím na Pi (např. 5v), pravděpodobně poškodíte Pi, protože piny GPIO nemohou tolerovat napětí nad 3v3. Alternativně jej můžete napájet 5v a nastavit dělič napětí pro odeslání bezpečného napětí na pin DATA.

Dosah přijímače při tomto napětí nebude příliš velký, zvláště pokud není připojena anténa. Zde však nepotřebujete dlouhý dosah - pokud přijímač dokáže zachytit signály ze sluchátka, když jsou drženy těsně vedle sebe, to je vše, co potřebujeme.

Krok 2: Čichání kódů sluchátka

Čichání kódů sluchátka
Čichání kódů sluchátka

Nyní, když je váš přijímač připojen k Pi, můžete zahájit první vzrušující fázi tohoto projektu - čichání. To zahrnuje použití přiloženého skriptu Python k záznamu signálu přenášeného sluchátkem po stisknutí každého tlačítka. Skript je velmi jednoduchý a vřele doporučuji, abyste si jej před spuštěním prohlédli - koneckonců jde o to, že tento projekt nebudete jen slepě spouštět kód někoho jiného!

Než tento proces spustíte, budete se muset ujistit, že máte knihovny Pythonu potřebné ke spuštění skriptu sniffer. Jsou uvedeny v horní části skriptu:

z datetime import datetime

importovat matplotlib.pyplot jako pyplot importovat RPi. GPIO jako GPIO

Knihovny RPi. GPIO a datetime byly součástí mé distribuce Raspbian, ale knihovnu matplotlib jsem musel nainstalovat následujícím způsobem:

sudo apt-get install python-matplotlib

Tato knihovna je běžně používaná knihovna pro vykreslování grafů, která je velmi užitečná i mimo tento projekt, takže její instalace rozhodně nemůže uškodit! Jakmile budou vaše knihovny aktuální, můžete začít nahrávat data. Skript funguje takto:

Když je spuštěn (pomocí příkazu 'python ReceiveRF.py'), nakonfiguruje definovaný GPIO pin jako datový vstup (standardně pin 23). Poté bude průběžně vzorkovat pin a zaznamenávat, zda přijímá digitální 1 nebo 0. Toto pokračuje po nastavenou dobu (standardně 5 sekund). Po dosažení tohoto časového limitu skript zastaví záznam dat a zavře vstup GPIO. Poté provede malé následné zpracování a vykreslí přijatou vstupní hodnotu proti času. Opět platí, že pokud máte otázky ohledně toho, co skript dělá, pravděpodobně si na ně odpovíte sami poté, co se podíváte, jak funguje. Snažil jsem se, aby byl kód co nejčitelnější a nejjednodušší.

Co musíte udělat, je dávat pozor, když skript indikuje, že má ** Zahájeno nahrávání **. Jakmile se zobrazí tato zpráva, měli byste asi na sekundu stisknout a podržet jedno z tlačítek na sluchátku. Držte jej blízko přijímače. Jakmile skript dokončí nahrávání, použije matplotlib k vykreslení grafického průběhu signálu, který obdržel během intervalu záznamu. Vezměte prosím na vědomí, že pokud jste připojeni ke svému Pi pomocí klienta SSH, jako je PuTTY, budete také muset otevřít aplikaci X11, která umožní zobrazení průběhu. K tomu používám xMing (a pro jiné věci, jako je vzdálená plocha do mého Pi). Chcete -li zobrazit graf, jednoduše spusťte xMing před spuštěním skriptu a počkejte, až se zobrazí výsledky.

Jakmile se zobrazí okno matplotlib, zájmová oblast v grafu by měla být docela zřejmá. Pomocí ovládacích prvků ve spodní části okna můžete přibližovat, dokud nebudete schopni rozeznat výšky a minima signálu vysílaného sluchátkem, zatímco bylo tlačítko přidrženo. Příklad kompletního kódu najdete na výše uvedeném obrázku. Signál bude pravděpodobně sestávat z velmi krátkých impulsů oddělených podobnými časovými obdobími, kdy není přijímán žádný signál. Po tomto bloku krátkých impulsů bude pravděpodobně následovat delší období, kdy není přijímáno nic, po kterém se vzor opakuje. Jakmile identifikujete vzor patřící k jedné instanci kódu, udělejte snímek obrazovky v horní části této stránky a pokračujte dalším krokem k jeho interpretaci.

Krok 3: Přepis výsledného signálu

Přepis výsledného signálu
Přepis výsledného signálu

Nyní, když jste identifikovali blok periodických maxim a minimů odpovídajících signálu konkrétního tlačítka, budete potřebovat způsob jeho uložení a interpretace. Ve výše uvedeném příkladu signálu si všimnete, že existují pouze dva jedinečné vzory, které tvoří celý signální blok. Někdy vidíte krátké výškové pásmo, za kterým následuje dlouhé nízké, a někdy je tomu naopak - dlouhé výškové pásmo následované krátkým nízkým. Když jsem přepisoval své signály, rozhodl jsem se použít následující konvenci pojmenování:

1 = short_on + long_off0 = long_on + short_off

Znovu se podívejte na označený průběh a uvidíte, co tím myslím. Jakmile identifikujete ekvivalentní vzory ve vašem signálu, stačí pro vytvoření sekvence spočítat 1 a 0. Při přepisu lze výše uvedený signál zapsat následujícím způsobem:

1111111111111010101011101

Nyní stačí tento postup zopakovat, abyste zaznamenali a přepsali signály odpovídající ostatním tlačítkům na vašem sluchátku, a dokončili jste první část procesu!

Než budete moci znovu vysílat signály pomocí vysílače, čeká vás ještě trochu práce. Načasování mezi maximy a minimy odpovídajícími 1 nebo 0 je velmi důležité a musíte se ujistit, že víte, jak dlouho trvá 'short_on' nebo 'long_off'. U mých kódů byly tři informace o časování, které jsem potřeboval extrahovat, abych replikoval signály:

  • Trvání „krátkého“intervalu, tj. Začátek 1 nebo konec 0.
  • Trvání „dlouhého“intervalu, tj. Konec 1 nebo začátek 0.
  • Trvání „prodlouženého“intervalu. Všiml jsem si, že když jsem držel tlačítko na sluchátku, mezi každou opakovanou instancí signálního bloku byla prodleva 'extended_off'. Toto zpoždění se používá pro synchronizaci a má pevné trvání.

Chcete -li určit tyto hodnoty časování, můžete použít funkci přiblížení v okně matplotlib pro úplné přiblížení a umístění kurzoru na příslušné části signálu. Zobrazení polohy kurzoru v dolní části okna by vám mělo umožnit určit, jak široká je každá část signálu, která odpovídá dlouhému, krátkému nebo prodlouženému intervalu. Všimněte si, že osa x grafu představuje čas a složka x odečtu kurzoru je v jednotkách sekund. Pro mě byly šířky následující (v sekundách):

  • short_delay = 0,00045
  • long_delay = 0,00090 (dvakrát delší než 'short')
  • extended_delay = 0,0096

Krok 4: Nastavení jednotky vysílače

Nastavení jednotky vysílače
Nastavení jednotky vysílače

Jakmile shromáždíte své kódy a data o načasování, můžete přijímací jednotku odpojit, protože ji již nebudete potřebovat. Poté můžete vysílač zapojit přímo na příslušné piny Pi GPIO, jak je znázorněno na výše uvedeném obrázku. Zjistil jsem, že kolíky na jednotkách vysílače jsou označeny, což proces usnadňuje.

V tomto případě je v pořádku napájet jednotku pomocí napájení 5 V z Pi, protože pin DATA nebude posílat signály na Pi, pouze je přijímat. Napájení 5v také poskytne větší přenosový rozsah než použití zdroje 3v3. Opět můžete pin DATA připojit k jakémukoli vhodnému pinu na Pi. Použil jsem pin 23 (stejný jako u přijímače).

Další věc, kterou bych doporučil, je přidat anténu do malého otvoru v pravém horním rohu vysílače. Použil jsem 17 cm dlouhý kus rovného drátu. Některé zdroje doporučují stočený drát podobné délky. Nejsem si jistý, co je lepší, ale přímý vodič poskytuje dostatečný rozsah pro zapnutí/vypnutí zásuvek z jakéhokoli místa v mém malém bytě. Nejlepší je pájet anténu, ale já jsem jen odstranil část plastu z drátu a omotal měď otvorem.

Jakmile je vysílač zapojen, je hotovo nastavení hardwaru! Jediné, co teď musíte udělat, je nastavit zásuvky kolem domu a podívat se na program vysílače.

Krok 5: Přenos signálů pomocí Pi

Zde přichází druhý skript Pythonu. Je navržen tak, aby byl stejně jednoduchý jako první, ne -li ještě více. Znovu si jej prosím stáhněte a prohlédněte si kód. Skript budete muset upravit tak, aby přenášel správné signály podle údajů, které jste zaznamenali v kroku 3, takže teď je ten správný čas se na něj rychle podívat.

Knihovny potřebné ke spuštění tohoto skriptu byly všechny předem nainstalovány na mém Pi, takže žádná další instalace nebyla nutná. Jsou uvedeny v horní části skriptu:

čas importu

import sys import RPi. GPIO jako GPIO

Pod importy knihovny jsou informace, které budete muset upravit. Takto to vypadá ve výchozím nastavení (toto jsou informace odpovídající mým zásuvkám podle kroku 3):

a_on = '111111111111101010101111101'

A_OFF = '1111111111111010101010111' b_on = '1111111111101110101011101' b_off = '1111111111101110101010111' c_on = '1111111111101011101011101' c_off = '1111111111101011101010111' d_on = '1111111111101010111011101' d_off = '1111111111101010111010111' short_delay = 0,00045 long_delay = 0,00090 extended_delay = 0,0096

Zde máme osm kódových řetězců (dva pro každý pár tlačítek zapnutí/vypnutí na mém sluchátku - můžete mít více nebo méně kódů) následovaných třemi informacemi o načasování, které jsou také určeny v kroku 3. Udělejte si čas a ujistěte se, že máte zadal tyto informace správně.

Jakmile jste spokojeni s kódy/zpožděními, které jste zadali do skriptu (můžete přejmenovat proměnné řetězce kódu, pokud chcete), jste téměř připraveni systém vyzkoušet! Než to uděláte, podívejte se na funkci transmit_code () ve skriptu. Zde dochází ke skutečné interakci s vysílačem. Tato funkce očekává, že jeden z řetězců kódu bude odeslán jako argument. Poté otevře definovaný pin jako výstup GPIO a prochází každým znakem v řetězci kódu. Poté zapne nebo vypne vysílač podle informací o časování, které jste zadali, abyste vytvořili tvar vlny odpovídající řetězci kódu. Každý kód odesílá několikrát (ve výchozím nastavení 10), aby se snížila pravděpodobnost jeho zmeškání, a mezi každým blokem kódu je ponecháno extended_delay, stejně jako u sluchátka.

Ke spuštění skriptu můžete použít následující syntaxi příkazu:

python TransmitRF.py code_1 code_2…

Jediným spuštěním skriptu můžete přenášet více řetězců kódu. Chcete -li například zapnout sokety (a) a (b) a sokety (c) vypnout, spusťte skript pomocí následujícího příkazu:

python TransmitRF.py a_on b_on c_off

Krok 6: Poznámka k přesnosti načasování

Jak již bylo zmíněno, načasování mezi vysílanými impulsy zapnutí/vypnutí je docela důležité. Skript TransmitRF.py využívá funkci python's time.sleep () k vytváření průběhů se správnými intervaly impulzů, ale je třeba poznamenat, že tato funkce není zcela přesná. Délka, po kterou způsobí, že skript čeká před provedením další operace, může záviset na zatížení procesoru v daném okamžiku. To je další důvod, proč TransmitRF.py posílá každý kód vícekrát - jen v případě, že funkce time.sleep () není schopna správně vytvořit danou instanci kódu.

Osobně jsem nikdy neměl problémy s time.sleep (), pokud jde o odesílání kódů. Vím však, že můj time.sleep () mívá chybu asi 0,1 ms. Určil jsem to pomocí přiloženého skriptu SleepTest.py, který lze použít k odhadu přesnosti funkce time.sleep () vašeho Pi. Pro mé konkrétní dálkově ovládané zásuvky bylo nejkratší zpoždění, které jsem potřeboval implementovat, 0,45 ms. Jak jsem řekl, neměl jsem problémy s nereagujícími zásuvkami, takže se zdá, že 0,45 ± 0,1 ms je dost dobré.

Existují i jiné metody pro zajištění přesnějšího zpoždění; například můžete ke generování kódů použít vyhrazený čip PIC, ale podobné věci přesahují rámec tohoto tutoriálu.

Krok 7: Závěr

Závěr
Závěr

Tento projekt představil způsob ovládání jakéhokoli elektrického zařízení pomocí Raspberry Pi a sady 433MHz dálkově ovládaných zásuvek se zaměřením na jednoduchost a transparentnost. Toto je nejzajímavější a nejflexibilnější projekt, pro který jsem použil svůj Pi, a existují pro něj neomezené aplikace. Zde je několik věcí, které nyní mohu dělat díky svému Pi:

  • Půl hodiny před spuštěním alarmu zapněte vedle mé postele elektrický ohřívač.
  • Vypněte topení hodinu poté, co jsem šel spát.
  • Když mi zazvoní budík, rozsviťte mi noční světlo, abych nespadl spát.
  • a mnoho dalších…

Pro většinu těchto úkolů používám funkci crontab v Linuxu. To vám umožní nastavit automatické naplánované úlohy pro spuštění skriptu TransmitRF.py v konkrétních časech. Příkaz Linux at můžete také použít ke spouštění jednorázových úkolů (které pro mě bylo třeba nainstalovat samostatně pomocí 'sudo apt-get install at'). Například, abych mohl zapnout topení půl hodiny před tím, než se mi druhý den ráno spustí alarm, stačí napsat:

v 05:30

python TransmitRF.py c_on

Tento projekt můžete také použít ve spojení s mým domácím monitorovacím systémem Dropbox k ovládání spotřebičů přes internet! Děkujeme za přečtení a pokud byste chtěli něco objasnit nebo se podělit o svůj názor, napište komentář!

Doporučuje: