Obsah:

Senzor teploty domácej siete: 7 krokov
Senzor teploty domácej siete: 7 krokov

Video: Senzor teploty domácej siete: 7 krokov

Video: Senzor teploty domácej siete: 7 krokov
Video: Умное окно - автоматизация проветривания комнаты, интеграция в Home Assistant 2024, November
Anonim
Snímač teploty domácej siete
Snímač teploty domácej siete

Čo potrebujete vedieť k realizácii tohto projektu:

Potrebujete vedieť o:- niektorých znalostiach elektroniky (spájkovanie)

- Linux

- Arduino IDE

(budete musieť aktualizovať ďalšie dosky v IDE:

- aktualizácia/programovanie dosky ESP prostredníctvom Arduino IDE.

(na webe je k dispozícii niekoľko pekných návodov)

To sa dá urobiť pomocou Arduino Uno alebo pomocou FTDI (USB na sériový adaptér).

Použil som svoje Uno, pretože som v počítači nemal žiadny sériový port ani FTDI

Krok 1: Choďte na nákupy

Ísť nakupovať
Ísť nakupovať

Čo budete potrebovať, aby sa to stalo?

Pre digitálny snímač teploty a vlhkosti:

- Buď nepájivá doska, alebo alternatíva ako prototyp plošných spojov, spájkovačka, spájkovačka …

- Nejaký drôt

- dvaja skokani

- odpor 10 kOhm

- ESP12F (môžu fungovať aj iné modely …)

- DHT22 (o niečo drahší ako DHT11, ale presnejší)

- 3 nabíjateľné batérie AA a držiak na batérie

- malá plastová škatuľka, do ktorej môžete vložiť svoj projekt

- V neskoršej fáze plánujem pridať HT7333 s dvoma 10uF kondenzátormi medzi batériu a ESP

na stabilizáciu vstupného napätia (VCC) na odporúčaných 3,3 V ale aj na ochranu ESP pred prepätím.

Pokiaľ ide o časť Sieť:

- Vaša domáca sieť WiFi

Pokiaľ ide o časť servera:

- Akýkoľvek systém založený na Linuxe (vždy zapnutý!)

Použil som Raspberry Pi (ktorý tiež používam ako server pre svoje vonkajšie IP kamery.)

- kompilátor gcc na kompiláciu kódu servera

- balík rrdtool na ukladanie údajov a generovanie grafov

- apache (alebo iný webový server)

Váš obľúbený počítač alebo prenosný počítač so systémom Arduino IDE.

Krok 2: Nastavenie a pozadie

Nastavenie a pozadie
Nastavenie a pozadie

V tejto verzii senzora teploty a vlhkosti pripojeného k WiFi, nehovoriac o IOT, som použil ESP12F, DHT22 a držiak batérií 3 AA s nabíjateľnými batériami.

ESP každých 20 minút vykoná meranie z DHT22 a odošle ho na server (Raspberry Pi) cez UDP v mojej domácej sieti WiFi. Po odoslaní meraní ESP prejde do hlbokého spánku. To znamená, že iba hodiny reálneho času modulu zostanú napájané, čo má za následok neuveriteľnú úsporu energie. Modul potrebuje asi 5 sekúnd asi 100mA, potom počas 20 minút hlbokého spánku iba 150uA.

Nechcel som používať žiadnu službu založenú na internete, pretože mám Raspberry Pi, ktoré je vždy zapnuté, a týmto spôsobom som mal to potešenie napísať aj serverovú časť.

Na server (Raspberry Pi so systémom Raspbian) som napísal jednoduchý poslucháč UDP (server), ktorý ukladá hodnoty do jednoduchého RRD. (Databáza Round Robin pomocou RRDtool od Tobiasa Oetikera.)

Výhodou RRDtool je, že databázu vytvoríte raz a veľkosť zostane rovnaká. Inak nemusíte mať na pozadí spustený databázový server (napríklad mySQLd). RRDtool vám ponúka nástroje na vytvorenie databázy a generovanie grafov.

Môj server vytvára grafy pravidelne a zobrazuje všetko na veľmi jednoduchej http stránke. Môžem si prečítať svoje údaje pomocou jednoduchého prehliadača po pripojení k webovému serveru Apache2 na Raspberry Pi!

Nakoniec som nemal FTDI (USB to Serial), takže som použil Arduino UNO. Musíte prepojiť TX a RX a GND ESP a UNO. (Viem, váš inštinkt vám môže povedať, aby ste prekročili RX a TX … skúsil to tiež, nefunguje.)

Neurobil som konverziu úrovne (UNO: High = 5V, ale ESP je v zásade zariadenie 3,3V … Na trhu je niekoľko pekných FTDI, kde si môžete dokonca vybrať vysokú úroveň 5 alebo 3,3V.

Môj obvod je napájaný 3 nabíjateľnými batériami AA - teda v skutočnosti 3 x 1,2 V. V neskoršej fáze mám v úmysle vložiť HT7333 medzi batériu a obvod kvôli bezpečnosti; novo nabité batérie môžu mať viac ako 1,2 V a ESP by mal byť napájaný min. 3V a max. 3,6 V. Tiež, ak sa rozhodnem - vo chvíli slabosti - vložiť alkalické batérie (3 X 1,5 V = 4,5 V), moje ESP nebude vyprážané!

Tiež som zvažoval použitie solárneho panelu 10 cm x 10 cm, ale nestálo to za to sa trápiť. Dúfam, že vykonaním 3 meraní za hodinu (v zásade 3x 5 sekúnd pri max. 100mA a zvyšnom čase pri 100uA) napájam svoj obvod 1 rok na rovnaké nabíjateľné batérie.

Krok 3: Časť Arduino - ESP12

Arduino - časť ESP12
Arduino - časť ESP12
Arduino - časť ESP12
Arduino - časť ESP12

Tento projekt som robil v rôznych krokoch.

Existuje niekoľko odkazov, ktoré vám pomôžu importovať ESP12 (aka. ESP8266) do Arduino IDE. (Musel som použiť verziu 2.3.0 namiesto najnovšej kvôli chybe, ktorá mohla byť medzitým vyriešená …)

Začal som zapojením ESP cez svoje Arduino UNO (používa sa iba ako most medzi mojím počítačom cez USB do sériového portu) do sériového rozhrania ESP. Vysvetľujú to samostatné pokyny.

V mojom dokončenom projekte som nechal káble na pripojenie k sériovému portu pre prípad, že by som niekedy potreboval vyriešiť problém. RX

Potom musíte zapojiť svoj ESP12 nasledovne:

Kolíky ESP…

GND UNO GND

RX UNO RX

TX UNO TX

EN VCC

GPIO15 GND

Spočiatku som sa pokúšal napájať môj ESP z 3,3 V na UNO, ale rýchlo som prešiel na napájanie svojho ESP pomocou stolného zdroja, ale môžete použiť aj batériu.

GPIO0 Pripojil som tento prepojkou na GND, aby bolo možné blikať (= programovať) ESP.

Prvý test: nechajte prepojku otvorenú a spustite sériový monitor v Arduino IDE (pri 115 200 baudoch!).

Vypnite a zapnite ESP, mali by ste vidieť niekoľko nezmyselných znakov a potom správu ako:

Ai-Thinker Technology Co. Ltd. pripravená

V tomto režime funguje ESP trochu ako zastaraný modem. Musíte použiť AT príkazy.

Skúste nasledujúce príkazy:

AT+RST

a nasledujúce dva príkazy

AT+CWMODE = 3

OK

AT+CWLAP

To by vám malo poskytnúť zoznam všetkých WiFi sietí v tejto oblasti.

Ak to funguje, ste pripravení na ďalší krok.

Krok 4: Testovanie ESP ako klienta NTP (Network Time Protocol)

Testovanie ESP ako klienta NTP (Network Time Protocol)
Testovanie ESP ako klienta NTP (Network Time Protocol)
Testovanie ESP ako klienta NTP (Network Time Protocol)
Testovanie ESP ako klienta NTP (Network Time Protocol)

Do IDE Arduino v časti Súbor, Príklady, ESP8266WiFi načítajte NTPClient.

Aby to fungovalo, sú potrebné drobné úpravy; musíte zadať SSID a heslo vašej siete WiFi.

Teraz umiestnite prepojku skratujúcu GPIO0 na GND.

Vypnite a zapnite ESP a nahrajte skicu do ESP.

Po kompilácii by sa malo začať nahrávanie do ESP. Modrá LED na ESP bude rýchlo blikať počas sťahovania kódu.

Všimol som si, že sa musím trochu pohrať s reštartovaním IDE, reštartovaním ESP, než bude nahrávanie fungovať.

Predtým, ako začnete zostavovať/nahrávať skicu, zatvorte sériovú konzolu (= sériový monitor), pretože vám to zabráni v odosielaní.

Akonáhle je nahrávanie úspešné, môžete znova otvoriť sériový monitor, aby ste videli, ako ESP efektívne získava čas z internetu.

Skvelé, naprogramovali ste ESP, pripojili sa k WiFi a získali ste čas z internetu.

V ďalšom kroku otestujeme DHT22.

Krok 5: Testovanie senzora DHT22

Testovanie senzora DHT22
Testovanie senzora DHT22

Teraz je potrebné ďalšie zapojenie.

Piny DHT … Pripojte pin 1 (vľavo) senzora k VCC (3,3 V)

Pripojte pin 2 ESP GPIO5 (DHTPIN v náčrte)

Pripojte kolík 4 (vpravo) senzora k ZEMNI

Pripojte 10K odpor z kolíka 2 (údaje) k kolíku 1 (výkon) senzora.

Podobne ako pri teste NTP, nájdite skicu DHTtester a upravte ju nasledujúcim spôsobom:

#define DHTPIN 5 // vybrali sme GPIO5 na pripojenie k senzoru#definujte DHTTYPE DHT22 // pretože používame DHT22, ale tento kód/knižnica je vhodná aj pre DHT11

Opäť zatvorte sériový monitor, vypnite a zapnite ESP a skompilovajte a flashujte ESP.

Ak všetko pôjde dobre, mali by ste vidieť merania uvedené na sériovom monitore.

So senzorom sa môžete trochu pohrať. Ak na to dýchate, uvidíte, ako vlhkosť stúpa.

Ak máte stolnú lampu (bez LED), môžete si na senzor posvietiť, aby sa trochu zahrial.

Skvelé! Dve veľké časti senzora teraz fungujú.

V ďalšom kroku sa vyjadrím ku konečnému kódu.

Krok 6: Spojenie …

Dávať to dokopy…
Dávať to dokopy…

Opäť nejaké ďalšie zapojenie … toto je, aby bol DeepSleep možný.

Pamätajte si, že DeepSleep je neuveriteľná funkcia pre zariadenia IoT.

Ak je však váš senzor pevne zapojený pre DeepSleep, môže byť ťažké preprogramovať ESP, takže urobíme ďalšie prepojovacie prepojenie medzi

GPIO16-RST.

Áno, MUSÍ to byť GPIO16, pretože to je GPIO, ktoré je pevne zapojené tak, aby prebudilo zariadenie, keď sa po DeepSleep vypnú hodiny reálneho času!

Počas testovania sa môžete rozhodnúť urobiť 15 -sekundový DeepSleep.

Keď som ladil, presunul som prepojku na GPIO0, aby som mohol flashovať svoj program.

Po dokončení sťahovania by som prepojku presunul na GPIO16, aby DeepSleep fungoval.

Kód pre ESP sa nazýva TnHclient.c

Musíte zmeniť svoje SSID, heslo a IP adresu servera.

Existujú ďalšie riadky kódu, ktoré môžete použiť na riešenie problémov alebo testovanie vášho nastavenia.

Krok 7: Serverová stránka vecí

Serverová stránka veci
Serverová stránka veci
Serverová stránka veci
Serverová stránka veci

Je bežným nedorozumením, že UDP je nespoľahlivý a TCP je …

Je to rovnako hlúpe, ako tvrdiť, že kladivo je užitočnejšie ako skrutkovač. Sú to jednoducho rôzne veľmi užitočné nástroje a obaja majú svoje využitie.

Mimochodom, bez UDP by internet nefungoval … DNS je založené na UDP.

Vybral som si preto UDP, pretože je veľmi ľahký, ľahký a rýchly.

Skôr si myslím, že moja WiFi je veľmi spoľahlivá, takže klient pošle maximálne 3 pakety UDP, ak potvrdí „OK!“nie je prijatý.

C-kód pre TnHserver je v súbore TnHServer.c.

V kóde je niekoľko komentárov, ktoré to vysvetľujú.

Na serveri budeme potrebovať ďalšie nástroje: rrdtool, apache a možno tcpdump.

Ak chcete nainštalovať rrdtool na Raspbian, môžete jednoducho nainštalovať balík takto: apt-get install rrdtool

Ak potrebujete ladiť sieťový prenos, príde vhod tcpdump apt-get install tcpdump

Potreboval som webový server, aby som mohol používať prehliadač na prezeranie grafov: apt-get install apache2

Na získanie príkazu na vytvorenie databázy Round Robin som použil tento nástroj: https://rrdwizard.appspot.com/index.php. Stačí, ak to spustíte raz (ak to pochopíte správne prvýkrát).

rrdtool create TnHdatabase.rrd-start now-10s

-krok '1200'

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

'DS: Vlhkosť: GAUGE: 1200: 0: 100,0'

'RRA: PRIEMER: 0,5: 1: 720'

'RRA: PRIEMER: 0,5: 3: 960'

„RRA: PRIEMER: 0,5: 18: 1600“

Nakoniec používam záznam crontab na reštartovanie môjho TnHservera každý deň o polnoci. Používam TnHserver ako normálneho používateľa (tj. NIE root) ako bezpečnostné opatrenie.

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

Vykonaním tohto postupu môžete skontrolovať, či je server TnHserver spustený

$ ps -elf | grep TnHserver

a môžete si overiť, že počúva pakety na porte 7777

$ netstat -anu

Aktívne internetové pripojenia (servery a zavedené)

Proto Recv-Q Send-Q Miestna adresa Štát zahraničnej adresy

udp 0 0 0.0.0.0:7777 0.0.0.0:*

Nakoniec CreateTnH_Graphs.sh.txt je ukážkový skript na generovanie grafov. (Skripty generujem ako root, možno to nebudete chcieť urobiť.)

Na veľmi jednoduchej webovej stránke môžete sledovať grafy z ľubovoľného prehliadača vo vašej domácej sieti.

Odporúča: