Belajar Membangun Jaringan Industri Mini dengan ESP32 sebagai Modbus Server dan Client.

Pendahuluan

Modbus TCP adalah protokol komunikasi berbasis TCP/IP yang banyak digunakan dalam sistem automasi industri untuk menghubungkan perangkat seperti sensor, PLC, dan mikrokontroler. Dalam praktikum ini, Anda akan mengonfigurasi dua ESP32 untuk berkomunikasi secara client-server menggunakan Modbus TCP. Satu ESP32 berperan sebagai Server (penyedia data), dan satu sebagai Client (peminta data). Simulasi ini relevan untuk aplikasi IoT seperti monitoring sensor, kontrol mesin, atau sistem manajemen energi.


Teori Dasar

1. Modbus TCP

  • Protokol open-source yang menggunakan port 502 sebagai default.
  • Mengirim data dalam format MBAP Header (Modbus Application Header) dan PDU (Protocol Data Unit).
  • Tidak memerlukan checksum karena menggunakan lapisan keamanan TCP/IP.

2. Arsitektur Client-Server

  • Server (Slave): Menyimpan data di register (holding/input) dan merespons permintaan client.
  • Client (Master): Mengirim permintaan (read/write) ke server.

3. ESP32 dalam Jaringan Modbus TCP

  • ESP32 mendukung koneksi Wi-Fi dan Ethernet.
  • Cocok untuk aplikasi IoT karena hemat daya dan memiliki dual-core.

Alat dan Bahan

  1. 2 Unit ESP32 + Kabel USB.
  2. Jaringan Wi-Fi (pastikan kedua ESP32 terhubung ke jaringan yang sama).
  3. Arduino IDE (terinstal library ModbusServer dan ModbusClient oleh emelianov).
  4. Serial Monitor (untuk debugging).

Langkah Praktikum

1. Instalasi Library Modbus

  1. Buka Arduino IDE.
  2. Instal library:
    • Sketch > Include Library > Manage Libraries.
    • Cari “ModbusServer” dan “ModbusClient” (pilih versi terbaru oleh emelianov).

2. Konfigurasi ESP32 sebagai Server

  • Upload kode berikut ke ESP32 Server:
    #include <WiFi.h>  
    #include <ModbusServer.h>  
    
    const char* ssid = "NAMA_WIFI";  
    const char* password = "PASSWORD_WIFI";  
    
    ModbusServer mb;  
    
    void setup() {  
      Serial.begin(115200);  
      WiFi.begin(ssid, password);  
      while (WiFi.status() != WL_CONNECTED) delay(500);  
      Serial.print("Server IP: ");  
      Serial.println(WiFi.localIP());  
    
      // Inisialisasi 10 Holding Registers (alamat 0-9)  
      mb.registerHoldingRegisters(0, 10);  
      mb.start(502); // Port Modbus TCP default  
    }  
    
    void loop() {  
      // Simulasi data acak di register 0-9  
      for (int i = 0; i < 10; i++) {  
        mb.Hreg(i, random(100, 1000));  
      }  
      delay(1000);  
    }

3. Konfigurasi ESP32 sebagai Client

  • Upload kode berikut ke ESP32 Client (ganti SERVER_IP dengan alamat IP Server):
    #include <WiFi.h>  
    #include <ModbusClient.h>  
    
    const char* ssid = "NAMA_WIFI";  
    const char* password = "PASSWORD_WIFI";  
    const char* serverIP = "192.168.1.100"; // Ganti dengan IP Server  
    
    ModbusClient mb;  
    
    void setup() {  
      Serial.begin(115200);  
      WiFi.begin(ssid, password);  
      while (WiFi.status() != WL_CONNECTED) delay(500);  
      Serial.print("Client IP: ");  
      Serial.println(WiFi.localIP());  
    
      mb.begin(serverIP, 502); // Koneksi ke server  
    }  
    
    void loop() {  
      uint16_t data[10];  
      // Baca 10 Holding Registers dari alamat 0  
      if (mb.readHoldingRegisters(0, 10, data)) {  
        Serial.println("Data dari Server:");  
        for (int i = 0; i < 10; i++) {  
          Serial.printf("Register %d: %d\n", i, data[i]);  
        }  
      } else {  
        Serial.println("Gagal membaca data!");  
      }  
      delay(2000);  
    }

4. Verifikasi Komunikasi

  1. Buka Serial Monitor untuk kedua ESP32 (baud rate 115200).
  2. Pada ESP32 Server, catat alamat IP yang ditampilkan.
  3. Pada ESP32 Client, pastikan alamat IP server sudah benar.
  4. Jika berhasil, Client akan menampilkan data acak dari Server setiap 2 detik:
    Data dari Server:  
    Register 0: 450  
    Register 1: 789  
    ...

Tugas dan Evaluasi

  1. Modifikasi Kode Client untuk menulis data ke Server menggunakan Function 06 (Write Single Register).
  2. Ubah Jumlah Register yang dibaca dari 10 menjadi 20, lalu analisis waktu respons.
  3. Jelaskan mengapa Modbus TCP lebih cocok untuk jaringan LAN/Wi-Fi dibandingkan Modbus RTU!

Analisis Error & Solusi

  • Timeout:
    • Pastikan kedua ESP32 terhubung ke Wi-Fi yang sama.
    • Periksa alamat IP Server di kode Client.
  • Data Tidak Terbaca:
    • Verifikasi inisialisasi register di Server (registerHoldingRegisters).
    • Pastikan library Modbus terinstal dengan benar.
  • Koneksi Terputus:
    • Cek stabilitas jaringan Wi-Fi.
    • Kurangi jarak antara ESP32 dan router.

Kesimpulan

Dua ESP32 dapat berkomunikasi secara efisien menggunakan Modbus TCP untuk membangun sistem IoT terdistribusi. Protokol ini ideal untuk aplikasi yang memerlukan skalabilitas dan integrasi dengan infrastruktur jaringan modern.


FAQ

Q: Bisakah ESP32 menjadi client dan server secara bersamaan?
A: Tidak, satu ESP32 hanya bisa berperan sebagai client atau server dalam satu waktu.

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

Q: Bagaimana cara membaca Input Register?
A: Gunakan registerInputRegisters() di Server dan Function 04 di Client.

Q: Apa fungsi MBAP Header?
A: MBAP Header berisi informasi transaksi, protokol, dan panjang data untuk sinkronisasi komunikasi.

Related Articles

Leave a Reply

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

Daftar Sekarang