Obsah:
- Zásoby
- Krok 1: Nahrajte kód Arduino do ESP32-CAM
- Krok 2: Zapojte se
- Krok 3: Python3 Script
- Krok 4: Server MySQL
- Krok 5: Webový server
- Krok 6: 3D tištěné pouzdro
- Krok 7: Konečný výsledek
Video: Teplota a vlhkost pomocí ESP32-DHT22-MQTT-MySQL-PHP: 7 kroků
2024 Autor: John Day | [email protected]. Naposledy změněno: 2024-01-30 08:20
Moje přítelkyně chtěla skleník, tak jsem jí udělal. Chtěl jsem ale uvnitř skleníku snímač teploty a vlhkosti. Tak jsem googlil pro příklady a začal experimentovat.
Můj závěr byl, že všechny příklady, které jsem našel, nebyly přesně to, co jsem chtěl postavit. Popadl jsem spoustu malých částí kódu a spojil je. Trvalo mi docela dlouho, než jsem dokončil svou první pracovní sestavu, protože dokumentace většiny příkladů byla pro mě příliš obtížná na pochopení, nebo předpokládali část, kterou bych měl vědět? Ale nic jsem (zatím) nevěděl ☹
Proto stavím tento návod. Výukový program „od začátku do konce“, kterému porozumí doslova každý. (Alespoň doufám?)
Jak to funguje …
Konečným produktem je ESP32-CAM se snímačem DHT22, který je napájen baterií 18650. Každé tři minuty čte teplotu a vlhkost a odešle to přes WiFi na externí server MQTT a poté přejde do režimu spánku (na tři minuty), aby podle potřeby spotřeboval méně baterie
Na serveru Debian (což by podle mě mohl být také malinový pi) mám python3, server MQTT, server MySQL a webový server
Skript python3 běží jako služba a kdykoli obdrží zprávu MQTT, započítá předchozí počet položek (indexové číslo) a zvýší je o jednu. Poté načte hodnoty teploty a vlhkosti ze zprávy MQTT. Kontroluje falešné hodnoty a kdykoli jsou hodnoty správné, odešle hodnoty spolu s novým indexovým číslem a aktuálním datem a časem na server MySQL
Webový server má skript PHP, který čte hodnoty ze serveru MySQL a vytváří z něj pěkný graf pomocí grafů Google. (příklad)
Zásoby
Díly, které jsem použil, jsou následující:
- ESP32-CAM (Důvod, proč jsem použil verzi pro kameru, je ten, že má na sobě konektor externí antény. Pravděpodobně existují i jiné ESP32, které byste mohli použít)
- Externí anténa
-
Senzor AM2302 DHT22 (Tento má vestavěný odpor, takže potřebujete pouze tři vodiče)
https://www.amazon.de/gp/product/B07CM2VLBK/ref=p…
- 18650 baterie štít v3
- Baterie 18650 (NCR18650B)
- Starý kabel micro USB (pro připojení ESP32 ke krytu baterie)
- Některé krátké propojovací vodiče
Extra potřebné:
-
Konektor USB na TTL (obrázek)
https://www.amazon.de/FT232RL-Seriell-Unterst%C3%…
- Páječka
- 3D tiskárna (nutná pouze pro pouzdro)
Krok 1: Nahrajte kód Arduino do ESP32-CAM
Začněme tedy!
Chcete-li nahrát kód Arduino do ESP32-CAM, musíte připojit konektor USBtoTTL k ESP32 pomocí výše uvedených schémat.
Kód Arduino je:
/*Jen malý program pro čtení teploty a vlhkosti ze senzoru DHT22 a
předejte to MQTT. B. Duijnhouwer, 8. června 2020*/#include #include #include #define wifi_ssid "*** WIFI_SSID ***" // wifi ssid #define wifi_password "*** WIFI_PASSWORD ***" // wifi heslo #define mqtt_server "*** SERVER_NAME ***" // název serveru nebo IP #define mqtt_user "*** MQTT_USER ***" // uživatelské jméno #define mqtt_password "*** MQTT_PASSWORD ***" // heslo #definovat téma "skleník /dhtreadings "#define debug_topic" glasshouse /debug "// Téma pro ladění /* definice pro deepsleep* /#define uS_TO_S_FACTOR 1000000 /* Převodní faktor pro mikro sekundy na sekundy* /#define TIME_TO_SLEEP 180 /* Čas ESP32 přejde do režimu spánku po dobu 5 minut (v sekundách) */ bool debug = true; // Zobrazit zprávu protokolu, pokud True #define DHT22_PIN 14 dht DHT; WiFiClient espClient; Klient PubSubClient (espClient); char data [80]; neplatné nastavení () {Serial.begin (115200); setup_wifi (); // Připojení k síti Wifi client.setServer (mqtt_server, 1883); // Konfigurujte připojení MQTT, v případě potřeby změňte port. if (! client.connected ()) {reconnect (); } // ČTENÍ DAT int chk = DHT.read22 (DHT22_PIN); float t = DHT.teplota; float h = DHT. vlhkost; Řetězec dhtReadings = "{" teplota / ": \" " + Řetězec (t) +" / ", \" vlhkost / ": \" " + Řetězec (h) +" / "}"; dhtReadings.toCharArray (data, (dhtReadings.length () + 1)); if (debug) {Serial.print ("Teplota:"); Serial.print (t); Serial.print ("| Vlhkost:"); Serial.println (h); } // Publikování hodnot do témat MQTT client.publish (téma, data); // Publikování čtení na téma (glasshouse/dhtreadings) if (debug) {Serial.println ("Čtení odeslané do MQTT."); } esp_sleep_enable_timer_wakeup (TIME_TO_SLEEP * uS_TO_S_FACTOR); // přejít do režimu spánku Serial.println ("Nastavit ESP32, aby spal pro každý" + řetězec (TIME_TO_SLEEP) + "sekundy"); Serial.println („Jít teď normálně spát.“); esp_deep_sleep_start (); } // Nastavení připojení k wifi neplatné setup_wifi () {zpoždění (20); Serial.println (); Serial.print („Připojování k“); Serial.println (wifi_ssid); WiFi.begin (wifi_ssid, wifi_password); while (WiFi.status ()! = WL_CONNECTED) {zpoždění (100); Serial.print ("."); } Serial.println (""); Serial.println („WiFi je v pořádku“); Serial.print ("=> Nová IP adresa ESP32 je:"); Serial.print (WiFi.localIP ()); Serial.println (""); } // Znovu se připojit k wifi, pokud je připojení ztraceno neplatné znovu připojit () {while (! Client.connected ()) {Serial.print ("Connecting to MQTT broker…"); if (client.connect ("ESP32Client", mqtt_user, mqtt_password)) {Serial.println ("OK"); } else {Serial.print ("[Chyba] Nepřipojeno:"); Serial.print (client.state ()); Serial.println („Počkejte 5 sekund, než to zkusíte znovu.“); zpoždění (5000); }}} void loop () {}
A znovu nezapomeňte nahradit přihlašovací údaje svými vlastními přihlašovacími údaji
Krok 2: Zapojte se
K napájení jsem použil starý USB kabel, u kterého jsem přerušil konektor USB-A. V kabelu USB jsou čtyři vodiče, potřebujeme pouze černý a červený.
Připojte tedy vše podle plánu výše.
Krok 3: Python3 Script
Skript Python3 přejde na místo, kde je přístupný uživateli root.
Pro tento skript jsem použil /root/scripts/glasshouse/glasshouse.py. Obsah skriptu python je:
# Skript Python3 pro připojení k MQTT, čtení hodnot a jejich zápis do MySQL
# # B. Duijnhouwer # červen, 8. 2020 # # verze: 1.0 # # import paho.mqtt.client jako mqtt import json import pymysql pymysql.install_as_MySQLdb () import MySQLdb z 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ódem výsledku {0} ". format (str (rc))) # Vytisknout výsledek pokusu o připojení client.subscribe (" glasshouse/dhtreadings/ # ") def on_message (klient, uživatelská data, zpráva): # Zpětné volání při PUBLIKOVANÁ zpráva je přijata ze serveru. 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žitečné zatížení = json.loads (msg.payload.decode (' utf-8 ')) tisk ("Nový řádek:"+str (newrow)) teplota = plovoucí (užitečné zatížení ["teplota"]) vlhkost = float (užitečné zatížení ["vlhkost"]) tisk ("Teplota:"+str (teplota)) tisk ("Vlhkost:"+str (vlhkost)) tisk ("DateTime:"+str (formatted_date)) if ((teplota > -20) a (teplota = 0) a (vlhkost <= 100)): cur = db.cursor () cur.execute ("INSERT INTO glasshouse.sensordata (idx, teplota, vlhkost, timestamp) VALUES ("+str (newrow)+","+str (teplota)+","+str (vlhkost)+", %s)", (formatted_date)) db.commit () print ("data přijata a importována v MySQL") else: print ("data překročila limity a NENÍ importována do MySQL") client = mqtt. Client ("duijnhouwer-com-glasshouse-script") client.username_pw_set (uživatel, heslo = heslo) client.on_connect = on_connect # definovat funkci zpětného volání pro úspěšné připojení client.on_message = on_message # Definujte funkci zpětného volání pro příjem zprávy client.connect (broker_address, port = port) #connect to broker client.loop_forever () # Start networking daemon
Nezapomeňte nahradit uživatelské jméno a heslo MySQL a uživatelské jméno a heslo MQTT za své vlastní přihlašovací údaje
Skript můžete spustit jako službu vytvořením dvou souborů.
První z nich je „/etc/init/glasshouse.conf“s následujícím obsahem:
začít na runlevelu [2345]
zastavit na úrovni běhu [! 2345] exec /root/scripts/glasshouse/glasshouse.py
Ten druhý je „/etc/systemd/system/multi-user.target.wants/glasshouse.service nerozumí s následujícím obsahem:
[Jednotka]
Description = 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.cílová
Můžete jej spustit jako službu pomocí následujícího příkazu:
systemctl povolit skleník
a spusťte jej pomocí:
systemctl start glasshouse
Krok 4: Server MySQL
Musíte vytvořit novou databázi MySQL s jedinou tabulkou.
Kód pro vytvoření tabulky je:
VYTVOŘIT TABULKU `sensordata` (`idx` int (11) DEFAULT NULL,` teplota` float DEFAULT NULL, `vlhkost` float DEFAULT NULL,` timestamp` datetime DEFAULT NULL) ENGINE = InnoDB DEFAULT CHARSET = utf8;
Krok 5: Webový server
Webový server má dva soubory, soubor index.php a jeden soubor config.ini
Obsah souboru config.ini je:
[databáze]
db_host = "localhost" db_name = "glasshouse" db_table = "sensordata" db_user = "*** DATABASE_USER ***" db_password = "*** DATABASE_PASSWORD ***"
Kde mimo hřiště nahradíte *** DATABASE_USER *** a *** DATABASE_PASSWORD *** svými vlastními přihlašovacími údaji.
google.charts.load ('aktuální', {'balíčky': ['corechart']}); google.charts.setOnLoadCallback (drawChart); funkce drawChart () {var data = google.visualization.arrayToDataTable ([// ['Timestamp', 'Temperature', 'Humidity', 'Heat Index'], ['Timestamp', 'Temperature', 'Humidity'], query ($ sql); # This while - loop formats 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']. ",". $ řádek ['vlhkost']. "],"; // echo "['". $ timestamp_rest. "',". $ řádek ['teplota']. ",". $ řádek ['vlhkost']. ",". $ řádek ['heatindex ']. "],";}?>]); // Zakřivená čára var options = {title: 'Teplota a vlhkost', curveType: 'funkce', legenda: {pozice: 'dole'}, hAxis: {slantedText: true, slantedTextAngle: 45}}; // Zakřivený graf var chart = nový google.visualization. LineChart (document.getElementById ('curve_chart')); chart.draw (data, možnosti); } // Koncová závorka z drawChart //
Krok 6: 3D tištěné pouzdro
Pro pouzdro jsem použil dvě samostatná pouzdra, jedno pro ESP32-CAM a DHT22 dohromady a jedno pro štít baterie 18650.
Krok 7: Konečný výsledek
Konečný výsledek je také uveden na obrázcích výše.
A kdykoli je baterie vybitá, můžete ji nabít pomocí mini USB kabelu.
Doporučuje:
Automatizace skleníku pomocí LoRa! (Část 1) -- Senzory (teplota, vlhkost, vlhkost půdy): 5 kroků
Automatizace skleníku pomocí LoRa! (Část 1) || Senzory (teplota, vlhkost, vlhkost půdy): V tomto projektu vám ukážu, jak jsem automatizoval skleník. To znamená, že vám ukážu, jak jsem postavil skleník a jak jsem zapojil napájecí a automatizační elektroniku. Také vám ukážu, jak naprogramovat desku Arduino, která používá L
Meteostanice Arduino využívající BMP280 -DHT11 - teplota, vlhkost a tlak: 8 kroků
Meteostanice Arduino pomocí BMP280 -DHT11 - teplota, vlhkost a tlak: V tomto tutoriálu se naučíme, jak vytvořit meteorologickou stanici, která bude na displeji TFT 7735 zobrazovat TEPLOTU, VLHKOST A TLAK. Podívejte se na ukázkové video
THINGSPEAK TEPLOTA A VLHKOST APLIKACE POUŽITÍ ESP8266: 9 kroků
THINGSPEAK TEPLOTA A VLHKOST APLIKACE S POUŽITÍM ESP8266: Zatímco jsem si pohrával s elektronikou, dostal jsem nápad vytvořit webovou aplikaci o počasí. Tato webová aplikace používá snímač SHT31 pro získávání údajů o teplotě a vlhkosti v reálném čase. Náš projekt jsme nasadili na WiFi modul ESP8266. Online nebo offli
Esp32-Ubidots-Bezdrátová teplota a vlhkost s dlouhým dosahem: 6 kroků
Esp32-Ubidots-Bezdrátová teplota a vlhkost s dlouhým dosahem: V tomto tutoriálu budeme měřit různé údaje o teplotě a vlhkosti pomocí čidla teploty a vlhkosti. Dozvíte se také, jak tato data odeslat do Ubidots. Takže jej můžete analyzovat odkudkoli pro různé aplikace
Bezdrátová teplota a vlhkost ThingSpeak, ESP32 a Long Range: 5 kroků
Bezdrátová teplota a vlhkost ThingSpeak, ESP32 a Long Range: V tomto tutoriálu budeme měřit různé údaje o teplotě a vlhkosti pomocí čidla teploty a vlhkosti. Dozvíte se také, jak tato data odeslat do ThingSpeak. Takže jej můžete analyzovat odkudkoli pro různé aplikace