Isi kandungan:
- Bekalan
- Langkah 1: Muat naik Kod Arduino ke ESP32-CAM
- Langkah 2: Wire Up
- Langkah 3: Skrip Python3
- Langkah 4: Pelayan MySQL
- Langkah 5: Pelayan Web
- Langkah 6: Perumahan Bercetak 3D
- Langkah 7: Keputusan Akhir
Video: Suhu dan Kelembapan Menggunakan ESP32-DHT22-MQTT-MySQL-PHP: 7 Langkah
2024 Pengarang: John Day | [email protected]. Diubah suai terakhir: 2024-01-30 11:08
Teman wanita saya mahukan rumah kaca, jadi saya membuatnya. Tetapi saya mahukan sensor suhu dan kelembapan di dalam rumah kaca. Oleh itu, saya mencari contoh dan mula bereksperimen.
Kesimpulan saya adalah bahawa semua contoh yang saya dapati tidak tepat seperti yang ingin saya bina. Saya mengambil banyak bahagian kecil kod dan menggabungkannya. Saya mengambil masa agak lama untuk menyelesaikan kerja pertama saya kerana dokumentasi kebanyakan contoh terlalu sukar untuk saya fahami atau mereka menganggap bahagian yang harus saya ketahui ?? Tetapi saya tidak tahu apa-apa (belum) ☹
Itulah sebabnya saya membina ini. Tutorial "awal hingga akhir" untuk difahami oleh semua orang. (Sekurang-kurangnya saya harap?)
Bagaimana ia berfungsi …
Produk akhir adalah ESP32-CAM dengan sensor DHT22 yang terpasang padanya yang mendapat kuasa dari bateri 18650. Setiap tiga minit ia membaca suhu dan kelembapan dan menghantar ini melalui WiFi ke pelayan MQTT luaran dan kemudian tidur (selama tiga minit) untuk menggunakan bateri kurang seperti yang diperlukan
Pada pelayan Debian, (yang mungkin juga saya raspberry pi) saya mempunyai python3, pelayan MQTT, pelayan MySQL dan pelayan laman web
Skrip python3 berfungsi sebagai perkhidmatan dan setiap kali ia menerima mesej MQTT, ia menghitung jumlah entri sebelumnya (nombor indeks) dan menambahnya satu demi satu. Kemudian ia membaca nilai suhu dan kelembapan dari mesej MQTT. Ia memeriksa nilai-nilai palsu dan kapan pun nilainya benar, nilai akan dikirimkan bersama-sama dengan nombor indeks baru dan tarikh dan waktu semasa ke pelayan MySQL
Pelayan laman web mempunyai skrip PHP yang membaca nilai dari pelayan MySQL dan membuat grafik yang bagus daripadanya menggunakan Carta Google. (contoh)
Bekalan
Bahagian yang saya gunakan adalah seperti berikut:
- ESP32-CAM (Sebab saya menggunakan versi cam adalah kerana ia mempunyai penyambung antena luaran. Mungkin ada juga ESP32 lain yang boleh anda gunakan)
- Antena luaran
-
Sensor DH222 AM2302 (Yang ini mempunyai perintang terbina dalam, jadi anda hanya memerlukan tiga wayar)
https://www.amazon.de/gp/product/B07CM2VLBK/ref=p…
- Perisai bateri 18650 v3
- Bateri 18650 (NCR18650B)
- Kabel USB mikro lama (untuk menyambungkan ESP32 ke pelindung bateri)
- Beberapa wayar pelompat pendek
Perlu tambahan:
-
Penyambung USB ke TTL (gambar)
https://www.amazon.de/FT232RL-Seriell-Unterst%C3%…
- Besi pematerian
- Pencetak 3D (hanya diperlukan untuk casing perumahan)
Langkah 1: Muat naik Kod Arduino ke ESP32-CAM
Jadi mari kita mulakan!
Untuk memuat naik kod Arduino ke ESP32-CAM, anda harus menyambungkan penyambung USBtoTTL ke ESP32 menggunakan skema di atas.
Kod Arduino adalah:
/ * Hanya sedikit program untuk membaca suhu dan kelembapan dari sensor DHT22 dan
lulus ke MQTT. B. Duijnhouwer June, 8th 2020 * / #include #include #include #define wifi_ssid "*** WIFI_SSID ***" // wifi ssid #define wifi_password "*** WIFI_PASSWORD ***" // kata laluan wifi #define mqtt_server "*** SERVER_NAME ***" // nama pelayan atau IP #define mqtt_user "*** MQTT_USER ***" // nama pengguna #define mqtt_password "*** MQTT_PASSWORD ***" // kata laluan #tentukan topik "rumah kaca / dhtreadings "#define debug_topic" glasshouse / debug "// Topik untuk debug / * definisi untuk deepsleep * / #define uS_TO_S_FACTOR 1000000 / * Faktor penukaran untuk detik mikro hingga saat * / #define TIME_TO_SLEEP 180 / * Waktu ESP32 akan tidur selama 5 minit (dalam beberapa saat) * / bool debug = true; // Paparkan mesej log jika True #define DHT22_PIN 14 dht DHT; WiFiClient espClient; Pelanggan PubSubClient (espClient); data char [80]; persediaan tidak sah () {Serial.begin (115200); persediaan_wifi (); // Sambung ke klien rangkaian Wifi.setServer (mqtt_server, 1883); // Konfigurasikan sambungan MQTT, ubah port jika diperlukan. jika (! client.connected ()) {reconnect (); } // BACA DATA int chk = DHT.read22 (DHT22_PIN); apungan t = Suhu DHT; apungan h = kelembapan DHT; String dhtReadings = "{" suhu / ": \" "+ String (t) +" / ", \" kelembapan / ": \" "+ String (h) +" / "}"; dhtReadings.toCharArray (data, (dhtReadings.length () + 1)); jika (debug) {Serial.print ("Temperature:"); Cetakan bersiri (t); Serial.print ("| Kelembapan:"); Bersiri.println (h); } // Terbitkan nilai ke topik MQTT client.publish (topik, data); // Menerbitkan bacaan mengenai topik (glasshouse / dhtreadings) jika (debug) {Serial.println ("Bacaan dihantar ke MQTT."); } esp_sleep_enable_timer_wakeup (TIME_TO_SLEEP * uS_TO_S_FACTOR); // pergi tidur Serial.println ("Siapkan ESP32 untuk tidur untuk setiap" + Rentetan (TIME_TO_SLEEP) + "Detik"); Serial.println ("Tidur seperti biasa sekarang."); esp_deep_sleep_start (); } // Siapkan sambungan ke wifi void setup_wifi () {delay (20); Bersiri.println (); Serial.print ("Menyambung ke"); Serial.println (wifi_ssid); WiFi.begin (wifi_ssid, wifi_password); sementara (WiFi.status ()! = WL_CONNECTED) {kelewatan (100); Cetakan bersiri ("."); } Serial.println (""); Serial.println ("WiFi OK"); Serial.print ("=> Alamat IP baru ESP32 ialah:"); Serial.print (WiFi.localIP ()); Serial.println (""); } // Sambung semula ke wifi jika sambungan terputus batal sambungkan semula () {while (! Client.connected ()) {Serial.print ("Menyambung ke broker MQTT …"); jika (client.connect ("ESP32Client", mqtt_user, mqtt_password)) {Serial.println ("OK"); } lain {Serial.print ("[Ralat] Tidak disambungkan:"); Serial.print (pelanggan.state ()); Serial.println ("Tunggu 5 saat sebelum mencuba semula."); kelewatan (5000); }}} gelung kosong () {}
Dan sekali lagi, jangan lupa untuk mengganti kelayakan dengan kelayakan anda sendiri
Langkah 2: Wire Up
Untuk kekuatan, saya menggunakan kabel USB lama di mana saya memotong penyambung USB-A. Terdapat empat wayar dalam kabel USB, kami hanya memerlukan yang hitam dan yang merah.
Jadi, sambungkan semuanya mengikut jadual di atas.
Langkah 3: Skrip Python3
Skrip Python3 masuk ke tempat di mana ia dapat diakses oleh pengguna root.
Saya menggunakan /root/scripts/glasshouse/glasshouse.py untuk skrip ini. Kandungan skrip python adalah:
# Skrip Python3 untuk menyambung ke MQTT, membaca nilai dan menulisnya ke dalam MySQL
# # B. Duijnhouwer # Jun, 8th 2020 # # versi: 1.0 # # import paho.mqtt.client sebagai mqtt import json import pymysql pymysql.install_as_MySQLdb () import MySQLdb dari datetime import datetime db = MySQLdb.connect ("localhost", "localhost", "glasshouse", "*** MYSQL_USERNAME ***", "*** MYSQL_PASSWORD ***") kursor = 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): # Callback untuk ketika klien menyambung ke cetakan broker (" Disambungkan dengan kod hasil {0} ". format (str (rc))) # Hasil cetak percubaan klien.subscribe (" glasshouse / dhtreadings / # ") def on_message (klien, userdata, msg): # Panggilan balik untuk ketika Mesej PUBLISH diterima dari pelayan. 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 ') muatan = json.loads (msg.payload.decode (' utf-8 ')) cetak ("Baris baru:" + str (newrow)) suhu = terapung (muatan ["suhu"]) kelembapan = float (payload ["kelembapan"]) cetak ("Suhu:" + str (suhu)) cetak ("Kelembapan:" + str (kelembapan)) cetak ("DateTime:" + str (formatted_date)) jika ((suhu > -20) dan (suhu = 0) dan (kelembapan <= 100)): cur = db.cursor () cur.execute ("INSERT INTO glasshouse.sensordata (idx, suhu, kelembapan, cap waktu) NILAI (" + str (newrow) + "," + str (suhu) + "," + str (kelembapan) + ",% s)", (format_date)) db.commit () cetak ("data diterima dan diimport dalam MySQL") yang lain: print ("data melebihi had dan TIDAK diimport dalam MySQL") client = mqtt. Client ("duijnhouwer-com-glasshouse-script") client.username_pw_set (user, password = password) client.on_connect = on_connect # Tentukan fungsi callback untuk klien sambungan yang berjaya.on_message = on_message # Tentukan fungsi panggilan balik untuk penerimaan pesanan pelanggan.connect (broker_address, port = port) #connect to broker client.loop_forever () # Mulakan rangkaian daemon
Jangan lupa ganti nama pengguna dan kata laluan MySQL dan nama pengguna dan kata laluan MQTT ke kelayakan anda sendiri
Anda boleh menjadikan skrip dijalankan sebagai perkhidmatan dengan membuat dua fail.
Yang pertama adalah "/etc/init/glasshouse.conf" dengan kandungan berikut:
mulakan di runlevel [2345]
berhenti di runlevel [! 2345] exec /root/scripts/glasshouse/glasshouse.py
Yang kedua ialah “/etc/systemd/system/multi-user.target.wants/glasshouse.serviceassign dengan kandungan berikut:
[Unit]
Penerangan = Perkhidmatan Pemantauan Glasshouse Selepas = multi-user.target [Service] Type = restart sederhana = selalu RestartSec = 1 ExecStart = / usr / bin / python3 /root/scripts/glasshouse/glasshouse.py [Pasang] WantedBy = berbilang pengguna.target
Anda boleh menjalankan ini sebagai perkhidmatan menggunakan arahan berikut:
systemctl membolehkan rumah kaca
dan mulakan dengan menggunakan:
systemctl memulakan rumah kaca
Langkah 4: Pelayan MySQL
Anda harus membuat pangkalan data MySQL baru dengan hanya satu jadual di dalamnya.
Kod untuk membuat jadual adalah:
BUAT JADUAL `sensordata` (`idx` int (11) DEFAULT NULL,` temperature` float DEFAULT NULL, `humidity` float DEFAULT NULL,` timestamp` datetime DEFAULT NULL) ENGINE = InnoDB DEFAULT CHARSET = utf8;
Langkah 5: Pelayan Web
Pelayan laman web mempunyai dua fail, fail index.php dan satu fail config.ini
Kandungan fail config.ini adalah:
[pangkalan data]
db_host = "localhost" db_name = "rumah kaca" db_table = "sensordata" db_user = "*** DATABASE_USER ***" db_password = "*** DATABASE_PASSWORD ***"
Di mana jalan keluar anda ganti *** DATABASE_USER *** dan *** DATABASE_PASSWORD *** dengan bukti kelayakan anda sendiri.
google.charts.load ('current', {'package': ['corechart']}); google.charts.setOnLoadCallback (drawChart); fungsi drawChart () {var data = google.visualization.arrayToDataTable ([// ['Timestamp', 'Temperature', 'Humidity', 'Heat Index'], ['Timestamp', 'Temperature', 'Humidity'], pertanyaan ($ sql); # Sementara ini - format gelung dan masukkan semua data yang diambil ke arah ['cap waktu', 'suhu', 'kelembapan']. sementara ($ baris = $ hasil-> fetch_assoc ()) {$ timestamp_rest = substr ($ baris ["cap waktu"], 10, 6); gema "['". $ timestamp_rest. "',". $ baris ['suhu']. ",". $ baris ['kelembapan']. "],"; // echo "['". $ timestamp_rest. "',". $ baris ['suhu']. ",". $ baris ['kelembapan']. ",". $ baris ['heatindex ']. "],";}?>]); // Pilihan garis lengkung var = {tajuk: 'Suhu dan kelembapan', curveType: 'function', legenda: {posisi: 'bottom'}, hAxis: {slantedText: true, slantedTextAngle: 45}}; // Carta melengkung var chart = google.visualization. LineChart baru (document.getElementById ('curve_chart')); chart.draw (data, pilihan); } // Kurungan akhir dari drawChart //
Langkah 6: Perumahan Bercetak 3D
Untuk perumahan, saya menggunakan dua kediaman berasingan, satu untuk ESP32-CAM dan DHT22 bersama-sama dan satu untuk pelindung bateri 18650.
Langkah 7: Keputusan Akhir
Hasil akhir juga ditunjukkan dalam gambar di atas.
Apabila bateri kosong, anda boleh mengecasnya dengan kabel USB mini.
Disyorkan:
Kipas Pendingin Auto Menggunakan Sensor dan Sensor Suhu dan Kelembapan DHT11 Dengan Arduino: 8 Langkah
Kipas Pendingin Auto Menggunakan Servo dan DHT11 Sensor Suhu dan Kelembapan Dengan Arduino: Dalam tutorial ini kita akan belajar bagaimana memulakan & putar kipas apabila suhu meningkat di atas tahap tertentu
Pemantauan Suhu dan Kelembapan Menggunakan MCU NODE DAN BLYNK: 5 Langkah
Pemantauan Suhu dan Kelembapan Menggunakan NODE MCU DAN BLYNK: Hai GuysDalam arahan ini mari kita belajar bagaimana mendapatkan suhu dan kelembapan atmosfera menggunakan sensor DHT11-Suhu dan Kelembapan menggunakan aplikasi Node MCU dan BLYNK
Pengiraan Kelembapan, Tekanan dan Suhu Menggunakan BME280 dan Antarmuka Foton .: 6 Langkah
Pengiraan Kelembapan, Tekanan dan Suhu Menggunakan BME280 dan Antarmuka Foton: Kami menemui pelbagai projek yang memerlukan pemantauan suhu, tekanan dan kelembapan. Oleh itu, kami menyedari bahawa parameter ini sebenarnya memainkan peranan penting dalam membuat anggaran kecekapan kerja sistem pada keadaan atmosfera yang berlainan
Pemantauan Suhu dan Kelembapan DHT Menggunakan ESP8266 dan Platform AskSensors IoT: 8 Langkah
Pemantauan Suhu dan Kelembapan DHT Menggunakan ESP8266 dan Platform AskSensors IoT: Dalam arahan sebelumnya, saya menunjukkan panduan langkah demi langkah untuk memulakan dengan nodeMCU ESP8266 dan platform IoS AskSensors. Dalam tutorial ini, saya menyambungkan sensor DHT11 ke nod MCU. DHT11 adalah Suhu dan humidi yang biasa digunakan
Cara Menggunakan Sensor Suhu DHT11 Dengan Arduino dan Cetak Suhu Panas dan Kelembapan: 5 Langkah
Cara Menggunakan Sensor Suhu DHT11 Dengan Arduino dan Cetak Suhu Panas dan Kelembapan: Sensor DHT11 digunakan untuk mengukur suhu dan kelembapan. Mereka adalah penggemar elektronik yang sangat popular. Sensor kelembapan dan suhu DHT11 menjadikannya sangat mudah untuk menambahkan data kelembapan dan suhu ke projek elektronik DIY anda. Per