Talaan ng mga Nilalaman:
- Mga gamit
- Hakbang 1: I-upload ang Arduino Code sa ESP32-CAM
- Hakbang 2: Wire Up
- Hakbang 3: Python3 Script
- Hakbang 4: MySQL Server
- Hakbang 5: Webserver
- Hakbang 6: 3D Naka-print na Pabahay
- Hakbang 7: Ang Huling Resulta
Video: Temperatura at Humidity Gamit ang ESP32-DHT22-MQTT-MySQL-PHP: 7 Mga Hakbang
2024 May -akda: John Day | [email protected]. Huling binago: 2024-01-30 13:11
Gusto ng girlfriend ko ng isang glasshouse, kaya ginawa ko siya. Ngunit nais ko ang isang sensor ng temperatura at kahalumigmigan sa loob ng glasshouse. Kaya, nag-google ako para sa mga halimbawa at nagsimulang mag-eksperimento.
Ang aking konklusyon ay ang lahat ng mga halimbawa na nahanap ko ay hindi eksakto kung ano ang nais kong buuin. Kumuha ako ng maraming maliliit na bahagi ng code at pinagsama ang mga ito. Medyo natagalan ako upang matapos ang aking unang nagtatrabaho build dahil ang dokumentasyon ng karamihan sa mga halimbawa ay masyadong mahirap para sa akin na maunawaan o ipinalagay nila ang bahagi na dapat kong malaman ?? Ngunit wala akong alam (wala pa) ☹
Iyon ang dahilan kung bakit itinuturo ko ito. Isang tutorial na "simula-hanggang sa katapusan" para sa literal na maunawaan ng lahat. (Hindi bababa sa inaasahan ko?)
Paano ito gumagana …
Ang end-product ay isang ESP32-CAM na may DHT22 sensor na nakakabit dito na makakakuha ng lakas mula sa isang 18650 na baterya. Tuwing tatlong minuto binabasa nito ang temperatura at halumigmig at ipinapadala ito sa paglipas ng WiFi sa isang panlabas na server ng MQTT at pagkatapos ay matulog (para sa tatlong minuto) upang magamit ang mas kaunting baterya kung kinakailangan
Sa isang Debian server, (na maaaring maging isang raspberry pi hulaan ko) Mayroon akong python3, isang MQTT server, isang MySQL server at isang webserver
Ang script ng python3 ay tumatakbo bilang isang serbisyo at tuwing nakakatanggap ito ng isang mensahe ng MQTT, binibilang nito ang nakaraang bilang ng mga entry (numero ng index) at pinaparito ito ng isa. Pagkatapos ay binabasa nito ang mga halaga ng temperatura at halumigmig mula sa mensahe ng MQTT. Sinusuri nito ang mga maling halaga at tuwing wasto ang mga halaga, ipinapadala nito ang mga halaga kasama ang bagong numero ng index at ang kasalukuyang petsa at oras sa isang MySQL server
Ang webserver ay may isang PHP script na binabasa ang mga halaga mula sa MySQL server at gumagawa ng isang magandang grap mula rito gamit ang Google Charts. (halimbawa)
Mga gamit
Ang mga ginamit kong bahagi ay ang mga sumusunod:
- ESP32-CAM (Ang dahilan kung bakit ginamit ko ang bersyon ng cam ay dahil mayroon itong panlabas na konektor ng antena dito. Marahil ay mayroon ding ibang mga ESP32 na maaari mong gamitin)
- Panlabas na antena
-
AM2302 DHT22 sensor (Ang isang ito ay may built-in na risistor, kaya kailangan mo lamang ng tatlong mga wire)
https://www.amazon.de/gp/product/B07CM2VLBK/ref=p…
- 18650 kalasag ng baterya v3
- 18650 na baterya (NCR18650B)
- Lumang micro USB cable (para sa pagkonekta sa ESP32 sa kalasag ng baterya)
- Ang ilang mga maiikling jumper wires
Kailangan ng labis:
-
Konektor ng USB sa TTL (larawan)
https://www.amazon.de/FT232RL-Seriell-Unterst%C3%…
- Panghinang
- 3D printer (kailangan lang para sa case ng pabahay)
Hakbang 1: I-upload ang Arduino Code sa ESP32-CAM
Kaya't magsimula tayo!
Upang mai-upload ang Arduino code sa ESP32-CAM, kailangan mong ikonekta ang konektor ng USBtoTTL sa ESP32 gamit ang mga eskematiko sa itaas.
Ang Arduino code ay:
/ * Isang maliit na programa lamang upang basahin ang temperatura at halumigmig mula sa isang sensor na DHT22 at
ipasa ito sa MQTT. B. Duijnhouwer Hunyo, ika-8 ng 2020 * / # isama ang # isama ang # isama #define wifi_ssid "*** WIFI_SSID ***" // wifi ssid #define wifi_password "*** WIFI_PASSWORD ***" // wifi password #define mqtt_server "*** SERVER_NAME ***" // server name or IP #define mqtt_user "*** MQTT_USER ***" // username #define mqtt_password "*** MQTT_PASSWORD ***" // password #define topic "glasshouse / dhtreadings "#define debug_topic" glasshouse / debug "// Paksa para sa pag-debug / * mga kahulugan para sa deeps Sleep * / #define uS_TO_S_FACTOR 1000000 / * factor ng Conversion para sa mga segundo ng segundo hanggang segundo * / #define TIME_TO_SLEEP 180 / * Ang oras ng ESP32 ay makakatulog para sa 5 minuto (sa segundo) * / bool debug = totoo; // Ipakita ang mensahe sa pag-log kung Tama # tukuyin DHT22_PIN 14 dht DHT; WiFiClient espClient; PubSubClient client (espClient); data ng char [80]; void setup () {Serial.begin (115200); setup_wifi (); // Kumonekta sa Wifi network client.setServer (mqtt_server, 1883); // I-configure ang koneksyon sa MQTT, palitan ang port kung kinakailangan. kung (! client.connected ()) {muling magkonekta (); } // READ DATA int chk = DHT.read22 (DHT22_PIN); float t = DHT.temperature; float h = DHT.humidity; String dhtReadings = "{" temperatura / ": \" "+ String (t) +" / ", \" halumigmig / ": \" "+ String (h) +" / "}"; dhtReadings.toCharArray (data, (dhtReadings.length () + 1)); kung (debug) {Serial.print ("Temperatura:"); Serial.print (t); Serial.print ("| Humidity:"); Serial.println (h); } // I-publish ang mga halaga sa mga paksa ng MQTT client.publish (paksa, data); // I-publish ang mga pagbasa sa paksa (glasshouse / dhtreadings) kung (debug) {Serial.println ("Ipinadala ang mga pagbasa sa MQTT."); } esp_sleep_enable_timer_wakeup (TIME_TO_SLEEP * uS_TO_S_FACTOR); // matulog Serial.println ("I-setup ang ESP32 upang matulog para sa bawat" + String (TIME_TO_SLEEP) + "Mga Segundo"); Serial.println ("Matutulog nang normal ngayon."); esp_deep_sleep_start (); } // Pag-setup ng koneksyon sa wifi void setup_wifi () {pagkaantala (20); Serial.println (); Serial.print ("Kumokonekta sa"); Serial.println (wifi_ssid); WiFi.begin (wifi_ssid, wifi_password); habang (WiFi.status ()! = WL_CONNected) {pagkaantala (100); Serial.print ("."); } Serial.println (""); Serial.println ("OK ang WiFi"); Serial.print ("=> ESP32 bagong IP address ay:"); Serial.print (WiFi.localIP ()); Serial.println (""); } // Muling kumonekta sa wifi kung ang koneksyon ay nawala void reconnect () {habang (! Client.connected ()) {Serial.print ("Kumokonekta sa MQTT broker …"); kung (client.connect ("ESP32Client", mqtt_user, mqtt_password)) {Serial.println ("OK"); } iba pa {Serial.print ("[Error] Hindi konektado:"); Serial.print (client.state ()); Serial.println ("Maghintay ng 5 segundo bago subukang muli."); pagkaantala (5000); }}} void loop () {}
At muli, huwag kalimutang palitan ang mga kredensyal sa iyong sariling mga kredensyal
Hakbang 2: Wire Up
Para sa lakas, gumamit ako ng isang lumang USB cable kung saan pinutol ko ang konektor ng USB-A. Mayroong apat na mga wire sa USB cable, kailangan lamang namin ang mga itim at pula.
Kaya, ikonekta ang lahat alinsunod sa iskedyul sa itaas.
Hakbang 3: Python3 Script
Ang script ng Python3 ay papunta sa isang lugar kung saan naa-access ito sa root user.
Gumamit ako ng /root/scripts/glasshouse/glasshouse.py para sa script na ito. Ang mga nilalaman ng python script ay:
# Python3 script upang kumonekta sa MQTT, basahin ang mga halaga at isulat ang mga ito sa MySQL
# # B. Duijnhouwer # Hunyo, ika-8 ng 2020 # # bersyon: 1.0 # # import paho.mqtt.client bilang mqtt import json import pymysql pymysql.install_as_MySQLdb () import MySQLdb mula sa datime import datime 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): # Ang callback para kapag nag-uugnay ang client sa print ng broker (" Nakakonekta na may code ng resulta {0} ". format (str (rc))) # I-print ang resulta ng pagtatangka ng kliyente sa koneksyon.subscribe (" glasshouse / dhtreadings / # ") def on_message (client, userdata, msg): # Ang callback para sa kung kailan LARAP ng mensahe ay natanggap mula sa server. cursor.execut ("select * from sensordata") numrows = int (cursor.rowcount) newrow = numrows + 1 now = datime.now () formatted_date = now.strftime ('% Y-% m-% d% H:% M:% S ') payload = json.loads (msg.payload.decode (' utf-8 ')) print ("New row:" + str (newrow)) temperatura = float (payload ["temperatura"]) halumigmig = float (payload ["halumigmig"]) print ("Temperatura:" + str (temperatura)) print ("Humidity:" + str (halumigmig)) print ("DateTime:" + str (formatted_date)) kung ((temperatura > -20) at (temperatura = 0) at (halumigmig <= 100)): cur = db.cursor () cur.execut ("INSERT INTO glasshouse.sensordata (idx, temperatura, halumigmig, timestamp) VALUES (" + str (newrow) + "," + str (temperatura) + "," + str (halumigmig) + ",% s)", (formatted_date)) db.commit () print ("natanggap at na-import na data sa MySQL") iba pa: print ("lumampas sa mga limitasyon ang data at HINDI na-import sa MySQL") client = mqtt. Client ("duijnhouwer-com-glasshouse-script") client.username_pw_set (user, password = password) client.on_connect = on_connect # Define callback function para sa matagumpay na koneksyon client.on_message = on_message # Tukuyin ang function ng callback para sa pagtanggap ng isang mensahe client.connect (broker_address, port = port) #nagkonekta sa broker client.loop_forever () # Simulan ang networking daemon
Huwag kalimutang palitan ang MySQL username at password at ang MQTT username at password sa iyong sariling mga kredensyal
Maaari mong patakbuhin ang script bilang isang serbisyo sa pamamagitan ng paglikha ng dalawang mga file.
Ang una ay ang "/etc/init/glasshouse.conf" na may mga sumusunod na nilalaman:
magsimula sa runlevel [2345]
huminto sa runlevel [! 2345] exec /root/scripts/glasshouse/glasshouse.py
Ang pangalawang isa ay ang /etc/systemd/system/multi-user.target.wants/glasshouse.servicezonia kasama ang mga sumusunod na nilalaman:
[Yunit]
Paglalarawan = Serbisyo sa Pagsubaybay sa Glasshouse Pagkatapos = multi-user.target [Serbisyo] Uri = simpleng Restart = laging RestartSec = 1 ExecStart = / usr / bin / python3 /root/scripts/glasshouse/glasshouse.py [I-install] WantedBy = multi-user.target
Maaari mong patakbuhin ito bilang isang serbisyo gamit ang sumusunod na utos:
paganahin ng systemctl ang glasshouse
at simulang gamitin ito:
systemctl simulan ang glasshouse
Hakbang 4: MySQL Server
Kailangan mong lumikha ng isang bagong database ng MySQL na may isang talahanayan lamang dito.
Ang code para sa paglikha ng talahanayan ay:
GUMAWA NG TABLE `sensordata` (`idx` int (11) DEFAULT Null,` temperatura` float DEFAULT NULL, `halumigmig` float DEFAULT Null,` timestamp` datime DEFAULT Null) ENGINE = InnoDB DEFAULT CHARSET = utf8;
Hakbang 5: Webserver
Ang webserver ay may dalawang mga file, ang index.php file at isang config.ini file
Ang mga nilalaman ng config.ini file ay:
[database]
db_host = "localhost" db_name = "glasshouse" db_table = "sensordata" db_user = "*** DATABASE_USER ***" db_password = "*** DATABASE_PASSWORD ***"
Kung saan pinalitan mo ng offcourse ang *** DATABASE_USER *** at *** DATABASE_PASSWORD *** gamit ang iyong sariling mga kredensyal.
google.charts.load ('kasalukuyang', {'packages': ['corechart']}); google.charts.setOnLoadCallback (drawChart); function drawChart () {var data = google.visualization.arrayToDataTable ([// ['Timestamp', 'Temperature', 'Humidity', 'Heat Index'], ['Timestamp', 'Temperature', 'Humidity'], query ($ sql); # Ito habang - loop format at ilagay ang lahat ng mga nakuhang data sa paraan ng '' timestamp ',' temperatura ',' halumigmig ']. habang ($ row = $ resulta-> fetch_assoc ()) {$ timestamp_rest = substr ($ row ["timestamp"], 10, 6); echo "['". $ timestamp_rest. "',". $ row ['temperatura']. ",". $ row ['halumigmig']. "],"; // echo "['". $ timestamp_rest. "',". $ row ['temperatura']. ",". $ row ['halumigmig']. ",". $ row ['heatindex ']. "],";}?>]); // Curved line var options = {title: 'Temperatura at halumigmig', curveType: 'function', legend: {posisyon: 'ilalim'}, hAxis: {slantedText: true, slantedTextAngle: 45}}; // Curved chart var chart = bagong google.visualization. LineChart (document.getElementById ('curve_chart')); tsart.draw (data, mga pagpipilian); } // Tapusin ang bracket mula sa drawChart //
Hakbang 6: 3D Naka-print na Pabahay
Para sa pabahay, gumamit ako ng dalawang magkakahiwalay na bahay, isa para sa ESP32-CAM at DHT22 magkasama at isa para sa 18650 na kalasag ng baterya.
Hakbang 7: Ang Huling Resulta
Ang huling resulta ay ipinapakita rin sa mga larawan sa itaas.
At tuwing walang laman ang baterya, maaari mo itong singilin gamit ang isang mini USB cable.
Inirerekumendang:
Pagmamanman ng Temperatura sa Temperatura at Humidity Gamit ang Cloud ng ESP32 at AskSensors: 6 na Hakbang
Pagsubaybay sa Temperatura ng Temperatura at Humidity Sa Cloud ng ESP32 at AskSensors: Sa tutorial na ito matututunan mo kung paano subaybayan ang temperatura at halumigmig ng iyong silid o desk gamit ang DHT11 at ang ESP32 na konektado sa cloud. Ang aming mga pag-update ng tutorial ay matatagpuan dito. DHT11 Mga detalye: Ang sensor ng DHT11 ay maaaring masukat ang temperatura
Pagsubaybay sa Temperatura at Humidity Gamit ang ESP-01 & DHT at ang Cloud ng AskSensors: 8 Mga Hakbang
Pagsubaybay sa Temperatura at Humidity Gamit ang ESP-01 & DHT at ang AskSensors Cloud: Sa natuturo na ito malalaman natin kung paano subaybayan ang temperatura at mga pagsukat ng halumigmig gamit ang board ng IOT-MCU / ESP-01-DHT11 at ang AskSensors IoT Platform Pinipili ko ang module na IOT-MCU ESP-01-DHT11 para sa application na ito dahil
ESP32 Batay sa M5Stack M5stick C Weather Monitor Sa DHT11 - Subaybayan ang Temperatura ng Humidity at Heat Index sa M5stick-C Gamit ang DHT11: 6 na Hakbang
ESP32 Batay sa M5Stack M5stick C Weather Monitor Sa DHT11 | Subaybayan ang Temperatura ng Humidity at Heat Index sa M5stick-C Gamit ang DHT11: Kumusta, sa mga itinuturo na ito matututunan natin kung paano i-interface ang sensor ng temperatura ng DHT11 na may m5stick-C (isang development board ng m5stack) at ipakita ito sa pagpapakita ng m5stick-C. Kaya sa tutorial na ito mababasa natin ang temperatura, halumigmig at amp; init ako
Temperatura, Kamag-anak na Humidity, Atmospheric Pressure Logger Gamit ang Raspberry Pi at TE Connectivity MS8607-02BA01: 22 Mga Hakbang (na may Mga Larawan)
Temperatura, Kamag-anak na Humidity, Atmospheric Pressure Logger Gamit ang Raspberry Pi at TE Connectivity MS8607-02BA01: Panimula: Sa proyektong ito ipapakita ko sa iyo kung paano bumuo ng pag-set up sa pamamagitan ng hakbang ng isang sistema ng pag-log para sa temperatura ng halumigmig at presyon ng atmospera. Ang proyektong ito ay batay sa Raspberry Pi 3 Model B at TE Connectivity environment sensor chip MS8607-02BA
Kontrolin ang Arduino Gamit ang Smartphone Sa pamamagitan ng USB Gamit ang Blynk App: 7 Mga Hakbang (na may Mga Larawan)
Kontrolin ang Arduino Gamit ang Smartphone Sa Pamamagitan ng USB Sa Blynk App: Sa tutorial na ito, matututunan namin kung paano gamitin ang Blynk app at Arduino upang makontrol ang lampara, ang kumbinasyon ay sa pamamagitan ng USB serial port. Ang layunin ng pagtuturo na ito ay upang ipakita ang pinakasimpleng solusyon sa malayo-pagkontrol ng iyong Arduino o c