Daftar Isi:
- Perlengkapan
- Langkah 1: Unggah Kode Arduino ke ESP32-CAM
- Langkah 2: Hubungkan
- Langkah 3: Skrip Python3
- Langkah 4: Server MySQL
- Langkah 5: Server web
- Langkah 6: Perumahan Cetak 3D
- Langkah 7: Hasil Akhir
Video: Suhu dan Kelembaban Menggunakan ESP32-DHT22-MQTT-MySQL-PHP: 7 Langkah
2024 Pengarang: John Day | [email protected]. Terakhir diubah: 2024-01-30 09:54
Pacar saya menginginkan rumah kaca, jadi saya membuatnya. Tapi saya ingin sensor suhu dan kelembaban di dalam rumah kaca. Jadi, saya mencari contoh di Google dan mulai bereksperimen.
Kesimpulan saya adalah bahwa semua contoh yang saya temukan tidak persis seperti yang ingin saya bangun. Saya mengambil banyak bagian kecil dari kode dan menggabungkannya. Butuh waktu cukup lama untuk menyelesaikan pekerjaan pertama saya karena dokumentasi sebagian besar contoh terlalu sulit untuk saya pahami atau mereka menganggap bagian yang harus saya ketahui?? Tapi saya tidak tahu apa-apa (belum)
Itu sebabnya saya membuat instruksi ini. Tutorial "awal-sampai akhir" untuk dipahami semua orang secara harfiah. (Setidaknya saya berharap?)
Bagaimana itu bekerja …
Produk akhir adalah ESP32-CAM dengan sensor DHT22 yang terpasang padanya yang mendapatkan daya dari baterai 18650. Setiap tiga menit membaca suhu dan kelembaban dan mengirimkan ini melalui WiFi ke server MQTT eksternal dan kemudian pergi tidur (selama tiga menit) untuk menggunakan lebih sedikit baterai yang diperlukan
Di server Debian, (yang juga bisa menjadi raspberry pi saya kira) saya memiliki python3, server MQTT, server MySQL, dan server web
Skrip python3 berjalan sebagai layanan dan setiap kali menerima pesan MQTT, ia menghitung jumlah entri sebelumnya (nomor indeks) dan menambahkannya satu per satu. Kemudian membaca nilai suhu dan kelembaban dari pesan MQTT. Ia memeriksa nilai-nilai palsu dan setiap kali nilainya benar, ia mengirimkan nilai-nilai bersama dengan nomor indeks baru dan tanggal dan waktu saat ini ke server MySQL
Server web memiliki skrip PHP yang membaca nilai dari server MySQL dan membuat grafik yang bagus darinya menggunakan Google Charts. (contoh)
Perlengkapan
Bagian-bagian yang saya gunakan adalah sebagai berikut:
- ESP32-CAM (Alasan saya menggunakan versi cam adalah karena memiliki konektor antena eksternal di atasnya. Mungkin ada juga ESP32 lain yang bisa Anda gunakan)
- Antena eksternal
-
Sensor AM2302 DHT22 (Yang ini memiliki resistor bawaan, jadi Anda hanya perlu tiga kabel)
https://www.amazon.de/gp/product/B07CM2VLBK/ref=p…
- 18650 pelindung baterai v3
- Baterai 18650 (NCR18650B)
- Kabel micro USB lama (untuk menghubungkan ESP32 ke pelindung baterai)
- Beberapa kabel jumper pendek
Tambahan yang dibutuhkan:
-
Konektor USB ke TTL (gambar)
https://www.amazon.de/FT232RL-Seriell-Unterst%C3%…
- Besi solder
- Printer 3D (hanya diperlukan untuk casing rumah)
Langkah 1: Unggah Kode Arduino ke ESP32-CAM
Jadi mari kita mulai!
Untuk mengunggah kode Arduino ke ESP32-CAM, Anda harus menghubungkan konektor USBtoTTL ke ESP32 menggunakan skema di atas.
Kode Arduinonya adalah:
/*Hanya sedikit program untuk membaca suhu dan kelembaban dari sensor DHT22 dan
meneruskannya ke MQTT. B. Duijnhouwer, 8 Juni 2020 */ #include #include #include #define wifi_ssid "***WIFI_SSID***" //wifi ssid #define wifi_password "***WIFI_PASSWORD***" //wifi password #define mqtt_server "***SERVER_NAME***" // nama server atau IP #define mqtt_user "***MQTT_USER***" // nama pengguna #define mqtt_password "***MQTT_PASSWORD***" // kata sandi #define topik "rumah kaca /dhtreadings" #define debug_topic "glasshouse/debug" //Topik untuk debugging /* definisi untuk deepsleep */ #define uS_TO_S_FACTOR 1000000 /* Faktor konversi untuk mikro detik ke detik */ #define TIME_TO_SLEEP 180 /* Waktu ESP32 akan tidur selama 5 menit (dalam detik) */ bool debug = true; //Menampilkan pesan log jika Benar #define DHT22_PIN 14 dht DHT; WiFiClient espClient; klien PubSubClient (espClient); data karakter[80]; void setup() { Serial.begin(115200); setup_wifi(); //Hubungkan ke jaringan Wifi client.setServer(mqtt_server, 1883); // Konfigurasi koneksi MQTT, ubah port jika diperlukan. if (!client.connected()) { hubungkan kembali(); } // BACA DATA int chk = DHT.read22(DHT22_PIN); float t = DHT.suhu; float h = DHT.kelembaban; String dhtReadings = "{"suhu\":\"" + String(t) + "\", \"kelembaban\":\"" + String(h) + "\"}"; dhtReadings.toCharArray(data, (dhtReadings.length() + 1)); if (debug) { Serial.print("Suhu: "); Serial.print(t); Serial.print(" | Kelembaban: "); Serial.println(h); } // Publikasikan nilai ke topik MQTT client.publish(topic, data); // Publikasikan bacaan tentang topik (rumah kaca/dhtreadings) if (debug) { Serial.println("Bacaan dikirim ke MQTT."); } esp_sleep_enable_timer_wakeup(TIME_TO_SLEEP * uS_TO_S_FACTOR); //pergi ke tidur Serial.println("Setup ESP32 untuk tidur untuk setiap " + String(TIME_TO_SLEEP) + " Detik"); Serial.println("Sekarang tidur seperti biasa."); esp_deep_sleep_start(); } //Setup koneksi ke wifi void setup_wifi() { delay(20); Serial.println(); Serial.print("Menghubungkan ke "); Serial.println(wifi_ssid); WiFi.begin(wifi_ssid, wifi_password); while (WiFi.status() != WL_CONNECTED) { delay(100); Serial.print("."); } Serial.println(""); Serial.println("WiFi OK"); Serial.print("=> Alamat IP baru ESP32 adalah: "); Serial.print(WiFi.localIP()); Serial.println(""); } //Sambungkan kembali ke wifi jika koneksi terputus void reconnect() { while (!client.connected()) { Serial.print("Menghubungkan ke broker MQTT …"); if (client.connect("ESP32Client", mqtt_user, mqtt_password)) { Serial.println("OK"); } else { Serial.print("[Error] Tidak terhubung: "); Serial.print(klien.status()); Serial.println("Tunggu 5 detik sebelum mencoba lagi."); penundaan(5000); } } } batal loop() {}
Dan sekali lagi, jangan lupa untuk mengganti kredensial dengan kredensial Anda sendiri
Langkah 2: Hubungkan
Untuk daya, saya menggunakan kabel USB lama yang saya putuskan konektor USB-A-nya. Ada empat kabel di kabel USB, kita hanya perlu yang hitam dan yang merah.
Jadi, hubungkan semuanya sesuai jadwal di atas.
Langkah 3: Skrip Python3
Skrip Python3 masuk ke tempat yang dapat diakses oleh pengguna root.
Saya menggunakan /root/scripts/glasshouse/glasshouse.py untuk skrip ini. Isi skrip python adalah:
# Skrip Python3 untuk terhubung ke MQTT, membaca nilai dan menulisnya ke MySQL
# # B. Duijnhouwer #, 8 Juni 2020 # # versi: 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): # Callback ketika klien terhubung ke broker print("Connected dengan kode hasil {0}".format(str(rc))) # Cetak hasil percobaan koneksi client.subscribe("glasshouse/dhtreadings/#") def on_message(client, userdata, msg): # Panggilan balik ketika a PUBLISH pesan diterima dari server. 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') payload = json.loads(msg.payload.decode('utf-8')) print("Baris baru: "+str(baris baru)) temperature = float(payload["temperature"]) kelembaban = float(payload["humidity"]) print("Temperature: "+str(temperature)) print("Humidity: "+str(humidity)) print("DateTime: "+str(formatted_date)) if ((temperature > -20) dan (suhu = 0) dan (kelembaban <= 100)): cur = db.cursor() cur.execute("INSERT INTO glasshouse.sensordata (idx, temperature, moisture, timestamp) VALUES ("+str (baris baru)+", "+str(suhu)+", "+str(kelembaban)+", %s)", (tanggal_format)) db.commit() print("data diterima dan diimpor ke MySQL") else: print("data melebihi batas dan TIDAK diimpor ke MySQL") client = mqtt. Client("duijnhouwer-com-glasshouse-script") client.username_pw_set(user, password=password) client.on_connect = on_connect # Tentukan fungsi callback untuk koneksi sukses client.on_message = on_message # Tentukan fungsi panggilan balik untuk menerima pesan client.connect(broker_address, port=port) #connect to broker client.loop_forever() # Mulai daemon jaringan
Jangan lupa untuk mengganti nama pengguna dan kata sandi MySQL dan nama pengguna dan kata sandi MQTT dengan kredensial Anda sendiri
Anda dapat membuat skrip berjalan sebagai layanan dengan membuat dua file.
Yang pertama adalah “/etc/init/glasshouse.conf” dengan isi sebagai berikut:
mulai pada runlevel [2345]
berhenti di runlevel [!2345] exec /root/scripts/glasshouse/glasshouse.py
Yang kedua adalah “/etc/systemd/system/multi-user.target.wants/glasshouse.service” dengan isi sebagai berikut:
[Satuan]
Description=Layanan Pemantauan Rumah Kaca Setelah=multi-pengguna.target [Layanan] Jenis=simple Restart=selalu RestartSec=1 ExecStart=/usr/bin/python3 /root/scripts/glasshouse/glasshouse.py [Instal] WantedBy=multi-pengguna.target
Anda dapat menjalankan ini sebagai layanan menggunakan perintah berikut:
systemctl mengaktifkan rumah kaca
dan mulai menggunakan:
systemctl mulai rumah kaca
Langkah 4: Server MySQL
Anda harus membuat database MySQL baru hanya dengan satu tabel di dalamnya.
Kode untuk membuat tabel adalah:
BUAT TABEL `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: Server web
Server web memiliki dua file, file index.php dan satu file config.ini
Isi dari file config.ini adalah:
[basis data]
db_host = "localhost" db_name = "rumah kaca" db_table = "sensordata" db_user = "***DATABASE_USER***" db_password = "***DATABASE_PASSWORD***"
Dimana offcourse Anda mengganti ***DATABASE_USER*** dan ***DATABASE_PASSWORD*** dengan kredensial Anda sendiri.
google.charts.load('current', {'packages':['corechart']}); google.charts.setOnLoadCallback(drawChart); function drawChart() { var data = google.visualization.arrayToDataTable([// ['Timestamp', 'Temperature', 'Humidity', 'Heat Index'], ['Timestamp', 'Temperature', 'Humidity'], query($sql); # Ini while - format loop dan masukkan semua data yang diambil ke dalam cara ['timestamp', 'temperature', 'humidity'] while ($row = $result->fetch_assoc()) { $timestamp_rest = substr($row["timestamp"], 10, 6); echo "['".$timestamp_rest."', ".$row['temperature'].", ".$row['humidity']. "], "; // echo "['".$timestamp_rest."', ".$row['temperature'].", ".$row['humidity'].", ".$row['heatindex ']."], "; } ?>]); // Garis lengkung var options = { title: 'Temperature and moisture', curveType: 'function', legend: { position: 'bottom' }, hAxis: { slantedText:true, slantedTextAngle:45 } }; // Bagan lengkung var bagan = new google.visualization. LineChart(document.getElementById('curve_chart')); chart.draw(data, opsi); } // Akhiri braket dari drawChart //
Langkah 6: Perumahan Cetak 3D
Untuk casing, saya menggunakan dua casing terpisah, satu untuk ESP32-CAM dan DHT22 bersama-sama dan satu untuk pelindung baterai 18650.
Langkah 7: Hasil Akhir
Hasil akhir juga ditunjukkan pada gambar di atas.
Dan setiap kali baterai kosong, Anda dapat mengisinya dengan kabel mini USB.
Direkomendasikan:
Kipas Pendingin Otomatis Menggunakan Sensor Suhu dan Kelembaban Servo dan DHT11 Dengan Arduino: 8 Langkah
Kipas Pendingin Otomatis Menggunakan Sensor Suhu dan Kelembaban Servo dan DHT11 Dengan Arduino: Dalam tutorial ini kita akan mempelajari cara memulai & putar kipas saat suhu naik di atas level tertentu
Pemantauan Suhu dan Kelembaban Menggunakan NODE MCU DAN BLYNK: 5 Langkah
Pemantauan Suhu dan Kelembaban Menggunakan NODE MCU DAN BLYNK: Hi GuysDalam instruksi ini mari kita belajar bagaimana mendapatkan suhu dan kelembaban atmosfer menggunakan DHT11-Sensor Suhu dan Kelembaban menggunakan Node MCU dan aplikasi BLYNK
Perhitungan Kelembaban, Tekanan dan Suhu Menggunakan BME280 dan Antarmuka Foton.: 6 Langkah
Kelembaban, Tekanan dan Perhitungan Suhu Menggunakan BME280 dan Photon Interfacing.: Kami menemukan berbagai proyek yang memerlukan pemantauan suhu, tekanan dan kelembaban. Dengan demikian kami menyadari bahwa parameter ini sebenarnya memainkan peran penting dalam memperkirakan efisiensi kerja suatu sistem pada kondisi atmosfer yang berbeda
Peringatan Suhu dan Kelembaban Menggunakan AWS dan ESP32: 11 Langkah
Peringatan Suhu dan Kelembaban Menggunakan AWS dan ESP32: Dalam tutorial ini, kita akan mengukur data suhu dan kelembaban yang berbeda menggunakan sensor Suhu dan kelembaban. Anda juga akan mempelajari cara mengirim data ini ke AWS
Cara Menggunakan Sensor Suhu DHT11 Dengan Arduino dan Mencetak Suhu Panas dan Kelembaban: 5 Langkah
Cara Menggunakan Sensor Suhu DHT11 Dengan Arduino dan Mencetak Suhu Panas dan Kelembaban: Sensor DHT11 digunakan untuk mengukur suhu dan kelembaban. Mereka adalah penggemar elektronik yang sangat populer. Sensor kelembaban dan suhu DHT11 membuatnya sangat mudah untuk menambahkan data kelembaban dan suhu ke proyek elektronik DIY Anda. Ini per