Menampilkan Data Sensor XY-MD02 pada LCD I2C 16×2 Metode Wiring 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 Materi

 

Komponen

  • ESP32 (Beli di sini)
  • LCD I2C 16×2
  • 2 buah Temperature and Humidity Sensor XY- MD02 Modbus Slave ID berbeda
  • MAX485 TTL to RS-485 Converter
  • Female DC Jack
  • Adaptor PSU 5V DC
  • Breadboard
  • Kabel Jumper (Beli di sini)
  • Kabel USB
  • Arduino IDE (Download di sini)

Daisy Chain

Metode Daisy Chain memungkinkan kita untuk menghubungkan beberapa sensor dalam satu jalur komunikasi RS-485. Jalur A pada modul MAX485 dihubungkan ke semua jalur A pada sensor, begitu pula dengan jalur B. Metode ini sangat efisien dalam penggunaan kabel untuk sistem monitoring dengan banyak titik ukur.

Konfigurasi Slave ID

Hal paling utama saat menggunakan metode Daisy Chain dengan dua sensor atau lebih adalah setiap sensor harus memiliki Slave ID yang berbeda. Secara default, sensor XY-MD02 biasanya memiliki Slave ID 1. Jika memasang dua sensor, salah satu sensor harus diubah menjadi Slave ID 2 atau angka yang lainnya, sebelum keduanya digabungkan dalam satu jalur. Apabila sensor memiliki Slave ID yang sama, maka akan terjadi tabrakan data yang menyebabkan pembacaan gagal.

Diagram Wiring Daisy Chain

Keterangan :

ESP32 MAX485 XY-MD02 (S1) XY-MD02 (S2) LCD I2C 16×2 Female Jack DC
GPIO 18 RO
GPIO 19 DI
GPIO 4 DE & RE
D21 SDA
D22 SCL
A A+ A+
B B- B-
VCC (+) VCC (+) + (Positif)
GND (-) GND (-) – (Negatif)

 

Implementasi

  1. Menginstall Board ESP32
    • Buka File > Preferences di Arduino IDE.
    • Tambahkan URL : https://dl.espressif.com/dl/package_esp32_index.json di Additional Boards Manager URLs.
    • Klik Tools > Board > Board Manager, cari ESP32 kemudian install.
  2. Menginstall Library Modbus Master
    • Klik Sketch > Include Library > Manage Libraries.
    • Cari ModbusMaster dan klik Install.
  3. Menginstall Library Liquid Crystal I2C
    • Klik Sketch > Include Library > Manage Libraries.
    • Cari LiquidCrystal I2C dan klik Install.

 

Kode Program

#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: %.1fn", 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: %.1fn", 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
}

 

Langkah-langkah di Arduino IDE

  • Verifikasi Kode
    • Klik tombol Verify untuk memeriksa kesalahan pada kode.
  • Upload Program
    • Hubungkan ESP32 ke Laptop/PC dengan kabel USB.
    • Pilih board ESP32 Dev Module dan pilih Port yang sesuai di Arduino IDE.
    • Klik tombol Upload untuk mengunggah progam.

 

Hasil Akhir

 

FAQ

Apa yang terjadi jika dua sensor dalam satu jalur memiliki Slave ID yang sama?

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.

Berapa jarak maksimal kabel jika menggunakan metode Wiring Daisy Chain?

Salah satu keunggulan RS-485 adalah jarak transmisinya yang sangat jauh, bisa mencapai 1.200 meter. Namun, untuk jarak di atas 10 meter, pastikan menggunakan kabel Shielded Twisted Pair (STP) untuk menghindari gangguan induksi listrik dari lingkungan sekitar.

Bagaimana jika saya ingin menambah sensor ketiga atau keempat?

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.

Mengapa data suhu dan kelembapan di LCD tidak update?

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.

 

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.