Monitoring Suhu & Kelembaban 4–20 mA Menggunakan ESP32 via RS485 (Modbus RTU)

🎯 Tujuan Praktikum
Mahasiswa mampu:
- Memahami karakteristik sensor industri Autonics WD1-C (4–20 mA)
- Menggunakan converter Analog→RS485 secara benar dan aman
- Membaca data Modbus RTU di ESP32
- Mengonversi data digital → arus (mA) → suhu (°C) & kelembaban (%RH)
⚠️ PERINGATAN PENTING
- ❌ ESP32 tidak boleh membaca 4–20 mA langsung
- ✅ Gunakan converter Analog→RS485 untuk keamanan & keandalan industri
- ⚠️ Pastikan ground common antar perangkat
📚 Dasar Teori Singkat
- Autonics WD1-C: sensor suhu & kelembaban output 4–20 mA (masing-masing kanal)
- Waveshare Analog to RS485 (12-bit): mengubah arus menjadi data digital 0–4095 via Modbus RTU
- ESP32: bertindak sebagai Modbus Master (UART/TTL)
🧩 Arsitektur Sistem

🧰 Alat dan Bahan
| No | Alat / Bahan |
| 1 | ESP32 Dev Board |
| 2 | Autonics WD1-C (Suhu & Kelembaban, 4–20 mA) |
| 3 | Waveshare Analog to RS485 (12-bit) |
| 4 | Converter RS485 to TTL |
| 5 | Power Supply 24 VDC |
| 6 | Kabel & multimeter |
🔌 Wiring Detail
1️⃣ Autonics WD1-C → Waveshare
(Periksa label terminal WD1-C Anda; umumnya terpisah per kanal)

| WD1-C | Waveshare |
| OUT Temp + (4–20 mA) | IN1+ |
| OUT Temp − | IN1− |
| OUT RH + (4–20 mA) | IN2+ |
| OUT RH − | IN2− |
| Power Sensor | 24 VDC |
Catatan: Jika modul Waveshare hanya 1 kanal, lakukan praktikum bergantian (Temp lalu RH).
2️⃣ Waveshare → RS485 to TTL
| Waveshare | RS485-TTL |
| A | A |
| B | B |
| GND | GND |
3️⃣ RS485-TTL → ESP32
| RS485-TTL | ESP32 |
| TX | GPIO 16 (RX2) |
| RX | GPIO 17 (TX2) |
| GND | GND |
⚙️ Konfigurasi Modbus (Waveshare)
- Slave ID: 1
- Baudrate: 9600
- Parity: None
- Stop Bit: 1
- Mode: Modbus RTU
📊 Peta Register (Contoh Umum)
Sesuaikan dengan datasheet modul Waveshare Anda
| Kanal | Register | Resolusi |
| CH1 (Temp) | 0x0000 | 0–4095 |
| CH2 (RH) | 0x0001 | 0–4095 |
🔄 Konversi Data
- Raw (0–4095) → Arus (mA)

- Arus → Nilai Fisik (Contoh Umum WD1-C)

💻 Program ESP32 (Arduino IDE)
#include <ModbusMaster.h>
#define RX_PIN 17
#define TX_PIN 16
#define DE_PIN 5 // pin for RS485 direction control (optional)
ModbusMaster modbus;
void setup() {
Serial.begin(9600);
Serial2.begin(9600, SERIAL_8N1, RX_PIN, TX_PIN);
pinMode(DE_PIN, OUTPUT); // set DE pin as output (if using)
digitalWrite(DE_PIN, LOW); // set DE pin low (if using)
}
void loop() {
uint16_t rawTemp, rawHum;
// Read holding register from slave 1
modbus.begin(1, Serial2); // set slave ID to 1 and use Serial2 as the communication port
uint8_t rc = modbus.readInputRegisters (0, 2); // read 5 holding register starting from address 0
if (rc == modbus.ku8MBSuccess) {
rawTemp = modbus.getResponseBuffer(0);
rawHum = modbus.getResponseBuffer(1);
float mA_temp = rawTemp /1000.0 ;
float mA_hum = rawHum /1000.0;
float tempC = (mA_temp - 4.0) / 16.0 * 79.9 - 19.9;
float humRH = (mA_hum - 4.0) / 16.0 * 99.9;
Serial.print("Temperature: ");
Serial.print(tempC);
Serial.println(" C");
Serial.print("Humidity: ");
Serial.print(humRH);
Serial.println(" %RH");
} else {
Serial.print("Slave 1: Error reading holding register: ");
Serial.println(rc);
}/*
*/
delay(1000); // delay for 1 second
}
🧪 Tugas Praktikum
- Verifikasi nilai dengan Modbus Poll
- Bandingkan hasil Modbus Poll vs ESP32
- Ubah range suhu/RH sesuai datasheet WD1-C
- Analisis resolusi 12-bit & error
❌ Kesalahan Umum
- A/B RS485 terbalik → No response
- Slave ID/baud beda → Timeout/CRC error
- Ground tidak common → Data tidak stabil
✅ Kesimpulan
- Sistem aman & industrial-grade
- ESP32 tidak menyentuh analog
- Siap dikembangkan ke PLC / SCADA / IIoT
🚀 Pengembangan Lanjutan
- Logging ke MQTT / Node-RED
- Integrasi PLC Siemens/Omron
- Isolator RS485 untuk lingkungan bising
- Kalibrasi & alarm threshold








