Menampilkan Data Sensor XY-MD02 pada LCD I2C 16x2 Metode Daisy Chain
Tutorial ini fokus pada implementasi pembacaan sensor industri XY-MD02 menggunakan ESP32 dan Modul MAX485 sebagai konverter TTL ke RS-485. Hasil pembacaan suhu dan kelembapan akan ditampilkan secara real-time melalui LCD I2C 16×2. Dengan menggunakan protokol Modbus RTU, sistem ini menawarkan stabilitas transmisi data yang tinggi untuk pemantauan lingkungan.
|Daftar Isi
Tonton Video Tutorial Untuk Menampilkan Data Sensor XY-MD02 pada LCD I2C 16×2 Metode Wiring Daisy Chain
| Alat dan Bahan
Kabel USB
LCD I2C 16x2
| Design Wiring
| Implementasi
Berikut langkah-langkah untuk Wiring dan Upload Kode Program :
> Hardware
> Software
#include <ModbusMaster.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define MODBUS_EN_PIN 4 // DE dan RE pin
#define MODBUS_RO_PIN 18 // RO pin
#define MODBUS_DI_PIN 19 // DI pin
#define MODBUS_SERIAL_BAUD 9600 // Baud rate MODBUS
#define MODBUS_PARITY SERIAL_8N1 // Parity Modbus
#define MODBUS_ADDRESS 0x0001 // Alamat register data XY-MD02
#define MODBUS_QUANTITY 2 // Jumlah data yang diambil (Temp & Hum)
ModbusMaster modbus;
LiquidCrystal_I2C lcd(0x27, 16, 2); // Alamat I2C umum 0x27
// Fungsi Kontrol Transmisi RS485
void modbusPreTransmission()
{
// Delay dikurangi agar tidak menyebabkan timeout
delay(10);
digitalWrite(MODBUS_EN_PIN, HIGH);
}
void modbusPostTransmission()
{
digitalWrite(MODBUS_EN_PIN, LOW);
delay(10);
}
void setup()
{
Serial.begin(115200);
// Inisialisasi LCD
lcd.init();
lcd.backlight();
pinMode(MODBUS_EN_PIN, OUTPUT);
digitalWrite(MODBUS_EN_PIN, LOW);
// Setup Serial2 untuk Modbus
Serial2.begin(MODBUS_SERIAL_BAUD, MODBUS_PARITY, MODBUS_RO_PIN, MODBUS_DI_PIN);
Serial2.setTimeout(1000);
modbus.preTransmission(modbusPreTransmission);
modbus.postTransmission(modbusPostTransmission);
delay(2000);
lcd.clear();
}
void loop()
{
int pooling;
int hasil[2];
float temperature;
float humidity;
// PEMBACAAN SENSOR 1 (SLAVE ID 1)
modbus.begin(1, Serial2);
pooling = modbus.readInputRegisters(MODBUS_ADDRESS, MODBUS_QUANTITY);
lcd.setCursor(0, 0);
if (pooling == modbus.ku8MBSuccess) {
hasil[0] = modbus.getResponseBuffer(0x00);
hasil[1] = modbus.getResponseBuffer(0x01);
temperature = hasil[0] / 10.0f; // Menggunakan 10.0f agar hasil desimal
humidity = hasil[1] / 10.0f;
// Tampilan Serial
Serial.println("Sensor 1 Success");
Serial.printf("T: %.1f, H: %.1f\n", temperature, humidity);
// Tampilan LCD - Variabel dimasukkan di akhir printf
lcd.printf("T1=%.1f H1=%2.1f%", temperature, humidity);
}
else {
Serial.println("Sensor 1 GAGAL membaca data");
lcd.print("T1= -- | H1= -- ");
}
delay(250); // Jeda antar request agar tidak bentrok
// PEMBACAAN SENSOR 2 (SLAVE ID 2)
modbus.begin(2, Serial2);
pooling = modbus.readInputRegisters(MODBUS_ADDRESS, MODBUS_QUANTITY);
lcd.setCursor(0, 1);
if (pooling == modbus.ku8MBSuccess) {
hasil[0] = modbus.getResponseBuffer(0x00);
hasil[1] = modbus.getResponseBuffer(0x01);
temperature = hasil[0] / 10.0f;
humidity = hasil[1] / 10.0f;
// Tampilan Serial
Serial.println("Sensor 2 Success");
Serial.printf("T: %.1f, H: %.1f\n", temperature, humidity);
// Tampilan LCD - Variabel dimasukkan di akhir printf
lcd.printf("T2=%.1f H2=%.1f%", temperature, humidity);
}
else {
Serial.println("Sensor 2 GAGAL membaca data");
lcd.print("T2= -- | H2= -- ");
}
Serial.println("Berhasil Membaca Data");
delay(1000); // Interval update data
}
| Hasil Akhir
Hasil akhirnya kan menampilkan Temperature dan Humidity kedua Sensor pada LCD I2C 16×2.
| Kesimpulan
Dengan memahami konsep Daisy Chain dan pengaturan Slave ID yang tepat, Anda dapat memperluas sistem monitoring ini ke banyak sensor tanpa perlu menambah kabel komunikasi baru ke ESP32. Penggunaan LCD I2C memastikan data dari seluruh sensor dapat dipantau dengan praktis di lokasi.
| FAQ (Frequently Asked Questions)
Jika dua sensor atau lebih memiliki Slave ID yang sama, maka akan terjadi tabrakan data. ESP32 tidak akan bisa membaca data dari sensor manapun karena kedua sensor mencoba merespons perintah di waktu yang bersamaan.
Cukup memparalelkan kabel A+ dan B- ke sensor baru tambahan. Pastikan untuk mengatur sensor baru tersebut ke Slave ID 3, Slave ID 4, dan seterusnya, serta memastikan total beban tidak melebihi kapasitas bus RS-485 biasanya hingga 32 perangkat.
Masalah ini biasanya terletak pada polling rate atau jeda waktu pembacaan di dalam kode program. Pastikan untuk memberikan delay yang cukup, minimal 1-2 detik di antara pembacaan Sensor 1 dan Sensor 2 agar modul RS-485 memiliki waktu untuk memproses antrean data.