Satura rādītājs:
- Piegādes
- 1. darbība: augšupielādējiet Arduino kodu ESP32-CAM
- 2. solis: izveidojiet vadu
- 3. darbība: Python3 skripts
- 4. solis: MySQL serveris
- 5. darbība: tīmekļa serveris
- 6. solis: 3D drukāts korpuss
- 7. solis: gala rezultāts
Video: Temperatūra un mitrums, izmantojot ESP32-DHT22-MQTT-MySQL-PHP: 7 soļi
2024 Autors: John Day | [email protected]. Pēdējoreiz modificēts: 2024-01-30 10:53
Mana draudzene gribēja siltumnīcu, tāpēc es viņai uztaisīju. Bet es gribēju temperatūras un mitruma sensoru siltumnīcas iekšpusē. Tātad, es googlē meklēju piemērus un sāku eksperimentēt.
Mans secinājums bija tāds, ka visi atrastie piemēri nebija gluži tādi, kādus es gribēju izveidot. Es paķēru daudz mazu koda daļu un apvienoju tās. Pagāja diezgan ilgs laiks, lai pabeigtu savu pirmo darba uzbūvi, jo vairuma piemēru dokumentācija man bija pārāk grūti saprotama, vai arī viņi pieņēma daļu, kas man būtu jāzina? Bet es neko nezināju (vēl)
Tāpēc es izveidoju šo pamācību. Apmācība “no sākuma līdz beigām” burtiski visiem saprotama. (Vismaz es ceru?)
Kā tas strādā …
Galaprodukts ir ESP32-CAM ar tam piestiprinātu DHT22 sensoru, kas saņem enerģiju no 18650 akumulatora. Ik pēc trim minūtēm tas nolasa temperatūru un mitrumu un nosūta to, izmantojot WiFi, uz ārēju MQTT serveri un pēc tam iet gulēt (trīs minūtes), lai pēc vajadzības izmantotu pēc iespējas mazāk akumulatora
Debian serverī (kas, manuprāt, varētu būt arī aveņu pi), man ir python3, MQTT serveris, MySQL serveris un tīmekļa serveris
Python3 skripts darbojas kā pakalpojums, un ikreiz, kad tas saņem MQTT ziņojumu, tas saskaita iepriekšējo ierakstu skaitu (indeksa numuru) un palielina to par vienu. Pēc tam tas nolasa temperatūras un mitruma vērtības no ziņojuma MQTT. Tā pārbauda nepatiesas vērtības un, ja vērtības ir pareizas, tās nosūta vērtības kopā ar jauno indeksa numuru un pašreizējo datumu un laiku uz MySQL serveri
Tīmekļa serverim ir PHP skripts, kas nolasa vērtības no MySQL servera un no tā izveido jauku grafiku, izmantojot Google diagrammas. (piemērs)
Piegādes
Daļas, kuras izmantoju, ir šādas:
- ESP32-CAM (Iemesls, kāpēc es izmantoju kameras versiju, ir tas, ka tam ir ārējās antenas savienotājs. Iespējams, ir arī citi ESP32, kurus varētu izmantot)
- Ārējā antena
-
AM2302 DHT22 sensors (šim ir iebūvēts rezistors, tāpēc jums ir nepieciešami tikai trīs vadi)
https://www.amazon.de/gp/product/B07CM2VLBK/ref=p…
- 18650 akumulatora vairogs v3
- 18650 akumulators (NCR18650B)
- Vecs mikro USB kabelis (ESP32 savienošanai ar akumulatora pārsegu)
- Daži īsi džemperu vadi
Nepieciešams papildus:
-
USB - TTL savienotājs (attēls)
https://www.amazon.de/FT232RL-Seriell-Unterst%C3%…
- Lodāmurs
- 3D printeris (nepieciešams tikai korpusam)
1. darbība: augšupielādējiet Arduino kodu ESP32-CAM
Tātad sāksim!
Lai augšupielādētu Arduino kodu ESP32-CAM, jums ir jāpievieno USBtoTTL savienotājs ESP32, izmantojot iepriekš minētās shēmas.
Arduino kods ir šāds:
/*Tikai neliela programma temperatūras un mitruma nolasīšanai no DHT22 sensora un
nododiet to MQTT. B. Duijnhouwer, 2020. gada 8. jūnijs*/#include #include #include #define wifi_ssid "*** WIFI_SSID ***" // wifi ssid #define wifi_password "*** WIFI_PASSWORD ***" // wifi parole #define mqtt_server "*** SERVER_NAME ***" // servera nosaukums vai IP #define mqtt_user "*** MQTT_USER ***" // lietotājvārds #define mqtt_password "*** MQTT_PASSWORD ***" // parole #define topic "siltumnīca /dhtreadings "#define debug_topic" glasshouse /debug "// Atkļūdošanas tēma /* deepsleep definīcijas* /#define uS_TO_S_FACTOR 1000000 /* Reklāmguvuma koeficients mikrosekundēm līdz sekundēm* /#define TIME_TO_SLEEP 180 /* Laiks ESP32 pāries miega režīmā 5 minūtes (sekundēs) */ bool debug = true; // Parādīt žurnāla ziņojumu, ja True #define DHT22_PIN 14 dht DHT; WiFiClient espClient; PubSubClient klients (espClient); char dati [80]; void setup () {Serial.begin (115200); setup_wifi (); // Savienojuma izveide ar Wifi tīkla client.setServer (mqtt_server, 1883); // Konfigurējiet MQTT savienojumu, ja nepieciešams, nomainiet portu. ja (! client.connected ()) {reconnect (); } // LASĪT DATUS int chk = DHT.read22 (DHT22_PIN); pludiņš t = DHT.temperatūra; pludiņš h = DHT.mitrums; String dhtReadings = "{" temperatūra / ": \" " + String (t) +" / ", \" mitrums / ": \" " + String (h) +" / "}"; dhtReadings.toCharArray (dati, (dhtReadings.length () + 1)); if (atkļūdošana) {Serial.print ("Temperatūra:"); Sērijas nospiedums (t); Serial.print ("| Mitrums:"); Sērijas.println (h); } // Publicēt vērtības MQTT tēmām client.publish (tēma, dati); // Publicēt lasījumus par tēmu (siltumnīca/dhtreadings), ja (atkļūdošana) {Serial.println ("Lasījumi nosūtīti MQTT."); } esp_sleep_enable_timer_wakeup (TIME_TO_SLEEP * uS_TO_S_FACTOR); // iet gulēt Serial.println ("Iestatiet ESP32 gulēt uz katru" + virkne (TIME_TO_SLEEP) + "Sekundes"); Serial.println ("Tagad eju gulēt kā parasti."); esp_deep_sleep_start (); } // Iestatīt savienojumu ar wifi void setup_wifi () {delay (20); Sērijas.println (); Serial.print ("Savienojuma izveide"); Serial.println (wifi_ssid); WiFi.begin (wifi_ssid, wifi_password); while (WiFi.status ()! = WL_CONNECTED) {kavēšanās (100); Sērijas nospiedums ("."); } Serial.println (""); Serial.println ("WiFi ir OK"); Serial.print ("=> ESP32 jaunā IP adrese ir:"); Sērijas nospiedums (WiFi.localIP ()); Serial.println (""); } // Atkārtoti izveidojiet savienojumu ar wifi, ja tiek zaudēts savienojums void atjaunojiet savienojumu () {while (! Client.connected ()) {Serial.print ("Savienojuma izveide ar MQTT brokeri…"); if (client.connect ("ESP32Client", mqtt_user, mqtt_password)) {Serial.println ("Labi"); } else {Serial.print ("[Kļūda] Nav savienots:"); Sērijas nospiedums (client.state ()); Serial.println ("Pagaidiet 5 sekundes, pirms mēģināt vēlreiz."); kavēšanās (5000); }}} void loop () {}
Un atkal, neaizmirstiet aizstāt akreditācijas datus ar saviem akreditācijas datiem
2. solis: izveidojiet vadu
Jaudai es izmantoju veco USB kabeli, no kura es pārtraucu USB-A savienotāju. USB vadā ir četri vadi, mums vajag tikai melno un sarkano.
Tātad, savienojiet visu saskaņā ar iepriekš minēto grafiku.
3. darbība: Python3 skripts
Python3 skripts nonāk vietā, kur tas ir pieejams saknes lietotājam.
Šim skriptam es izmantoju /root/scripts/glasshouse/glasshouse.py. Python skripta saturs ir šāds:
# Python3 skripts, lai izveidotu savienojumu ar MQTT, nolasītu vērtības un ierakstītu tās MySQL
# # B. Duijnhouwer # 2020. gada 8. jūnijs # # versija: 1.0 # # importēt paho.mqtt.client as mqtt import json import pymysql pymysql.install_as_MySQLdb () importēt MySQLdb no datetime import datetime db = MySQLdb.connect ("localhost", "siltumnīca", "*** MYSQL_USERNAME ***", "*** MYSQL_PASSWORD ***") kursors = db.cursor () broker_address = "localhost" #Brokera adreses ports = 1883 #Broker port user = "** *MQTT_USERNAME *** "#Connection username password =" *** MQTT_PASSWORD *** " #Savienojuma parole def on_connect (klients, lietotāja dati, karodziņi, rc): #Atzvanīšana, kad klients izveido savienojumu ar brokeri print (" Savienots ar rezultāta kodu {0} ". formāts (str (rc))) # Savienojuma mēģinājuma drukāšanas rezultāts client.subscribe (" glasshouse/dhtreadings/ # ") def on_message (klients, lietotāja dati, ziņa): # Atzvanīšana, kad PUBLISH ziņojums ir saņemts no servera. cursor.execute ("izvēlieties * no sensordata") numrows = int (cursor.rowcount) newrow = numrows + 1 tagad = datuma laiks. tagad () formatēts_datums = tagad.strftime ('%Y-%m-%d%H:% M:%S ') lietderīgā slodze = json.loads (msg.payload.decode (' utf-8 ')) print ("Jauna rinda:"+str (newrow)) temperatūra = pludiņš (kravnesība ["temperatūra"]) mitrums = float (payload ["mitrums"]) print ("Temperatūra:"+str (temperatūra)) print ("Mitrums:"+str (mitrums)) drukāt ("DateTime:"+str (formatēts_datums)) if ((temperatūra > -20) un (temperatūra = 0) un (mitrums <= 100)): cur = db.cursor () cur.execute ("INSERT INTO glasshouse.sensordata (idx, temperatūra, mitrums, laika zīmogs) VALUES ("+str. (newrow)+","+str (temperatūra)+","+str (mitrums)+", %s)", (formatēts_datums)) db.commit () print ("dati saņemti un importēti MySQL") cits: print ("dati pārsniedza ierobežojumus un NAV importēti MySQL") client = mqtt. Client ("duijnhouwer-com-glasshouse-script") client.username_pw_set (lietotājs, parole = parole) client.on_connect = on_connect # Definējiet atzvanīšanas funkciju priekš veiksmīgs savienojums client.on_message = on_message # Nosakiet atzvanīšanas funkciju ziņojuma saņemšanai.
Neaizmirstiet nomainīt MySQL lietotājvārdu un paroli un MQTT lietotājvārdu un paroli pret saviem akreditācijas datiem
Varat izveidot skriptu kā pakalpojumu, izveidojot divus failus.
Pirmais ir “/etc/init/glasshouse.conf” ar šādu saturu:
sākt no skrējiena līmeņa [2345]
stop on runlevel [! 2345] exec /root/scripts/glasshouse/glasshouse.py
Otrais ir “/etc/systemd/system/multi-user.target.wants/glasshouse.service” ar šādu saturu:
[Vienība]
Apraksts = Siltumnīcas uzraudzības pakalpojums Pēc = multi-user.target [Service] Tips = vienkārša Restart = vienmēr RestartSec = 1 ExecStart =/usr/bin/python3 /root/scripts/glasshouse/glasshouse.py [Install] WantedBy = multi-user.mērķis
Šo darbību var veikt kā pakalpojumu, izmantojot šādu komandu:
sistēma ļauj ieslēgt siltumnīcu
un sāciet to, izmantojot:
systemctl start siltumnīca
4. solis: MySQL serveris
Jums ir jāizveido jauna MySQL datu bāze, kurā ir tikai viena tabula.
Tabulas izveides kods ir šāds:
IZVEIDOT TABULU "sensordata" (`idx` int (11) DEFAULT NULL,` temperatūras `pludiņš DEFAULT NULL,` mitruma` pludiņš DEFAULT NULL, `timestamp` datetime DEFAULT NULL) DZINĒJS = InnoDB DEFAULT CHARSET = utf8;
5. darbība: tīmekļa serveris
Tīmekļa serverim ir divi faili, fails index.php un viens config.ini fails
Faila config.ini saturs ir šāds:
[datu bāze]
db_host = "localhost" db_name = "glasshouse" db_table = "sensordata" db_user = "*** DATABASE_USER ***" db_password = "*** DATABASE_PASSWORD ***"
Kur jūs, protams, aizstājat *** DATABASE_USER *** un *** DATABASE_PASSWORD *** ar saviem akreditācijas datiem.
google.charts.load ('pašreizējais', {'paketes': ['corechart']}); google.charts.setOnLoadCallback (drawChart); function drawChart () {var data = google.visualization.arrayToDataTable ([// ['Laika zīmogs', 'Temperatūra', 'Mitrums', 'Siltuma indekss'], ['Laika zīmogs', 'Temperatūra', 'Mitrums'], query ($ sql); # This while - cilpa formatē un visus izgūtos datus ievieto formātā ['timestamp', 'temperature', 'mitrums']. while ($ row = $ result-> fetch_assoc ()) {$ timestamp_rest = apakšstruktūra ($ rinda ["laika zīmogs"], 10, 6); atbalss "['". $ timestamp_rest. "", ". $ rinda [' temperatūra '].", ". $ rinda [' mitrums ']. "],"; // echo "['". $ timestamp_rest. "", ". $ rinda [' temperatūra '].", ". $ rinda [' mitrums '].", ". $ rinda [' heatindex ']. "],";}?>])); // Liekto līniju var options = {title: 'Temperatūra un mitrums', curveType: 'function', legend: {position: 'bottom'}, hAxis: {slantedText: true, slantedTextAngle: 45}}; // Izliekta diagramma var diagramma = new google.visualization. LineChart (document.getElementById ('curve_chart')); chart.draw (dati, opcijas); } // Beigu kronšteins no drawChart //
6. solis: 3D drukāts korpuss
Korpusam es izmantoju divus atsevišķus korpusus, vienu ESP32-CAM un DHT22 kopā un otru akumulatora vairogam 18650.
7. solis: gala rezultāts
Gala rezultāts ir redzams arī iepriekš redzamajos attēlos.
Un vienmēr, kad akumulators ir tukšs, varat to uzlādēt, izmantojot mini USB kabeli.
Ieteicams:
Siltumnīcas automatizācija ar LoRa! (1. daļa) -- Sensori (temperatūra, mitrums, augsnes mitrums): 5 soļi
Siltumnīcas automatizācija ar LoRa! (1. daļa) || Sensori (temperatūra, mitrums, augsnes mitrums): Šajā projektā es jums parādīšu, kā es automatizēju siltumnīcu. Tas nozīmē, ka es jums parādīšu, kā es uzbūvēju siltumnīcu un kā savienoju strāvas un automatizācijas elektroniku. Es arī parādīšu, kā programmēt Arduino dēli, kas izmanto L
Arduino meteoroloģiskā stacija, izmantojot BMP280 -DHT11 - temperatūra, mitrums un spiediens: 8 soļi
Arduino meteoroloģiskā stacija, izmantojot BMP280 -DHT11 - Temperatūra, mitrums un spiediens: Šajā apmācībā mēs uzzināsim, kā izveidot laika staciju, kas LCD displejā TFT 7735 parādīs TEMPERATŪRU, Mitrumu un SPIEDIENU Skatieties demonstrācijas video
Esp32-Ubidots-Wireless-liela attāluma temperatūra un mitrums: 6 soļi
Esp32-Ubidots-Wireless-liela attāluma temperatūra un mitrums: šajā apmācībā mēs izmērīsim dažādus temperatūras un mitruma datus, izmantojot temperatūras un mitruma sensoru. Jūs arī uzzināsit, kā nosūtīt šos datus uz Ubidots. Lai jūs to varētu analizēt no jebkuras vietas dažādām lietojumprogrammām
ThingSpeak, ESP32 un liela attāluma bezvadu temperatūra un mitrums: 5 soļi
ThingSpeak, ESP32 un liela diapazona bezvadu temperatūra un mitrums: šajā apmācībā mēs izmērīsim dažādus temperatūras un mitruma datus, izmantojot temperatūras un mitruma sensoru. Jūs arī uzzināsit, kā nosūtīt šos datus uz ThingSpeak. Lai jūs to varētu analizēt no jebkuras vietas dažādām lietojumprogrammām
Temperatūra, relatīvais mitrums, atmosfēras spiediena reģistrētājs, izmantojot Raspberry Pi un TE Connectivity MS8607-02BA01: 22 soļi (ar attēliem)
Temperatūra, relatīvais mitrums, atmosfēras spiediena reģistrētājs, izmantojot Raspberry Pi un TE Connectivity MS8607-02BA01: Ievads: Šajā projektā es jums parādīšu, kā pakāpeniski izveidot uzstādīšanu, reģistrējot temperatūras mitrumu un atmosfēras spiedienu. Šis projekts ir balstīts uz Raspberry Pi 3 Model B un TE Connectivity vides sensoru mikroshēmu MS8607-02BA