Sadržaj:
- Pribor
- Korak 1: Prenesite Arduino kod na ESP32-CAM
- Korak 2: Povežite se
- Korak 3: Python3 skripta
- Korak 4: MySQL poslužitelj
- Korak 5: Web poslužitelj
- Korak 6: 3D tiskano kućište
- Korak 7: Konačni rezultat
Video: Temperatura i vlažnost pomoću ESP32-DHT22-MQTT-MySQL-PHP: 7 koraka
2024 Autor: John Day | [email protected]. Zadnja promjena: 2024-01-30 09:33
Moja djevojka je htjela staklenik, pa sam joj to napravio. Ali htio sam senzor temperature i vlage unutar staklenika. Dakle, googlao sam primjere i počeo eksperimentirati.
Moj je zaključak bio da svi primjeri koje sam pronašao nisu baš ono što sam htio izgraditi. Uzeo sam mnogo malih dijelova koda i kombinirao ih. Trebalo mi je dosta vremena da završim svoju prvu radnu gradnju jer mi je dokumentacija većine primjera bila preteška za razumijevanje ili su pretpostavljali dio koji bih trebao znati ?? Ali nisam znao (još) ništa ☹
Zato gradim ovo uputstvo. Vodič "od početka do kraja" koji će doslovno svi razumjeti. (Bar se nadam?)
Kako radi …
Krajnji proizvod je ESP32-CAM s priključenim DHT22 senzorom koji dobiva snagu iz baterije 18650. Svake tri minute očitava temperaturu i vlagu i šalje ih putem WiFi -a na vanjski MQTT poslužitelj, a zatim ide u stanje mirovanja (tri minute) kako bi koristio što je moguće manje baterije
Na Debian poslužitelju (koji bi mogao biti i malina pi) imam python3, MQTT poslužitelj, MySQL poslužitelj i web poslužitelj
Skripta python3 radi kao usluga i kad god primi MQTT poruku, broji prethodni broj unosa (broj indeksa) i povećava je za jedan. Zatim čita vrijednosti temperature i vlažnosti iz MQTT poruke. On provjerava ima li lažnih vrijednosti i kad god su vrijednosti točne, šalje vrijednosti zajedno s novim indeksnim brojem i trenutnim datumom i vremenom na MySQL poslužitelj
Web poslužitelj ima PHP skriptu koja čita vrijednosti s MySQL poslužitelja i od nje pravi lijepi grafikon pomoću Google grafikona. (primjer)
Pribor
Dijelovi koje sam koristio su sljedeći:
- ESP32-CAM (Razlog zašto sam koristio verziju kamere je zato što na sebi ima priključak za vanjsku antenu. Vjerojatno postoje i drugi ESP32 koji biste mogli koristiti)
- Vanjska antena
-
AM2302 DHT22 osjetnik (Ovaj ima ugrađeni otpornik, pa su vam potrebne samo tri žice)
https://www.amazon.de/gp/product/B07CM2VLBK/ref=p…
- 18650 štitnik baterije v3
- Baterija 18650 (NCR18650B)
- Stari mikro USB kabel (za spajanje ESP32 na štitnik baterije)
- Neke kratke kratkospojne žice
Dodatno potrebno:
-
USB na TTL konektor (slika)
https://www.amazon.de/FT232RL-Seriell-Unterst%C3%…
- Lemilica
- 3D pisač (potreban samo za kućište kućišta)
Korak 1: Prenesite Arduino kod na ESP32-CAM
Pa počnimo!
Da biste učitali Arduino kôd na ESP32-CAM, morate spojiti USBtoTTL konektor na ESP32 pomoću gornjih shema.
Arduino kôd je:
/*Samo mali program za očitavanje temperature i vlažnosti sa senzora DHT22 i
proslijedi MQTT -u. B. Duijnhouwer, 8. lipnja 2020.*/#include #include #include #define wifi_ssid "*** WIFI_SSID ***" // wifi ssid #define wifi_password "*** WIFI_PASSWORD ***" // lozinka za WiFi #define mqtt_server "*** SERVER_NAME ***" // naziv poslužitelja ili IP #define mqtt_user "*** MQTT_USER ***" // korisničko ime #define mqtt_password "*** MQTT_PASSWORD ***" // lozinka #define topic "staklenik /dhtreadings "#define debug_topic" glasshouse /debug "// Tema za otklanjanje pogrešaka /* definicije za duboki san* /#define uS_TO_S_FACTOR 1000000 /* Faktor pretvorbe za mikro sekunde u sekunde* /#define TIME_TO_SLEEP 180 /* Vrijeme ESP32 će otići u stanje mirovanja 5 minuta (u sekundama) */ bool debug = true; // Prikaz poruke dnevnika ako je True #define DHT22_PIN 14 dht DHT; WiFiClient espClient; PubSubClient klijent (espClient); char podaci [80]; void setup () {Serial.begin (115200); setup_wifi (); // Povežite se s klijentom Wifi mreže.setServer (mqtt_server, 1883); // Konfigurirajte MQTT vezu, promijenite port ako je potrebno. if (! client.connected ()) {ponovno povezivanje (); } // PROČITAJ PODATKE int chk = DHT.read22 (DHT22_PIN); plovak t = DHT.temperatura; plovak h = DHT.vlažnost; Niz dhtReadings = "{" temperatura / ": \" " + Niz (t) +" / ", \" vlažnost / ": \" " + Niz (h) +" / "}"; dhtReadings.toCharArray (podaci, (dhtReadings.length () + 1)); if (ispravljanje pogrešaka) {Serial.print ("Temperatura:"); Serijski.tisak (t); Serial.print ("| Vlažnost:"); Serijski.println (h); } // Objavljivanje vrijednosti u MQTT temama client.publish (tema, podaci); // Objavljivanje lektire na temu (staklenik/dhtreadings) if (ispravljanje pogrešaka) {Serial.println ("Čitanja poslana MQTT -u."); } esp_sleep_enable_timer_wakeup (TIME_TO_SLEEP * uS_TO_S_FACTOR); // idite na spavanje Serial.println ("Postavljanje ESP32 u stanje mirovanja za svaki" + niz (TIME_TO_SLEEP) + "Sekunde"); Serial.println ("Odlazak na spavanje kao normalno."); esp_deep_sleep_start (); } // Postavljanje veze na wifi void setup_wifi () {delay (20); Serial.println (); Serial.print ("Povezivanje s"); Serial.println (wifi_ssid); WiFi.begin (wifi_ssid, wifi_password); while (WiFi.status ()! = WL_CONNECTED) {odgoda (100); Serial.print ("."); } Serial.println (""); Serial.println ("WiFi je u redu"); Serial.print ("=> ESP32 nova IP adresa je:"); Serial.print (WiFi.localIP ()); Serial.println (""); } // Ponovo se povežite na wifi ako se veza izgubi. Void reconnect () {while (! Client.connected ()) {Serial.print ("Povezivanje s posrednikom MQTT …"); if (client.connect ("ESP32Client", mqtt_user, mqtt_password)) {Serial.println ("U redu"); } else {Serial.print ("[Greška] Nije povezano:"); Serial.print (client.state ()); Serial.println ("Pričekajte 5 sekundi prije ponovnog pokušaja."); kašnjenje (5000); }}} void loop () {}
I opet, ne zaboravite zamijeniti vjerodajnice vlastitim vjerodajnicama
Korak 2: Povežite se
Za napajanje sam koristio stari USB kabel kojem sam odrezao USB-A konektor. U USB kabelu postoje četiri žice, trebaju nam samo crna i crvena.
Dakle, sve spojite prema gore navedenom rasporedu.
Korak 3: Python3 skripta
Skripta Python3 ide na mjesto gdje je dostupna root korisniku.
Koristio sam /root/scripts/glasshouse/glasshouse.py za ovu skriptu. Sadržaj python skripte je:
# Python3 skripta za povezivanje s MQTT -om, čitanje vrijednosti i njihovo upisivanje u MySQL
# # B. Duijnhouwer #, 8. lipnja 2020. # # verzija: 1.0 # # import paho.mqtt.client kao mqtt import json import pymysql pymysql.install_as_MySQLdb () uvoz MySQLdb iz datetime import datetime db = MySQLdb.connect ("localhost", "staklenik", "*** MYSQL_USERNAME ***", "*** MYSQL_PASSWORD ***") kurzor = db.cursor () broker_address = "localhost" #Broker adresa port = 1883 #Broker port user = "** *MQTT_USERNAME *** " #Korisničko ime lozinke za povezivanje =" *** MQTT_PASSWORD *** " #Lozinka za povezivanje def on_connect (klijent, korisnički podaci, zastavice, rc): #Povratni poziv kada se klijent poveže s brokerskim ispisom (" Povezano s kodom rezultata {0} ". format (str (rc))) # Ispis rezultata pokušaja povezivanja client.subscribe (" glasshouse/dhtreadings/ # ") def on_message (client, userdata, msg): # Povratni poziv za kada PUBLISH poruka je primljena s poslužitelja. cursor.execute ("select * from sensordata") numrows = int (cursor.rowcount) newrow = numrows + 1 now = datetime.now () formatted_date = now.strftime ('%Y-%m-%d%H:% M:%S ') korisni teret = json.loads (msg.payload.decode (' utf-8 ')) print ("Novi red:"+str (newrow)) temperatura = plutajući (korisni teret ["temperatura"]) vlažnost = float (korisni teret ["vlažnost"]) ispis ("Temperatura:"+str (temperatura)) ispis ("Vlažnost:"+str (vlažnost)) ispis ("DatumTime:"+str (formatted_date)) if ((temperatura > -20) i (temperatura = 0) i (vlažnost <= 100)): cur = db.cursor () cur.execute ("INSERT INTO glasshouse.sensordata (idx, temperatura, vlažnost, vremenska oznaka) VALUES ("+str (newrow)+","+str (temperatura)+","+str (vlažnost)+", %s)", (formatted_date)) db.commit () print ("podaci primljeni i uvezeni u MySQL") else: print ("podaci su premašili ograničenja i NISU uvezeni u MySQL") client = mqtt. Client ("duijnhouwer-com-glasshouse-script") client.username_pw_set (korisnik, lozinka = lozinka) client.on_connect = on_connect # Definirajte funkciju povratnog poziva za uspješna veza client.on_message = on_message # Definirajte funkciju povratnog poziva za primanje poruke client.connect (adresa_brokera, port = port) #povežite se s posrednikom client.loop_forever () # Pokrenite demona umrežavanja
Ne zaboravite zamijeniti korisničko ime i lozinku za MySQL te korisničko ime i lozinku za MQTT vlastitim vjerodajnicama
Skriptu možete pokrenuti kao uslugu stvaranjem dvije datoteke.
Prva je “/etc/init/glasshouse.conf” sa sljedećim sadržajem:
start na runlevel [2345]
zaustavi se na runlevel [! 2345] exec /root/scripts/glasshouse/glasshouse.py
Druga je „/etc/systemd/system/multi-user.target.wants/glasshouse.service Outlook sa sljedećim sadržajem:
[Jedinica]
Opis = Usluga nadgledanja staklenika Poslije = višekorisnički cilj [Usluga] Vrsta = jednostavno Ponovno pokretanje = uvijek RestartSec = 1 ExecStart =/usr/bin/python3 /root/scripts/glasshouse/glasshouse.py [Instaliraj] Traži se = više korisnika.cilj
Ovo pokretanje možete izvršiti kao uslugu pomoću sljedeće naredbe:
systemctl omogućiti staklenik
i pokrenite ga pomoću:
systemctl start staklenik
Korak 4: MySQL poslužitelj
Morate stvoriti novu MySQL bazu podataka sa samo jednom tablicom u njoj.
Kôd za izradu tablice je:
CREATE TABLE `sensordata` (`idx` int (11) DEFAULT NULL,` temperature` float DEFAULT NULL, float `Vlaga` float DEFAULT NULL,` timestamp` datetime DEFAULT NULL) MOTOR = InnoDB ZADNJA KARTA = utf8;
Korak 5: Web poslužitelj
Web poslužitelj ima dvije datoteke, datoteku index.php i jednu datoteku config.ini
Sadržaj datoteke config.ini je:
[baza podataka]
db_host = "localhost" db_name = "staklenik" db_table = "sensordata" db_user = "*** DATABASE_USER ***" db_password = "*** DATABASE_PASSWORD ***"
Gdje izvan kursa zamijenite *** DATABASE_USER *** i *** DATABASE_PASSWORD *** vlastitim vjerodajnicama.
google.charts.load ('current', {'packages': ['corechart']}); google.charts.setOnLoadCallback (crtanje grafikona); function drawChart () {var data = google.visualization.arrayToDataTable ([// ['Vremenska oznaka', 'Temperatura', 'Vlažnost', 'Toplinski indeks'], ['Vremenska oznaka', 'Temperatura', 'Vlažnost'], query ($ sql); # This while - petlja formatira i stavlja sve preuzete podatke na način ['timestamp', 'temperature', 'Vlažnost']. while ($ row = $ result-> fetch_assoc ()) {$ timestamp_rest = substr ($ row ["timestamp"], 10, 6); echo "['". $ timestamp_rest. "',". $ row ['temperature']. ",". $ row ['Vlažnost']. "],"; // echo "['". $ timestamp_rest. "',". $ row ['temperature']. ",". $ row ['Vlažnost']. ",". $ row ['heatindex ']. "],";}?>]); // Var curved line var options = {title: 'Temperatura i vlažnost', curveType: 'function', legend: {position: 'bottom'}, hAxis: {slantedText: true, slantedTextAngle: 45}}; // Zakrivljeni grafikon var chart = novi google.visualization. LineChart (document.getElementById ('curve_chart')); chart.draw (podaci, opcije); } // Završna zagrada iz drawChart //
Korak 6: 3D tiskano kućište
Za kućište sam koristio dva odvojena kućišta, jedno za ESP32-CAM i DHT22 zajedno i jedno za štitnik baterije 18650.
Korak 7: Konačni rezultat
Konačni rezultat također je prikazan na gornjim slikama.
A kad god je baterija prazna, možete je napuniti mini USB kabelom.
Preporučeni:
M5STACK Kako prikazati temperaturu, vlažnost i tlak na M5StickC ESP32 pomoću Visuina - jednostavno za napraviti: 6 koraka
M5STACK Kako prikazati temperaturu, vlažnost i tlak na M5StickC ESP32 pomoću Visuina - jednostavno za napraviti: U ovom ćemo vodiču naučiti kako programirati ESP32 M5Stack StickC s Arduino IDE i Visuino za prikaz temperature, vlažnosti i tlaka pomoću ENV osjetnika (DHT12, BMP280, BMM150)
Meteorološka stanica Arduino pomoću BMP280 -DHT11 - Temperatura, vlažnost i tlak: 8 koraka
Arduino meteorološka postaja pomoću BMP280 -DHT11 - Temperatura, vlažnost i tlak: U ovom ćemo vodiču naučiti kako izraditi meteorološku stanicu koja će prikazivati TEMPERATURU, VLAGU I TLAK na LCD zaslonu TFT 7735Gledajte demonstracijski video
Nadzor-Temp-i-Vlažnost-pomoću-AWS-ESP32: 8 koraka
Monitoring-Temp-and-Humidity-using-AWS-ESP32: U ovom ćemo vodiču mjeriti različite podatke o temperaturi i vlažnosti zraka pomoću senzora za temperaturu i vlagu. Naučit ćete i kako poslati te podatke AWS -u
Esp32 Web server za temperaturu i vlažnost zraka pomoću PYTHON -a i Zerynth IDE -a: 3 koraka
Esp32 web-poslužitelj za temperaturu i vlažnost zraka pomoću PYTHON-a i Zerynth IDE-a: Esp32 je veličanstven mikrokontroler, snažan je poput Arduina, ali još bolji! Ima Wifi povezivanje, omogućava vam jeftino i jednostavno razvijanje IOT projekata. Ali rad s Esp-om uređaji frustriraju, prvo nije stabilan, Secon
Temperatura, relativna vlažnost, zapisivač atmosferskog tlaka pomoću povezivanja Raspberry Pi i TE MS8607-02BA01: 22 koraka (sa slikama)
Temperatura, relativna vlažnost, zapisivač atmosferskog tlaka pomoću povezivanja Raspberry Pi i TE MS8607-02BA01: Uvod: U ovom projektu pokazat ću vam kako izgraditi sustav za bilježenje vlažne temperature i atmosferskog tlaka. Ovaj se projekt temelji na čipu senzora okoliša Raspberry Pi 3 modela B i TE Connectivity MS8607-02BA