ESP32 sebagai Modbus Master: Library & Contoh Kode Lengkap

📌 Artikel ini adalah bagian dari seri ESP32 di Industri: Panduan Implementasi IoT untuk Pabrik & Fasilitas Industri — Cluster 2 dari 7. Belum yakin ESP32 cocok untuk kebutuhan Anda? Baca dulu Cluster 1: Kenapa ESP32 Bisa Dipakai di Lingkungan Industri?

Setelah memahami kemampuan dan batasan ESP32 di lingkungan industri, sekarang kita masuk ke implementasi paling praktis: menjadikan ESP32 sebagai Modbus master yang bisa membaca data langsung dari sensor dan transmitter industri.

Ini adalah salah satu use case paling powerful ESP32 di Industrial IoT — karena begitu ESP32 bisa “bicara” Modbus RTU, Anda bisa membaca hampir semua sensor industri modern yang menggunakan protokol ini, termasuk sensor 4-20mA yang sudah dikonversi ke Modbus RTU.

Kenapa ESP32 Modbus Master Jadi Pilihan Tepat untuk Retrofit Sensor Industri?

Modbus RTU adalah protokol komunikasi serial yang sangat umum dipakai di perangkat industri — PLC, sensor pintar, transmitter, VFD, dan energy meter hampir semuanya mendukung Modbus RTU sebagai standar minimum. Dengan menjadikan ESP32 sebagai master (pengendali komunikasi), Anda bisa:

  • Membaca banyak sensor sekaligus dalam satu jalur RS-485 (multi-drop)
  • Mengintegrasikan sensor lama yang belum “smart” tapi sudah punya output Modbus via converter
  • Menjembatani data dari dunia serial industri ke dunia IoT (WiFi/MQTT/cloud)

Yang Anda Butuhkan

Hardware

  • ESP32 development board (DevKit V1 atau NodeMCU-32S)
  • Modul konverter TTL to RS-485 tipe auto direction control (pin: VCC, GND, TX, RX, A, B) — tipe ini lebih direkomendasikan untuk pemula karena tidak perlu mengatur pin DE/RE secara manual
  • Perangkat Modbus RTU slave — bisa berupa sensor 4-20mA yang sudah dikonversi via modul Modbus RTU converter
  • Kabel twisted pair untuk jalur RS-485 (disarankan shielded jika jarak jauh atau area noise tinggi), plus resistor terminasi 120Ω di kedua ujung bus

Catatan teknis: jika sensor Anda masih output 4-20mA analog murni (belum Modbus), Anda butuh converter 4-20mA to Modbus RTU terlebih dahulu sebelum bisa dibaca ESP32 sebagai perangkat Modbus.

Software / Library

Library yang paling stabil dan banyak dipakai komunitas untuk kebutuhan ini adalah ModbusMaster oleh Doc Walker, tersedia di Arduino Library Manager.

Sketch > Include Library > Manage Libraries > cari “ModbusMaster” > Install

Wiring: ESP32 ke Modul TTL-to-RS485 (Auto Direction) ke Perangkat Modbus

Berbeda dengan modul RS-485 lama yang mengharuskan Anda mengatur pin DE (Driver Enable) dan RE (Receiver Enable) secara manual lewat kode program, tutorial ini memakai modul konverter dengan auto direction control — pin yang tersedia hanya VCC, GND, TX (atau DI), RX (atau RO), A, dan B. Modul jenis ini otomatis mendeteksi arah komunikasi kirim/terima, sehingga wiring dan kode jadi lebih sederhana dan minim human-error.

Pin ESP32 Pin Modul Konverter Keterangan
GPIO17 (TX2) RX / DI Data dikirim dari ESP32 ke modul
GPIO16 (RX2) TX / RO Data diterima ESP32 dari modul
3.3V VCC Cek dulu spesifikasi modul — sebagian butuh 5V
GND GND Ground harus disamakan di semua perangkat
A Sambungkan ke jalur RS-485 menuju perangkat Modbus
B Sambungkan ke jalur RS-485 menuju perangkat Modbus

Catatan: penamaan pin di beberapa modul bisa berbeda (ada yang menulis “TXD/RXD”, ada yang “DI/RO”) — cek datasheet modul Anda untuk memastikan arah sinyal yang benar.

Topologi wiring RS-485 daisy chain yang benar untuk ESP32 Modbus master

Untuk jalur RS-485 dengan lebih dari satu slave, pastikan semua perangkat disambung secara daisy chain (seri), bukan star/T-junction — detail lengkapnya sudah dibahas di Wiring RS-485 yang Benar: Kesalahan Umum yang Bikin Data Korup.

Contoh Kode ESP32 Modbus Master Lengkap

Berikut contoh kode dasar membaca satu register holding dari perangkat Modbus RTU slave (misalnya nilai suhu dari sensor). Karena modul konverter yang dipakai sudah auto direction control, kode tidak perlu lagi mengatur pin DE/RE:

#include <ModbusMaster.h>
#define SLAVE_ID 1

ModbusMaster node;

void setup() {
  Serial.begin(115200);
  Serial2.begin(9600, SERIAL_8N1, 16, 17); // RX2, TX2 - ke modul konverter

  node.begin(SLAVE_ID, Serial2);
  // Tidak perlu preTransmission/postTransmission di sini -
  // modul konverter sudah auto direction control (tanpa pin DE/RE)
}

void loop() {
  uint8_t result;
  result = node.readHoldingRegisters(0x0000, 1); // baca 1 register mulai address 0

  if (result == node.ku8MBSuccess) {
    uint16_t rawValue = node.getResponseBuffer(0);
    float suhu = rawValue / 10.0; // sesuaikan scaling dengan datasheet sensor Anda

    Serial.print("Suhu: ");
    Serial.print(suhu);
    Serial.println(" °C");
  } else {
    Serial.print("Gagal membaca, kode error: ");
    Serial.println(result, HEX);
  }

  delay(2000);
}

Penjelasan Bagian Penting

  • Tanpa preTransmission/postTransmission — pada modul MAX485 manual, dua fungsi ini wajib ada untuk switching arah komunikasi lewat pin DE/RE. Karena modul yang dipakai di sini auto direction control, bagian ini bisa dihilangkan sepenuhnya dari kode, membuat program jauh lebih ringkas dan minim bug.
  • readHoldingRegisters(0x0000, 1) — membaca 1 register mulai dari alamat 0x0000. Alamat register ini wajib dicek di datasheet perangkat Modbus slave Anda, karena setiap perangkat punya mapping register berbeda.
  • Scaling nilai (rawValue / 10.0) — banyak sensor mengirim data dalam bentuk integer yang perlu di-scale sesuai spesifikasi datasheet (misalnya nilai 253 berarti 25.3°C).

Kesalahan Umum yang Sering Terjadi

  • Lupa mengatur baud rate yang sesuai — Modbus RTU slave punya baud rate default tertentu (umumnya 9600), pastikan ESP32 diset sama.
  • Alamat register salah — selalu cek datasheet, jangan asumsi semua sensor pakai alamat yang sama.
  • Termination resistor tidak terpasang — untuk jalur RS-485 yang panjang atau banyak node, resistor 120Ω di kedua ujung jalur bisa mencegah reflection sinyal.
  • Salah pilih modul converter — memakai modul MAX485 manual tanpa auto direction lalu lupa menambahkan kontrol DE/RE di kode adalah penyebab paling sering komunikasi gagal total di awal proyek.
  • Grounding tidak sama antar device — perbedaan ground potential antar perangkat bisa menyebabkan pembacaan data error, terutama di panel dengan banyak kabel power.

Posisi terminating resistor 120 ohm yang benar untuk wiring RS-485 ESP32 Modbus

Kalau setelah wiring dan kode di atas komunikasi masih gagal, cek daftar solusinya di Troubleshooting Modbus RTU: 7 Error Paling Sering & Solusinya.

Langkah Selanjutnya

Setelah ESP32 berhasil membaca data via Modbus RTU, langkah alami berikutnya adalah mengirim data tersebut ke luar — baik ke MQTT broker untuk monitoring real-time, atau ke database seperti InfluxDB untuk historical logging. Kedua topik ini akan kita bahas di dua artikel berikutnya dalam seri ini.

Baca juga artikel terkait dari seri Panduan Lengkap Modbus RTU:

📌 Call to Action

Butuh converter untuk sensor 4-20mA Anda agar bisa dibaca via Modbus RTU seperti contoh di atas? Dapatkan modul Waveshare 4-20mA to Modbus RTU converter → tokopedia.com/bisaioti

Ingin praktik step-by-step dari wiring sampai dashboard jadi, dengan pendampingan? Ikuti kelas “Dari Sensor Industri ke Dashboard: Baca Data 4-20mA via Modbus RTU” → bisaioti.com/lab