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 16x2. Dengan menggunakan protokol Modbus RTU, sistem ini menawarkan stabilitas transmisi data yang tinggi untuk pemantauan lingkungan. Daftar Isi Materi Komponen Daisy Chain Konfigurasi Slave ID Diagram Wiring Daisy Chain Kode Program Arduino Langkah-langkah di Arduino IDE Hasil Akhir Monitoring FAQ (Tanya Jawab) Kesimpulan Komponen ESP32 (Beli di sini) LCD I2C 16x2 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 16x2 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 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. Pergi ke Tools > Board > Board Manager, cari ESP32 dan install. Menginstall Library Modbus Master Buka Sketch > Include Library > Manage Libraries. Cari ModbusMaster dan klik Install. Menginstall Library Liquid Crystal I2C Buka Sketch > Include Library > Manage Libraries. Cari LiquidCrystal I2C dan klik Install. Kode Program #include #include #include #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 } 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.