Indholdsfortegnelse:
- Forbrugsvarer
- Trin 1: Upload Arduino-koden til ESP32-CAM
- Trin 2: Tråd op
- Trin 3: Python3 Script
- Trin 4: MySQL -server
- Trin 5: Webserver
- Trin 6: 3D -trykt hus
- Trin 7: Det endelige resultat
Video: Temperatur og fugtighed ved hjælp af ESP32-DHT22-MQTT-MySQL-PHP: 7 trin
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:26
Min kæreste ville have et drivhus, så jeg lavede hende et. Men jeg ville have en temperatur- og fugtighedsføler inde i drivhuset. Så jeg googlede efter eksempler og begyndte at eksperimentere.
Min konklusion var, at alle de eksempler, jeg fandt, ikke ligefrem var det, jeg ville bygge. Jeg tog en masse små dele af koden og kombinerede dem. Det tog mig et stykke tid at afslutte min første arbejdsopbygning, fordi dokumentationen for de fleste eksempler var for vanskelig til at forstå mig, eller de antog en del, som jeg burde vide ?? Men jeg vidste intet (endnu) ☹
Derfor bygger jeg dette instruerbart. En "begyndelse-til slutningen" -vejledning til bogstaveligt talt alle at forstå. (Håber jeg i hvert fald?)
Hvordan det virker …
Slutproduktet er en ESP32-CAM med en DHT22-sensor knyttet til den, som får strøm fra et 18650 batteri. Hvert tredje minut læser den temperatur og luftfugtighed og sender dette via WiFi til en ekstern MQTT -server og går derefter i dvale (i tre minutter) for at bruge så mindre batteri som nødvendigt
På en Debian -server (som også kunne være en hindbær pi) har jeg python3, en MQTT -server, en MySQL -server og en webserver
Python3 -scriptet kører som en tjeneste, og når det modtager en MQTT -meddelelse, tæller det det tidligere antal poster (indeksnummer) og øger dette med en. Derefter læser den værdierne for temperaturen og fugtigheden fra MQTT -meddelelsen. Den kontrollerer for falske værdier, og når værdierne er korrekte, sender den værdierne sammen med det nye indeksnummer og den aktuelle dato og klokkeslæt til en MySQL -server
Webserveren har et PHP -script, der læser værdierne fra MySQL -serveren og laver en flot graf fra den ved hjælp af Google Charts. (eksempel)
Forbrugsvarer
De dele jeg brugte er følgende:
- ESP32-CAM (Grunden til at jeg brugte cam-versionen er fordi den har et eksternt antennestik på. Der er sandsynligvis også andre ESP32’er du kan bruge)
- Ekstern antenne
-
AM2302 DHT22 sensor (Denne har en indbygget modstand, så du behøver kun tre ledninger)
https://www.amazon.de/gp/product/B07CM2VLBK/ref=p…
- 18650 batteriskærm v3
- 18650 batteri (NCR18650B)
- Gammelt mikro -USB -kabel (til tilslutning af ESP32 til batteriskærmen)
- Nogle korte springtråde
Ekstra behov:
-
USB til TTL -stik (billede)
https://www.amazon.de/FT232RL-Seriell-Unterst%C3%…
- Loddekolbe
- 3D -printer (kun nødvendig til huskasse)
Trin 1: Upload Arduino-koden til ESP32-CAM
Så lad os begynde!
For at uploade Arduino-koden til ESP32-CAM skal du tilslutte USBtoTTL-stikket til ESP32 ved hjælp af skemaerne ovenfor.
Arduino -koden er:
/*Bare et lille program til at aflæse temperatur og fugtighed fra en DHT22 sensor og
videregive det til MQTT. B. Duijnhouwer juni, 8th 2020*/#include #include #include #define wifi_ssid "*** WIFI_SSID ***" // wifi ssid #define wifi_password "*** WIFI_PASSWORD ***" // wifi password #define mqtt_server "*** SERVER_NAME ***" // servernavn eller IP #define mqtt_user "*** MQTT_USER ***" // brugernavn #define mqtt_password "*** MQTT_PASSWORD ***" // password #define topic "glasshouse /dhtreadings "#define debug_topic" glasshouse /debug "// Emne til fejlfinding /* definitioner for deepsleep* /#define uS_TO_S_FACTOR 1000000 /* Omregningsfaktor i mikrosekunder til sekunder* /#define TIME_TO_SLEEP 180 /* Time ESP32 går i dvale i 5 minutter (i sekunder) */ bool debug = true; // Vis logbesked, hvis True #define DHT22_PIN 14 dht DHT; WiFiClient espClient; PubSubClient -klient (espClient); kuldata [80]; ugyldig opsætning () {Serial.begin (115200); setup_wifi (); // Opret forbindelse til Wifi -netværksklient.setServer (mqtt_server, 1883); // Konfigurer MQTT -forbindelse, skift port, hvis det er nødvendigt. hvis (! client.connected ()) {genforbind (); } // LÆS DATA int chk = DHT.read22 (DHT22_PIN); flyde t = DHT.temperatur; flyde h = DHT. fugtighed; String dhtReadings = "{" temperatur / ": \" " + streng (t) +" / ", \" fugtighed / ": \" " + streng (h) +" / "}"; dhtReadings.toCharArray (data, (dhtReadings.length () + 1)); if (debug) {Serial.print ("Temperatur:"); Serial.print (t); Serial.print ("| Fugtighed:"); Serial.println (h); } // Udgiv værdier til MQTT -emner client.publish (emne, data); // Udgiv aflæsninger om emne (drivhus/dhtreadings) if (debug) {Serial.println ("Læsning sendt til MQTT."); } esp_sleep_enable_timer_wakeup (TIME_TO_SLEEP * uS_TO_S_FACTOR); // gå i dvale Serial.println ("Indstil ESP32 til at sove for hver" + streng (TIME_TO_SLEEP) + "sekunder"); Serial.println ("Sover som normalt nu."); esp_deep_sleep_start (); } // Opsætning af forbindelse til wifi void setup_wifi () {forsinkelse (20); Serial.println (); Serial.print ("Opretter forbindelse til"); Serial.println (wifi_ssid); WiFi.begyndt (wifi_ssid, wifi_password); mens (WiFi.status ()! = WL_CONNECTED) {forsinkelse (100); Serial.print ("."); } Serial.println (""); Serial.println ("WiFi er OK"); Serial.print ("=> ESP32 ny IP -adresse er:"); Serial.print (WiFi.localIP ()); Serial.println (""); } // Tilslut igen til wifi, hvis forbindelsen går tabt, ugyldig genforbindelse () {mens (! Client.connected ()) {Serial.print ("Opretter forbindelse til MQTT -mægler …"); hvis (client.connect ("ESP32Client", mqtt_user, mqtt_password)) {Serial.println ("OK"); } ellers {Serial.print ("[Fejl] Ikke tilsluttet:"); Serial.print (client.state ()); Serial.println ("Vent 5 sekunder, før du prøver igen."); forsinkelse (5000); }}} void loop () {}
Og igen, glem ikke at udskifte legitimationsoplysningerne med dine egne legitimationsoplysninger
Trin 2: Tråd op
Til strømmen brugte jeg et gammelt USB-kabel, hvoraf jeg afbrød USB-A-stikket. Der er fire ledninger i USB -kablet, vi har kun brug for de sorte og de røde.
Så tilslut alt i henhold til skemaet ovenfor.
Trin 3: Python3 Script
Python3 -scriptet går ind på et sted, hvor det er tilgængeligt for rodbrugeren.
Jeg brugte /root/scripts/glasshouse/glasshouse.py til dette script. Indholdet af python -scriptet er:
# Python3 -script for at oprette forbindelse til MQTT, læse værdier og skrive dem i MySQL
# # B. Duijnhouwer # juni, 8. 2020 # # version: 1.0 # # import paho.mqtt.client som mqtt import json import pymysql pymysql.install_as_MySQLdb () import MySQLdb fra datetime import datetime db = MySQLdb.connect ("localhost", "glashus", "*** MYSQL_USERNAME ***", "*** MYSQL_PASSWORD ***") cursor = db.cursor () broker_address = "localhost" #Broker address port = 1883 #Broker port user = "** *MQTT_USERNAME *** "#Connection brugernavn password =" *** MQTT_PASSWORD *** " #Connection password def on_connect (klient, brugerdata, flag, rc): #Tilbagekald til når klienten opretter forbindelse til mæglerudskrivningen (" Tilsluttet med resultatkode {0} ". format (str (rc))) # Udskriv resultat af forbindelsesforsøg client.subscribe (" glasshouse/dhtreadings/ # ") def on_message (client, userdata, msg): # Tilbagekald til når en PUBLISH -besked modtages fra serveren. cursor.execute ("vælg * fra sensordata") numrows = int (cursor.rowcount) newrow = numrows + 1 nu = datetime.now () formatted_date = now.strftime ('%Y-%m-%d%H:% M:%S ') nyttelast = json.loads (msg.payload.decode (' utf-8 ')) print ("Ny række:"+str (ny)) temperatur = float (nyttelast ["temperatur"]) fugtighed = float (nyttelast ["fugtighed"]) print ("Temperatur:"+str (temperatur)) print ("Fugtighed:"+str (fugtighed)) print ("DateTime:"+str (format_date)) if ((temperatur > -20) og (temperatur = 0) og (fugtighed <= 100)): cur = db.cursor () cur.execute ("INSERT INTO glasshouse.sensordata (idx, temperatur, luftfugtighed, tidsstempel) VÆRDIER ("+str (newrow)+","+str (temperatur)+","+str (fugtighed)+", %s)", (formateret_dato)) db.commit () print ("data modtaget og importeret i MySQL") andet: print ("data overskred grænser og er IKKE importeret i MySQL") client = mqtt. Client ("duijnhouwer-com-glasshouse-script") client.username_pw_set (bruger, password = password) client.on_connect = on_connect # Definer tilbagekaldsfunktion til succesfuld forbindelse client.on_message = on_message # Definer tilbagekaldsfunktion til modtagelse af en meddelelse client.connect (broker_address, port = port) #connect to broker client.loop_forever () # Start networking daemon
Glem ikke at udskifte MySQL brugernavn og adgangskode og MQTT brugernavn og adgangskode til dine egne legitimationsoplysninger
Du kan få scriptet til at køre som en tjeneste ved at oprette to filer.
Den første er “/etc/init/glasshouse.conf” med følgende indhold:
start på runlevel [2345]
stop på runlevel [! 2345] exec /root/scripts/glasshouse/glasshouse.py
Den anden er “/etc/systemd/system/multi-user.target.wants/glasshouse.service”med følgende indhold:
[Enhed]
Beskrivelse = Glasshouse Monitoring Service After = multi-user.target [Service] Type = simple Restart = always RestartSec = 1 ExecStart =/usr/bin/python3 /root/scripts/glasshouse/glasshouse.py [Install] WantedBy = multi-user.mål
Du kan få dette til at køre som en service ved hjælp af følgende kommando:
systemctl muliggøre drivhus
og start det med:
systemctl start drivhus
Trin 4: MySQL -server
Du skal oprette en ny MySQL -database med kun en tabel i den.
Koden til oprettelse af tabellen er:
Opret tabel `sensordata` (`idx` int (11) DEFAULT NULL,` temperatur` float DEFAULT NULL, `luftfugtighed` float DEFAULT NULL,` tidsstempel` datetime DEFAULT NULL) MOTOR = InnoDB DEFAULT CHARSET = utf8;
Trin 5: Webserver
Webserveren har to filer, filen index.php og en config.ini -fil
Indholdet af filen config.ini er:
[database]
db_host = "localhost" db_name = "glasshouse" db_table = "sensordata" db_user = "*** DATABASE_USER ***" db_password = "*** DATABASE_PASSWORD ***"
Hvor du selvfølgelig erstatter *** DATABASE_USER *** og *** DATABASE_PASSWORD *** med dine egne legitimationsoplysninger.
google.charts.load ('nuværende', {'pakker': ['corechart']}); google.charts.setOnLoadCallback (drawChart); funktion drawChart () {var data = google.visualization.arrayToDataTable ([// ['Tidsstempel', 'Temperatur', 'Fugtighed', 'Varmeindeks'], ['Tidsstempel', 'Temperatur', 'Fugtighed'], forespørgsel ($ sql); # This while - loop formaterer og sætter alle de hentede data på ['tidsstempel', 'temperatur', 'fugtighed'] måde. while ($ row = $ result-> fetch_assoc ()) {$ timestamp_rest = substr ($ række ["tidsstempel"], 10, 6); ekko "['". $ tidsstempel_rest. "',". $ række ['temperatur']. ",". $ række ['fugtighed']. "],"; // ekko "['". $ timestamp_rest. "',". $ row ['temperatur']. ",". $ row ['luftfugtighed']. ",". $ row ['heatindex ']. "],";}?>]); // Buet linje var options = {title: 'Temperatur og luftfugtighed', curveType: 'function', legend: {position: 'bottom'}, hAxis: {slantedText: true, slantedTextAngle: 45}}; // Curved chart var chart = new google.visualization. LineChart (document.getElementById ('curve_chart')); chart.draw (data, optioner); } // Slutbeslag fra drawChart //
Trin 6: 3D -trykt hus
Til huset brugte jeg to separate huse, et til ESP32-CAM og DHT22 sammen og et til 18650 batteriskærm.
Trin 7: Det endelige resultat
Det endelige resultat er også vist på billederne ovenfor.
Og når batteriet er tomt, kan du oplade det med et mini -USB -kabel.
Anbefalede:
M5STACK Sådan vises temperatur, fugtighed og tryk på M5StickC ESP32 ved hjælp af Visuino - let at gøre: 6 trin
M5STACK Sådan vises temperatur, luftfugtighed og tryk på M5StickC ESP32 ved hjælp af Visuino - let at gøre: I denne vejledning lærer vi, hvordan du programmerer ESP32 M5Stack StickC med Arduino IDE og Visuino til at vise temperatur, luftfugtighed og tryk ved hjælp af ENV -sensor (DHT12, BMP280, BMM150)
Overvågning af temperatur og fugtighed ved hjælp af NODE MCU OG BLYNK: 5 trin
Overvågning af temperatur og luftfugtighed ved hjælp af NODE MCU OG BLYNK: Hej Guys I denne instruktive lad os lære at få temperatur og luftfugtighed i atmosfæren ved hjælp af DHT11-temperatur- og fugtighedsføler ved hjælp af Node MCU og BLYNK app
DHT -overvågning af temperatur og fugtighed ved hjælp af ESP8266 og AskSensors IoT -platform: 8 trin
DHT -temperatur- og fugtighedsovervågning ved hjælp af ESP8266 og AskSensors IoT -platform: I en tidligere instruerbar præsenterede jeg en trinvis vejledning for at komme i gang med ESP8266 -nodenMCU og AskSensors IoT -platformen. I denne vejledning tilslutter jeg en DHT11 -sensor til knudepunktets MCU. DHT11 er en almindeligt anvendt temperatur og fugt
Overvågning af temperatur og fugtighed ved hjælp af ESP-01 & DHT og AskSensors Cloud: 8 trin
Overvågning af temperatur og luftfugtighed ved hjælp af ESP-01 & DHT og AskSensors Cloud: I denne instruktør skal vi lære at overvåge temperatur- og fugtighedsmålingerne ved hjælp af IOT-MCU/ESP-01-DHT11-kortet og AskSensors IoT-platformen .Jeg vælger IOT-MCU ESP-01-DHT11-modulet til denne applikation, fordi det
Advarsel om temperatur og fugtighed ved hjælp af AWS og ESP32: 11 trin
Advarsel om temperatur og luftfugtighed ved hjælp af AWS og ESP32: I denne vejledning måler vi forskellige temperatur- og fugtighedsdata ved hjælp af Temp og fugtighedsføler. Du lærer også, hvordan du sender disse data til AWS