Innholdsfortegnelse:
- Rekvisita
- Trinn 1: Last opp Arduino-koden til ESP32-CAM
- Trinn 2: Wire Up
- Trinn 3: Python3 Script
- Trinn 4: MySQL Server
- Trinn 5: Webserver
- Trinn 6: 3D -trykt hus
- Trinn 7: Det endelige resultatet
Video: Temperatur og fuktighet ved bruk av ESP32-DHT22-MQTT-MySQL-PHP: 7 trinn
2024 Forfatter: John Day | [email protected]. Sist endret: 2024-01-30 11:21
Kjæresten min ville ha et drivhus, så jeg lagde et til henne. Men jeg ville ha en temperatur- og fuktighetssensor inne i drivhuset. Så jeg googlet etter eksempler og begynte å eksperimentere.
Min konklusjon var at alle eksemplene jeg fant ikke akkurat var det jeg ønsket å bygge. Jeg tok mange små deler av koden og kombinerte dem. Det tok en god stund å fullføre min første arbeidsbygning fordi dokumentasjonen til de fleste eksemplene var for vanskelig for meg å forstå, eller de antok en del som jeg burde vite ?? Men jeg visste ingenting (ennå) ☹
Derfor bygger jeg dette instruerbart. En opplæring fra begynnelsen til slutten for bokstavelig talt alle å forstå. (Håper jeg i hvert fall?)
Hvordan det fungerer …
Sluttproduktet er en ESP32-CAM med en DHT22-sensor festet til den som får strøm fra et 18650-batteri. Hvert tredje minutt leser den temperatur og fuktighet og sender dette over WiFi til en ekstern MQTT -server og går deretter i dvale (i tre minutter) for å bruke så lite batteri som nødvendig
På en Debian -server, (som også kan være en bringebær pi antar jeg) har jeg python3, en MQTT -server, en MySQL -server og en webserver
Python3 -skriptet kjøres som en tjeneste, og når det mottar en MQTT -melding, teller det forrige antall oppføringer (indeksnummer) og øker dette med en. Deretter leser den verdiene av temperaturen og fuktigheten fra MQTT -meldingen. Den ser etter falske verdier, og når verdiene er riktige, sender den verdiene sammen med det nye indeksnummeret og gjeldende dato og klokkeslett til en MySQL -server
Nettserveren har et PHP -skript som leser verdiene fra MySQL -serveren og lager en fin graf fra den ved hjelp av Google Charts. (eksempel)
Rekvisita
Delene jeg brukte er følgende:
- ESP32-CAM (Grunnen til at jeg brukte kamversjonen er fordi den har en ekstern antennekontakt på den. Det er sannsynligvis også andre ESP32-er du kan bruke)
- Ekstern antenne
-
AM2302 DHT22 sensor (Denne har en innebygd motstand, så du trenger bare tre ledninger)
https://www.amazon.de/gp/product/B07CM2VLBK/ref=p…
- 18650 batteriskjold v3
- 18650 batteri (NCR18650B)
- Gammel mikro -USB -kabel (for tilkobling av ESP32 til batteriskjoldet)
- Noen korte hoppetråder
Ekstra nødvendig:
-
USB til TTL -kontakt (bilde)
https://www.amazon.de/FT232RL-Seriell-Unterst%C3%…
- Loddejern
- 3D -skriver (bare nødvendig for etui)
Trinn 1: Last opp Arduino-koden til ESP32-CAM
Så la oss begynne!
For å laste opp Arduino-koden til ESP32-CAM må du koble USBtoTTL-kontakten til ESP32 ved hjelp av skjemaene ovenfor.
Arduino -koden er:
/*Bare et lite program for å lese temperatur og fuktighet fra en DHT22 -sensor og
gi den videre til MQTT. B. Duijnhouwer 8. juni 2020*/#include #include #include #define wifi_ssid "*** WIFI_SSID ***" // wifi ssid #define wifi_password "*** WIFI_PASSWORD ***" // wifi passord #definer mqtt_server "*** SERVER_NAME ***" // servernavn eller IP #define mqtt_user "*** MQTT_USER ***" // brukernavn #define mqtt_password "*** MQTT_PASSWORD ***" // passord #define topic "glasshouse /dhtreadings "#define debug_topic" glasshouse /debug "// Emne for feilsøking /* definisjoner for deepsleep* /#define uS_TO_S_FACTOR 1000000 /* Konverteringsfaktor i mikrosekunder til sekunder* /#define TIME_TO_SLEEP 180 /* Time ESP32 vil gå i dvale i 5 minutter (i sekunder) */ bool debug = true; // Vis loggmelding hvis True #define DHT22_PIN 14 dht DHT; WiFiClient espClient; PubSubClient -klient (espClient); røyedata [80]; ugyldig oppsett () {Serial.begin (115200); setup_wifi (); // Koble til Wifi -nettverksklient.setServer (mqtt_server, 1883); // Konfigurer MQTT -tilkobling, bytt port om nødvendig. if (! client.connected ()) {reconnect (); } // LES DATA int chk = DHT.read22 (DHT22_PIN); flyte t = DHT.temperatur; flyte h = DHT. fuktighet; String dhtReadings = "{" temperatur / ": \" " + streng (t) +" / ", \" fuktighet / ": \" " + streng (h) +" / "}"; dhtReadings.toCharArray (data, (dhtReadings.length () + 1)); if (feilsøk) {Serial.print ("Temperatur:"); Serial.print (t); Serial.print ("| Fuktighet:"); Serial.println (h); } // Publiser verdier til MQTT -emner client.publish (emne, data); // Publiser avlesninger om emne (glasshouse/dhtreadings) if (debug) {Serial.println ("Readings sent to MQTT."); } esp_sleep_enable_timer_wakeup (TIME_TO_SLEEP * uS_TO_S_FACTOR); // gå i dvale Serial.println ("Sett opp ESP32 for å sove for hver" + streng (TIME_TO_SLEEP) + "sekunder"); Serial.println ("Sover som normalt nå."); esp_deep_sleep_start (); } // Oppsettstilkobling til wifi void setup_wifi () {forsinkelse (20); Serial.println (); Serial.print ("Koble til"); Serial.println (wifi_ssid); WiFi.begin (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 (""); } // Koble til Wi -Fi igjen hvis tilkoblingen er tapt ugyldig tilkobling () {mens (! Client.connected ()) {Serial.print ("Kobler til MQTT -megler …"); if (client.connect ("ESP32Client", mqtt_user, mqtt_password)) {Serial.println ("OK"); } annet {Serial.print ("[Feil] Ikke tilkoblet:"); Serial.print (client.state ()); Serial.println ("Vent 5 sekunder før du prøver igjen."); forsinkelse (5000); }}} void loop () {}
Og igjen, ikke glem å erstatte legitimasjonen med din egen legitimasjon
Trinn 2: Wire Up
For strømmen brukte jeg en gammel USB-kabel som jeg kuttet av USB-A-kontakten. Det er fire ledninger i USB -kabelen, vi trenger bare de svarte og de røde.
Så, koble alt i henhold til timeplanen ovenfor.
Trinn 3: Python3 Script
Python3 -skriptet går til et sted hvor det er tilgjengelig for rotbrukeren.
Jeg brukte /root/scripts/glasshouse/glasshouse.py for dette skriptet. Innholdet i python -skriptet er:
# Python3 -skript for å koble til MQTT, lese verdier og skrive dem inn i MySQL
# # B. Duijnhouwer # 8. juni 2020 # # versjon: 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", "glasshus", "*** MYSQL_USERNAME ***", "*** MYSQL_PASSWORD ***") cursor = db.cursor () broker_address = "localhost" #Broker address port = 1883 #Broker port user = "** *MQTT_USERNAME *** "#Connection brukernavn passord =" *** MQTT_PASSWORD *** " #Connection password def on_connect (klient, brukerdata, flagg, rc): #Tilbakeringing for når klienten kobler seg til meglerutskriften (" Connected med resultatkode {0} ". format (str (rc))) # Utskriftsresultat av tilkoblingsforsøk client.subscribe (" glasshouse/dhtreadings/ # ") def on_message (client, userdata, msg): # Tilbakeringing for når en PUBLISH melding mottas fra serveren. cursor.execute ("velg * fra sensordata") numrows = int (cursor.rowcount) newrow = numrows + 1 nå = datetime.now () formatted_date = now.strftime ('%Y-%m-%d%H:% M:%S ') nyttelast = json.loads (msg.payload.decode (' utf-8 ')) print ("Ny rad:"+str (newrow)) temperatur = float (nyttelast ["temperatur"]) fuktighet = float (nyttelast ["fuktighet"]) print ("Temperatur:"+str (temperatur)) print ("Fuktighet:"+str (fuktighet)) print ("Dato:"+str (format_date)) if ((temperatur > -20) og (temperatur = 0) og (fuktighet <= 100)): cur = db.markør () cur.execute ("INSERT INTO glasshouse.sensordata (idx, temperatur, fuktighet, tidsstempel) VERDIER ("+str (newrow)+","+str (temperatur)+","+str (fuktighet)+", %s)", (format_date)) db.commit () print ("data mottatt og importert i MySQL") annet: print ("data overskred grenser og er IKKE importert i MySQL") client = mqtt. Client ("duijnhouwer-com-glasshouse-script") client.username_pw_set (bruker, passord = passord) client.on_connect = on_connect # Definer tilbakeringingsfunksjon til vellykket tilkobling client.on_message = on_message # Definer tilbakeringingsfunksjon for mottak av melding client.connect (broker_address, port = port) #connect to broker client.loop_forever () # Start networking daemon
Ikke glem å bytte ut MySQL brukernavn og passord og MQTT brukernavn og passord til dine egne legitimasjoner
Du kan få skriptet til å kjøre som en tjeneste ved å opprette to filer.
Den første er “/etc/init/glasshouse.conf” med følgende innhold:
start på runlevel [2345]
stopp på runlevel [! 2345] exec /root/scripts/glasshouse/glasshouse.py
Den andre er “/etc/systemd/system/multi-user.target.wants/glasshouse.service”med følgende innhold:
[Enhet]
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 å kjøre som en tjeneste ved å bruke følgende kommando:
systemctl muliggjør drivhus
og start den med:
systemctl start drivhus
Trinn 4: MySQL Server
Du må opprette en ny MySQL -database med bare en tabell i den.
Koden for å lage tabellen er:
LAG TABELL `sensordata` (`idx` int (11) DEFAULT NULL,` temperatur` float DEFAULT NULL, `fuktighet` float DEFAULT NULL,` tidsstempel` datetime DEFAULT NULL) MOTOR = InnoDB DEFAULT CHARSET = utf8;
Trinn 5: Webserver
Nettserveren har to filer, filen index.php og en config.ini -fil
Innholdet i filen config.ini er:
[database]
db_host = "localhost" db_name = "glasshouse" db_table = "sensordata" db_user = "*** DATABASE_USER ***" db_password = "*** DATABASE_PASSWORD ***"
Der du selvfølgelig erstatter *** DATABASE_USER *** og *** DATABASE_PASSWORD *** med din egen legitimasjon.
google.charts.load ('current', {'packages': ['corechart']}); google.charts.setOnLoadCallback (drawChart); function drawChart () {var data = google.visualization.arrayToDataTable ([// ['Tidsstempel', 'Temperatur', 'Fuktighet', 'Varmeindeks'], ['Tidsstempel', 'Temperatur', 'Fuktighet'], spørring ($ sql); # This while - loop formaterer og setter alle de hentede dataene på ['tidsstempel', 'temperatur', 'fuktighet'] måte. while ($ row = $ result-> fetch_assoc ()) {$ timestamp_rest = substr ($ rad ["tidsstempel"], 10, 6); ekko "['". $ timestamp_rest. "',". $ rad ['temperatur']. ",". $ rad ['fuktighet']. "],"; // echo "['". $ timestamp_rest. "',". $ rad ['temperatur']. ",". $ rad ['fuktighet']. ",". $ rad ['heatindex ']. "],";}?>]); // Curved line var options = {title: 'Temperatur og fuktighet', 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, alternativer); } // Sluttbrakett fra drawChart //
Trinn 6: 3D -trykt hus
Til huset brukte jeg to separate hus, ett for ESP32-CAM og DHT22 sammen og ett for 18650 batteriskjold.
Trinn 7: Det endelige resultatet
Det endelige resultatet er også vist på bildene ovenfor.
Og når batteriet er tomt, kan du lade det med en mini -USB -kabel.
Anbefalt:
Overvåkning av temperatur og fuktighet ved bruk av NODE MCU OG BLYNK: 5 trinn
Overvåkning av temperatur og fuktighet ved bruk av NODE MCU OG BLYNK: Hei Gutter I denne instruksen kan vi lære hvordan du får temperatur og fuktighet i atmosfæren ved hjelp av DHT11-temperatur- og fuktighetssensor ved hjelp av Node MCU og BLYNK-appen
DHT -overvåking av temperatur og fuktighet ved bruk av ESP8266 og AskSensors IoT -plattform: 8 trinn
Overvåkning av temperatur og fuktighet i DHT ved bruk av ESP8266 og AskSensors IoT -plattform: I en tidligere instruksjon presenterte jeg en trinnvis veiledning for å komme i gang med ESP8266 -nodenMCU og AskSensors IoT -plattformen. I denne opplæringen kobler jeg til en DHT11 -sensor til noden MCU. DHT11 er en vanlig temperatur og fuktighet
Overvåkning av temperatur og fuktighet ved bruk av ESP-01 & DHT og AskSensors Cloud: 8 trinn
Overvåkning av temperatur og fuktighet ved bruk av ESP-01 & DHT og AskSensors Cloud: I denne instruksen skal vi lære å overvåke temperatur og fuktighetsmålinger ved hjelp av IOT-MCU/ESP-01-DHT11-kortet og AskSensors IoT-plattform .Jeg velger IOT-MCU ESP-01-DHT11-modulen for denne applikasjonen fordi den
Varsel om temperatur og fuktighet ved bruk av AWS og ESP32: 11 trinn
Varsel om temperatur og fuktighet ved bruk av AWS og ESP32: I denne opplæringen vil vi måle forskjellige temperatur- og fuktighetsdata ved hjelp av temperatur- og fuktighetssensor. Du vil også lære hvordan du sender disse dataene til AWS
Arduino værstasjon ved bruk av BMP280 -DHT11 - Temperatur, fuktighet og trykk: 8 trinn
Arduino værstasjon ved bruk av BMP280 -DHT11 - Temperatur, fuktighet og trykk: I denne opplæringen lærer vi hvordan du lager en værstasjon som viser en TEMPERATUR, Fuktighet og trykk på LCD -skjermen TFT 7735 Se en demonstrasjonsvideo