Tartalomjegyzék:
- Kellékek
- Lépés: Töltse fel az Arduino kódot az ESP32-CAM-ba
- 2. lépés: Vegye fel a kapcsolatot
- 3. lépés: Python3 szkript
- 4. lépés: MySQL szerver
- 5. lépés: Webszerver
- 6. lépés: 3D nyomtatott ház
- 7. lépés: A végeredmény
Videó: Hőmérséklet és páratartalom az ESP32-DHT22-MQTT-MySQL-PHP használatával: 7 lépés
2024 Szerző: John Day | [email protected]. Utoljára módosítva: 2024-01-30 09:40
A barátnőm üvegházat akart, ezért csináltam neki egyet. De hő- és páratartalom -érzékelőt akartam az üvegházba. Szóval, googlettam példákat, és elkezdtem kísérletezni.
A következtetésem az volt, hogy az általam talált példák nem pontosan azok, amelyeket fel akartam építeni. Megragadtam egy csomó kis kódrészletet, és egyesítettem őket. Elég sok időbe telt, amíg befejeztem az első munkámat, mert a legtöbb példa dokumentációját túl nehéz volt megértenem, vagy feltételezték azt a részt, amit tudnom kell ?? De nem tudtam semmit (még) ☹
Ezért építem ezt az oktathatót. Egy „elejétől a végéig” bemutató, amelyet szó szerint mindenki megérthet. (Legalábbis remélem?)
Hogyan működik …
A végtermék egy ESP32-CAM, amelyhez DHT22 érzékelő van csatlakoztatva, és amely egy 18650-es akkumulátorról kap energiát. Három percenként leolvassa a hőmérsékletet és a páratartalmat, és elküldi ezt WiFi -n keresztül egy külső MQTT szervernek, majd alszik (három percre), hogy szükség szerint kevesebb akkumulátort használjon
Debian szerveren (ami szerintem málna pi is lehet) van python3, MQTT szerver, MySQL szerver és webszerver
A python3 szkript szolgáltatásként fut, és amikor MQTT üzenetet kap, számolja az előző bejegyzések számát (indexszám), és ezt eggyel növeli. Ezután leolvassa a hőmérséklet és a páratartalom értékeit az MQTT üzenetből. Ellenőrzi a hamis értékeket, és amikor az értékek helyesek, elküldi az értékeket az új indexszámmal és az aktuális dátummal és idővel együtt egy MySQL szerverre
A webszerver PHP szkripttel rendelkezik, amely kiolvassa az értékeket a MySQL szerverről, és szép grafikont készít belőle a Google Charts segítségével. (példa)
Kellékek
Az általam használt alkatrészek a következők:
- ESP32-CAM (Az ok, amiért a kamerás verziót használtam, az az, hogy van rajta külső antennacsatlakozó. Valószínűleg más ESP32 is használható.)
- Külső antenna
-
AM2302 DHT22 érzékelő (ez egy beépített ellenállással rendelkezik, így csak három vezetékre van szüksége)
https://www.amazon.de/gp/product/B07CM2VLBK/ref=p…
- 18650 akkumulátorpajzs v3
- 18650 akkumulátor (NCR18650B)
- Régi mikro USB kábel (az ESP32 csatlakoztatásához az akkumulátor burkolatához)
- Néhány rövid áthidaló vezeték
Extra szükséges:
-
USB -TTL csatlakozó (kép)
https://www.amazon.de/FT232RL-Seriell-Unterst%C3%…
- Forrasztópáka
- 3D nyomtató (csak házhoz szükséges)
Lépés: Töltse fel az Arduino kódot az ESP32-CAM-ba
Tehát kezdjük!
Ha fel szeretné tölteni az Arduino kódot az ESP32-CAM-ba, akkor az USBtoTTL csatlakozót az ESP32-hez kell csatlakoztatnia a fenti vázlatok szerint.
Az Arduino kód:
/*Csak egy kis program a hőmérséklet és páratartalom leolvasására a DHT22 érzékelőből és
adja át az MQTT -nek. B. Duijnhouwer 2020. június 8.*/#include #include #include #define wifi_ssid "*** WIFI_SSID ***" // wifi ssid #define wifi_password "*** WIFI_PASSWORD ***" // wifi jelszó #define mqtt_server "*** SERVER_NAME ***" // szerver neve vagy IP #define mqtt_user "*** MQTT_USER ***" // felhasználónév #define mqtt_password "*** MQTT_PASSWORD ***" // jelszó #define topic "üvegház /dhtreadings "#define debug_topic" üvegház /hibakeresés "// A hibakeresés témája /* definíciók a mély alváshoz* /#define uS_TO_S_FACTOR 1000000 /* Konverziós tényező mikro másodpercről másodpercre* /#define TIME_TO_SLEEP 180 /* Az ESP32 alvó állapotba kerül 5 percig (másodpercben) */ bool debug = igaz; // Naplóüzenet megjelenítése, ha igaz #define DHT22_PIN 14 dht DHT; WiFiClient espClient; PubSubClient kliens (espClient); char adatok [80]; void setup () {Serial.begin (115200); setup_wifi (); // Csatlakozás Wifi hálózati klienshez.setServer (mqtt_server, 1883); // Az MQTT kapcsolat konfigurálása, szükség esetén a port cseréje. if (! client.connected ()) {reconnect (); } // ADATOK OLVASÁSA int chk = DHT.read22 (DHT22_PIN); úszó t = DHT.hőmérséklet; úszó h = DHT.páratartalom; String dhtReadings = "{" hőmérséklet / ": \" " + String (t) +" / ", \" páratartalom / ": \" " + String (h) +" / "}"; dhtReadings.toCharArray (adatok, (dhtReadings.length () + 1)); if (hibakeresés) {Serial.print ("Temperature:"); Soros.nyomat (t); Serial.print ("| Páratartalom:"); Soros.println (h); } // Értékek közzététele az MQTT témakörökben client.publish (téma, adatok); // Olvasmányok közzététele a témában (üvegház/dhtreadings) if (debug) {Serial.println ("Az MQTT -nek küldött olvasmányok."); } esp_sleep_enable_timer_wakeup (TIME_TO_SLEEP * uS_TO_S_FACTOR); // elalvás Serial.println ("Az ESP32 beállítása minden alváshoz" + String (TIME_TO_SLEEP) + "Seconds"); Serial.println ("Most a szokásos módon alszik."); esp_deep_sleep_start (); } // Kapcsolat beállítása a wifi -hez void setup_wifi () {delay (20); Sorozat.println (); Serial.print ("Csatlakozás"); Serial.println (wifi_ssid); WiFi.begin (wifi_ssid, wifi_password); while (WiFi.status ()! = WL_CONNECTED) {delay (100); Soros.nyomtatás ("."); } Soros.println (""); Serial.println ("A WiFi rendben van"); Serial.print ("=> ESP32 új IP -címe:"); Serial.print (WiFi.localIP ()); Serial.println (""); } // Csatlakozz újra a wifi -hez, ha a kapcsolat megszakad void reonnect () {while (! Client.connected ()) {Serial.print ("Csatlakozás az MQTT brókerhez…"); if (client.connect ("ESP32Client", mqtt_user, mqtt_password)) {Serial.println ("OK"); } else {Serial.print ("[Hiba] Nincs kapcsolat:"); Serial.print (kliens.állapot ()); Serial.println ("Várjon 5 másodpercet, mielőtt újra próbálkozik."); késleltetés (5000); }}} void loop () {}
És még egyszer: ne felejtse el kicserélni a hitelesítő adatokat saját hitelesítő adataival
2. lépés: Vegye fel a kapcsolatot
Az áramellátáshoz egy régi USB-kábelt használtam, amelyből levágtam az USB-A csatlakozót. Az USB -kábelben négy vezeték van, csak a fekete és a piros kell.
Tehát kössön össze mindent a fenti ütemterv szerint.
3. lépés: Python3 szkript
A Python3 szkript olyan helyre megy, ahol a root felhasználó számára hozzáférhető.
A /root/scripts/glasshouse/glasshouse.py parancsot használtam ehhez a szkripthez. A python szkript tartalma:
# Python3 szkript az MQTT -hez való kapcsolódáshoz, értékek olvasásához és a MySQL -be írásához
# # B. Duijnhouwer # 2020. június 8. # # verzió: 1.0 # # import paho.mqtt.client as mqtt import json import pymysql pymysql.install_as_MySQLdb () import MySQLdb from datetime import datetime db = MySQLdb.connect ("localhost", "üvegház", "*** MYSQL_USERNAME ***", "*** MYSQL_PASSWORD ***") kurzor = db.cursor () broker_address = "localhost" #Broker address port = 1883 #Broker port user = "** *MQTT_USERNAME *** "#Connection username password =" *** MQTT_PASSWORD *** "#Connection password def on_connect (kliens, felhasználói adatok, zászlók, rc): #A visszahívás arra az időre, amikor az ügyfél csatlakozik a bróker nyomtatáshoz (" Connected eredménykóddal {0} ". formátum (str (rc))) # A csatlakozási kísérlet nyomtatási eredménye client.subscribe (" üvegház/dhtreadings/ # ") def on_message (kliens, felhasználói adatok, üzenet): # A visszahívás, amikor PUBLISH üzenet érkezett a szervertől. cursor.execute ("válasszon * az érzékelési adatokból") numrows = int (kurzor.rowcount) newrow = numrows + 1 most = datetime.now () formatted_date = now.strftime ('%Y-%m-%d%H:% M:%S ') hasznos terhelés = json.loads (msg.payload.decode (' utf-8 ')) print ("Új sor:"+str (newrow)) hőmérséklet = úszó (hasznos terhelés ["hőmérséklet"]) páratartalom = float (hasznos terhelés ["páratartalom"]) print ("Hőmérséklet:"+str (hőmérséklet)) print ("Páratartalom:"+str (páratartalom)) print ("DateTime:"+str (formázott_dátum)) if ((hőmérséklet > -20) és (hőmérséklet = 0) és (páratartalom <= 100)): cur = db.cursor () cur.execute ("INSERT INTO glasshouse.sensordata (idx, hőmérséklet, páratartalom, időbélyeg) VALUES ("+str (newrow)+","+str (hőmérséklet)+","+str (páratartalom)+", %s)", (formattált_dátum)) db.commit () print ("MySQL -ben kapott és importált adatok") else: print ("az adatok meghaladták a korlátokat, és NEM importálták a MySQL-be") client = mqtt. Client ("duijnhouwer-com-glasshouse-script") client.username_pw_set (felhasználó, jelszó = jelszó) client.on_connect = on_connect # Visszahívási funkció meghatározása számára sikeres csatlakozás client.on_message = on_message # Visszahívási funkció meghatározása az ügyfél fogadására. connect (broker_address, port = port) #connect to broker client.loop_forever () # Hálózati démon indítása
Ne felejtse el kicserélni a MySQL felhasználónevet és jelszót, valamint az MQTT felhasználónevet és jelszót saját hitelesítő adataira
A parancsfájlt szolgáltatásként futtathatja két fájl létrehozásával.
Az első a „/etc/init/glasshouse.conf” a következő tartalommal:
indulás futási szinten [2345]
stop on runlevel [! 2345] exec /root/scripts/glasshouse/glasshouse.py
A második a „/etc/systemd/system/multi-user.target.wants/glasshouse.service” a következő tartalommal:
[Mértékegység]
Leírás = Üvegházfigyelő szolgáltatás Utána = multi-user.target [Szolgáltatás] Típus = egyszerű Újraindítás = mindig RestartSec = 1 ExecStart =/usr/bin/python3 /root/scripts/glasshouse/glasshouse.py [Telepítés] WantedBy = többfelhasználó.cél
Ezt a szolgáltatást a következő paranccsal hajthatja végre:
rendszer engedélyezi az üvegházat
és indítsa el a következő használatával:
systemctl start üvegház
4. lépés: MySQL szerver
Létre kell hoznia egy új MySQL adatbázist, csak egy táblával.
A táblázat létrehozásának kódja:
TABLE "sensordata" létrehozása (`idx` int (11) DEFAULT NULL,` hőmérséklet` float DEFAULT NULL, `páratartalom` float DEFAULT NULL,` timestamp` datetime DEFAULT NULL) MOTOR = InnoDB DEFAULT CHARSET = utf8;
5. lépés: Webszerver
A webszervernek két fájlja van, az index.php és egy config.ini fájl
A config.ini fájl tartalma:
[adatbázis]
db_host = "localhost" db_name = "üvegház" db_table = "sensordata" db_user = "*** DATABASE_USER ***" db_password = "*** DATABASE_PASSWORD ***"
Ahol természetesen a *** DATABASE_USER *** és a *** DATABASE_PASSWORD *** szót saját hitelesítő adataival cseréli le.
google.charts.load ('aktuális', {'csomagok': ['corechart']}); google.charts.setOnLoadCallback (drawChart); function drawChart () {var data = google.visualization.arrayToDataTable ([// ['Időbélyeg', 'Hőmérséklet', 'Páratartalom', 'Hőindex'], ['Időbélyegző', 'Hőmérséklet', 'Páratartalom'], query ($ sql); # This while - ciklus formázza, és az összes lekért adatot ['timestamp', 'hőmérséklet', 'páratartalom'] módon helyezi el. while ($ row = $ result-> fetch_assoc ()) {$ timestamp_rest = substr ($ row ["timestamp"], 10, 6); echo "['". $ timestamp_rest. "", ". $ row [' temperature '].", ". $ row [' páratartalom ']. "],"; // echo "['". $ timestamp_rest. "", ". $ row [' hőmérséklet '].", ". $ sor [' páratartalom '].", ". $ row [' heatindex ']. "],";}?>]); // Ívelt vonal var options = {title: 'Hőmérséklet és páratartalom', curveType: 'function', legend: {position: 'bottom'}, hAxis: {slantedText: true, ferdeTextAngle: 45}}; // Ívelt diagram var chart = new google.visualization. LineChart (document.getElementById ('curve_chart')); chart.draw (adatok, opciók); } // zárójel a drawChartból //
6. lépés: 3D nyomtatott ház
A házhoz két külön házat használtam, egyet az ESP32-CAM és a DHT22 együtt, egyet pedig az 18650-es elempajzshoz.
7. lépés: A végeredmény
A végeredmény a fenti képeken is látható.
És amikor az akkumulátor lemerült, mini USB -kábellel töltheti fel.
Ajánlott:
M5STACK A hőmérséklet, a páratartalom és a nyomás megjelenítése az M5StickC ESP32 készüléken a Visuino használatával - Könnyen elvégezhető: 6 lépés
M5STACK A hőmérséklet, a páratartalom és a nyomás megjelenítése az M5StickC ESP32 készüléken a Visuino használatával - Könnyen elvégezhető: Ebben az oktatóanyagban megtanuljuk, hogyan programozhatjuk be az ESP32 M5Stack StickC programot Arduino IDE -vel és Visuino -val, hogy megjelenítse a hőmérsékletet, a páratartalmat és a nyomást az ENV érzékelő (DHT12, BMP280, BMM150)
Automatikus hűtőventilátor a szervó és a DHT11 hőmérséklet- és páratartalom -érzékelő használatával Arduino segítségével: 8 lépés
Automatikus hűtőventilátor a szervó és a DHT11 hőmérséklet- és páratartalom -érzékelő használatával az Arduino segítségével: Ebben az oktatóanyagban megtanuljuk, hogyan kell elindítani & forgassa a ventilátort, ha a hőmérséklet egy bizonyos szint fölé emelkedik
Hőmérséklet- és páratartalom -ellenőrzés NODE MCU és BLYNK használatával: 5 lépés
Hőmérséklet- és páratartalom-felügyelet a NODE MCU és BLYNK használatával: Sziasztok, srácok! Ebben az oktatóanyagban megtanuljuk, hogyan lehet a légkör hőmérsékletét és páratartalmát a DHT11-hőmérséklet- és páratartalom-érzékelő segítségével a Node MCU és a BLYNK alkalmazás segítségével
ESP8266 NodeMCU hozzáférési pont (AP) webszerverhez DT11 hőmérséklet -érzékelővel és nyomtatási hőmérséklet és páratartalom a böngészőben: 5 lépés
ESP8266 NodeMCU hozzáférési pont (AP) webszerverhez DT11 hőmérséklet -érzékelővel és nyomtatási hőmérséklet és páratartalom a böngészőben: Sziasztok srácok, a legtöbb projektben ESP8266 -ot használunk, és a legtöbb projektben ESP8266 -ot használunk webszerverként, így az adatok hozzáférhetők bármilyen eszköz wifi -n keresztül az ESP8266 által üzemeltetett webszerver elérésével, de az egyetlen probléma az, hogy működő útválasztóra van szükségünk
Esp32 Hőmérséklet és páratartalom webszerver PYTHON & Zerynth IDE használatával: 3 lépés
Esp32 hőmérséklet és páratartalom webszerver a PYTHON és Zerynth IDE használatával: Az Esp32 egy csodálatos mikrovezérlő, ugyanolyan erős, mint egy Arduino, de még jobb is! Wifi kapcsolattal rendelkezik, lehetővé téve az IOT projektek olcsó és egyszerű fejlesztését. az eszközök frusztrálóak, először nem stabil, Secon