Температурен сензор за домашна мрежа: 7 стъпки
Температурен сензор за домашна мрежа: 7 стъпки
Anonim
Температурен сензор за домашна мрежа
Температурен сензор за домашна мрежа

Какво трябва да знаете, за да направите този проект:

Трябва да знаете за:- Някои умения за електроника (запояване)

- Linux

- IDE на Arduino

(ще трябва да актуализирате допълнителни платки в IDE:

- актуализиране/програмиране на ESP платка чрез Arduino IDE.

(в мрежата има някои хубави уроци)

Това може да стане с помощта на Arduino Uno или с помощта на FTDI (адаптер usb към сериен).

Използвах моя Uno, защото нямах сериен порт на компютъра си, нито FTDI

Стъпка 1: Отидете да пазарувате

Пазарувам
Пазарувам

Какво ще ви е необходимо, за да се случи това?

За цифровия сензор за температура и влажност:

- Или макет, или алтернатива като прототипна печатна платка, спойка, поялник …

- Някакъв проводник

- два джъмпера

- 10k Ohm резистор

- ESP12F (може да работят и други модели …)

- DHT22 (малко по -скъп от DHT11, но по -точен)

- 3 презареждащи се батерии AA и държач за батерии

- малка пластмасова кутия, в която да поставите вашия проект

- На по -късен етап планирам да добавя HT7333 с два 10uF кондензатора между батерията и ESP

за стабилизиране на входното напрежение (VCC) до препоръчаните 3.3V, но и за защита на ESP от пренапрежение.

За частта Мрежа:

- Вашата домашна WiFi мрежа

За сървърната част:

- Всяка система, базирана на Linux (винаги включена!)

Използвах Raspberry Pi (който използвам и като сървър за моите външни IP камери.)

- gcc компилатор за компилиране на кода на вашия сървър

- пакет rrdtool за съхраняване на данните и генериране на графики

- apache (или друг уеб сървър)

Вашият любим компютър или лаптоп с Arduino IDE.

Стъпка 2: Настройка и фон

Настройка и фон
Настройка и фон

В тази версия на свързан WiFi - да не кажа IOT - сензор за температура и влажност използвах ESP12F, DHT22 и държач за батерии 3 AA с презареждащи се батерии.

На всеки 20 минути ESP взема измерване от DHT22 и го изпраща на сървър (Raspberry Pi) през UDP в домашната ми WiFi мрежа. След изпращането на измерванията ESP влиза в дълбок сън. Това означава, че само часовникът в реално време на модула остава захранван, което води до невероятна икономия на енергия. За около 5 секунди модулът изисква около 100mA, след това през 20 -те минути дълбоко заспиване само 150uA.

Не исках да използвам интернет базирана услуга, защото имам моя Raspberry Pi, който така или иначе винаги е включен и по този начин имах удоволствието да напиша и сървърната част.

На сървъра (Raspberry Pi, работещ с Raspbian) написах прост UDP слушател (сървър), който съхранява стойностите в обикновен RRD. (Round Robin база данни с помощта на RRDtool от Tobias Oetiker.)

Предимството на RRDtool е, че създавате базата данни веднъж и размерът остава същият. Иначе няма нужда да имате сървър на база данни (като mySQLd), работещ във фонов режим. RRDtool ви дава инструментите за създаване на база данни и генериране на графики.

Моят сървър създава графиките периодично и показва всичко на много проста http страница. Мога да проверя показанията си с прост браузър, като се свържа с уеб сървъра Apache2 на Raspberry Pi!

И накрая, нямах FTDI (USB към сериен), така че използвах моя Arduino UNO. Трябва да свържете TX и RX и GND на ESP и UNO. (Знам, инстинктът ви може да ви подскаже да пресичате RX и TX … пробвах и това, не работи.)

Не направих преобразуване на ниво (UNO: Високо = 5V, но ESP е основно 3.3V устройство … Има някои хубави FTDI на пазара, където дори можете да изберете високото си ниво да бъде 5 или 3.3V.

Моята верига се захранва от 3 акумулаторни батерии AA - така че всъщност 3 X 1,2V. В по -късна фаза възнамерявам да поставя HT7333 между батерията и веригата за безопасност; новозаредените батерии могат да имат повече от 1,2 V и ESP трябва да се захранва с мин. 3V и макс. 3.6V. Също така, ако реша - в момент на слабост - да сложа алкални батерии (3 X 1.5V = 4.5V), моят ESP няма да се пържи!

Обмислих и използването на слънчев панел с размери 10см x 10см, но просто не си струваше да се занимавам. Правейки 3 измервания на час (основно 3x 5 секунди при 100 mA макс. И през останалото време @ 100uA), се надявам да захранвам веригата си за 1 година на същите акумулаторни батерии.

Стъпка 3: Частта Arduino - ESP12

Частта Arduino - ESP12
Частта Arduino - ESP12
Частта Arduino - ESP12
Частта Arduino - ESP12

Направих този проект на различни стъпки.

Има няколко връзки, които ви помагат да импортирате ESP12 (известен още като ESP8266) в Arduino IDE. (Трябваше да използвам версия 2.3.0 вместо последната поради грешка, която междувременно можеше да бъде отстранена …)

Започнах с свързването на ESP, през моя Arduino UNO (използван само като мост между моя компютър през USB към серийния) към серийния интерфейс на ESP. Има отделни инструкции, обясняващи това.

В моя завършен проект оставих кабелите, за да се свържа със серийния, в случай че някога се наложи да отстраня неизправности. RX

След това трябва да свържете вашия ESP12, както следва:

ESP щифтове…

GND UNO GND

RX UNO RX

TX UNO TX

EN VCC

GPIO15 GND

Първоначално се опитах да захранвам ESP от 3.3V на UNO, но бързо преминах към захранването на ESP с настолно захранване, но можете да използвате и батерията си.

GPIO0 Свързах този с джъмпер към GND, за да активирам мигането (= програмирането) на ESP.

Първи тест: оставете джъмпера отворен и стартирайте сериен монитор в Arduino IDE (на 115200 бода!).

Включете ESP в цикъла, трябва да видите някои боклуци и след това съобщение като:

Ai-Thinker Technology Co. Ltd. готов

В този режим ESP действа малко като старомоден модем. Трябва да използвате AT команди.

Опитайте следните команди:

AT+RST

и следните две команди

AT+CWMODE = 3

Добре

AT+CWLAP

Това трябва да ви даде списък с всички WiFi мрежи в района.

Ако това работи, вие сте готови за следващата стъпка.

Стъпка 4: Тестване на ESP като клиент с протокол за мрежово време (NTP)

Тестване на ESP като клиент с протокол за мрежово време (NTP)
Тестване на ESP като клиент с протокол за мрежово време (NTP)
Тестване на ESP като клиент с протокол за мрежово време (NTP)
Тестване на ESP като клиент с протокол за мрежово време (NTP)

В IDE на Arduino, под Файл, Примери, ESP8266WiFi, заредете NTPClient.

Необходими са малки ощипвания, за да работи; трябва да въведете своя SSID и парола за вашата WiFi мрежа.

Сега поставете джъмпера, накъсвайки GPIO0 към GND.

Включете ESP в цикъла и качете скицата в ESP.

След компилацията качването в ESP трябва да започне. Синият светодиод на ESP ще мига бързо при изтегляне на кода.

Забелязах, че трябва да си поиграя малко с рестартиране на IDE, рестартиране на ESP, преди качването да работи.

Преди да започнете да компилирате/качвате скицата, не забравяйте да затворите серийната конзола (= сериен монитор), защото това ще ви попречи да качите.

След като качването успее, можете да отворите отново серийния монитор, за да видите ESP ефективно да получава времето от Интернет.

Страхотно, програмирали сте ESP, свързали сте се с WiFi и сте получили време от интернет.

Следващата стъпка ще тестваме DHT22.

Стъпка 5: Тестване на сензора DHT22

Тестване на сензора DHT22
Тестване на сензора DHT22

Сега се изисква допълнително окабеляване.

DHT пинове… Свържете щифт 1 (отляво) на сензора към VCC (3.3V)

Свържете щифт 2 ESP GPIO5 (DHTPIN в скицата)

Свържете щифт 4 (отдясно) на сензора към GROUND

Свържете 10K резистор от пин 2 (данни) към щифт 1 (захранване) на сензора.

Подобно на теста NTP, отидете да намерите скицата на DHTtester и да я промените по следния начин:

#дефинирайте DHTPIN 5 // избрахме GPIO5 за свързване със сензора#определете DHTTYPE DHT22 // тъй като използваме DHT22, но този код/библиотека е подходящ и за DHT11

Отново затворете серийния монитор, включете ESP цикъла и компилирайте и мигайте ESP.

Ако всичко върви добре, трябва да видите измерванията да се появяват в серийния монитор.

Можете да поиграете малко със сензора. Ако дишате върху него, ще видите как влажността се покачва.

Ако имате настолна лампа (без LED), можете да осветите сензора, за да го загреете малко.

Страхотен! Две големи части от сензора вече работят.

В следващата стъпка ще коментирам окончателния код.

Стъпка 6: Сглобяваме заедно …

Сглобявайки го заедно…
Сглобявайки го заедно…

Отново допълнително окабеляване … това е, за да стане възможен DeepSleep.

Не забравяйте, че DeepSleep е невероятна функция за IoT устройства.

Въпреки това, ако вашият сензор е свързан за DeepSleep, може да е трудно да препрограмирате ESP, така че ще направим нова връзка между джъмпера между

GPIO16-RST.

Да, това ТРЯБВА да бъде GPIO16, защото това е GPIO, който е свързан да събуди устройството, когато часовникът в реално време изгасне след DeepSleep!

Докато тествате, можете да решите да направите 15 секунди DeepSleep.

Когато отстранявах грешки, щях да преместя джъмпера в GPIO0, за да мога да мигам програмата си.

След като изтеглянето приключи, щях да преместя джъмпера в GPIO16, така че DeepSleep да работи.

Кодът за ESP се нарича TnHclient.c

Трябва да промените своя SSID, парола и IP адреса на вашия сървър.

Има допълнителни редове код, които можете да използвате за отстраняване на неизправности или тестване на вашата настройка.

Стъпка 7: Сървърната страна на нещата

Сървърната страна на нещата
Сървърната страна на нещата
Сървърната страна на нещата
Сървърната страна на нещата

Често срещано недоразумение е, че UDP е ненадежден, а TCP е …

Това е също толкова глупаво, колкото да се каже, че чукът е по -полезен от отвертка. Те са просто различни много полезни инструменти и и двете имат своите приложения.

Между другото, без UDP Интернет нямаше да работи … DNS се основава на UDP.

Затова избрах UDP, защото е много лек, лесен и бърз.

Склонен съм да мисля, че моят WiFi е много надежден, така че клиентът ще изпрати най -много 3 UDP пакета, ако потвърждението "OK!" не се получава.

C-кодът за TnHserver е във файла TnHServer.c.

В кода има няколко коментара, които го обясняват.

Ще ни трябват някои допълнителни инструменти на сървъра: rrdtool, apache и може би tcpdump.

За да инсталирате rrdtool на Raspbian, можете просто да инсталирате пакета по следния начин: apt-get install rrdtool

Ако трябва да отстраните грешките в мрежовия трафик, tcpdump е полезен apt-get install tcpdump

Имах нужда от уеб сървър, за да мога да използвам браузър, за да се консултирам с графиките: apt-get install apache2

Използвах този инструмент: https://rrdwizard.appspot.com/index.php, за да получа командата за създаване на Round Robin база данни. Трябва да стартирате това само веднъж (ако го направите правилно първия път).

rrdtool създайте TnHdatabase.rrd --стартирайте сега-10s

-стъпка '1200'

'DS: Температура: МЕРА: 1200: -20,5: 45,5'

'DS: Влажност: МЕРА: 1200: 0: 100.0'

'RRA: СРЕДНИ: 0,5: 1: 720'

'RRA: СРЕДНИ: 0.5: 3: 960'

„RRA: СРЕДНИ: 0.5: 18: 1600“

И накрая, използвам запис в crontab, за да рестартирам моя TnHserver всеки ден в полунощ. Пускам TnHserver като нормален потребител (т.е. НЕ root) като предпазна мярка.

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

Можете да проверите дали TnHserver работи, като направите това

$ ps -elf | grep TnHserver

и можете да проверите, че слуша пакети на порт 7777, като направите това

$ netstat -anu

Активни интернет връзки (сървъри и установени)

Proto Recv-Q Send-Q Местен адрес Състояние на чужд адрес

udp 0 0 0.0.0.0:7777 0.0.0.0:*

Накрая CreateTnH_Graphs.sh.txt е примерен скрипт за генериране на графики. (Аз генерирам скриптовете като root, може да не искате да направите това.)

Използвайки много проста уеб страница, можете да гледате графиките от всеки браузър в домашната си мрежа.

Препоръчано: