Obsah:

Pool Pi Guy - poplašný systém řízený AI a monitorování bazénu pomocí Raspberry Pi: 12 kroků (s obrázky)
Pool Pi Guy - poplašný systém řízený AI a monitorování bazénu pomocí Raspberry Pi: 12 kroků (s obrázky)

Video: Pool Pi Guy - poplašný systém řízený AI a monitorování bazénu pomocí Raspberry Pi: 12 kroků (s obrázky)

Video: Pool Pi Guy - poplašný systém řízený AI a monitorování bazénu pomocí Raspberry Pi: 12 kroků (s obrázky)
Video: The mind behind Linux | Linus Torvalds | TED 2024, Červenec
Anonim
Pool Pi Guy - poplašný systém řízený AI a monitorování bazénu pomocí Raspberry Pi
Pool Pi Guy - poplašný systém řízený AI a monitorování bazénu pomocí Raspberry Pi

Mít doma bazén je zábava, ale přichází s velkou zodpovědností. Mojí největší starostí je sledování, jestli je někdo poblíž bazénu bez dozoru (zejména mladší děti). Mojí největší nepříjemností je zajistit, aby potrubí vody v bazénu nikdy nekleslo pod vstup čerpadla, což by čerpadlo spustilo na sucho a zničilo by to náklady na opravy $$$.

Nedávno jsem přišel na to, jak používat Raspberry Pi s OpenCV a TensorFlow spolu se snímačem hladiny vody a solenoidovým ventilem k vyřešení obou problémů - a bavit se tím!

Ukázalo se, že je to také skvělý poplašný systém - aktivovaný pohybem, ovládaný AI, nekonečně přizpůsobitelný.

Pojďme se ponořit.

Krok 1: Velký plán

V tomto pokynu ukážeme, jak:

  1. Nastavte si Raspberry Pi pomocí OpenCV a TensorFlow
  2. Připojte webovou kameru pomocí dlouhého kabelu USB
  3. Napište algoritmus OpenCV pro detekci pohybu
  4. K detekci objektů použijte TensorFlow
  5. Nastavte si na Raspberry Pi webový server, který bude zobrazovat zajímavé obrázky
  6. Integrujte s IFTTT a spusťte mobilní upozornění v případě detekce osoby
  7. Připojte k Raspberry Pi relé HAT a připojte jej k solenoidovému ventilu, který by přidával vodu do bazénu
  8. Připojte k Raspberry Pi snímač hladiny vody a propojte jej pomocí GPIO Pi
  9. Napište nějaký kód, abyste to všechno slepili

Krok 2: Nákupní seznam

Nákupní seznam
Nákupní seznam

Všechny komponenty jsou snadno dostupné na Amazonu. Nebojte se experimentovat a vyměňovat komponenty - to je polovina zábavy!

  1. Raspberry Pi
  2. Napájení Raspberry Pi (zde nešetřete)
  3. Paměťová karta (čím větší, tím lepší)
  4. Pouzdro (toto je dostatečně velké na umístění Pi i HAT)
  5. Webová kamera USB (postačí jakákoli webová kamera, ale chcete takovou, která získá dobrý obraz a dobře vyváží osvětlení)
  6. Prodlužovací kabel USB (v případě potřeby - změřte vzdálenost mezi Pi a místem, kam byste kameru umístili)
  7. Reléová deska HAT (tato má 3 relé a potřebujeme pouze jedno, ale brzy najdete využití i pro ostatní!)
  8. Solenoid
  9. Solenoidová armatura 1 a Fitting 2 (to opravdu závisí na tom, na co solenoid namontujete, ale tyto fungovaly pro mě)
  10. Solenoidový napájecí zdroj (postačí jakýkoli 24V AC)
  11. Kabel (opět by stačil téměř jakýkoli 2žilový kabel - proud je minimální)
  12. Plovákový spínač hladiny vody (to je jen příklad, zkontrolujte, co lze snadno připojit k vašemu bazénu)
  13. Některé propojovací vodiče a drátové konektory

Krok 3: Nastavení Raspberry Pi

Nastavte si Raspberry Pi
Nastavte si Raspberry Pi

Raspberry Pi je skvělý malý počítač. Stojí pouhých 35 USD, běží konzistentně a má spoustu kompatibilního softwaru a hardwaru. Nastavení je celkem snadné:

  1. Naformátujte kartu SD. To vyžaduje zvláštní péči - Raspberry Pi lze zavést pouze z karty SD naformátované FAT. Postupujte podle těchto pokynů.
  2. Připojte Raspberry Pi k USB klávesnici a myši, plus HDMI displeji a postupujte podle pokynů v tutoriálu Raspberry Pi NOOBS. Nezapomeňte nastavit WiFi a povolit přístup SSH. Nezapomeňte nastavit heslo pro výchozí účet pi.
  3. Ve vaší domácí síti nastavte statickou IP adresu pro Raspberry Pi - SSH by bylo mnohem jednodušší.
  4. Ujistěte se, že máte na počítači/notebooku nainstalován ssh klient. Pro PC bych doporučil Putty, který si můžete nainstalovat odtud.
  5. Odpojte USB a HDMI z Raspberry Pi, restartujte jej a ssh do něj - pokud to všechno fungovalo, měli byste vidět něco takového:

Linux raspberrypi 4.14.98-v7+ #1200 SMP Út 12. února 20:27:48 GMT 2019 armv7l

Programy zahrnuté v systému Debian GNU/Linux jsou svobodný software; přesné distribuční podmínky pro každý program jsou popsány v jednotlivých souborech v/usr/share/doc/*/copyright. Debian GNU/Linux je dodáván s ABSOLUTNĚ ŽÁDNOU ZÁRUKOU, v rozsahu povoleném platnými zákony. Poslední přihlášení: Po 13. května 10:41:40 2019 od 104.36.248.13 pi@raspberrypi: ~ $

Krok 4: Nastavení OpenCV

Nastavení OpenCV
Nastavení OpenCV

OpenCV je úžasná sbírka funkcí pro manipulaci s obrázky pro počítačové vidění. Umožní nám to číst obrázky z webové kamery, manipulovat s nimi, abychom našli pohybové oblasti, uložili je a další. Nastavení na Raspberry Pi není obtížné, ale vyžaduje určitou péči.

Začněte instalací virtaulenvwrapper: k veškerému programování použijeme python a virtualenv nám pomůže udržet oddělené závislosti pro OpenCV a TensorFlow vs. Flask nebo GPIO:

pi@raspberrypi: ~ $ sudo pip install virtualenvwrapper

Nyní můžete spustit „mkvirtualenv“, abyste vytvořili nové prostředí, „workon“, na kterém budete pracovat, a další.

Pojďme tedy vytvořit prostředí pro naši manipulaci s obrázky, s pythonem 3 jako výchozím interpretem (je rok 2019, není důvod se držet staršího pythonu 2):

pi@raspberrypi: ~ $ mkvirtualenv cv -p python3

… (Cv) pi@raspberrypi: ~

Nyní jsme připraveni nainstalovat OpenCV. Většinou budeme sledovat vynikající tutoriál v Learn OpenCV. Konkrétně postupujte podle jejich kroků 1 a 2:

sudo apt -y aktualizaceudo apt -y upgrade ## Instalace závislostí sudo apt-get -y instalace build-essential checkinstall cmake pkg-config yasm sudo apt-get -y install git gfortran sudo apt-get -y install libjpeg8-dev libjasper- dev libpng12-dev sudo apt-get -y install libtiff5-dev sudo apt-get -y install libtiff-dev sudo apt-get -y install libavcodec-dev libavformat-dev libswscale-dev libdc1394-22-dev sudo apt-get- y nainstalujte libxine2-dev libv4l-dev cd/usr/include/linux sudo ln -s -f../libv4l1-videodev.h videodev.h sudo apt-get -y install libgstreamer0.10-dev libgstreamer-plugins-base0. 10-dev sudo apt-get -y install libgtk2.0-dev libtbb-dev qt5-default sudo apt-get -y install libatlas-base-dev sudo apt-get -y install libmp3lame-dev libtheora-dev sudo apt-get -y install libvorbis-dev libxvidcore-dev libx264-dev sudo apt-get -y install libopencore-amrnb-dev libopencore-amrwb-dev sudo apt-get -y install libavresample-dev sudo apt-get -y install x264 v4l-utils sudo apt -get -y install libprotobuf -dev protobuf-kompilátor sudo apt-get -y install libgoogle-glog-dev libgflags-dev sudo apt-get -y install libgphoto2-dev libeigen3-dev libhdf5-dev doxygen sudo apt-get install libqtgui4 sudo apt-get install libqt4- test

Nyní můžeme jen nainstalovat OpenCV s vazbami pythonu uvnitř cv virtualenv (jste v něm stále, že?) Pomocí

pip install opencv-contrib-python

A to je vše! Na našem Raspberry Pi máme nainstalovaný OpenCV, připraven zachytit fotografie a videa, manipulovat s nimi a být skvělý.

Zkontrolujte to otevřením interpretu pythonu a importem opencv a zkontrolujte, zda nejsou žádné chyby:

(cv) pi@raspberrypi: ~ $ python

Python 3.5.3 (výchozí, 27. září 2018, 17:25:39) [GCC 6.3.0 20170516] na linuxu Pro další informace zadejte „help“, „copyright“, „credits“nebo „license“. >>> import cv2 >>>

Krok 5: Nastavení TensorFlow

Nastavte TensorFlow
Nastavte TensorFlow

TensorFlow je rámec strojového učení / AI vyvinutý a spravovaný společností Google. Má rozsáhlou podporu pro modely hlubokého učení pro různé úkoly, včetně detekce objektů v obrazech, a nyní je instalace na Raspberry Pi poměrně jednoduchá. Výkon jeho lehkých modelů na malém Pi se pohybuje kolem 1 snímku za sekundu, což je naprosto dostačující pro aplikaci, jako je ta naše.

V zásadě se budeme řídit vynikajícím výukovým programem společnosti Edje Electronics s úpravami, které umožňují novější distribuce TensorFlow:

pi@raspberrypi: ~ $ workon cv

(cv) pi@raspberrypi: ~ $ pip install tensorflow (cv) pi@raspberrypi: ~ $ sudo apt-get install libxml2-dev libxslt-dev (cv) pi@raspberrypi: ~ $ pip install polštář lxml jupyter matplotlib cython (cv) pi@raspberrypi: ~ $ sudo apt-get install python-tk

Nyní musíme sestavit protobuf Google. Postupujte podle pokynů v kroku 4 stejného skvělého tutoriálu

Nakonec klonujte a nastavte definice modelu TensorFlow - postupujte podle kroku 5 v tutoriálu Edje Electronics

Neváhejte následovat jejich příklad i v kroku 6, je to skvělý úvod do detekce objektů na Raspberry Pi.

Krok 6: Detekce pohybu pomocí OpenCV

Začněme testováním, že OpenCV může komunikovat s naší webovou kamerou: ssh do Raspberry Pi, přejděte na cv virtualenv (workon cv), otevřete překladač pythonu (stačí zadat python) a zadejte následující příkazy pythonu:

importovat cv2

cap = cv2. VideoCapture (0) cap.set (cv2. CAP_PROP_FRAME_WIDTH, 1920) cap.set (cv2. CAP_PROP_FRAME_HEIGHT, 1080) ret, frame = cap.read () print ('Přečíst velikost rámečku: {} x {}'.format (frame.shape [1], frame.shape [0])

Při troše štěstí uvidíte, že OpenCV dokázal z kamery přečíst rámeček HD.

Můžete použít cv2.imwrite (cesta, rámeček) k zápisu tohoto rámečku na disk a sftp zpět, abyste získali skutečný vzhled.

Strategie detekce pohybu je poměrně přímočará:

  1. Práce na rámečcích s nižším rozlišením - zde není třeba pracovat na plném HD
  2. Dále rozmazejte obrázky, abyste zajistili co nejméně šumu.
  3. Udržujte průběžný průměr posledních N snímků. U této aplikace, kde se snímková frekvence pohybuje kolem 1 FPS (jen proto, že TensorFlow trvá určitý čas na snímek), jsem zjistil, že N = 60 vrací dobré výsledky. A protože pečlivá implementace nezabírá více CPU s více snímky, je to v pořádku (zabírá to více paměti - ale to je zanedbatelné, když pracujeme s rámečky s nižším rozlišením)
  4. Odečtěte aktuální obrázek od běžného průměru (jen buďte opatrní při psaní - musíte počítat s kladnými a zápornými hodnotami [-255.. 255], takže rámeček je třeba převést na int)
  5. Odečtení můžete provést při převodu rámce (a průměru) v šedém měřítku, nebo to provést samostatně pro každý z kanálů RGB a poté zkombinovat výsledky (což je strategie, kterou jsem zvolil, takže je citlivá na změny barev)
  6. Použijte práh na deltu a odstraňte hluk erozí a dilatací
  7. Nakonec vyhledejte obrysy oblastí s deltou - v těchto oblastech došlo k pohybu a aktuální obrázek se liší od průměru předchozích obrázků. V případě potřeby můžeme pro tyto obrysy dále najít ohraničující rámečky.

Zapouzdřil jsem kód, abych to udělal ve třídě pythonů DeltaFinder, kterou najdete v mém githubu zde

Krok 7: Detekce objektů pomocí TensorFlow

Pokud jste dodrželi postup instalace TensorFlow, již jste vyzkoušeli, že máte TensorFlow nainstalovaný a funkční.

Pro účely detekce osob na obecné venkovní scéně fungují modely, které jsou předem vyškoleny v datové sadě COCO, docela dobře - což je přesně ten model, který jsme stáhli na konci instalace TensorFlow. Musíme to jen použít pro odvození!

Znovu jsem zapouzdřil načítání a odvozování modelu ve třídě pythonů TFClassify, aby bylo vše snazší, což najdete zde.

Krok 8: Nastavení webového serveru na Raspberry Pi

Nastavte si webový server na Raspberry Pi
Nastavte si webový server na Raspberry Pi

Nejjednodušší způsob, jak získat přístup k výsledkům detekce objektů, je webový prohlížeč, pojďme tedy nastavit webový server na Raspberry Pi. Poté jej můžeme nastavit tak, aby zobrazoval obrázky z daného adresáře.

Existuje několik možností pro rámec webového serveru. Vybral jsem si Flask. Je extrémně konfigurovatelný a lze jej snadno rozšířit pomocí Pythonu. Protože „měřítko“, které potřebujeme, je triviální, bylo to více než dost.

Doporučuji nainstalovat do nového virtualenv, takže:

pi@raspberrypi: ~ $ mkvirtualenv webserv

(webserv) pi@raspberrypi: ~ $ pip install Flask

Všimněte si toho, že s běžným nastavením sítě bude dosažitelné pouze tehdy, když je váš prohlížeč ve stejné bezdrátové síti LAN jako váš Raspberry Pi. Na svém internetovém routeru můžete vytvořit konfiguraci mapování portů / NAT a povolit externí přístup - ale to nedoporučuji. Kód, který jsem napsal, se nepokouší poskytnout zabezpečení, které byste potřebovali při povolení obecného přístupu k internetu k vašemu Raspberry Pi.

Otestujte svou instalaci podle rychlého průvodce Flask

Krok 9: Mobilní oznámení z Raspberry Pi pomocí IFTTT

Mobilní oznámení z Raspberry Pi pomocí IFTTT
Mobilní oznámení z Raspberry Pi pomocí IFTTT

Opravdu chci dostávat mobilní oznámení, když dojde k událostem. V tomto případě, když je detekována osoba a když hladina vody klesne. Nejjednodušší způsob, jak jsem toho dosáhl, aniž bych musel psát vlastní mobilní aplikaci, je použití IFTTT. IFTTT znamená „If This Then That“a umožňuje mnoha typům událostí spouštět mnoho typů akcí. V našem případě nás zajímá spoušť IFTTT Maker Webhook. To nám umožňuje spustit akci IFTTT odesláním požadavku HTTP POST na server IFTTT pomocí speciálního klíče přiřazeného k našemu účtu spolu s údaji, které určují, co se stalo. Akce, kterou provedeme, může být stejně jednoduchá jako vytvoření oznámení na našem mobilním zařízení pomocí mobilní aplikace IFTTT nebo cokoli složitějšího.

Zde je postup, jak to udělat:

  1. Vytvořte si účet IFTTT na ifttt.com
  2. Když jste přihlášeni, přejděte na stránku nastavení služby Webhook a do prohlížeče zadejte adresu URL (něco jako https://maker.ifttt.com/use/. Tato webová stránka vám ukáže váš klíč a adresu URL, kterou je třeba použít ke spuštění akcí.
  3. Vytvořte aplet IFTTT, který bude generovat mobilní oznámení při spuštění Webhooku s podrobnostmi o události:

    1. Klikněte na „Moje aplety“a poté na „Nový aplet“.
    2. Klikněte na „+toto“a vyberte „webhooky“. Kliknutím na „Přijmout webový požadavek“přejděte k podrobnostem
    3. Pojmenujte svou událost, např. „PoolEvent“a klikněte na „Vytvořit spoušť“
    4. Klikněte na „+to“a vyberte „oznámení“. Poté vyberte „Odeslat podrobné oznámení z aplikace IFTTT“
    5. Pro „název“vyberte něco jako „PoolPi“
    6. Pro „zprávu“napište „Pool Pi detekováno:“a klikněte na „přidat přísadu“.. „Hodnota1“.
    7. Vraťte se na adresu URL, kterou jste zkopírovali v kroku 2. Zobrazí adresu URL, která se má použít k vyvolání nově vytvořeného apletu. Zkopírujte tuto adresu URL a nahraďte zástupný symbol {event} názvem události (v příkladu PoolEvent)
  4. Stáhněte si, nainstalujte a přihlaste se k aplikaci IFTTT pro své mobilní zařízení
  5. Spusťte tento skript pythonu na svém Raspberry Pi, aby fungoval (spuštění na vašem mobilním zařízení může trvat několik sekund nebo minut):

importovat žádosti

requests.post ('https://maker.ifttt.com/trigger/PoolEvent/with/key/', json = {"value1": "Hello Notifications"})

Krok 10: Přidejte reléový klobouk k Raspberry Pi a připojte jej k elektromagnetickému ventilu

Přidejte k Raspberry Pi relé HAT a připojte jej k solenoidovému ventilu
Přidejte k Raspberry Pi relé HAT a připojte jej k solenoidovému ventilu
Přidejte k Raspberry Pi relé HAT a připojte jej k elektromagnetickému ventilu
Přidejte k Raspberry Pi relé HAT a připojte jej k elektromagnetickému ventilu
Přidejte k Raspberry Pi relé HAT a připojte jej k elektromagnetickému ventilu
Přidejte k Raspberry Pi relé HAT a připojte jej k elektromagnetickému ventilu

Než budete pokračovat tímto krokem, VYPNĚTE Raspberry Pi: ssh a zadejte „sudo shutdown now“, poté jej odpojte od napájení

Naším cílem je zapnout a vypnout napájení solenoidového ventilu - ventilu, který může otevřít nebo zavřít přívod vody na základě 24V střídavého proudu, který získává z napájecího zdroje. Relé jsou elektrické součásti, které mohou otevřít nebo uzavřít obvod na základě digitálního signálu, který může poskytnout náš Raspberry Pi. Co zde děláme, je připojit relé k těmto digitálním signálním kolíkům Raspberry Pi a nechat jej uzavřít obvod mezi napájecím zdrojem 24 V AC a solenoidovým ventilem.

Piny na Raspberry Pi, které mohou fungovat jako digitální vstup nebo výstup, se nazývají GPIO - General Purpose Input/Output a jsou řadou 40 pinů na boku Pi. S vypnutým Pi a pevně do něj zasuňte relé HAT. Klobouk, který jsem si vybral, obsahuje 3 relé a použijeme pouze jedno z nich. Představte si, co všechno můžete udělat s dalšími dvěma:)

Nyní Raspberry Pi znovu zapněte. Červená LED „napájení“na relé HAT by se měla rozsvítit, což znamená, že získává energii z Pi prostřednictvím GPIO. Zkusme, že to můžeme ovládat: ssh do Pi znovu, zadejte python a napište:

importovat gpiozero

dev = gpiozero. DigitalOutputDevice (26, initial_value = True) dev.off ()

Měli byste slyšet slyšitelné „cvaknutí“, což naznačuje, že je relé sepnuto, a rozsvítit se dioda LED, která ukazuje, že první relé je v připojené poloze. Nyní můžete psát

dev.on ()

Který by přepnul relé do polohy „vypnuto“(liché, já vím …) a ukončil () z pythonu.

Nyní pomocí propojovacích kabelů a delšího kabelu propojte relé mezi zdrojem 24 V a elektromagnetickým ventilem. Viz schéma. Nakonec pomocí adaptérů připojte solenoidový ventil k faucetu a připravte se vše vyzkoušet opakováním výše uvedených příkazů - měly by zapínat a vypínat vodu.

Připojte hadici k elektromagnetickému ventilu a druhý konec vložte hluboko do bazénu. Nyní máte počítačem řízený systém doplňování bazénu a je čas připojit senzor, který vám řekne, kdy se má spustit.

Krok 11: Připojte snímač hladiny vody

Připojte snímač hladiny vody
Připojte snímač hladiny vody
Připojte snímač hladiny vody
Připojte snímač hladiny vody
Připojte snímač hladiny vody
Připojte snímač hladiny vody
Připojte snímač hladiny vody
Připojte snímač hladiny vody

Senzor hladiny vody je jednoduše plovák, který spojuje elektrický obvod, když je plovák dole, a rozbije ho, když se vznáší nahoru. Pokud jej vložíte do bazénu ve správné výšce, plovák bude nahoře, když je hladina vody adekvátní, ale klesne, když není dostatek vody.

Aby Raspberry Pi poznalo stav snímače hladiny vody, potřebujeme, aby Pi snímalo otevřený nebo uzavřený okruh. Naštěstí je to velmi jednoduché: stejné vstupy GPIO, které používáme jako digitální výstup pro ovládání relé, mohou fungovat jako vstupy (proto I v GPIO). Konkrétně pokud připojíme jeden vodič senzoru k +3,3 V na konektoru GPIO a druhý vodič senzoru na pin, který nakonfigurujeme jako rozevírací vstup (to znamená, že bude normálně na úrovni napětí GND), bude tento pin měřit digitální „vysoké“nebo „zapnuté“napětí pouze tehdy, když snímač hladiny vody uzavře obvod - když je hladina vody nízká. Jako vstup jsem použil GPIO pin 16, který jsem označil na obrázku výše.

Kód pythonu pro konfiguraci pinu jako vstupu a testování jeho aktuálního stavu je:

importovat gpiozero

level_input = gpiozero. Button (16) water_low = level_input.is_pressed

Jednou potenciální výzvou je, že když senzor změní stav, bude rychle oscilovat mezi stavy zapnutí a vypnutí. Řešení je známé jako „odskakování“a hledá konzistentní změnu stavu, než něco podnikne. Knihovna GPIOZERO má na to kód, ale z nějakého důvodu mi tento kód nefungoval dobře. Napsal jsem jednoduchou smyčku pro spuštění výstrah IFTTT, když je detekována konzistentní změna stavu, kterou najdete v mém úložišti zde.

Krok 12: Napište kód, abyste vše spojili

Napište kód, abyste vše spojili
Napište kód, abyste vše spojili

A je to. Naše nastavení je kompletní. Můžete napsat svůj vlastní kód a spojit věci dohromady do úplného systému, nebo použít kód, který poskytnu. Chcete -li to provést, vytvořte adresářovou strukturu a klonujte úložiště takto:

mkdir poolpi

cd poolpi git klon

Dále upravte soubory s názvem ifttt_url.txt v adresářích motion_alert a water_level, aby měly adresu URL pro váš vlastní webový háček IFTTT s vaším tajným klíčem. Pro různé akce můžete použít dva různé webové háčky.

Nakonec chceme, aby se tento kód spustil automaticky. Nejjednodušší způsob, jak toho dosáhnout, je prostřednictvím služby Linux crontab. Můžeme přidat několik řádků crontab pro dva hlavní úkoly:

  1. Při každém restartu spusťte naše tři programy: detektor objektů, snímač hladiny vody a webový server
  2. Vyčistěte výstupní adresář, odstraňte staré obrázky a staré video soubory (rozhodl jsem se odstranit soubory starší než 1 den a obrázky starší než 7 dní - můžete experimentovat)

Chcete -li to provést, zadejte crontab -e, který otevře váš nano textový editor. Do spodní části souboru přidejte následující řádky:

0 1 * * * find/home/pi/poolpi/output -type f -name " *.avi" -mtime +1 -delete

0 2 * * * find/home/pi/poolpi/output -type f -name " *.jpg" -mtime +7 -delete @reboot python3 /home/pi/poolpi/motion_alert/webserv/webserv.py @reboot python3 /home/pi/poolpi/motion_alert/motion_obj_alert.py @reboot python3 /home/pi/poolpi/water_level/test_water_level.py

Nakonec restartujte Raspberry Pi. Nyní je připraven udržovat váš bazén plný a bezpečný.

Pohrajte si s nastavením, kódem a nezapomeňte označit své úložiště github hvězdičkou a komentovat pokyny, pokud vám to přijde užitečné. Vždy se snažím dozvědět se více.

Šťastné tvoření!

IoT výzva
IoT výzva
IoT výzva
IoT výzva

Vítěz soutěže IoT Challenge

Doporučuje: