Mündəricat:

Ev Şəbəkəsi İstilik Sensoru: 7 addım
Ev Şəbəkəsi İstilik Sensoru: 7 addım

Video: Ev Şəbəkəsi İstilik Sensoru: 7 addım

Video: Ev Şəbəkəsi İstilik Sensoru: 7 addım
Video: Zigbee термоголовка Moes TV 01, часть 2 - практическое использование в Home Assistant 2024, Noyabr
Anonim
Ev Şəbəkəsi İstilik Sensoru
Ev Şəbəkəsi İstilik Sensoru

Bu layihəni həyata keçirmək üçün nə bilmək lazımdır:

Bilməlisiniz:- Bəzi elektronika bacarıqları (lehimləmə)

- Linux

- Arduino IDE

(IDE -də əlavə lövhələri yeniləməlisiniz:

- Arduino IDE vasitəsilə bir ESP lövhəsinin yenilənməsi/proqramlaşdırılması.

(İnternetdə bəzi gözəl dərslər var)

Bu, Arduino Uno və ya FTDI (usb to serial adapter) istifadə etməklə edilə bilər.

Uno -dan istifadə etdim, çünki nə kompüterimdə seriyalı port, nə də FTDI yox idi

Addım 1: Alış -verişə gedin

Alış -verişə gedin
Alış -verişə gedin

Bunun baş verməsi üçün nə lazımdır?

Rəqəmsal Temperatur və Rütubət Sensoru üçün:

- Ya çörək taxtası, ya da pcb prototipi, lehim, lehimləmə dəmiri kimi bir alternativ …

- Bir az tel

- iki tullanan

- 10k Ohm müqavimət

- ESP12F (digər modellər də işləyə bilər …)

- DHT22 (DHT11 -dən bir qədər bahalı, lakin daha dəqiqdir)

- 3 AA şarj edilə bilən batareya və batareya tutacağı

- Layihənizi yerləşdirmək üçün kiçik bir plastik qutu

- Sonrakı mərhələdə, batareya paketi ilə ESP arasında iki 10uF kondansatörlü HT7333 əlavə etməyi planlaşdırıram.

Giriş gərginliyini (VCC) tövsiyə olunan 3.3V -ə sabitləşdirməklə yanaşı ESP -ni həddindən artıq gərginlikdən qorumaq üçün.

Şəbəkə hissəsi üçün:

- Ev WiFi Şəbəkəniz

Server hissəsi üçün:

- İstənilən Linux əsaslı sistem (həmişə aktivdir!)

Bir Raspberry Pi istifadə etdim (açıq IP kameralarım üçün server olaraq da istifadə edirəm.)

- server kodunuzu tərtib etmək üçün gcc tərtibçisi

- məlumatları saxlamaq və qrafiklər yaratmaq üçün rrdtool paketi

- apache (və ya başqa bir veb server)

Üzərində Arduino IDE olan ən sevdiyiniz kompüter və ya dizüstü kompüter.

Addım 2: Quraşdırma və Arxa Plan

Quraşdırma və Arxa Plan
Quraşdırma və Arxa Plan

WiFi -nin bu versiyasında - IOT deməsək də - temperatur və rütubət sensoru, doldurula bilən batareyaları olan bir ESP12F, DHT22 və 3 AA batareya tutucusundan istifadə etdim.

Hər 20 dəqiqədə bir ESP DHT22 -dən bir ölçmə aparır və ev WiFi şəbəkəmdəki UDP üzərindən bir serverə (Moruq Pi) göndərir. Ölçmələr göndərildikdən sonra ESP dərin yuxuya gedir. Bu o deməkdir ki, modulun yalnız Real Time Saatı enerjili olaraq qalır və nəticədə inanılmaz dərəcədə enerji qənaət olunur. Təxminən 5 saniyə ərzində modul təxminən 100mA, sonra 20 dəqiqə dərin yuxu zamanı yalnız 150uA tələb edir.

Hər zaman İnternetdə olan Raspberry Pi -yə sahib olduğum üçün İnternetə əsaslanan bir xidmətdən istifadə etmək istəmədim və bu şəkildə server hissəsini də yazmaqdan zövq aldım.

Serverdə (Raspbian işləyən bir Raspberry Pi) dəyərləri sadə bir RRD -də saxlayan sadə bir UDP dinləyicisi (server) yazdım. (Tobias Oetiker tərəfindən RRDtool istifadə edərək Robin Database.)

RRDtool -un üstünlüyü, verilənlər bazanızı bir dəfə yaratmağınız və ölçüsünün eyni qalmasıdır. Arxa planda işləyən bir verilənlər bazası serverinə (məsələn, MySQLd) ehtiyacınız yoxdur. RRDtool, verilənlər bazası yaratmaq və qrafiklər yaratmaq üçün vasitələr verir.

Serverim qrafikləri vaxtaşırı yaradır və hər şeyi çox sadə bir http səhifəsində göstərir. Raspberry Pi üzərindəki Apache2 veb serverinə qoşularaq sadə bir brauzerlə oxuduqlarımı öyrənə bilərəm!

Nəhayət, FTDI (USB -dən Seriala) yox idi, buna görə də Arduino UNO -dan istifadə etdim. TX -ləri, RX -ləri və ESP və UNO -nun GND -ni birləşdirməlisiniz. (Bilirəm, instinktiniz sizə RX və TX -ləri keçməyinizi söyləyə bilər … bunu da sınadı, işləmir.)

Səviyyə çevrilmə etmədim (UNO: High = 5V amma ESP əsasən 3.3V cihazdır … Bazarda yüksək səviyyənizi 5 və ya 3.3V olaraq seçə biləcəyiniz bəzi gözəl FTDI -lər var.

Mənim dövrəm 3 AA şarj edilə bilən batareya ilə işləyir - buna görə 3 X 1.2V. Sonrakı mərhələdə təhlükəsizlik üçün batareya paketi ilə dövrə arasına HT7333 qoymaq niyyətindəyəm; yeni doldurulmuş batareyalar 1,2V -dən çox ola bilər və ESP min. 3V və maksimum. 3.6V. Həm də - bir anlıq zəiflikdə - qələvi batareyalar (3 X 1.5V = 4.5V) qoymaq qərarına gəlsəm, ESP qızardılmayacaq!

10 sm x 10 sm ölçüdə Günəş paneli istifadə etməyi də düşündüm, amma bu çətinliyə dəyməzdi. Saatda 3 ölçmə apararaq (əsasən 3x5 saniyədə @ 100mA və qalan vaxt @ 100uA), eyni şarj edilə bilən batareyalarda 1 il dövrəmi gücləndirəcəyimi ümid edirəm.

Addım 3: Arduino - ESP12 hissəsi

Arduino - ESP12 hissəsi
Arduino - ESP12 hissəsi
Arduino - ESP12 hissəsi
Arduino - ESP12 hissəsi

Bu layihəni fərqli addımlarla etdim.

ESP12 -ni (aka. ESP8266) Arduino IDE -yə idxal etməyə kömək edən bir neçə keçid var. (Bu arada həll oluna biləcək bir səhv səbəbiylə sonuncunun yerinə 2.3.0 versiyasını istifadə etməli oldum …)

ESP -ni Arduino UNO üzərindən (yalnız USB vasitəsilə Serialdan kompüterim arasında körpü kimi istifadə olunur) ESP serial interfeysinə bağlamaqla başladım. Bunu izah edən ayrıca təlimatlar var.

Bitmiş layihəmdə problemi həll etməyim lazım olduğu təqdirdə telləri Seriyaya qoşulmaq üçün buraxdım

Sonra ESP12 -ni aşağıdakı kimi bağlamalısınız:

ESP pinləri…

GND UNO GND

RX UNO RX

TX UNO TX

EN VCC

GPIO15 GND

Əvvəlcə UNO -dakı 3.3V -dən ESP -ni işə salmağa çalışdım, amma tezliklə ESP -ni bir dəzgah Güc Təchizatı ilə işə saldım, ancaq siz də batareya paketinizdən istifadə edə bilərsiniz.

GPIO0 ESP -nin yanıb -sönməsini (= proqramlaşdırmasını) təmin etmək üçün bunu GND -yə bir tullanan ilə bağladım.

İlk sınaq: tullananları açıq buraxın və Arduino IDE -də seriyalı monitoru işə salın (115200 baud!).

ESP -ni işə salın, bəzi zibil simvollarını və sonra belə bir mesaj görməlisiniz:

Ai-Thinker Technology Co. Ltd. hazırdır

Bu rejimdə ESP bir az köhnə modem kimi çıxış edir. AT əmrlərindən istifadə etməlisiniz.

Aşağıdakı əmrləri sınayın:

AT+RST

və aşağıdakı iki əmr

AT+CWMODE = 3

tamam

AT+CWLAP

Bu, ərazidəki bütün WiFi şəbəkələrinin siyahısını verməlidir.

Bu işləyirsə, növbəti addıma hazırsınız.

Addım 4: ESP -ni Şəbəkə Zaman Protokolu (NTP) Müştəri Olaraq Test Edin

ESP -ni Şəbəkə Zaman Protokolu (NTP) Müştəri Olaraq Test Etmək
ESP -ni Şəbəkə Zaman Protokolu (NTP) Müştəri Olaraq Test Etmək
ESP -ni Şəbəkə Zaman Protokolu (NTP) Müştəri Olaraq Test Etmək
ESP -ni Şəbəkə Zaman Protokolu (NTP) Müştəri Olaraq Test Etmək

Arduino IDE -də, Fayl, Nümunələr, ESP8266WiFi altında NTPClient yükləyin.

İşləmək üçün kiçik düzəlişlərə ehtiyac var; SSID və WiFi şəbəkənizin şifrəsini daxil etməlisiniz.

İndi GPIO0 -nu GND -ə qısaldan tullanan atın.

ESP -ni işə salın və eskizi ESP -ə yükləyin.

Tərtib edildikdən sonra ESP -ə yükləmə başlamalıdır. Kod yüklənərkən ESP -də mavi LED sürətlə yanıb -sönəcək.

Yükləmə işləməyəcəkdən əvvəl IDE -ni yenidən başlatmaq, ESP -ni yenidən başlatmaqla bir az oynamalı olduğumu gördüm.

Eskizi tərtib etməyə/yükləməyə başlamazdan əvvəl, serial konsolunu (= serial monitor) bağladığınızdan əmin olun, çünki bu, yükləməyə mane olacaq.

Yükləmə müvəffəqiyyətli olduqdan sonra, ESP-nin İnternetdən səmərəli vaxt aldığını görmək üçün serial monitoru yenidən aça bilərsiniz.

Əla, ESP -ni proqramlaşdırdınız, WiFi -yə qoşuldunuz və İnternetdən vaxt qazandınız.

Növbəti addım DHT22 -ni sınayacağıq.

Addım 5: DHT22 Sensorunun Test Edilməsi

DHT22 Sensorunun sınanması
DHT22 Sensorunun sınanması

İndi bəzi əlavə naqillərə ehtiyac var.

DHT sancaqları… Sensorun 1 pinini (solda) VCC -yə (3.3V) qoşun

2 pinli ESP GPIO5 (eskizdə DHTPIN) qoşun

Sensorun 4 pinini (sağda) GROUND -a qoşun

Sensorun 2 -ci pinindən (məlumatlardan) 1 -ci pininə (gücünə) 10K rezistoru qoşun.

NTP testinə bənzər şəkildə, DHTtester eskizini tapın və aşağıdakı şəkildə düzəldin:

#define DHTPIN 5 // sensora qoşulmaq üçün GPIO5 seçdik#DHTTYPE DHT22 təyin edin // bir DHT22 istifadə etdiyimiz üçün bu kod/kitabxana DHT11 üçün də uyğundur

Yenə seriyalı monitoru bağlayın, ESP -nin gücünü dəyişdirin və ESP -ni tərtib edin və yanıb -sönün.

Hər şey qaydasındadırsa, ölçülərin serial monitorda göründüyünü görməlisiniz.

Sensorla bir az oynaya bilərsiniz. Nəfəs alsanız, rütubətin artdığını görəcəksiniz.

(LED olmayan) bir masa lampanız varsa, onu bir az qızdırmaq üçün sensorun üstünə yandıra bilərsiniz.

Əla! Sensorun iki böyük hissəsi işləyir.

Növbəti addımda son kodu şərh edəcəyəm.

Addım 6: Bir yerdə qoyun …

Bir araya gətirmək…
Bir araya gətirmək…

Yenə bəzi əlavə naqillər … bu, DeepSleep -i mümkün etməkdir.

Unutmayın, DeepSleep IoT cihazları üçün inanılmaz bir funksiyadır.

Ancaq sensorunuz DeepSleep üçün sabitdirsə, ESP -ni yenidən proqramlaşdırmaq çətin ola bilər, buna görə də aralarında başqa bir keçid bağlantısı quracağıq.

GPIO16-RST.

Bəli, GPIO16 olmalıdır, çünki bu, DeepSleep -dən sonra Real Time Clock sönəndə cihazı oyatmaq üçün bağlanan GPIO -dur!

Test edərkən 15 saniyəlik DeepSleep etməyə qərar verə bilərsiniz.

Hata ayıklayarkən, proqramımı söndürmək üçün tullananları GPIO0 -a köçürərdim.

Yükləmə tamamlandıqdan sonra, DeepSleepin işləməsi üçün tullananları GPIO16 -ya köçürərdim.

ESP kodu TnHclient.c adlanır

SSID, Şifrənizi və serverinizin IP ünvanını dəyişdirməlisiniz.

Quraşdırmanı yoxlamaq və ya sınamaq üçün istifadə edə biləcəyiniz əlavə kod xətləri var.

Addım 7: İşlərin Server tərəfi

İşlərin Server tərəfi
İşlərin Server tərəfi
İşlərin Server tərəfi
İşlərin Server tərəfi

UDP -nin etibarsız olması və TCP -nin …

Bir çəkicin bir tornavidadan daha faydalı olduğunu söyləmək qədər axmaqdır. Sadəcə fərqli faydalı alətlərdir və hər ikisinin də istifadəsi var.

Yeri gəlmişkən, UDP olmadan İnternet işləməyəcəkdi … DNS UDP -yə əsaslanır.

Beləliklə, UDP -ni seçdim, çünki çox yüngül, asan və sürətli.

WiFi -nin çox etibarlı olduğunu düşünürəm, buna görə müştəri "OK!" alınmır.

TnHserver üçün C kodu TnHServer.c faylındadır.

Kodda bunu izah edən bir neçə şərh var.

Serverdə əlavə vasitələrə ehtiyacımız olacaq: rrdtool, apache və bəlkə də tcpdump.

Raspbian-da rrdtool qurmaq üçün paketi bu şəkildə quraşdıra bilərsiniz: apt-get install rrdtool

Şəbəkə trafikini düzəltmək lazımdırsa, tcpdump, apt-get install tcpdump-a lazımlı gəlir.

Qrafiklərə baxmaq üçün bir brauzerdən istifadə edə biləcəyim bir veb serverə ehtiyacım var: apt-get install apache2

Bu vasitədən istifadə etdim: https://rrdwizard.appspot.com/index.php Dairəvi Robin Verilənlər Bazasını yaratmaq əmrini almaq üçün. Bunu yalnız bir dəfə etməlisiniz (ilk dəfə düzgün başa düşsəniz).

rrdtool TnHdatabase.rrd yaradın-indi-10s başlayın

-addım '1200'

'DS: Temperatur: GÖZ: 1200: -20.5: 45.5'

'DS: Rütubət: GAUGE: 1200: 0: 100.0'

'RRA: ORTALAMA: 0.5: 1: 720'

'RRA: ORTALAMA: 0.5: 3: 960'

'RRA: ORTALAMA: 0.5: 18: 1600'

Nəhayət, hər gün gecə yarısında TnHserverimi yenidən başlatmaq üçün crontab girişindən istifadə edirəm. TnHserveri təhlükəsizlik tədbiri olaraq normal bir istifadəçi olaraq (yəni kök DEYİL) işlədərəm.

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

Bunu etməklə TnHserver -in işlədiyini yoxlaya bilərsiniz

$ ps -elf | grep TnHserver

və bunu etməklə 7777 portunda paketləri dinlədiyini yoxlaya bilərsiniz

$ netstat -anu

Aktiv İnternet əlaqələri (serverlər və qurulmuşlar)

Proto Recv-Q Göndər-Q Yerli Ünvan Xarici Ünvan

udp 0 0 0.0.0.0:7777 0.0.0.0:*

Nəhayət CreateTnH_Graphs.sh.txt, qrafikləri yaratmaq üçün bir nümunə skriptdir. (Skriptləri kök olaraq yaradıram, bunu etmək istəməyəcəksiniz.)

Çox sadə bir veb səhifədən istifadə edərək qrafikləri ev şəbəkənizdəki istənilən brauzerdən izləyə bilərsiniz.

Tövsiyə: