İçindekiler:

Ev Ağı Sıcaklık Sensörü: 7 Adım
Ev Ağı Sıcaklık Sensörü: 7 Adım

Video: Ev Ağı Sıcaklık Sensörü: 7 Adım

Video: Ev Ağı Sıcaklık Sensörü: 7 Adım
Video: Sıfırdan Akıllı Ev Kurulumu - Bölüm 1: ESP32 ve DHT11 ile sıcaklık ölçümü ve mysql e veri yazma 2024, Kasım
Anonim
Ev Ağı Sıcaklık Sensörü
Ev Ağı Sıcaklık Sensörü

Bu projeyi yapmak için bilmeniz gerekenler:

Bilmeniz gerekenler: - Bazı elektronik becerileri (lehimleme)

- Linux

-Arduino IDE'si

(IDE'de ek panoları güncellemeniz gerekecek:

- Arduino IDE aracılığıyla bir ESP kartının güncellenmesi/programlanması.

(web'de bazı güzel dersler var)

Bu, bir Arduino Uno kullanılarak veya bir FTDI (usb - seri adaptör) kullanılarak yapılabilir.

Uno'mu kullandım çünkü bilgisayarımda herhangi bir seri bağlantı noktası yoktu ve bir FTDI'm yoktu

1. Adım: Alışverişe Git

Alışverişe gitmek
Alışverişe gitmek

Bunun gerçekleşmesi için neye ihtiyacınız olacak?

Dijital Sıcaklık ve Nem Sensörü için:

- İster breadboard ister prototip pcb, lehim, havya gibi bir alternatif…

- Biraz tel

- iki jumper

- 10k Ohm direnç

- bir ESP12F (diğer modeller de işe yarayabilir…)

- bir DHT22 (DHT11'den biraz daha pahalı ama daha doğru)

- 3 adet AA şarj edilebilir pil ve bir pil tutucu

- projenizi koymak için küçük bir plastik kutu

- Daha sonraki bir aşamada, pil takımı ile ESP arasına iki adet 10 uF kapasitörlü bir HT7333 eklemeyi planlıyorum

giriş voltajını (VCC) önerilen 3,3 V'a sabitlemek ve aynı zamanda ESP'yi aşırı voltajdan korumak için.

Ağ kısmı için:

- Ev WiFi Ağınız

Sunucu kısmı için:

- Herhangi bir Linux tabanlı sistem (her zaman açık!)

Ahududu Pi kullandım (Açık IP kameralarım için sunucu olarak da kullanıyorum.)

- sunucu kodunuzu derlemek için gcc derleyicisi

- verileri depolamak ve grafikler oluşturmak için rrdtool paketi

- apache (veya başka bir web sunucusu)

Üzerinde Arduino IDE bulunan favori PC veya dizüstü bilgisayarınız.

2. Adım: Kurulum ve Arka Plan

Kurulum ve Arka Plan
Kurulum ve Arka Plan

Bağlı bir WiFi'nin bu versiyonunda - IOT demiyorum - sıcaklık ve nem sensörü bir ESP12F, bir DHT22 ve şarj edilebilir pillerle birlikte 3 AA pil tutucu kullandım.

Her 20 dakikada bir ESP, DHT22'den bir ölçüm alır ve bunu evimdeki WiFi ağımdaki UDP üzerinden bir sunucuya (ahududu Pi) gönderir. Ölçümler gönderildikten sonra ESP derin uykuya geçer. Bu, modülün yalnızca Gerçek Zamanlı Saatine güç verildiği anlamına gelir ve bu da inanılmaz bir güç tasarrufu sağlar. Yaklaşık 5 saniye boyunca, modül yaklaşık 100mA'ya ihtiyaç duyar, daha sonra 20 dakikalık derin uyku sırasında sadece 150uA'ya ihtiyaç duyar.

Her zaman açık olan Raspberry Pi'm olduğu için internet tabanlı herhangi bir servis kullanmak istemedim ve bu şekilde sunucu kısmını da yazma zevkini yaşadım.

Sunucuda (Raspbian çalıştıran bir Raspberry Pi) değerleri basit bir RRD'de saklayan basit bir UDP dinleyicisi (sunucu) yazdım. (Tobias Oetiker'in RRDtool'unu kullanan Round Robin Veritabanı.)

RRDtool'un avantajı, veritabanınızı bir kez oluşturmanız ve boyutun aynı kalmasıdır. Ayrıca arka planda çalışan bir veritabanı sunucunuz (mySQLd gibi) olması gerekmez. RRDtool, Veritabanını oluşturmak ve grafikleri oluşturmak için size araçlar sağlar.

Sunucum, grafikleri periyodik olarak oluşturur ve her şeyi çok basit bir http sayfasında görüntüler. Raspberry Pi üzerinde Apache2 web sunucusuna bağlanarak basit bir tarayıcı ile okumalarıma bakabilirim!

Sonunda, bir FTDI'm (USB'den Seri'ye) yoktu, bu yüzden Arduino UNO'mu kullandım. TX'leri ve RX'leri ve ESP'nin GND'sini ve UNO'yu bağlamanız gerekiyor. (Biliyorum, içgüdüleriniz size RX'leri ve TX'leri geçmenizi söyleyebilir… onu da denedim, işe yaramadı.)

Seviye dönüşümü yapmadım (UNO: High=5V ama ESP temelde 3.3V'luk bir cihaz… Piyasada High levelinizi 5 veya 3.3V olarak seçebileceğiniz güzel FTDI'lar var.

Devrem 3 adet AA şarj edilebilir pil ile çalışıyor - yani aslında 3 X 1.2V. Daha sonraki bir aşamada güvenlik için pil takımı ile devre arasına bir HT7333 yerleştirmeyi planlıyorum; yeni şarj edilmiş piller 1,2V'den fazla olabilir ve ESP'ye min. 3V ve maks. 3.6V. Ayrıca - bir zayıflık anında - Alkalin pilleri (3 X 1.5V = 4.5V) takmaya karar verirsem, ESP'm yanmayacak!

Ben de 10cm x 10cm'lik bir Güneş paneli kullanmayı düşündüm ama uğraşmaya değmezdi. Saatte 3 ölçüm yaparak (temelde 3x 5 saniye @ 100mA max. ve geri kalan zaman @100uA), devremi aynı şarj edilebilir pillerle 1 yıl boyunca çalıştırmayı umuyorum.

Adım 3: Arduino - ESP12 Bölümü

Arduino - ESP12 Bölümü
Arduino - ESP12 Bölümü
Arduino - ESP12 Bölümü
Arduino - ESP12 Bölümü

Bu projeyi farklı adımlarla yaptım.

ESP12'yi (diğer adıyla ESP8266) Arduino IDE'ye aktarmanıza yardımcı olacak birkaç bağlantı vardır. (Bu arada çözülmüş olabilecek bir hata nedeniyle en son sürüm yerine 2.3.0 sürümünü kullanmak zorunda kaldım…)

ESP'yi Arduino UNO'm üzerinden (sadece PC'm arasında USB üzerinden Seri'ye köprü olarak kullanılır) ESP seri arayüzüne bağlayarak başladım. Bunu açıklayan ayrı Talimatlar var.

Biten projemde, sorun gidermem gerekirse diye Seriye bağlanmak için kabloları bıraktım. RX

Ardından ESP12'nizi aşağıdaki gibi bağlamanız gerekir:

ESP pinleri…

GND UNO GND

RX UNO RX

TX UNO TX

TR VCC

GPIO15 GND

Başlangıçta, ESP'mi UNO'daki 3.3V'dan çalıştırmayı denedim, ancak ESP'mi bir tezgah Güç Kaynağı ile çalıştırmaya hızla geçtim, ancak pil takımınızı da kullanabilirsiniz.

GPIO0 ESP'nin yanıp sönmesini (= programlamayı) etkinleştirmek için bunu bir jumper ile GND'ye bağladım.

İlk test: jumper'ı açık bırakın ve Arduino IDE'de bir seri monitör başlatın (115200 baud'da!).

ESP'yi kapatıp açın, bazı çöp karakterler ve ardından şöyle bir mesaj görmelisiniz:

Ai-Thinker Technology Co. Ltd. hazır

Bu modda, ESP biraz eski moda bir modem gibi davranır. AT komutlarını kullanmanız gerekir.

Aşağıdaki komutları deneyin:

AT+RST

ve aşağıdaki iki komut

AT+CWMODE=3

Tamam

AT+CWLAP

Bu size bölgedeki tüm WiFi ağlarının bir listesini vermelidir.

Bu işe yarıyorsa, bir sonraki adıma hazırsınız.

Adım 4: ESP'yi Ağ Zaman Protokolü (NTP) İstemcisi Olarak Test Etme

ESP'yi Ağ Zaman Protokolü (NTP) İstemcisi Olarak Test Etme
ESP'yi Ağ Zaman Protokolü (NTP) İstemcisi Olarak Test Etme
ESP'yi Ağ Zaman Protokolü (NTP) İstemcisi Olarak Test Etme
ESP'yi Ağ Zaman Protokolü (NTP) İstemcisi Olarak Test Etme

Arduino IDE'de Dosya, Örnekler, ESP8266WiFi altında NTPClient'i yükleyin.

Çalışması için küçük ince ayarlar gerekiyor; WiFi ağınızın SSID'sini ve şifresini girmeniz gerekir.

Şimdi jumper'ı yerleştirin, GPIO0'ı GND'ye kısa devre yapın.

ESP'yi kapatıp açın ve çizimi ESP'ye yükleyin.

Derlemeden sonra ESP'ye yükleme başlamalıdır. Kod indirilirken ESP üzerindeki mavi LED hızla yanıp sönecektir.

Yükleme işe yaramadan önce IDE'yi yeniden başlatarak, ESP'yi yeniden başlatarak biraz oynamam gerektiğini fark ettim.

Çizimi derlemeye/yüklemeye başlamadan önce, seri konsolu (=seri monitör) kapattığınızdan emin olun çünkü bu, yükleme yapmanızı engelleyecektir.

Yükleme başarılı olduktan sonra, ESP'nin İnternet'ten etkin bir şekilde zaman aldığını görmek için seri monitörü yeniden açabilirsiniz.

Harika, ESP'nizi programladınız, WiFi'nize bağlandınız ve İnternet'ten zaman aldınız.

Sonraki adımda DHT22'yi test edeceğiz.

Adım 5: DHT22 Sensörünün Test Edilmesi

DHT22 Sensörünü Test Etme
DHT22 Sensörünü Test Etme

Şimdi bazı ekstra kablolama gerekiyor.

DHT pinleri… Sensörün pin 1'ini (solda) VCC'ye (3,3V) bağlayın

Pin 2 ESP GPIO5'i bağlayın (çizimdeki DHTPIN)

Sensörün 4 numaralı pimini (sağda) GROUND'a bağlayın

Sensörün pin 2'sinden (veri) 1 pinine (gücü) 10K'lık bir direnç bağlayın.

NTP testine benzer şekilde, DHTtester taslağını bulun ve aşağıdaki şekilde değiştirin:

#define DHTPIN 5 // sensöre bağlanmak için GPIO5'i seçtik#define DHTTYPE DHT22 // çünkü DHT22 kullanıyoruz ama bu kod/kütüphane DHT11 için de uygun

Yine, seri monitörü kapatın, ESP'yi kapatıp açın ve ESP'yi derleyin ve flaşlayın.

Her şey yolunda giderse, ölçümlerin seri monitörde göründüğünü görmelisiniz.

Sensörle biraz oynayabilirsiniz. Üzerinde nefes alırsanız, nemin arttığını göreceksiniz.

(LED olmayan) bir masa lambanız varsa, biraz ısıtmak için sensörün üzerine parlayabilirsiniz.

Harika! Sensörün iki büyük parçası şu anda çalışıyor.

Bir sonraki adımda, son kod hakkında yorum yapacağım.

Adım 6: Bir araya getirmek…

Bir araya getirmek…
Bir araya getirmek…

Yine bazı ekstra kablolar… bu DeepSleep'i mümkün kılmak içindir.

DeepSleep'in IoT cihazları için inanılmaz bir işlev olduğunu unutmayın.

Ancak sensörünüz DeepSleep için kabloluysa, ESP'yi yeniden programlamak zor olabilir, bu nedenle arasında başka bir jumper bağlantısı yapacağız.

GPIO16-RST.

Evet, GPIO16 OLMALIDIR, çünkü DeepSleep'ten sonra Gerçek Zamanlı Saat çaldığında cihazı uyandırmak için kablolu olarak bağlanan GPIO budur!

Test ederken 15 saniyelik bir DeepSleep yapmaya karar verebilirsiniz.

Hata ayıklarken, programımı flash edebilmek için jumper'ı GPIO0'a taşırdım.

İndirme tamamlandığında, DeepSleep'in çalışması için jumper'ı GPIO16'ya taşırdım.

ESP kodunun adı TnHclient.c

SSID'nizi, Parolanızı ve sunucunuzun IP adresini değiştirmeniz gerekir.

Kurulumunuzu gidermek veya test etmek için kullanabileceğiniz fazladan kod satırları vardır.

Adım 7: Şeylerin Sunucu Tarafı

Şeylerin Sunucu Tarafı
Şeylerin Sunucu Tarafı
Şeylerin Sunucu Tarafı
Şeylerin Sunucu Tarafı

UDP'nin güvenilmez olduğu ve TCP'nin güvenilir olmadığı yaygın bir yanlış anlamadır.

Bu, bir çekicin bir tornavidadan daha faydalı olduğunu söylemek kadar aptalcadır. Onlar sadece farklı çok kullanışlı araçlardır ve her ikisinin de kullanımları vardır.

Bu arada, UDP olmadan İnternet çalışmaz… DNS, UDP'ye dayanır.

Bu yüzden çok hafif, kolay ve hızlı olduğu için UDP'yi seçtim.

WiFi'min çok güvenilir olduğunu düşünüyorum, bu nedenle müşteri, "Tamam!" onayını alırsa en fazla 3 UDP paketi gönderecektir. alınmaz.

TnHserver'ın C kodu, TnHServer.c dosyasındadır.

Bunu açıklayan kodda birkaç yorum var.

Sunucuda bazı ekstra araçlara ihtiyacımız olacak: rrdtool, apache ve belki tcpdump.

Raspbian'a rrdtool kurmak için paketi şu şekilde kurabilirsiniz: apt-get install rrdtool

Ağ trafiğinde hata ayıklamanız gerekiyorsa, tcpdump kullanışlıdır apt-get install tcpdump

Grafiklere bakmak için tarayıcı kullanabilmek için bir web sunucusuna ihtiyacım vardı: apt-get install apache2

Round Robin Veritabanını oluşturma komutunu almak için şu aracı kullandım: https://rrdwizard.appspot.com/index.php. Bunu yalnızca bir kez çalıştırmanız gerekir (ilk seferde doğru yaparsanız).

rrdtool TnHdatabase.rrd oluştur --şimdi başlayın-10s

--adım '1200'

'DS:Sıcaklık: GÖSTERGE:1200:-20.5:45.5'

'DS:Nem:GÖSTERGE:1200:0:100.0'

'RRA:ORTALAMA:0.5:1:720'

'RRA:ORTALAMA:0.5:3:960'

'RRA:ORTALAMA:0.5:18:1600'

Son olarak, her gün gece yarısı TnHserver'ımı yeniden başlatmak için bir crontab girişi kullanıyorum. Güvenlik önlemi olarak TnHserver'ı normal bir kullanıcı (yani root DEĞİL) olarak çalıştırıyorum.

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

Yaparak TnHserver'ın çalıştığını kontrol edebilirsiniz.

$ ps -elf | grep TnHsunucusu

ve yaparak 7777 numaralı bağlantı noktasındaki paketleri dinlediğini doğrulayabilirsiniz.

$ netstat -anu

Aktif İnternet bağlantıları (sunucular ve kurulu)

Proto Recv-Q Gönderme-Q Yerel Adres Yabancı Adres Durumu

udp 0 0 0.0.0.0:7777 0.0.0.0:*

Son olarak CreateTnH_Graphs.sh.txt, grafikleri oluşturmak için örnek bir komut dosyasıdır. (Komut dosyalarını root olarak oluşturuyorum, bunu yapmak istemeyebilirsiniz.)

Çok basit bir web sayfası kullanarak ev ağınızdaki herhangi bir tarayıcıdan grafikleri izleyebilirsiniz.

Önerilen: