Obsah:

Senzor teploty domácí sítě: 7 kroků
Senzor teploty domácí sítě: 7 kroků

Video: Senzor teploty domácí sítě: 7 kroků

Video: Senzor teploty domácí sítě: 7 kroků
Video: Jak odemknout fabii bez klíčů rukama za 2 vteřiny 2024, Listopad
Anonim
Senzor teploty domácí sítě
Senzor teploty domácí sítě

Co potřebujete k vytvoření tohoto projektu:

Potřebujete vědět o:- některých znalostech elektroniky (pájení)

- Linux

- Arduino IDE

(budete muset aktualizovat další desky v IDE:

- aktualizace/programování desky ESP prostřednictvím Arduino IDE.

(na webu je k dispozici několik pěkných návodů)

To lze provést pomocí Arduino Uno nebo pomocí FTDI (USB na sériový adaptér).

Použil jsem své Uno, protože jsem na PC neměl žádný sériový port ani FTDI

Krok 1: Jděte nakupovat

Jít nakupovat
Jít nakupovat

Co budete potřebovat, aby se to stalo?

Pro digitální snímač teploty a vlhkosti:

- Buď prkénko, nebo alternativa jako prototyp desky plošných spojů, pájka, páječka…

- Nějaký drát

- dva propojky

- odpor 10 kOhm

- ESP12F (mohou fungovat i jiné modely …)

- DHT22 (o něco dražší než DHT11, ale přesnější)

- 3 dobíjecí baterie AA a držák na baterie

- malá plastová krabička, do které vložíte svůj projekt

- V pozdější fázi plánuji přidat HT7333 se dvěma 10uF kondenzátory mezi baterii a ESP

stabilizovat vstupní napětí (VCC) na doporučených 3,3 V, ale také chránit ESP před přepětím.

Pro část Síť:

- Vaše domácí WiFi síť

Pro serverovou část:

- Jakýkoli systém založený na Linuxu (vždy zapnutý!)

Použil jsem Raspberry Pi (který také používám jako server pro své venkovní IP kamery.)

- kompilátor gcc pro kompilaci kódu vašeho serveru

- balíček rrdtool pro ukládání dat a generování grafů

- Apache (nebo jiný webový server)

Váš oblíbený počítač nebo notebook s Arduino IDE.

Krok 2: Nastavení a pozadí

Nastavení a pozadí
Nastavení a pozadí

V této verzi WiFi připojeného - nemluvě o IOT - senzoru teploty a vlhkosti jsem použil ESP12F, DHT22 a držák 3 AA baterií s dobíjecími bateriemi.

ESP každých 20 minut provede měření z DHT22 a odešle ho na server (Raspberry Pi) přes UDP v mé domácí WiFi síti. Po odeslání měření přejde ESP do hlubokého spánku. To znamená, že pouze hodiny reálného času modulu zůstávají napájeny, což má za následek neuvěřitelnou úsporu energie. Po dobu přibližně 5 sekund modul vyžaduje přibližně 100 mA, poté během 20 minut hlubokého spánku pouze 150uA.

Nechtěl jsem používat žádnou internetovou službu, protože mám svůj Raspberry Pi, který je stále zapnutý, a tímto způsobem jsem měl to potěšení napsat také serverovou část.

Na server (Raspberry Pi se systémem Raspbian) jsem napsal jednoduchý UDP posluchač (server), který ukládá hodnoty do jednoduchého RRD. (Round Robin Database using RRDtool by Tobias Oetiker.)

Výhodou RRDtool je, že vytvoříte databázi jednou a velikost zůstane stejná. Jinak nemusíte mít databázový server (jako mySQLd) spuštěný na pozadí. RRDtool vám poskytuje nástroje pro vytváření databáze a generování grafů.

Můj server vytváří grafy pravidelně a zobrazuje vše na velmi jednoduché stránce http. Své údaje mohu konzultovat pomocí jednoduchého prohlížeče připojením k webovému serveru Apache2 na Raspberry Pi!

Nakonec jsem neměl FTDI (USB to Serial), takže jsem použil Arduino UNO. Musíte propojit TX a RX a GND ESP a UNO. (Vím, váš instinkt vám může napovědět, abyste překročil RX a TX … zkusil to také, nefunguje.)

Neprovedl jsem převod úrovně (UNO: High = 5V, ale ESP je v podstatě zařízení 3,3V … Na trhu je několik pěkných FTDI, kde si můžete dokonce vybrat vysokou úroveň na 5 nebo 3,3V.

Můj obvod je napájen 3 dobíjecími bateriemi AA - tedy vlastně 3 X 1,2V. V pozdější fázi mám v úmyslu umístit HT7333 mezi baterii a obvod pro bezpečnost; nově nabité baterie by mohly mít více než 1,2 V a ESP by měl být napájen min. 3V a max. 3,6 V. Také pokud se rozhodnu - ve chvíli slabosti - vložit alkalické baterie (3 X 1,5 V = 4,5 V), moje ESP nebude smažené!

Také jsem zvažoval použití solárního panelu 10 cm x 10 cm, ale nestálo to za to se trápit. Doufám, že provedením 3 měření za hodinu (v zásadě 3x 5 sekund při max. 100mA a po zbytek času při 100uA) napájím svůj obvod 1 rok na stejné dobíjecí baterie.

Krok 3: Část Arduino - ESP12

Část Arduino - ESP12
Část Arduino - ESP12
Část Arduino - ESP12
Část Arduino - ESP12

Tento projekt jsem dělal v různých krocích.

Existuje několik odkazů, které vám pomohou importovat ESP12 (aka. ESP8266) do Arduino IDE. (Musel jsem použít verzi 2.3.0 místo nejnovější kvůli chybě, která mohla být mezitím vyřešena …)

Začal jsem připojením ESP přes Arduino UNO (používá se pouze jako most mezi mým počítačem přes USB k sériovému) k sériovému rozhraní ESP. Vysvětlují to samostatné pokyny.

V mém dokončeném projektu jsem nechal dráty pro připojení k Serial pro případ, že bych někdy potřeboval vyřešit problém. RX

Poté musíte svůj ESP12 zapojit následujícím způsobem:

ESP piny…

GND UNO GND

RX UNO RX

TX UNO TX

EN VCC

GPIO15 GND

Zpočátku jsem zkoušel napájet svůj ESP z 3,3 V na UNO, ale rychle jsem se přesunul k napájení mého ESP pomocí stolního napájecího zdroje, ale můžete použít i baterii.

GPIO0 Ten jsem propojil propojkou na GND, aby bylo možné blikat (= programovat) ESP.

První test: nechte propojku otevřenou a spusťte sériový monitor v Arduino IDE (na 115200 baudů!).

Vypněte a zapněte ESP, měli byste vidět nějaké nesmyslné znaky a poté zprávu jako:

Ai-Thinker Technology Co. Ltd. připravena

V tomto režimu funguje ESP trochu jako staromódní modem. Musíte použít AT příkazy.

Zkuste následující příkazy:

AT+RST

a následující dva příkazy

AT+CWMODE = 3

OK

AT+CWLAP

To by vám mělo poskytnout seznam všech WiFi sítí v této oblasti.

Pokud to funguje, jste připraveni na další krok.

Krok 4: Testování ESP jako klienta NTP (Network Time Protocol)

Testování ESP jako klienta NTP (Network Time Protocol)
Testování ESP jako klienta NTP (Network Time Protocol)
Testování ESP jako klienta NTP (Network Time Protocol)
Testování ESP jako klienta NTP (Network Time Protocol)

Do IDE Arduino v části Soubor, Příklady, ESP8266WiFi načtěte NTPClient.

Aby to fungovalo, jsou zapotřebí drobné úpravy; musíte zadat SSID a heslo vaší WiFi sítě.

Nyní umístěte propojku zkratující GPIO0 na GND.

Vypněte a zapněte ESP a nahrajte skicu do ESP.

Po kompilaci by mělo začít nahrávání do ESP. Modrá LED na ESP bude rychle blikat během stahování kódu.

Všiml jsem si, že jsem si musel trochu pohrát s restartováním IDE a restartováním ESP, než bude nahrávání fungovat.

Než začnete kompilovat/nahrávat skicu, nezapomeňte zavřít sériovou konzolu (= sériový monitor), protože to vám zabrání v odeslání.

Jakmile je odeslání úspěšné, můžete znovu otevřít sériový monitor, abyste viděli, jak ESP efektivně získává čas z internetu.

Skvělé, naprogramovali jste ESP, připojili se k WiFi a získali čas z internetu.

V dalším kroku otestujeme DHT22.

Krok 5: Testování snímače DHT22

Testování snímače DHT22
Testování snímače DHT22

Nyní je zapotřebí nějaké další zapojení.

Piny DHT… Připojte kolík 1 (vlevo) senzoru k VCC (3,3 V)

Připojte pin 2 ESP GPIO5 (DHTPIN v náčrtu)

Připojte kolík 4 (vpravo) senzoru ke ZEMI

Připojte 10K odpor od pinu 2 (data) ke kolíku 1 (napájení) senzoru.

Podobně jako u testu NTP najděte skicu DHTtester a upravte ji následujícím způsobem:

#define DHTPIN 5 // vybrali jsme GPIO5 pro připojení k senzoru#definujte DHTTYPE DHT22 // protože používáme DHT22, ale tento kód/knihovna je také vhodný pro DHT11

Opět zavřete sériový monitor, vypněte a zapněte ESP a kompilujte a flashujte ESP.

Pokud vše půjde dobře, měli byste vidět měření zobrazená na sériovém monitoru.

Se senzorem si můžete trochu pohrát. Pokud na to dýcháte, uvidíte, jak vlhkost stoupá.

Pokud máte stolní lampu (bez LED), můžete si na senzor posvítit, aby se trochu zahřál.

Skvělý! Dvě velké části senzoru nyní fungují.

V dalším kroku se vyjádřím ke konečnému kódu.

Krok 6: Dát to dohromady…

Dát to dohromady…
Dát to dohromady…

Opět nějaké další zapojení … to je, aby byl DeepSleep možný.

Nezapomeňte, že DeepSleep je neuvěřitelná funkce pro zařízení IoT.

Pokud je však váš senzor pevně zapojen pro DeepSleep, může být obtížné přeprogramovat ESP, takže se chystáme vytvořit další propojovací spojení mezi

GPIO16-RST.

Ano, MUSÍ to být GPIO16, protože to je GPIO, které je pevně připojeno k probuzení zařízení, když se po DeepSleep vypnou hodiny reálného času!

Během testování se můžete rozhodnout provést 15s DeepSleep.

Když jsem ladil, přemístil jsem propojku na GPIO0, abych mohl flashovat svůj program.

Po dokončení stahování bych přemístil propojku na GPIO16, aby DeepSleep fungoval.

Kód pro ESP se nazývá TnHclient.c

Musíte změnit své SSID, heslo a IP adresu vašeho serveru.

Existují další řádky kódu, které můžete použít k řešení potíží nebo k otestování vašeho nastavení.

Krok 7: Serverová stránka věcí

Serverová stránka věcí
Serverová stránka věcí
Serverová stránka věcí
Serverová stránka věcí

Je běžným nedorozuměním, že UDP je nespolehlivý a TCP je …

To je stejně hloupé, jako říkat, že kladivo je užitečnější než šroubovák. Jsou to prostě různé velmi užitečné nástroje a oba mají své využití.

Mimochodem, bez UDP by internet nefungoval … DNS je založeno na UDP.

Vybral jsem si proto UDP, protože je velmi lehký, snadný a rychlý.

Mám tendenci si myslet, že moje WiFi je velmi spolehlivá, takže klient pošle maximálně 3 UDP pakety, pokud potvrdí „OK!“není přijat.

C-kód pro TnHserver je v souboru TnHServer.c.

V kódu je vysvětleno několik komentářů.

Na serveru budeme potřebovat nějaké další nástroje: rrdtool, apache a možná tcpdump.

Chcete-li nainstalovat rrdtool na Raspbian, můžete jednoduše nainstalovat balíček takto: apt-get install rrdtool

Pokud potřebujete ladit síťový provoz, přijde vhod tcpdump apt-get install tcpdump

Potřeboval jsem webový server, abych mohl používat prohlížeč k prohlížení grafů: apt-get install apache2

K získání příkazu k vytvoření databáze Round Robin jsem použil tento nástroj: https://rrdwizard.appspot.com/index.php. Stačí to spustit jednou (pokud to správně pochopíte poprvé).

rrdtool create TnHdatabase.rrd --start now-10s

--krok '1200'

'DS: Teplota: GAUGE: 1200: -20,5: 45,5'

'DS: Vlhkost: GAUGE: 1200: 0: 100,0'

'RRA: PRŮMĚR: 0,5: 1: 720'

'RRA: PRŮMĚR: 0,5: 3: 960'

'RRA: PRŮMĚR: 0,5: 18: 1600'

Nakonec pomocí položky crontab restartuji svůj TnHserver každý den o půlnoci. Spouštím TnHserver jako normální uživatel (tj. NE root) jako bezpečnostní opatření.

0 0 * * */usr/bin/pkill TnHserver; /home/user/bin/TnHserver>/dev/null 2> & 1

Můžete zkontrolovat, zda je TnHserver spuštěn

$ ps -elf | grep TnHserver

a můžete ověřit, že naslouchá paketům na portu 7777

$ netstat -anu

Aktivní připojení k internetu (servery a navázané)

Proto Recv-Q Send-Q Místní adresa Stav cizí adresy

udp 0 0 0.0.0.0:7777 0.0.0.0:*

Nakonec CreateTnH_Graphs.sh.txt je ukázkový skript pro generování grafů. (Skripty generuji jako root, možná to nebudete chtít udělat.)

Pomocí velmi jednoduché webové stránky můžete sledovat grafy z libovolného prohlížeče ve vaší domácí síti.

Doporučuje: