
Setelah sebelumnya kita belajar menggunakan USB to RS-485 dan software ModScan untuk membaca sensor MD02, kali ini kita akan mencoba hal baru! Kita akan memakai komponen MAX485 sebagai konverter RS-485 dan menampilkan datanya langsung di Serial Monitor serta LCD I2C 16×2 menggunakan Arduino IDE. Dengan ESP32 dan protokol Modbus RTU, kita bisa memantau suhu dan kelembapan secara real-time. Yuk, ikuti langkah-langkah seru ini untuk membuat proyek monitoring dengan Modbus!
Daftar Isi
Komponen
- ESP32 (Beli di sini)
- LCD I2C 16×2
- Temperature and Humidity Sensor MD02 Modbus (Beli di sini)
- 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)
Diagram Wiring

Keterangan :
ESP32 | MAX485 | MD02 | Female DC Jack | LCD I2C 16X2 |
3V3 | VCC | |||
5V | VCC | |||
GND | GND | GND | ||
D4 | R2 & R3 | |||
D18 | R1 | |||
D19 | R4 | |||
D21 | SDA | |||
D22 | SCL | |||
B | B- | |||
A | A+ | |||
– | – | |||
+ | + |
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 <ModbusMaster.h>
#include <LiquidCrystal_I2C.h>
#define MODBUS_DIR_PIN 4 // DE dan RE pin (R2 dan R3)
#define MODBUS_RO_PIN 18 // RO pin (R1)
#define MODBUS_DI_PIN 19 // DI pin (R4)
#define MODBUS_SERIAL_BAUD 9600 // Baud rate MODBUS
#define MODBUS_PARITY SERIAL_8E1 // parity Modbus
#define MODBUS_SLAVE_ID 1 // slave ID modbus
#define MODBUS_ADDRESS 0x0001 // alamat modbus yang diambil datanya
#define MODBUS_QUANTITY 2 // jumlah data yang diambil
ModbusMaster modbus;
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Pin 4 made high for Modbus transmision mode
void modbusPreTransmission() {
delay(500);
digitalWrite(MODBUS_DIR_PIN, HIGH);
}
// Pin 4 made low for Modbus receive mode
void modbusPostTransmission() {
digitalWrite(MODBUS_DIR_PIN, LOW);
delay(500);
}
void setup() {
Serial.begin(115200);
pinMode(MODBUS_DIR_PIN, OUTPUT);
digitalWrite(MODBUS_DIR_PIN, LOW);
Serial2.begin(MODBUS_SERIAL_BAUD, MODBUS_PARITY, MODBUS_RO_PIN, MODBUS_DI_PIN);
Serial2.setTimeout(1000);
modbus.begin(MODBUS_SLAVE_ID, Serial2);
modbus.preTransmission(modbusPreTransmission);
modbus.postTransmission(modbusPostTransmission);
lcd.init();
lcd.backlight();
}
void loop() {
int pooling;
int hasil[2];
float temperature;
float humidity;
pooling = modbus.readInputRegisters(MODBUS_ADDRESS, MODBUS_QUANTITY);
if (pooling == modbus.ku8MBSuccess) {
Serial.println("Success, Data diterima:");
hasil[0] = modbus.getResponseBuffer(0x00);
hasil[1] = modbus.getResponseBuffer(0x01);
temperature = hasil[0] / 100.f;
humidity = hasil[1] / 100.f;
lcd.setCursor(0, 0);
lcd.print("Temp: " + String(temperature, 2) + " C");
lcd.setCursor(0, 1);
lcd.print("Humidity: " + String(humidity, 2) + " %");
Serial.println("Temp: " + String(temperature));
Serial.println("Humidity: " + String(humidity));
Serial.println();
} else {
Serial.println("Gagal membaca data");
}
delay(1000);
}
Langkah-langkah di Arduino IDE
- Memverifikasi Kode
- Klik tombol Verify untuk memeriksa kesalahan pada kode.
- Mengupload Program
- Hubungkan ESP32 ke komputer.
- Pilih board ESP32 Dev Module dan pilih Port yang sesuai di Arduino IDE.
- Klik tombol Upload untuk mengunggah progam.
Hasil Akhir

FAQ
Apa itu Modbus RTU?
Modbus RTU adalah protokol komunikasi yang dipakai perangkat industri untuk berkomunikasi satu sama lain.
Kenapa pakai MAX485 TTL to RS-485 Converter?
Karena ESP32 menggunakan sinyal TTL, sedangkan sensor MD02 menggunakan RS-485. MAX485 ini yang mengubah sinyal TTL ke RS-485 supaya keduanya bisa saling berkomunikasi.
Kenapa tampilan di LCD I2C kurang jelas atau redup?
Coba atur trimpot yang ada dibelakang modul LCD. Trimpot ini untuk mengatur kontras layar. Cukup putar aja pakai obeng kecil sampai teksnya terlihat lebih jelas.
Apakah bisa menampilkan data lebih dari satu layar LCD?
Bisa banget! Kamu cukup menambah LCD I2C kedua dan menyambungkannya ke ESP32. Programnya bisa dimodifikasi untuk menampilkan data di beberapa layar.
Kesimpulan
Nah, itu dia cara mudah untuk menampilkan data dari sensor MD02 ke LCD I2C 16×2! Dengan mengikuti langkah-langkah yang sudah dibahas, kamu bisa lebih paham cara kerja sensor dan tampilan LCD. Proyek ini cocok banget buat kamu yang ingin mulai belajar tentang sensor dan pengolahan data secara langsung. Selain itu, jangan ragu untuk terus bereksperimen dengan proyek-proyek lainnya!