Obsah:
- Zásoby
- Krok 1: Nahrajte kód Arduino do ESP32-CAM
- Krok 2: Pripojte sa
- Krok 3: Skript Python3
- Krok 4: Server MySQL
- Krok 5: Webový server
- Krok 6: 3D tlačené puzdro
- Krok 7: Konečný výsledok
Video: Teplota a vlhkosť pomocou ESP32-DHT22-MQTT-MySQL-PHP: 7 krokov
2024 Autor: John Day | [email protected]. Naposledy zmenené: 2024-01-30 11:57
Moja priateľka chcela skleník, tak som jej ho vyrobil. Ale chcel som snímač teploty a vlhkosti vo vnútri skleníka. Vygooglil som preto príklady a začal experimentovať.
Môj záver bol, že všetky príklady, ktoré som našiel, nie sú presne to, čo som chcel postaviť. Chytil som veľa malých častí kódu a skombinoval ich. Trvalo mi dlho, kým som dokončil svoju prvú pracovnú zostavu, pretože dokumentácia väčšiny príkladov bola pre mňa príliš ťažká na pochopenie alebo predpokladali časť, ktorú by som mal vedieť? Ale nič som (zatiaľ) nevedel ☹
Preto zostavujem tento návod. Výučba „od začiatku do konca“, ktorej porozumie doslova každý. (Aspoň dúfam?)
Ako to funguje …
Konečným výrobkom je ESP32-CAM so snímačom DHT22, ktorý je k nemu napájaný z batérie 18650. Každé tri minúty odčíta teplotu a vlhkosť a odošle ich prostredníctvom WiFi na externý server MQTT a potom prejde do režimu spánku (na tri minúty), aby podľa potreby použil menej batérie
Na serveri Debian (čo môže byť hádam aj malinový pi) mám python3, server MQTT, server MySQL a webový server
Skript python3 beží ako služba a vždy, keď dostane správu MQTT, spočíta predchádzajúci počet záznamov (indexové číslo) a zvýši ho o jednu. Potom prečíta hodnoty teploty a vlhkosti zo správy MQTT. Kontroluje falošné hodnoty a vždy, keď sú hodnoty správne, odošle hodnoty spolu s novým číslom indexu a aktuálnym dátumom a časom na server MySQL
Webový server má skript PHP, ktorý číta hodnoty zo servera MySQL a vytvára z neho pekný graf pomocou grafov Google. (príklad)
Zásoby
Časti, ktoré som použil, sú nasledujúce:
- ESP32-CAM (Dôvod, prečo som použil verziu pre kameru, je ten, že je na nej konektor externej antény. Pravdepodobne existujú aj ďalšie typy ESP32, ktoré by ste mohli použiť)
- Externá anténa
-
Senzor AM2302 DHT22 (Tento má vstavaný odpor, takže potrebujete iba tri vodiče)
https://www.amazon.de/gp/product/B07CM2VLBK/ref=p…
- Štítok batérie 18650 v3
- Batéria 18650 (NCR18650B)
- Starý kábel micro USB (na pripojenie ESP32 k krytu batérie)
- Niektoré krátke prepojovacie vodiče
Potrebné navyše:
-
Konektor USB na TTL (obrázok)
https://www.amazon.de/FT232RL-Seriell-Unterst%C3%…
- Spájkovačka
- 3D tlačiareň (potrebná iba pre puzdro)
Krok 1: Nahrajte kód Arduino do ESP32-CAM
Začnime teda!
Ak chcete nahrať kód Arduino do ESP32-CAM, musíte pripojiť konektor USBtoTTL k ESP32 pomocou vyššie uvedených schém.
Kód Arduino je:
/*Len malý program na čítanie teploty a vlhkosti zo snímača DHT22 a
odovzdajte to MQTT. B. Duijnhouwer, 8. júna 2020*/#include #include #include #define wifi_ssid "*** WIFI_SSID ***" // wifi ssid #define wifi_password "*** WIFI_PASSWORD ***" // wifi heslo #define mqtt_server "*** SERVER_NAME ***" // názov servera alebo IP #define mqtt_user "*** MQTT_USER ***" // užívateľské meno #define mqtt_password "*** MQTT_PASSWORD ***" // heslo #definovať tému "skleník /dhtreadings "#define debug_topic" glasshouse /debug "// Téma pre ladenie /* definície pre hlboký spánok* /#define uS_TO_S_FACTOR 1000000 /* Prevodný faktor na mikro sekundy až sekundy* /#define TIME_TO_SLEEP 180 /* Čas, kedy ESP32 prejde do režimu spánku na 5 minút (v sekundách) */ bool debug = true; // Zobraziť správu denníka, ak je True #define DHT22_PIN 14 dht DHT; WiFiClient espClient; Klient PubSubClient (espClient); údaje o znakoch [80]; void setup () {Serial.begin (115200); setup_wifi (); // Pripojenie k sieti Wi -Fi client.setServer (mqtt_server, 1883); // Konfigurujte pripojenie MQTT, v prípade potreby zmeňte port. if (! client.connected ()) {reconnect (); } // READ DATA int chk = DHT.read22 (DHT22_PIN); float t = DHT.teplota; plavák h = DHT.vlhkosť; Reťazec dhtReadings = "{" teplota / ": \" " + Reťazec (t) +" / ", \" vlhkosť / ": \" " + Reťazec (h) +" / "}"; dhtReadings.toCharArray (údaje, (dhtReadings.length () + 1)); if (ladenie) {Serial.print ("Teplota:"); Serial.print (t); Serial.print ("| Vlhkosť:"); Serial.println (h); } // Publikovanie hodnôt do tém MQTT client.publish (téma, údaje); // Publikovanie čítaní na tému (skleník/dhtreadings) if (ladenie) {Serial.println ("Čítania odoslané do MQTT."); } esp_sleep_enable_timer_wakeup (TIME_TO_SLEEP * uS_TO_S_FACTOR); // ísť do režimu spánku Serial.println ("Nastaviť ESP32, aby spal pre všetky" + reťazce (TIME_TO_SLEEP) + "sekundy"); Serial.println („Teraz budem normálne spať.“); esp_deep_sleep_start (); } // Nastavenie pripojenia k wifi neplatné setup_wifi () {oneskorenie (20); Serial.println (); Serial.print („Pripojenie k“); Serial.println (wifi_ssid); WiFi.begin (wifi_ssid, wifi_password); while (WiFi.status ()! = WL_CONNECTED) {oneskorenie (100); Serial.print ("."); } Serial.println (""); Serial.println („WiFi je v poriadku“); Serial.print ("=> Nová adresa IP ESP32 je:"); Serial.print (WiFi.localIP ()); Serial.println (""); } // Znova sa pripojte k sieti Wi -Fi, ak dôjde k strate pripojenia, neplatí, znova pripojiť () {while (! Client.connected ()) {Serial.print ("Pripojenie k maklérovi MQTT …"); if (client.connect ("ESP32Client", mqtt_user, mqtt_password)) {Serial.println ("OK"); } else {Serial.print ("[Chyba] Nepripojené:"); Serial.print (client.state ()); Serial.println ("Počkajte 5 sekúnd, než to skúsite znova."); oneskorenie (5 000); }}} prázdna slučka () {}
A znova nezabudnite nahradiť poverenia svojimi vlastnými povereniami
Krok 2: Pripojte sa
Na napájanie som použil starý USB kábel, z ktorého som prerušil konektor USB-A. V kábli USB sú štyri vodiče, potrebujeme iba čierny a červený.
Pripojte teda všetko podľa vyššie uvedeného plánu.
Krok 3: Skript Python3
Skript Python3 prejde na miesto, kde je prístupný používateľovi root.
Pre tento skript som použil /root/scripts/glasshouse/glasshouse.py. Obsah skriptu python je:
# Skript Python3 na pripojenie k MQTT, čítanie hodnôt a ich zapisovanie do MySQL
# # B. Duijnhouwer # June, 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", "glasshouse", "*** MYSQL_USERNAME ***", "*** MYSQL_PASSWORD ***") cursor = db.cursor () broker_address = "localhost" #Broker address port = 1883 #Broker port user = "** *MQTT_USERNAME *** "#Connection username password =" *** MQTT_PASSWORD *** "#Connection password def on_connect (client, userdata, flags, rc): #The callback for when the client appears to the broker print (" Connected s kódom výsledku {0} ". formát (str (rc))) # Vytlačí výsledok pokusu o pripojenie client.subscribe (" glasshouse/dhtreadings/ # ") def on_message (klient, užívateľské údaje, správa): # Spätné volanie, keď PUBLIKOVANÁ správa je prijatá zo servera. 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 ') užitočné zaťaženie = json.loads (msg.payload.decode (' utf-8 ')) print ("Nový riadok:"+str (newrow)) teplota = plávajúca (užitočné zaťaženie ["teplota"]) vlhkosť = float (užitočné zaťaženie ["vlhkosť"]) print ("Teplota:"+str (teplota)) vytlačiť ("Vlhkosť:"+str (vlhkosť)) vytlačiť ("DateTime:"+str (formatted_date)) if ((teplota > -20) a (teplota = 0) a (vlhkosť <= 100)): cur = db.cursor () cur.execute ("INSERT INTO glasshouse.sensordata (idx, teplota, vlhkosť, timestamp) VALUES ("+str (newrow)+","+str (teplota)+","+str (vlhkosť)+", %s)", (formatted_date)) db.commit () print ("údaje prijaté a importované v MySQL") iné: print ("údaje prekročili limity a NIE sú importované do MySQL") client = mqtt. Client ("duijnhouwer-com-glasshouse-script") client.username_pw_set (užívateľ, heslo = heslo) client.on_connect = on_connect # definovať funkciu spätného volania pre úspešné pripojenie client.on_message = on_message # Definujte funkciu spätného volania pre prijatie správy client.connect (broker_address, port = port) #connect to broker client.loop_forever () # Start networking daemon
Nezabudnite nahradiť používateľské meno a heslo MySQL a používateľské meno a heslo MQTT za svoje vlastné poverenia
Skript môžete spustiť ako službu vytvorením dvoch súborov.
Prvý z nich je „/etc/init/glasshouse.conf“s nasledujúcim obsahom:
začať na úrovni behu [2345]
zastaviť sa na úrovni behu [! 2345] exec /root/scripts/glasshouse/glasshouse.py
Ten druhý je „/etc/systemd/system/multi-user.target.wants/glasshouse.service nerozumie sa s týmto obsahom:
[Jednotka]
Popis = Služba monitorovania skleníka Po = multi-user.target [Služba] Typ = jednoduchý Reštart = vždy RestartSec = 1 ExecStart =/usr/bin/python3 /root/scripts/glasshouse/glasshouse.py [Inštalovať] WantedBy = viac užívateľov.cieľ
Môžete to spustiť ako službu pomocou nasledujúceho príkazu:
systemctl povoliť skleník
a spustite ho pomocou:
systemctl start glasshouse
Krok 4: Server MySQL
Musíte vytvoriť novú databázu MySQL s jedinou tabuľkou.
Kód na vytvorenie tabuľky je:
VYTVORIŤ TABUĽKU `sensordata` (`idx` int (11) DEFAULT NULL,` teplota` float DEFAULT NULL, `vlhkosť` float DEFAULT NULL,` timestamp` datetime DEFAULT NULL) ENGINE = InnoDB DEFAULT CHARSET = utf8;
Krok 5: Webový server
Webový server má dva súbory, súbor index.php a jeden súbor config.ini
Obsah súboru config.ini je:
[databáza]
db_host = "localhost" db_name = "glasshouse" db_table = "sensordata" db_user = "*** DATABASE_USER ***" db_password = "*** DATABASE_PASSWORD ***"
Kde mimo kurzu nahradíte *** DATABASE_USER *** a *** DATABASE_PASSWORD *** svojimi vlastnými povereniami.
google.charts.load ('aktuálny', {'balíčky': ['corechart']}); google.charts.setOnLoadCallback (drawChart); funkcia drawChart () {var data = google.visualization.arrayToDataTable ([// ['Časová pečiatka', 'Teplota', 'Vlhkosť', 'Tepelný index'], ['Časová pečiatka', 'Teplota', 'Vlhkosť'], query ($ sql); # This while - loop format and put all the retrieved data into ['timestamp', 'temperature', 'vlhkost'] way. while ($ row = $ result-> fetch_assoc ()) {$ timestamp_rest = substr ($ row ["timestamp"], 10, 6); echo "['". $ timestamp_rest. "',". $ row ['teplota']. ",". $ riadok ['vlhkosť']. "],"; // echo "['". $ timestamp_rest. "',". $ riadok ['teplota']. ",". $ riadok ['vlhkosť']. ",". $ riadok ['heatindex ']. "],";}?>]); // Curved line var options = {title: 'Teplota a vlhkosť', curveType: 'function', legenda: {position: 'bottom'}, hAxis: {slantedText: true, slantedTextAngle: 45}}; // Zakrivený graf var chart = nový google.visualization. LineChart (document.getElementById ('curve_chart')); chart.draw (údaje, možnosti); } // Koncová zátvorka z drawChart //
Krok 6: 3D tlačené puzdro
Na puzdro som použil dve oddelené puzdra, jedno pre ESP32-CAM a DHT22 spoločne a jedno pre tienenie batérie 18650.
Krok 7: Konečný výsledok
Konečný výsledok je tiež zobrazený na obrázkoch vyššie.
A kedykoľvek je batéria vybitá, môžete ju nabiť pomocou mini USB kábla.
Odporúča:
VLHKOSŤ A TEPLOTA ZOBRAZTE NA LCD S ARDUINO NANO: 5 krokov
ZVLHČTE VLHKOSŤ A TEPLOTU NA LCD S ARDUINO NANO: Nasledujúci návod sa zaoberá vytvorením jednoduchého rozhrania LCD s arduino nano
Automatizácia skleníka s LoRa! (Časť 1) -- Senzory (teplota, vlhkosť, pôdna vlhkosť): 5 krokov
Automatizácia skleníka s LoRa! (Časť 1) || Senzory (teplota, vlhkosť, pôdna vlhkosť): V tomto projekte vám ukážem, ako som automatizoval skleník. To znamená, že vám ukážem, ako som postavil skleník a ako som zapojil výkonovú a automatizačnú elektroniku. Tiež vám ukážem, ako naprogramovať dosku Arduino, ktorá používa L
Meteostanica Arduino využívajúca BMP280 -DHT11 - teplota, vlhkosť a tlak: 8 krokov
Meteostanica Arduino používajúca BMP280 -DHT11 - teplota, vlhkosť a tlak: V tomto návode sa naučíme vyrobiť meteostanicu, ktorá bude na displeji TFT 7735 zobrazovať TEPLOTU, VLHKOSŤ A TLAK. Pozrite si ukážkové video
Esp32-Ubidots-Bezdrôtová teplota a vlhkosť s dlhým dosahom: 6 krokov
Esp32-Ubidots-Bezdrôtové-teploty a vlhkosti s dlhým dosahom: V tomto návode budeme merať rôzne údaje o teplote a vlhkosti pomocou snímača teploty a vlhkosti. Dozviete sa tiež, ako odoslať tieto údaje do Ubidots. Aby ste ho mohli analyzovať odkiaľkoľvek pre rôzne aplikácie
Bezdrôtová teplota a vlhkosť ThingSpeak, ESP32 a Long Range: 5 krokov
Bezdrôtová teplota a vlhkosť ThingSpeak, ESP32 a Long Range: V tomto návode budeme merať rôzne údaje o teplote a vlhkosti pomocou snímača teploty a vlhkosti. Dozviete sa tiež, ako tieto údaje odoslať do ThingSpeak. Aby ste ho mohli analyzovať odkiaľkoľvek pre rôzne aplikácie