Mündəricat:
- Təchizat
- Addım 1: Arduino Kodunu ESP32-CAM-a yükləyin
- Addım 2: Bağlanın
- Addım 3: Python3 Script
- Addım 4: MySQL Server
- Addım 5: Veb server
- Addım 6: 3D çaplı mənzil
- Addım 7: Son nəticə
Video: ESP32-DHT22-MQTT-MySQL-PHP istifadə edərək temperatur və rütubət: 7 addım
2024 Müəllif: John Day | [email protected]. Son dəyişdirildi: 2024-01-30 07:44
Sevgilim bir camxana istədi, ona görə də onu tikdim. Ancaq istixananın içərisində bir temperatur və rütubət sensoru istədim. Beləliklə, nümunələr üçün googled və təcrübə etməyə başladım.
Nəticəm bu idi ki, tapdığım bütün nümunələr qurmaq istədiyim kimi deyildi. Kodun bir çox kiçik hissəsini götürüb birləşdirdim. İlk iş quruluşumu başa çatdırmağım xeyli vaxt aldı, çünki əksər nümunələrin sənədləşməsini başa düşməyim çox çətin idi və ya bilməli olduğum bir hissəni qəbul etdilər? Amma heç nə bilmirdim (hələ)
Buna görə də bu təlimatı mən hazırlayıram. Hər kəsin başa düşməsi üçün "başlanğıcdan sona qədər" bir dərslik. (Heç olmasa ümid edirəm?)
Bu necə işləyir …
Son məhsul, 18650 batareyadan güc alan DHT22 sensoru olan bir ESP32-CAM-dır. Hər üç dəqiqədə bir temperatur və rütubəti oxuyur və WiFi üzərindən xarici bir MQTT serverinə göndərir və sonra lazım olduğu qədər az batareya istifadə etmək üçün yuxuya gedir (üç dəqiqə)
Debian serverində (güman ki, moruq pi də ola bilər) python3, MQTT serveri, MySQL serveri və veb serverim var
Python3 skripti bir xidmət olaraq çalışır və bir MQTT mesajı aldıqda əvvəlki giriş sayını (indeks nömrəsini) sayır və bunu bir artırır. Sonra MQTT mesajından temperatur və rütubətin dəyərlərini oxuyur. Yanlış dəyərləri yoxlayır və dəyərlər düzgün olduqda dəyərləri yeni indeks nömrəsi və cari tarix və vaxt ilə birlikdə MySQL serverinə göndərir
Veb serveri, MySQL serverindəki dəyərləri oxuyan və Google Qrafiklərindən istifadə edərək gözəl bir qrafik hazırlayan bir PHP skriptinə malikdir. (nümunə)
Təchizat
İstifadə etdiyim hissələr aşağıdakılardır:
- ESP32-CAM (Kam versiyasını istifadə etməyimin səbəbi, xarici anten konnektoru olmasıdır. Yəqin ki, istifadə edə biləcəyiniz başqa ESP32 də var)
- Xarici anten
-
AM2302 DHT22 sensoru (Daxili bir rezistora malikdir, buna görə yalnız üç telə ehtiyacınız var)
https://www.amazon.de/gp/product/B07CM2VLBK/ref=p…
- 18650 batareya qalxanı v3
- 18650 batareya (NCR18650B)
- Köhnə mikro USB kabeli (ESP32 -ni batareya qalxanına bağlamaq üçün)
- Bəzi qısa keçid telləri
Əlavə ehtiyac:
-
USB - TTL konnektoru (şəkil)
https://www.amazon.de/FT232RL-Seriell-Unterst%C3%…
- Lehimleme dəmir
- 3D printer (yalnız korpus üçün lazımdır)
Addım 1: Arduino Kodunu ESP32-CAM-a yükləyin
Beləliklə, başlayaq!
Arduino kodunu ESP32-CAM-a yükləmək üçün yuxarıdakı sxemlərdən istifadə edərək USBtoTTL konnektorunu ESP32-yə bağlamalısınız.
Arduino kodu belədir:
/*DHT22 sensorundan temperatur və rütubəti oxumaq üçün kiçik bir proqram və
MQTT -ə ötürün. B. Duijnhouwer, 8 iyun 2020*/ #daxil #daxil #daxil # #wifi_ssidini təyin et "*** WIFI_SSID ***" // wifi ssid #wifi_password "*** WIFI_PASSWORD ***" // wifi parol #define mqtt_server "*** SERVER_NAME ***" // server adı və ya IP #define mqtt_user "*** MQTT_USER ***" // istifadəçi adı #define mqtt_password "*** MQTT_PASSWORD ***" // parol #mövzunu təyin et "glasshouse /dhtreadings "#define debug_topic" glasshouse /debug "// Hata ayıklama üçün mövzu /* dərin yuxu üçün təriflər* /#define uS_TO_S_FACTOR 1000000 /* Mikro saniyələr üçün dönüşüm faktoru* /#define TIME_TO_SLEEP 180 /* Time ESP32 yuxuya gedəcək 5 dəqiqə ərzində (saniyələrdə) */ bool debug = true; // Doğru olarsa qeyd mesajını göstər #DHT22_PIN 14 dht DHT; WiFiClient espClient; PubSubClient müştəri (espClient); char məlumatları [80]; void setup () {Serial.begin (115200); setup_wifi (); // Wifi şəbəkəsinə qoşul client.setServer (mqtt_server, 1883); // MQTT bağlantısını konfiqurasiya edin, lazım olduqda portu dəyişdirin. if (! client.connected ()) {reconnect (); } // MƏLUMATLARI oxuyun int chk = DHT.read22 (DHT22_PIN); float t = DHT. temperatur; float h = DHT. nəmlik; String dhtReadings = "{" temperatur / ": \" " + String (t) +" / ", \" rütubət / ": \" " + String (h) +" / "}"; dhtReadings.toCharArray (məlumatlar, (dhtReadings.length () + 1)); if (debug) {Serial.print ("Temperatur:"); Serial. çap (t); Serial.print ("| Nəmlik:"); Serial.println (h); } // MQTT mövzularına dəyərləri dərc edin client.publish (mövzu, məlumatlar); // Mövzuya dair oxunuşlar dərc edin (glasshouse/dhtreadings) if (debug) {Serial.println ("Oxunuşlar MQTT -yə göndərilir."); } esp_sleep_enable_timer_wakeup (TIME_TO_SLEEP * uS_TO_S_FACTOR); // yuxuya get Serial.println ("Hər biri üçün yatmaq üçün ESP32 qur" + String (TIME_TO_SLEEP) + "Saniyə"); Serial.println ("İndi normal yuxuya gedirəm."); esp_deep_sleep_start (); } // wifi bağlantısını qurun void setup_wifi () {gecikmə (20); Serial.println (); Serial.print ("Bağlanır"); Serial.println (wifi_ssid); WiFi.begin (wifi_ssid, wifi_password); while (WiFi.status ()! = WL_CONNECTED) {gecikmə (100); Serial.print ("."); } Serial.println (""); Serial.println ("WiFi yaxşıdır"); Serial.print ("=> ESP32 yeni IP ünvanı:"); Serial.print (WiFi.localIP ()); Serial.println (""); } // Bağlantı kəsildikdə wifi -yə yenidən qoşulun etibarsız yenidən əlaqə () {while (! Client.connected ()) {Serial.print ("MQTT brokerinə qoşulur…"); əgər (client.connect ("ESP32Client", mqtt_user, mqtt_password)) {Serial.println ("OK"); } başqa {Serial.print ("[Hata] Bağlı deyil:"); Serial.print (client.state ()); Serial.println ("Yenidən cəhd etməzdən əvvəl 5 saniyə gözləyin."); gecikmə (5000); }}} boşluq döngəsi () {}
Yenə də etimadnamənizi öz etimadnamənizlə əvəz etməyi unutmayın
Addım 2: Bağlanın
Güc üçün, USB-A konnektorunu kəsdiyim köhnə bir USB kabelindən istifadə etdim. USB kabelində dörd tel var, yalnız qara və qırmızıya ehtiyacımız var.
Beləliklə, hər şeyi yuxarıdakı cədvələ uyğun olaraq bağlayın.
Addım 3: Python3 Script
Python3 skripti, kök istifadəçinin əlçatan olduğu bir yerə daxil olur.
Bu skript üçün /root/scripts/glasshouse/glasshouse.py istifadə etdim. Python skriptinin məzmunu belədir:
MQTT -yə qoşulmaq, dəyərləri oxumaq və MySQL -ə yazmaq üçün # Python3 skripti
# # B. Duijnhouwer # 8 İyun 2020 # # versiya: 1.0 # # mqtt kimi paho.mqtt.client idxal json idxal pymysql pymysql.install_as_MySQLdb () MySQLdb -ni datetime import datetime db = MySQLdb.connect ("localhost", "glasshouse", "*** MYSQL_USERNAME ***", "*** MYSQL_PASSWORD ***") kursor = db.cursor () broker_address = "localhost" #Broker ünvan portu = 1883 #Broker port istifadəçisi = "** *MQTT_USERNAME *** "#Connection istifadəçi adı şifrəsi =" *** MQTT_PASSWORD *** " #Bağlantı şifrəsi on_connect (müştəri, istifadəçi məlumatları, bayraqlar, rc): #Müştəri brokerə qoşulduqda geri çağırma çapı (" Bağlandı nəticə kodu ilə {0} ". format (str (rc))) # Əlaqə cəhdinin nəticəsini yazın client.subscribe (" glasshouse/dhtreadings/ # ") def on_message (client, userdata, msg): # A zaman PUBLISH mesajı serverdən alınır. cursor.execute ("sensordatadan * seçin") numrows = int (cursor.rowcount) newrow = numrows + 1 indi = datetime.now () formatatt_date = now.strftime ('%Y-%m-%d%H:% M:%S ') payload = json.loads (msg.payload.decode (' utf-8 ')) print ("New row:"+str (newrow)) temperatur = float (payload ["temperatur"]) rütubət = float (yük ["rütubət"]) çap ("Temperatur:"+str (temperatur)) çap ("Rütubət:"+str (rütubət)) çap ("DateTime:"+str (formatlı_tarix)) əgər ((temperatur > -20) və (temperatur = 0) və (rütubət <= 100)): cur = db.cursor () cur.execute ("INSERT INTO glasshouse.sensordata (idx, temperatur, rütubət, zaman damgası) VALUES ("+str) (newrow)+","+str (temperatur)+","+str (rütubət)+", %s)", (formated_date)) db.commit () print ("MySQL -də alınan və alınan məlumatlar") başqa: çap ("məlumatlar limitləri aşdı və MySQL-də idxal edilmir") client = mqtt. Client ("duijnhouwer-com-glasshouse-script") client.username_pw_set (istifadəçi, parol = parol) client.on_connect = on_connect # Geri çağırma funksiyasını təyin edin üçün uğurlu əlaqə müştəri.on_message = on_message # Bir mesajın alınması üçün geri çağırma funksiyasını təyin edin.
MySQL istifadəçi adınızı və şifrənizi və MQTT istifadəçi adınızı və şifrənizi öz şəxsi məlumatlarınızla əvəz etməyi unutmayın
İki fayl yaradaraq skriptin xidmət olaraq işlədilməsini təmin edə bilərsiniz.
Birincisi, aşağıdakı məzmunlu "/etc/init/glasshouse.conf" dir:
qaçış səviyyəsinə başlayın [2345]
runlevel səviyyəsində dayanın [! 2345] exec /root/scripts/glasshouse/glasshouse.py
İkincisi, "/etc/systemd/system/multi-user.target.wants/glasshouse.service" aşağıdakı məzmundadır:
[Bölmə]
Təsvir = Glasshouse Monitorinq Xidməti Sonra = multi-user.target [Xidmət] Növ = sadə Yenidən Başla = həmişə RestartSec = 1 ExecStart =/usr/bin/python3 /root/scripts/glasshouse/glasshouse.py [Quraşdır] WantedBy = çox istifadəçi.hədəf
Aşağıdakı əmri istifadə edərək bunu bir xidmət olaraq edə bilərsiniz:
systemctl glasshouse imkan verir
və istifadə edərək başlayın:
systemctl glasshouse işə salın
Addım 4: MySQL Server
İçində yalnız bir masa olan yeni bir MySQL verilənlər bazası yaratmalısınız.
Cədvəl yaratmaq üçün kod:
Cədvəl yaradın `sensordata` (`idx` int (11) DEFAULT NULL,` temperatur` float VARSAYILAN NULL, `nəmlik 'float Varsayılan NULL,` zaman damgası' datetime VARSIZ NULL) ENGINE = InnoDB VARSAYILAN CHARSET = utf8;
Addım 5: Veb server
Veb serverinin iki faylı var, index.php faylı və bir config.ini faylı
Config.ini faylının məzmunu belədir:
[verilənlər bazası]
db_host = "localhost" db_name = "glasshouse" db_table = "sensordata" db_user = "*** DATABASE_USER ***" db_password = "*** DATABASE_PASSWORD ***"
Əlbətdə ki, *** DATABASE_USER *** və *** DATABASE_PASSWORD *** sözlərini öz etimadnamənizlə əvəz edin.
google.charts.load ('cari', {'paketlər': ['corechart']}); google.charts.setOnLoadCallback (drawChart); drawChart () {var data = google.visualization.arrayToDataTable ([// ['Zaman damgası', 'Temperatur', 'Rütubət', 'İstilik İndeksi'], ['Zaman Damgası', 'Temperatur', 'Rütubət'], sorğu ($ sql); # This while - loop formatları və bütün alınan məlumatları ['zaman damgası', 'temperatur', 'rütubət'] üsuluna daxil edin. while ($ row = $ result-> fetch_assoc ()) {$ timestamp_rest = substr ($ sıra ["zaman damgası"], 10, 6); echo "['". $ timestamp_rest. "',". $ row ['temperatur']. ",". $ sıra ['rütubət']. "],"; // echo "['". $ timestamp_rest. "',". $ row ['temperatur']. ",". $ row ['rütubət']. ",". $ sıra ['istilik indeksi ']. "],";}?>]); // Əyri xətt var variantları = {başlıq: 'Temperatur və rütubət', curveType: 'funksiya', işarəsi: {mövqe: 'alt'}, hAxis: {slantedText: doğru, slantedTextAngle: 45}}; // Əyri qrafik var chart = new google.visualization. LineChart (document.getElementById ('curve_chart'))); chart.draw (məlumatlar, seçimlər); } // DrawChart -dan mötərizəni bitir //
Addım 6: 3D çaplı mənzil
Korpus üçün biri ESP32-CAM və DHT22 üçün, biri də 18650 batareya qalxanı üçün iki ayrı yuvadan istifadə etdim.
Addım 7: Son nəticə
Son nəticə də yuxarıdakı şəkillərdə göstərilmişdir.
Batareya boş olduqda mini USB kabeli ilə şarj edə bilərsiniz.
Tövsiyə:
AWS və ESP32 istifadə edərək temperatur və rütubət xəbərdarlığı: 11 addım
AWS və ESP32 istifadə edərək Temp və Rütubət Alert: Bu təlimatda, Temp və rütubət sensoru istifadə edərək fərqli temperatur və rütubət məlumatlarını ölçəcəyik. Bu məlumatların AWS -ə necə göndəriləcəyini də öyrənəcəksiniz
BMP280 -DHT11 istifadə edən Arduino Hava İstasyonu - Temperatur, Rütubət və Təzyiq: 8 Addım
BMP280 -DHT11 -dən istifadə edən Arduino Hava İstasyonu - Temperatur, Rütubət və Təzyiq: Bu təlimatda TFT 7735 LCD Ekranda SICAKLIQ, NEMLİK və BASINCI göstərəcək bir hava stansiyası qurmağı öyrənəcəyik
HTS221 və Raspberry Pi istifadə edərək rütubət və temperatur ölçülməsi: 4 addım
HTS221 və Raspberry Pi istifadə edərək Nəmlik və Temperatur Ölçmə: HTS221 nisbi rütubət və temperatur üçün ultra kompakt bir kapasitiv rəqəmsal sensordur. Ölçmə məlumatlarını rəqəmsal serial vasitəsilə təmin etmək üçün bir hissedici element və qarışıq siqnal tətbiqinə xüsusi inteqrasiya edilmiş dövrə (ASIC) daxildir
HIH6130 və Raspberry Pi istifadə edərək rütubət və temperatur ölçülməsi: 4 addım
HIH6130 və Raspberry Pi istifadə edərək Nəmlik və Temperatur Ölçmə: HIH6130 rəqəmsal çıxışı olan rütubət və temperatur sensoru. Bu sensorlar ± 4% RH dəqiqlik səviyyəsi təmin edir. Sektorun aparıcı uzunmüddətli sabitliyi, əsl temperaturla kompensasiya edilmiş rəqəmsal I2C, Sənayenin qabaqcıl etibarlılığı, Enerji səmərəliliyi
PYTHON və Zerynth IDE -dən istifadə edərək Esp32 Temperatur və Rütubət Veb Server: 3 addım
PYTHON & Zerynth IDE-dən istifadə edərək Esp32 Temperatur və Rütubət Veb Serveri: Esp32 möhtəşəm bir mikro nəzarətçidir, Arduino kimi güclüdür, amma daha yaxşıdır! Wi-Fi bağlantısı var, IOT layihələrini ucuz və asanlıqla inkişaf etdirməyə imkan verir. cihazlar sinir bozucu olur, Əvvəlcə sabit deyil, Secon