Read Input Register Values of Modbus Serial/RTU/RS485 Device in ESP32 with TTL to RS485 Converter using arduino IDE

  1. Tujuan
  • Peserta mampu mengimplementasikan komunikasi Modbus RTU antara ESP32 sebagai master dan perangkat Modbus RTU sebagai slave.
  • Peserta memahami cara membaca input register dari perangkat Modbus RTU menggunakan protokol Modbus RTU.

Read Input Register Values of Modbus RS485 Device in ESP32 with TTL to RS485 Converter using arduino IDE

  1. Dasar Teori
  2. Modbus RTU
  • Modbus adalah protokol komunikasi yang dikembangkan oleh Modicon pada tahun 1979 untuk digunakan dengan perangkat PLC (Programmable Logic Controller). Protokol ini sangat populer di industri dan digunakan untuk menghubungkan berbagai perangkat elektronik untuk pertukaran informasi.
  • Modbus RTU adalah salah satu varian Modbus yang digunakan di atas jaringan serial (RS232/RS485). RS485 adalah standar komunikasi serial yang memungkinkan komunikasi jarak jauh dengan banyak perangkat dalam satu jaringan bus.
  1. Input Register
  • Input register adalah blok data 16-bit yang dapat dibaca dari perangkat slave Modbus. Biasanya digunakan untuk menyimpan data sensor atau status perangkat yang akan dibaca oleh master.
  • Dalam Modbus RTU, master mengirim permintaan untuk membaca register tertentu dari slave, dan slave merespons dengan nilai register tersebut.
  1. RS485 dan TTL to RS485 Converter
  • RS485 memungkinkan komunikasi jarak jauh dengan beberapa perangkat (multidrop) dalam satu bus data. RS485 menggunakan dua kabel diferensial (A dan B) untuk mengirim data, sehingga lebih tahan terhadap interferensi dibandingkan RS232.
  • TTL to RS485 Converter digunakan untuk mengubah sinyal dari TTL (Transistor-Transistor Logic) yang dihasilkan oleh ESP32 (3.3V atau 5V) menjadi sinyal RS485 yang dapat digunakan untuk komunikasi serial di jaringan RS485.
  1. ESP32
  • ESP32 adalah mikrokontroler yang mendukung Wi-Fi dan Bluetooth dengan beberapa UART (Universal Asynchronous Receiver-Transmitter) yang dapat digunakan untuk komunikasi serial. Dalam tugas ini, ESP32 digunakan sebagai Modbus RTU Master untuk membaca data dari perangkat slave.
  1. Alat dan Bahan
  • 1x ESP32
  • 1x TTL to RS485 Converter
  • 1x Perangkat Modbus RTU (sebagai slave, seperti sensor atau PLC)
  • 1x Kabel USB (untuk menghubungkan ESP32 ke komputer)
  • Kabel jumper
  1. Skema Rangkaian
  • Hubungkan TX ESP32 (GPIO 17) ke pin DI pada TTL to RS485 converter.
  • Hubungkan RX ESP32 (GPIO 16) ke pin RO pada TTL to RS485 converter.
  • Sambungkan Vcc TTL to RS485 converter ke 3.3V atau 5V dari ESP32.
  • Sambungkan GND dari ESP32 ke GND pada TTL to RS485 converter.
  • Sambungkan pin A dan B pada TTL to RS485 converter ke perangkat Modbus RTU.
  1. Langkah Percobaan
  1. Persiapkan Software:
    • Instal Arduino IDE di komputer Anda.
    • Pastikan ESP32 Board telah diinstal pada Arduino IDE.
    • Instal ModbusMaster Library dengan membuka Sketch > Include Library > Manage Libraries dan cari ModbusMaster.
  2. Kodingan Program:
#include <ModbusMaster.h>

// Pin Definitions

#define RS485_TX 17  // TX pin for RS485 communication

#define RS485_RX 16  // RX pin for RS485 communication

// Create ModbusMaster object

ModbusMaster node;

void setup() {
  // Initialize serial communication for RS485 at 9600 baud rate
  Serial2.begin(9600, SERIAL_8N1, RS485_RX, RS485_TX);


  // Initialize Modbus communication with slave ID 1
  node.begin(1, Serial2);

  // Start serial monitor
  Serial.begin(115200);
}




void loop() {
  uint8_t result;
  uint16_t data[3];  // To hold values read from Modbus device

  // Read 3 input registers starting from address 0

  result = node.readInputRegisters(0x0000, 3);


  if (result == node.ku8MBSuccess) {
    // Read successful, print data
    for (int i = 0; i < 3; i++) {
      data[i] = node.getResponseBuffer(i);
      Serial.print("Register ");
      Serial.print(i);
      Serial.print(": ");
      Serial.println(data[i]);
    }

  } else {

    // Error occurred, print result code
    Serial.print("Modbus Error: ");
    Serial.println(result, HEX);
  }




  // Wait for 5 seconds before the next read

  delay(5000);
}
  1. Upload Program:
    • Sambungkan ESP32 ke komputer menggunakan kabel USB.
    • Pilih ToolsBoardESP32 Dev Module.
    • Pilih Port yang sesuai dengan ESP32.
    • Klik Upload untuk mengunggah kode ke ESP32.

Berikut adalah penjelasan sintaks program yang digunakan untuk membaca input register dari perangkat Modbus RTU menggunakan ESP32 dan konverter TTL to RS485:

  1. Header File:
#include <ModbusMaster.h>
  • #include <ModbusMaster.h>: Mengimpor library ModbusMaster yang digunakan untuk melakukan komunikasi dengan perangkat Modbus RTU sebagai master. Library ini menyediakan fungsi untuk mengirim dan menerima data dari perangkat slave Modbus.
  1. Definisi Pin:
#define RS485_TX 17  // TX pin for RS485 communication
#define RS485_RX 16  // RX pin for RS485 communication
  • #define RS485_TX 17: Mendefinisikan GPIO 17 sebagai pin TX (transmit) pada ESP32 yang akan mengirim data melalui komunikasi RS485.
  • #define RS485_RX 16: Mendefinisikan GPIO 16 sebagai pin RX (receive) pada ESP32 yang akan menerima data melalui komunikasi RS485.
  1. Pembuatan Objek ModbusMaster:
ModbusMaster node;
  • ModbusMaster node;: Membuat objek node dari kelas ModbusMaster. Objek ini akan digunakan untuk mengirim permintaan ke perangkat Modbus slave dan menerima datanya.
  1. Fungsi setup():
void setup() {
  // Initialize serial communication for RS485 at 9600 baud rate
  Serial2.begin(9600, SERIAL_8N1, RS485_RX, RS485_TX);
  // Initialize Modbus communication with slave ID 1
  node.begin(1, Serial2);
  // Start serial monitor
  Serial.begin(115200);
}
  • Serial2.begin(9600, SERIAL_8N1, RS485_RX, RS485_TX);:
    • Inisialisasi komunikasi UART di Serial2 dengan baud rate 9600, 8 data bits, No parity, dan 1 stop bit. Parameter terakhir mengatur pin TX dan RX dari ESP32 yang digunakan untuk berkomunikasi dengan perangkat slave Modbus melalui RS485.
  • node.begin(1, Serial2);:
    • Menginisialisasi komunikasi Modbus RTU dengan slave ID 1 pada interface Serial2. Ini berarti ESP32 akan berfungsi sebagai Modbus master yang berkomunikasi dengan perangkat slave yang memiliki ID 1.
  • Serial.begin(115200);:
    • Memulai komunikasi serial untuk monitor di baud rate 115200. Ini memungkinkan kita melihat hasil pembacaan di Serial Monitor Arduino IDE.
  1. Fungsi loop():

void loop() {
  uint8_t result;
  uint16_t data[3];  // To hold values read from Modbus device
  // Read 3 input registers starting from address 0
  result = node.readInputRegisters(0x0000, 3);
  • uint8_t result;: Variabel untuk menyimpan kode hasil (status) dari operasi pembacaan Modbus.
  • uint16_t data[3];: Array yang digunakan untuk menyimpan nilai input register yang dibaca dari perangkat slave.
  • result = node.readInputRegisters(0x0000, 3);:
    • Mengirim permintaan dari master (ESP32) ke slave (Modbus) untuk membaca 3 input register mulai dari alamat 0x0000. Hasil dari operasi ini disimpan dalam variabel result.
    • Fungsi ini akan membaca data dari register yang berisi informasi yang disimpan oleh slave, seperti nilai sensor atau status perangkat.
  1. Cek Hasil Pembacaan:
  if (result == node.ku8MBSuccess) {
    // Read successful, print data
    for (int i = 0; i < 3; i++) {
      data[i] = node.getResponseBuffer(i);
      Serial.print("Register ");
      Serial.print(i);
      Serial.print(": ");
      Serial.println(data[i]);

    }


  } else {

    // Error occurred, print result code
    Serial.print("Modbus Error: ");
    Serial.println(result, HEX);

  }
  • if (result == node.ku8MBSuccess):
    • Jika pembacaan berhasil (nilai result adalah ku8MBSuccess), maka program akan membaca dan menampilkan nilai register yang diterima.
  • node.getResponseBuffer(i):
    • Fungsi ini mengambil data yang diterima dari buffer respons Modbus. Data ini disimpan di array data[] dan akan ditampilkan di Serial Monitor.
  • Serial.print(“Register “), Serial.println(data[i]):
    • Menampilkan hasil pembacaan register di Serial Monitor, di mana data[i] adalah nilai dari register yang dibaca.
  • else:
    • Jika pembacaan gagal (status result bukan ku8MBSuccess), program akan menampilkan kode kesalahan di Serial Monitor dengan Serial.println(result, HEX) yang mencetak kode kesalahan dalam format hexadecimal.
  1. Penundaan sebelum Pembacaan Berikutnya:
  delay(5000);

}
  • delay(5000);:
    • Menunggu selama 5 detik sebelum melakukan pembacaan register berikutnya. Ini memberikan waktu antara siklus pembacaan data.
  1. Monitoring Data:
    • Setelah upload selesai, buka Serial Monitor di Arduino IDE (Tools > Serial Monitor).
    • Pastikan baud rate pada Serial Monitor diatur ke 115200.
    • Anda akan melihat nilai register yang dibaca dari perangkat Modbus RTU setiap 5 detik.
  1. Analisis
  • Periksa apakah data yang terbaca pada Serial Monitor sesuai dengan nilai input register dari perangkat slave Modbus RTU.
  • Jika ada kesalahan, periksa:
    • Koneksi kabel pada TTL to RS485 converter dan perangkat Modbus RTU.
    • Alamat slave device pada node.begin(1, Serial2), pastikan sesuai dengan konfigurasi perangkat.
    • Pastikan baud rate, data bits, stop bits, dan parity cocok antara ESP32 dan perangkat Modbus RTU.
  1. Tugas
  1. Ubah jumlah register yang dibaca dari 3 menjadi 5. Amati perubahan output di Serial Monitor.
  2. Coba ubah alamat register yang dibaca (misalnya, mulai dari alamat 10) dan catat data yang diterima.
  3. Buat laporan hasil percobaan dengan menyertakan skema rangkaian, hasil Serial Monitor, dan analisis jika terjadi kesalahan.
  1. Kesimpulan

Tuliskan kesimpulan mengenai bagaimana komunikasi Modbus RTU dapat diimplementasikan dengan ESP32, TTL to RS485 converter, dan perangkat Modbus RTU.

Ads Jadwal Training bisaioti Offline
NoMateriTanggalWaktuHargaLokasiViewAction
1IOT PLC SCADA Siemens7-8 Juni 202508.00 - 16.002000000SurabayaSilabusDaftar Sekarang
2IOT PLC SCADA Omron14 - 15 Juni 202508.00 - 16.002000000SurabayaSilabusDaftar Sekarang
3IOT PLC SCADA Schneider21-22 Juni 202508.00 -16.002000000SurabayaSilabusDaftar Sekarang
4IOT PLC SCADA Allen Bradley28-29 Juni 202508.00-16.002000000SurabayaSilabusDaftar Sekarang

Related Articles

Leave a Reply

Your email address will not be published. Required fields are marked *

MINI WORKSHOP GRATIS
Integrasi PLC Mitsubishi FX3U ke platform Cloud IoT hanya dengan alat sederhana dan budget minim.
1 Juni 2025
📍 Online via Zoom
⏳ Daftar sekarang – kuota terbatas!
Daftar Sebelum Penuh!