Sisukord:
- Tarvikud
- Samm: laadige Arduino kood üles ESP32-CAM-i
- Samm: ühendage juhtmed
- Samm: Python3 skript
- Samm: MySQL -server
- Samm: veebiserver
- 6. samm: 3D -trükitud korpus
- Samm: lõpptulemus
Video: Temperatuur ja niiskus ESP32-DHT22-MQTT-MySQL-PHP abil: 7 sammu
2024 Autor: John Day | [email protected]. Viimati modifitseeritud: 2024-01-30 08:47
Mu tüdruksõber tahtis kasvuhoonet, nii et ma tegin talle selle. Tahtsin aga kasvuhoone sisse temperatuuri- ja niiskusandurit. Niisiis, otsisin näiteid googeldades ja hakkasin katsetama.
Minu järeldus oli, et kõik näited, mis ma leidsin, ei olnud täpselt need, mida ma ehitada tahtsin. Haarasin palju väikeseid koodiosasid ja ühendasin need. Esimese tööehituse lõpetamiseks kulus mul üsna kaua aega, sest enamiku näidete dokumentatsioonist oli mulle liiga raske aru saada või nad eeldasid osa, mida ma peaksin teadma ?? Aga ma ei teadnud midagi (veel) ☹
Sellepärast koostan selle juhendi. Õpetus „algusest lõpuni”, millest sõna otseses mõttes saavad kõik aru. (Vähemalt loodan?)
Kuidas see töötab …
Lõpptoode on ESP32-CAM, mille külge on kinnitatud DHT22 andur, mis saab energiat 18650 patareist. Iga kolme minuti järel loeb see temperatuuri ja niiskust ning saadab selle WiFi kaudu välisele MQTT -serverile ja läheb seejärel magama (kolmeks minutiks), et kasutada vajadusel vähem akut
Debiani serveris (mis võib olla ka vaarika pi), on mul python3, MQTT -server, MySQL -server ja veebiserver
Skript python3 töötab teenusena ja alati, kui ta saab MQTT -teate, loendab see eelmised kirjed (indeksi number) ja suurendab seda ühe võrra. Seejärel loeb see MQTT sõnumist temperatuuri ja niiskuse väärtused. See kontrollib valeväärtusi ja kui väärtused on õiged, saadab need väärtused koos uue registrinumbri ning praeguse kuupäeva ja kellaaja MySQL -serverisse
Veebiserveril on PHP -skript, mis loeb MySQL -serveri väärtused ja teeb sellest Google Charts'i abil kena graafiku. (näide)
Tarvikud
Osad, mida kasutasin, on järgmised:
- ESP32-CAM (Põhjus, miks ma nukkversiooni kasutasin, on see, et sellel on väline antennipistik. Tõenäoliselt on ka teisi ESP32-sid, mida võiksite kasutada)
- Väline antenn
-
AM2302 DHT22 andur (sellel on sisseehitatud takisti, nii et vajate ainult kolme juhet)
https://www.amazon.de/gp/product/B07CM2VLBK/ref=p…
- 18650 akukilp v3
- 18650 aku (NCR18650B)
- Vana mikro -USB -kaabel (ESP32 ühendamiseks akukilbiga)
- Mõned lühikesed hüppajajuhtmed
Lisa vaja:
-
USB -TTL -pistik (pilt)
https://www.amazon.de/FT232RL-Seriell-Unterst%C3%…
- Jootekolb
- 3D -printer (vajalik ainult korpuse jaoks)
Samm: laadige Arduino kood üles ESP32-CAM-i
Nii et alustame!
Arduino koodi üleslaadimiseks ESP32-CAM-i peate ülaltoodud skeemide abil ühendama USBtoTTL-pistiku ESP32-ga.
Arduino kood on:
/*Vaid väike programm temperatuuri ja niiskuse lugemiseks DHT22 andurilt ja
edastage see MQTT -le. B. Duijnhouwer, juuni, 8. 2020 "*** SERVER_NAME ***" // serveri nimi või IP #define mqtt_user "*** MQTT_USER ***" // kasutajanimi #define mqtt_password "*** MQTT_PASSWORD ***" // parool #define topic "glasshouse /dhtreadings "#define debug_topic" glasshouse /debug "// Silumise teema /* deepsleepi definitsioonid* /#define uS_TO_S_FACTOR 1000000 /* Teisendustegur mikrosekunditest sekunditesse* /#define TIME_TO_SLEEP 180 /* Aeg ESP32 läheb magama 5 minutit (sekundites) */ bool debug = true; // Kuva logi teade, kui tõsi #define DHT22_PIN 14 dht DHT; WiFiClient espClient; PubSubClient klient (espClient); char andmed [80]; void setup () {Serial.begin (115200); setup_wifi (); // Ühendus Wifi võrguga client.setServer (mqtt_server, 1883); // MQTT -ühenduse seadistamine, vajadusel pordi muutmine. if (! client.connected ()) {reconnect (); } // LOE ANDMED int chk = DHT.read22 (DHT22_PIN); ujuk t = DHT.temperatuur; ujuk h = DHT.niiskus; String dhtReadings = "{" temperatuur / ": \" " + String (t) +" / ", \" niiskus / ": \" " + String (h) +" / "}"; dhtReadings.toCharArray (andmed, (dhtReadings.length () + 1)); if (silumine) {Serial.print ("Temperature:"); Jadajälg (t); Serial.print ("| Niiskus:"); Seeria.println (h); } // Väärtuste avaldamine MQTT teemades client.publish (teema, andmed); // Avalda lugemised teemal (kasvuhoone/dhtreadings) if (silumine) {Serial.println ("Näidud saadetud MQTT -le."); } esp_sleep_enable_timer_wakeup (TIME_TO_SLEEP * uS_TO_S_FACTOR); // mine magama Serial.println ("Seadista ESP32 unerežiimi igaks" + String (TIME_TO_SLEEP) + "Sekundid"); Serial.println ("Lähen magama nagu tavaliselt."); esp_deep_sleep_start (); } // Seadistusühendus wifi -ga tühine setup_wifi () {delay (20); Serial.println (); Serial.print ("Ühendamine"); Serial.println (wifi_ssid); WiFi.begin (wifi_ssid, wifi_password); while (WiFi.status ()! = WL_CONNECTED) {delay (100); Seeria.print ("."); } Serial.println (""); Serial.println ("WiFi on korras"); Serial.print ("=> ESP32 uus IP -aadress on:"); Serial.print (WiFi.localIP ()); Serial.println (""); } // Ühenda uuesti wifi -ga, kui ühendus katkeb void ühenda uuesti () {while (! Client.connected ()) {Serial.print ("Ühendamine MQTT maakleriga…"); if (client.connect ("ESP32Client", mqtt_user, mqtt_password)) {Serial.println ("OK"); } else {Serial.print ("[Viga] Pole ühendatud:"); Serial.print (client.state ()); Serial.println ("Oodake enne uuesti proovimist 5 sekundit."); viivitus (5000); }}} void loop () {}
Ja jällegi, ärge unustage volikirju oma volitustega asendada
Samm: ühendage juhtmed
Toite jaoks kasutasin vana USB-kaablit, millest katkestasin USB-A-pistiku. USB -kaablis on neli juhet, vajame ainult musta ja punast.
Niisiis, ühendage kõik vastavalt ülaltoodud ajakavale.
Samm: Python3 skript
Python3 skript läheb kohta, kus see on juurkasutajale juurdepääsetav.
Selle skripti jaoks kasutasin /root/scripts/glasshouse/glasshouse.py. Pythoni skripti sisu on järgmine:
# Python3 skript MQTT -ga ühenduse loomiseks, väärtuste lugemiseks ja MySQL -i kirjutamiseks
# # B. Duijnhouwer # Juuni, 8th 2020 # # version: 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", "kasvuhoone", "*** MYSQL_USERNAME ***", "*** MYSQL_PASSWORD ***") kursor = db.cursor () broker_address = "localhost" #Makleri aadressport = 1883 #Makleri pordi kasutaja = "** *MQTT_USERNAME *** "#Connection kasutajanime parool =" *** MQTT_PASSWORD *** "#ühenduse parool def on_connect (klient, kasutajaandmed, lipud, rc): #Tagasihelistamine kliendi maakleriga ühenduse loomisel print (" Ühendatud tulemikoodiga {0} ". format (str (rc))) # Ühendustesti katse printimise tulemus client.subscribe (" glasshouse/dhtreadings/ # ") def on_message (klient, kasutajaandmed, sõnum): # Tagasihelistamine, kui PUBLISH sõnum on serverist vastu võetud. cursor.execute ("vali * sensordata") numrows = int (cursor.rowcount) newrow = numrows + 1 kohe = datetime.now () formatted_date = now.strftime ('%Y-%m-%d%H:% M:%S ') kasulik koormus = json.loads (msg.payload.decode (' utf-8 ')) print ("Uus rida:"+str (newrow)) temperatuur = ujuk (kasulik koormus ["temperatuur"]) niiskus = float (kasulik koormus ["niiskus"]) print ("Temperatuur:"+str (temperatuur)) print ("Niiskus:"+str (niiskus)) print ("DateTime:"+str (vormindatud_kuupäev)) if ((temperatuur > -20) ja (temperatuur = 0) ja (niiskus <= 100)): cur = db.cursor () cur.execute ("INSERT INTO glasshouse.sensordata (idx, temperatuur, niiskus, ajatempel) VALUES ("+str (newrow)+","+str (temperatuur)+","+str (niiskus)+", %s)", (vormindatud_kuupäev)) db.commit () print ("MySQL -is saadud ja imporditud andmed") else: print ("andmed ületasid piire ja neid EI impordita MySQL-i") client = mqtt. Client ("duijnhouwer-com-glasshouse-script") client.username_pw_set (kasutaja, parool = parool) client.on_connect = on_connect # Määrake tagasihelistamisfunktsioon eest eduka ühenduse loomine client.on_message = on_message # Määrake sõnumite vastuvõtmiseks kliendile tagasihelistamise funktsioon.connect (broker_address, port = port) #connect to broker client.loop_forever () # Käivita võrguühenduse deemon
Ärge unustage asendada MySQL kasutajanimi ja parool ning MQTT kasutajanimi ja parool oma volikirjadele
Saate skripti teenusena käivitada, luues kaks faili.
Esimene neist on „/etc/init/glasshouse.conf” järgmise sisuga:
alusta tasemel [2345]
stop on runlevel [! 2345] exec /root/scripts/glasshouse/glasshouse.py
Teine on „/etc/systemd/system/multi-user.target.wants/glasshouse.service” järgmise sisuga:
[Ühik]
Kirjeldus = Glasshouse Monitoring Service Pärast = multi-user.target [Service] Tüüp = lihtne Restart = alati RestartSec = 1 ExecStart =/usr/bin/python3 /root/scripts/glasshouse/glasshouse.py [Install] WantedBy = mitme kasutajaga.siht
Saate selle käivitada teenusena, kasutades järgmist käsku:
süsteem lubab kasvuhoone
ja alustage seda kasutades:
systemctl start kasvuhoone
Samm: MySQL -server
Peate looma uue MySQL -i andmebaasi, kus on ainult üks tabel.
Tabeli loomise kood on järgmine:
LOO TABEL "sensordata" (`idx` int (11) DEFAULT NULL,` temperatuur `float DEFAULT NULL,` niiskuse` float DEFAULT NULL, `timestamp` datetime DEFAULT NULL) MOOTOR = InnoDB DEFAULT CHARSET = utf8;
Samm: veebiserver
Veebiserveril on kaks faili, fail index.php ja üks config.ini
Faili config.ini sisu on järgmine:
[andmebaas]
db_host = "localhost" db_name = "glasshouse" db_table = "sensordata" db_user = "*** DATABASE_USER ***" db_password = "*** DATABASE_PASSWORD ***"
Kui mujal asendate *** DATABASE_USER *** ja *** DATABASE_PASSWORD *** oma mandaadiga.
google.charts.load ('praegune', {'paketid': ['corechart']}); google.charts.setOnLoadCallback (drawChart); function drawChart () {var data = google.visualization.arrayToDataTable ([// ['Timestamp', 'Temperature', 'Humidity', 'Heat Index'], ['Timestamp', 'Temperature', 'Niiskus'], päring ($ sql); # See samal ajal - tsükkel vormindab ja paneb kõik allalaaditud andmed ['timestamp', 'temperature', 'niiskuse'] viisil. while ($ row = $ result-> fetch_assoc ()) {$ timestamp_rest = substr ($ rida ["ajatempel"], 10, 6); kaja "['". $ timestamp_rest. "", ". $ rida [' temperatuur '].", ". $ rida [' niiskus ']. "],"; // kaja "['". $ timestamp_rest. "", ". $ rida [' temperatuur '].", ". $ rida [' niiskus '].", ". $ rida [' heatindex ']. "],";}?>])); // Kumera joone var options = {title: 'Temperatuur ja niiskus', curveType: 'function', legend: {position: 'bottom'}, hAxis: {slantedText: true, viltuneTextAngle: 45}}; // Kumera diagrammi var chart = new google.visualization. LineChart (document.getElementById ('curve_chart')); chart.draw (andmed, valikud); } // DrawChart // lõppklamber //
6. samm: 3D -trükitud korpus
Korpuse jaoks kasutasin kahte eraldi korpust, ühte ESP32-CAM ja DHT22 jaoks ja ühte 18650 aku kaitsekile jaoks.
Samm: lõpptulemus
Lõpptulemus on näha ka ülaltoodud piltidel.
Ja kui aku on tühi, saate seda laadida mini -USB -kaabli abil.
Soovitan:
Kasvuhoone automatiseerimine LoRa abil! (1. osa) -- Andurid (temperatuur, niiskus, mulla niiskus): 5 sammu
Kasvuhoone automatiseerimine LoRa abil! (1. osa) || Andurid (temperatuur, niiskus, mulla niiskus): Selles projektis näitan teile, kuidas ma kasvuhoonet automatiseerisin. See tähendab, et näitan teile, kuidas ma kasvuhoone ehitasin ja kuidas toite- ja automaatikaelektroonika ühendasin. Samuti näitan teile, kuidas programmeerida Arduino tahvlit, mis kasutab L
Arduino ilmajaam BMP280 -DHT11 abil - temperatuur, niiskus ja rõhk: 8 sammu
Arduino ilmajaam BMP280 -DHT11 abil - temperatuur, niiskus ja rõhk: Selles õpetuses õpime, kuidas teha ilmajaama, mis kuvab LCD -ekraanil TEMPERATUUR, niiskus ja rõhk TFT 7735
Esp32-Ubidots-traadita kaug-temperatuur ja niiskus: 6 sammu
Esp32-Ubidots-Wireless-kaug-temperatuur ja niiskus: Selles õpetuses mõõdame temperatuuri ja niiskuse anduri abil erinevaid temperatuuri ja niiskuse andmeid. Samuti saate teada, kuidas neid andmeid Ubidotsile saata. Et saaksite seda erinevate rakenduste jaoks kõikjalt analüüsida
ThingSpeak, ESP32 ja kaugjuhtimispuldi temperatuur ja niiskus: 5 sammu
ThingSpeak, ESP32 ja kaugjuhtimispuldi temperatuur ja niiskus: Selles õpetuses mõõdame temperatuuri ja niiskuse anduri abil erinevaid temperatuuri ja niiskuse andmeid. Samuti saate teada, kuidas neid andmeid ThingSpeakile saata. Et saaksite seda erinevate rakenduste jaoks kõikjalt analüüsida
Temperatuur, suhteline niiskus, atmosfäärirõhu logija Raspberry Pi ja TE Connectivity abil MS8607-02BA01: 22 sammu (koos piltidega)
Temperatuur, suhteline õhuniiskus, atmosfäärirõhu logija Raspberry Pi ja TE Connectivity abil MS8607-02BA01: Sissejuhatus: Selles projektis näitan teile, kuidas luua samm-sammult seadistust temperatuuri niiskuse ja õhurõhu logimissüsteemi jaoks. See projekt põhineb Raspberry Pi 3 mudelil B ja TE Connectivity keskkonnaanduri kiibil MS8607-02BA