INHOUDSOPGAWE:

Tuis sensor temperatuur temperatuur: 7 stappe
Tuis sensor temperatuur temperatuur: 7 stappe

Video: Tuis sensor temperatuur temperatuur: 7 stappe

Video: Tuis sensor temperatuur temperatuur: 7 stappe
Video: Temperatuur onderzoeken (met je Microbit) - Smart Kids Lab Missie 6 2024, November
Anonim
Tuis sensor temperatuur temperatuur
Tuis sensor temperatuur temperatuur

Wat moet u weet om hierdie projek te maak:

U moet weet oor:- Sommige elektroniese vaardighede (soldeer)

- Linux

- Arduino IDE

(u moet addisionele borde in die IDE opdateer:

- opdatering/programmering van 'n ESP -bord via die Arduino IDE.

(daar is 'n paar goeie tutoriale op die internet beskikbaar)

Dit kan gedoen word met behulp van 'n Arduino Uno of met behulp van 'n FTDI (usb to serial adapter).

Ek het my Uno gebruik omdat ek geen seriële poort op my rekenaar gehad het nie en ook nie 'n FTDI nie

Stap 1: Gaan inkopies doen

Gaan inkopies doen
Gaan inkopies doen

Wat sal u nodig hê om dit te laat gebeur?

Vir die digitale temperatuur- en humiditeitsensor:

- Of 'n broodbord of 'n alternatief soos prototipe PCB, soldeer, soldeerbout …

- 'n Paar draad

- twee springers

- 'n 10k Ohm weerstand

- 'n ESP12F (ander modelle kan ook werk …)

- 'n DHT22 ('n bietjie duurder as die DHT11, maar meer akkuraat)

- 3 AA herlaaibare batterye en 'n batteryhouer

- 'n klein plastiekboks om jou projek in te sit

- In 'n later stadium is ek van plan om 'n HT7333 met twee 10uF -kondensators tussen die battery en die ESP by te voeg

om die ingangsspanning (VCC) te stabiliseer tot die aanbevole 3.3V, maar ook om die ESP teen oorspanning te beskerm.

Vir die netwerk gedeelte:

- U tuis WiFi -netwerk

Vir die bedienergedeelte:

- Enige Linux -gebaseerde stelsel (altyd aan!)

Ek het 'n Raspberry Pi gebruik (wat ek ook as bediener vir my IP -kameras buite gebruik.)

- gcc samesteller om u bedienerkode saam te stel

- rrdtool pakket om die data te stoor en grafieke te genereer

- apache (of 'n ander webbediener)

U gunsteling rekenaar of skootrekenaar met Arduino IDE daarop.

Stap 2: Opstelling en agtergrond

Opstelling en agtergrond
Opstelling en agtergrond

In hierdie weergawe van 'n WiFi -gekoppelde - om nie te sê IOT - temperatuur- en humiditeitsensor het ek 'n ESP12F, 'n DHT22 en 'n 3 AA -batteryhouer met herlaaibare batterye gebruik.

Elke 20 minute neem die ESP 'n meting van die DHT22 en stuur dit na 'n bediener ('n Raspberry Pi) via UDP op my tuis WiFi -netwerk. Nadat die metings gestuur is, gaan die ESP in die slaap. Dit beteken dat slegs die Real Time Clock van die module aangeskakel bly, wat 'n ongelooflike kragbesparing tot gevolg het. Vir ongeveer 5 sekondes benodig die module ongeveer 100mA, en dan slaap hy slegs 150uA gedurende die 20 minute.

Ek wou geen internetgebaseerde diens gebruik nie, want ek het my Raspberry Pi wat altyd aan is en op hierdie manier het ek ook die plesier gehad om die bedienergedeelte te skryf.

Op die bediener ('n Raspberry Pi met Raspbian) het ek 'n eenvoudige UDP -luisteraar (bediener) geskryf wat die waardes in 'n eenvoudige RRD stoor. (Round Robin -databasis met behulp van RRDtool deur Tobias Oetiker.)

Die voordeel van RRDtool is dat u u databasis een keer skep en die grootte dieselfde bly. Anders hoef u nie 'n databasisbediener (soos mySQLd) op die agtergrond te hê nie. RRDtool gee u die gereedskap om die databasis te skep en die grafieke te genereer.

My bediener skep die grafieke gereeld en vertoon alles op 'n baie eenvoudige http -bladsy. Ek kan my lesings raadpleeg met 'n eenvoudige blaaier deur aan te sluit op die Apache2 -webbediener op die Raspberry Pi!

Uiteindelik het ek nie 'n FTDI (USB to Serial) nie, so ek het my Arduino UNO gebruik. U moet die TX's en die RX's en die GND van die ESP en die UNO verbind. (Ek weet, jou instink kan jou vertel om RX's en TX's oor te steek … het dit ook probeer, werk nie.)

Ek het nie 'n vlakomskakeling gedoen nie (UNO: Hoog = 5V, maar ESP is basies 'n 3.3V -toestel … Daar is 'n paar goeie FTDI's op die mark waar u selfs u hoë vlak 5 of 3.3V kan kies.

My stroombaan word aangedryf deur 3 AA herlaaibare batterye - dus eintlik 3 X 1.2V. In 'n latere fase is ek van plan om 'n HT7333 tussen die battery pack en die kring te plaas vir veiligheid; nuut gelaaide batterye kan meer as 1.2V hê en die ESP moet aangedryf word met min. 3V en maks. 3.6V. Ook as ek besluit - in 'n oomblik van swakheid - om alkaliese batterye (3 X 1.5V = 4.5V) in te sit, sal my ESP nie gebraai word nie!

Ek het ook oorweeg om 'n sonpaneel van 10 x 10 cm te gebruik, maar dit was nie die moeite werd nie. Deur 3 metings per uur te doen (basies 3 x 5 sekondes by maksimum 100mA en die res van die tyd @ 100uA), hoop ek om my stroombaan vir 1 jaar op dieselfde herlaaibare batterye aan te skakel.

Stap 3: Die Arduino - ESP12 -deel

Die Arduino - ESP12 deel
Die Arduino - ESP12 deel
Die Arduino - ESP12 deel
Die Arduino - ESP12 deel

Ek het hierdie projek in verskillende stappe gedoen.

Daar is verskeie skakels wat u help om die ESP12 (oftewel ESP8266) in die Arduino IDE in te voer. (Ek moes die weergawe 2.3.0 in plaas van die nuutste een gebruik as gevolg van 'n fout wat intussen moontlik opgelos was …)

Ek het begin deur die ESP aan te sluit oor my Arduino UNO (slegs gebruik as 'n brug tussen my rekenaar via USB na die reeks) na die ESP -seriële koppelvlak. Daar is afsonderlike instruksies wat dit verduidelik.

In my voltooide projek het ek die drade gelos om aan te sluit op die Serial, as ek ooit 'n probleem moet oplos

Dan moet u u ESP12 soos volg bedraad:

ESP penne …

GND UNO GND

RX UNO RX

TX UNO TX

EN VCC

GPIO15 GND

Aanvanklik het ek probeer om my ESP van die 3.3V op die UNO aan te skakel, maar ek het vinnig oorgeskakel om my ESP met 'n bankvoeding aan te skakel, maar u kan ook u battery gebruik.

GPIO0 Ek het hierdie een met 'n jumper aan GND gekoppel om die ESP te laat flits (= programmeer).

Eerste toets: laat die springer oop en begin 'n seriële monitor in die Arduino IDE (teen 115200 baud!).

Skakel die ESP aan, u moet 'n paar rommelkarakters sien en dan 'n boodskap soos:

Ai-Denker Technology Co Ltd gereed

In hierdie modus werk die ESP 'n bietjie soos 'n outydse modem. U moet AT -opdragte gebruik.

Probeer die volgende opdragte:

BY+RST

en die volgende twee opdragte

AT+CWMODE = 3

OK

BY+CWLAP

Dit moet u 'n lys gee van alle WiFi -netwerke in die omgewing.

As dit werk, is u gereed vir die volgende stap.

Stap 4: Toets die ESP as 'n Network Time Protocol (NTP) -kliënt

Toets die ESP as 'n Network Time Protocol (NTP) -kliënt
Toets die ESP as 'n Network Time Protocol (NTP) -kliënt
Toets die ESP as 'n Network Time Protocol (NTP) -kliënt
Toets die ESP as 'n Network Time Protocol (NTP) -kliënt

Laai NTPClient onder die lêer, voorbeelde, ESP8266WiFi in die Arduino IDE.

Geringe aanpassings is nodig om dit te laat werk; u moet u SSID en wagwoord van u WiFi -netwerk invoer.

Plaas nou die trui en kort GPIO0 na GND.

Skakel die ESP aan en laai die skets op na die ESP.

Na die samestelling moet die oplaai na die ESP begin. Die blou LED op die ESP sal vinnig flikker terwyl die kode afgelaai word.

Ek het opgemerk dat ek 'n bietjie moes speel met die herlaai van die IDE, die herlaai van die ESP voordat die oplaai sou werk.

Voordat u die skets begin saamstel/oplaai, moet u die seriële konsole (= seriële monitor) sluit, want dit sal u verhinder om die oplaai te doen.

Sodra die oplaai geslaag het, kan u die seriële monitor weer oopmaak om te sien hoe die ESP effektief die tyd van die internet kry.

Goed, u het u ESP geprogrammeer, aan u WiFi gekoppel en die tyd van die internet gekry.

Volgende stap toets ons die DHT22.

Stap 5: Toets die DHT22 -sensor

Toets die DHT22 -sensor
Toets die DHT22 -sensor

Nou is 'n paar ekstra bedrading nodig.

DHT -penne … Sluit pen 1 (aan die linkerkant) van die sensor aan op VCC (3.3V)

Verbind pen 2 ESP GPIO5 (DHTPIN in die skets)

Koppel pen 4 (aan die regterkant) van die sensor aan die grond

Koppel 'n 10K -weerstand van pen 2 (data) aan pen 1 (krag) van die sensor.

Soortgelyk aan die NTP -toets, soek die DHTtester -skets en pas dit op die volgende manier aan:

#define DHTPIN 5 // ons het GPIO5 gekies om aan te sluit op die sensor#definieer DHTTYPE DHT22 // aangesien ons 'n DHT22 gebruik, maar hierdie kode/biblioteek is ook geskik vir DHT11

Sluit weer die seriële monitor, skakel die ESP aan en stel die ESP op en flits.

As alles goed gaan, moet u die metings op die seriële monitor sien.

U kan 'n bietjie met die sensor speel. As u daarop asemhaal, sal u die humiditeit sien toeneem.

As u 'n (nie -LED) lessenaarlamp het, kan u op die sensor skyn om dit effens te verhit.

Puik! Twee groot dele van die sensor werk nou.

In die volgende stap lewer ek kommentaar op die finale kode.

Stap 6: Saamvoeg …

Saamvoeg…
Saamvoeg…

Weereens 'n paar ekstra bedrading … dit is om die DeepSleep moontlik te maak.

Onthou, DeepSleep is 'n ongelooflike funksie vir IoT -toestelle.

As u sensor egter vir DeepSleep gekoppel is, kan dit moeilik wees om die ESP te herprogrammeer, so ons gaan nog 'n springverbinding tussen

GPIO16-RST.

Ja, dit MOET GPIO16 wees, want dit is die GPIO wat gekoppel is om die toestel wakker te maak wanneer die real -time klok na die DeepSleep gaan!

Terwyl u toets, kan u besluit om 'n DeepSleep van 15 sekondes te doen.

Toe ek ontfout, sou ek die springer na GPIO0 skuif sodat ek my program kon flits.

As die aflaai voltooi is, sal ek die trui na GPIO16 skuif sodat DeepSleep werk.

Die kode vir die ESP word TnHclient.c genoem

U moet u SSID, wagwoord en die IP -adres van u bediener verander.

Daar is ekstra kode kode wat u kan gebruik om u opstelling op te los of te toets.

Stap 7: Die bedienerkant van dinge

Die bedienerkant van dinge
Die bedienerkant van dinge
Die bedienerkant van dinge
Die bedienerkant van dinge

Dit is 'n algemene misverstand dat UDP onbetroubaar is en TCP …

Dit is net so dom as om te sê dat 'n hamer nuttiger is as 'n skroewedraaier. Hulle is eenvoudig verskillende bruikbare gereedskap en hulle het albei hul gebruike.

Terloops, sonder UDP sou die internet nie werk nie … DNS is gebaseer op UDP.

Ek het dus UDP gekies omdat dit baie lig, maklik en vinnig is.

Ek is geneig om te dink dat my WiFi baie betroubaar is, sodat die kliënt hoogstens 3 UDP -pakkies sal stuur as die erkenning "OK!" word nie ontvang nie.

Die C-kode vir die TnHserver is in die TnHServer.c lêer.

Daar is verskeie opmerkings in die kode wat dit verduidelik.

Ons benodig 'n paar ekstra gereedskap op die bediener: rrdtool, apache en miskien tcpdump.

Om rrdtool op Raspbian te installeer, kan u die pakket eenvoudig soos volg installeer: apt-get install rrdtool

As u die netwerkverkeer moet ontfout, is tcpdump handig om tcpdump te installeer

Ek het 'n webbediener nodig om 'n blaaier te kan gebruik om die grafieke te raadpleeg: apt-get install apache2

Ek het hierdie hulpmiddel gebruik: https://rrdwizard.appspot.com/index.php om die opdrag te kry om die Round Robin -databasis te skep. U hoef dit slegs een keer uit te voer (as u dit die eerste keer regkry).

rrdtool skep TnHdatabase.rrd-begin nou-10s

-stap '1200'

'DS: temperatuur: maat: 1200: -20,5: 45,5'

'DS: Humiditeit: METER: 1200: 0: 100.0'

'RRA: GEMIDDELD: 0.5: 1: 720'

'RRA: GEMIDDELD: 0.5: 3: 960'

'RRA: GEMIDDELD: 0.5: 18: 1600'

Uiteindelik gebruik ek 'n crontab -ingang om my TnHserver elke dag om middernag weer te begin. Ek gebruik die TnHserver as 'n normale gebruiker (dws NIE wortel nie) as veiligheidsmaatreël.

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

U kan kyk of die TnHserver werk

$ ps -elf | grep TnHserver

en u kan verifieer dat dit na pakkies op poort 7777 luister deur te doen

$ netstat -anu

Aktiewe internetverbindings (bedieners en gevestigde)

Proto Recv-Q Stuur-Q Plaaslike adres Buitelandse adres Staat

udp 0 0 0.0.0.0:7777 0.0.0.0::*

Uiteindelik is CreateTnH_Graphs.sh.txt 'n voorbeeldskrif om die grafieke te genereer. (Ek genereer die skrifte as root, miskien wil u dit nie doen nie.)

Met 'n baie eenvoudige webblad kan u die grafieke vanaf enige blaaier op u tuisnetwerk sien.

Aanbeveel: