Technology / IoT & Edge Computing
ESP32 untuk Monitoring Suhu dan Kelembapan
Mulai dari pembacaan I²C, pemeriksaan data, hingga publikasi pesan MQTT.
Peralatan yang diperlukan
- ESP32 DevKit
- SHT31 breakout
- Kabel jumper
Langkah implementasi
Langkah 1
Gunakan ESP32 DevKit dan modul SHT31 dengan catu daya 3,3 V yang sesuai datasheet. Hubungkan SDA dan SCL ke pin I²C yang dikonfigurasi dalam firmware, serta pastikan ground bersama.
Langkah 2
Pasang library sensor resmi/terpercaya. Uji pembacaan suhu dan RH melalui serial monitor sebelum menambahkan Wi-Fi; catat interval sampling dan identitas perangkat.
Langkah 3
Publikasikan payload JSON yang memuat node_id, timestamp ISO 8601, temperature_c dan rh_percent ke topic seperti farm/sensor/node01. Aktifkan autentikasi MQTT dan TLS jika melewati jaringan tidak tepercaya.
Langkah 4
Di penerima, tolak RH di luar 0–100% dan tandai pembacaan suhu yang tidak masuk akal. Jika sensor putus, kirim status error dan jangan mengirim nilai terakhir sebagai pengukuran baru.
Praktikum 1 — ESP32 ke MQTT
Contoh Arduino IDE dengan SHT31 pada I²C 0x44. Alamat broker, kredensial, dan jaringan harus diubah sesuai laboratorium. Kode menggunakan TCP tanpa TLS hanya untuk LAN tepercaya; jangan buka broker ini ke internet.
Firmware ESP32 (Arduino)
// Arduino IDE: ESP32 + Adafruit SHT31 + PubSubClient
#include <WiFi.h>
#include <Wire.h>
#include <Adafruit_SHT31.h>
#include <PubSubClient.h>
#include <time.h>
const char* ssid = "YOUR_WIFI";
const char* wifiPass = "YOUR_WIFI_PASSWORD";
const char* broker = "192.168.1.10";
const char* mqttUser = "sensor01";
const char* mqttPass = "YOUR_MQTT_PASSWORD";
WiFiClient transport; // LAN only; use WiFiClientSecure + CA for WAN
PubSubClient mqtt(transport);
Adafruit_SHT31 sht = Adafruit_SHT31();
unsigned long lastSent = 0;
void connectMqtt() {
while (!mqtt.connected()) {
if (!mqtt.connect("node01", mqttUser, mqttPass)) delay(3000);
}
}
void setup() {
Serial.begin(115200);
Wire.begin(21, 22); // example ESP32 pinout
if (!sht.begin(0x44)) { Serial.println("SHT31 not found"); while(true) delay(1000); }
WiFi.begin(ssid, wifiPass);
while(WiFi.status()!=WL_CONNECTED) delay(500);
configTime(7*3600,0,"pool.ntp.org");
mqtt.setServer(broker,1883);
}
void loop() {
if (!mqtt.connected()) connectMqtt();
mqtt.loop();
if (millis()-lastSent < 15000) return;
lastSent = millis();
float t=sht.readTemperature(), rh=sht.readHumidity();
if (isnan(t)||isnan(rh)||t<0||t>60||rh<0||rh>100) return;
time_t now=time(nullptr);
if (now < 1700000000) return; // clock not synchronized
char msg[192];
snprintf(msg,sizeof(msg),
"{\"node_id\":\"node01\",\"timestamp\":%ld,\"temperature_c\":%.2f,\"rh_percent\":%.2f}",
(long)now,t,rh);
mqtt.publish("farm/telemetry/node01",msg);
}Uji penerimaan
- Pastikan sensor dikenali di Serial Monitor dan timestamp valid setelah sinkronisasi NTP.
- Subscribe topic farm/telemetry/node01 dan periksa JSON yang diterima.
- Putuskan Wi-Fi selama 30 detik, sambungkan lagi, lalu pastikan pengiriman pulih. Kode blocking ini merupakan baseline praktikum, bukan firmware produksi.
Rangkaian praktikum: ESP32 → MQTT → Grafana → Jetson Nano.
Validasi dan keamanan
Uji sensor dan koneksi secara bertahap, catat data mentah dan versi firmware, dan dokumentasikan hasilnya. Untuk AC, listrik PLN, relay, pompa, dan dosing, gunakan komponen bersertifikasi serta bantuan teknisi berkompeten. Contoh di artikel ini bukan bukti bahwa setiap kombinasi perangkat telah diuji di fasilitas penelitian.
Dokumentasi teknis: Sumber resmi. Belum ada tautan pembelian berkomisi pada artikel ini. Lihat disclosure.
Baca arsitektur edge-to-cloud →