Reading Temperature and Humidity SHT20 using Modbus RTU with ESP32

Dasar Teori

  1. Sensor SHT20 merupakan sensor yang digunakan untuk mengukur suhu dan kelembaban relatif (RH). Sensor ini menawarkan akurasi yang tinggi dan biasanya digunakan dalam aplikasi yang memerlukan pengawasan lingkungan. Dalam komunikasi dengan mikrokontroler, sensor SHT12 sering kali dihubungkan melalui protokol Modbus RTU yang menggunakan jalur serial (RS-485).
  2. Modbus RTU Modbus RTU merupakan protokol komunikasi serial yang sering digunakan dalam aplikasi industri untuk komunikasi antara perangkat master (ESP32) dan perangkat slave (sensor). Protokol ini bekerja dengan komunikasi half-duplex, yang berarti perangkat hanya dapat mengirim atau menerima data dalam satu waktu.
  3. ESP32 ESP32 adalah mikrokontroler dengan kemampuan komunikasi nirkabel dan serial. Dalam skenario ini, ESP32 bertindak sebagai Modbus master yang membaca data dari sensor SHT12 yang berfungsi sebagai Modbus slave.

Alat dan Bahan

  1. ESP32
  2. Sensor SHT20 yang mendukung Modbus RTU
  3. Kabel jumper
  4. Breadboard
  5. Power supply (misalnya 5V untuk ESP32)
  6. Software: Arduino IDE / PlatformIO, Modbus library for ESP32

Langkah Kerja

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
  1. Persiapan Hardware
  • Hubungkan pin TX ESP32 ke pin RX sensor ke konverter TTL to RS485.
  • Hubungkan pin GND ESP32 ke pin GND sensor.
  • Hubungkan pin VCC sensor SHT12 ke pin 5V ESP32 (sesuai kebutuhan tegangan sensor).
  • Pastikan semua koneksi terhubung dengan benar menggunakan breadboard.
  1. Konfigurasi Software
  • Buka Arduino IDE atau PlatformIO.
  • Install Modbus Master library untuk ESP32 (misalnya, “ModbusMaster” library).
  • Konfigurasi komunikasi serial untuk Modbus RTU melalui pin RX dan TX ESP32.

Tambahkan library berikut ke dalam program:

#include <ModbusMaster.h>
  1. Koding

Berikut adalah contoh kode yang digunakan untuk membaca data suhu dan kelembaban dari sensor SHT20 menggunakan Modbus RTU langsung dengan pin RX dan TX ESP32:

#include <ModbusMaster.h>




// Define the serial communication pins

const int rxPin = 16;  // RX pin (D5)

const int txPin = 17;  // TX pin (D6)




// Create a ModbusMaster object

ModbusMaster node;




void setup() {

  // Initialize the serial communication

  Serial.begin(115200);

  Serial2.begin(9600, SERIAL_8N1, rxPin, txPin); // Use Serial1 for SoftwareSerial or HardwareSerial




  // Initialize Modbus communication

  node.begin(1, Serial2); // 1 is the slave ID

}




void loop() {

  // Read input register values

  uint8_t result;

  uint16_t data[2];




  // Reading from address 8501 (0x213D) - adjust if needed

  result = node.readInputRegisters(1, 2); // Read 2 registers starting from address 8501




  if (result == node.ku8MBSuccess) {

    // Store the register values

    data[0] = node.getResponseBuffer(0) ; // First register

    data[1] = node.getResponseBuffer(1); // Second register

    float data1 = data[0]/10.0;

    float data2 = data[1]/10.0;

    // Print the input register values

    Serial.print("Input Register Values: ");

    Serial.print(data1);

    Serial.print("°C");

    Serial.print(", ");

    Serial.print(data2);

    Serial.println("%");

  } else {

    // Print error if reading fails

    Serial.print("Error reading input registers: ");

    Serial.println(result);

  }




  delay(1000); // Wait for 1 second before the next read

}
  1. Pengujian
  • Upload program ke ESP32 menggunakan Arduino IDE atau PlatformIO.
  • Buka Serial Monitor pada Arduino IDE untuk melihat data suhu dan kelembaban yang dibaca dari sensor SHT20.
  • Jika data tidak muncul atau terjadi error, pastikan koneksi hardware dan pengaturan baud rate pada kode sesuai dengan spesifikasi sensor.
  1. Analisis Hasil
  • Amati data suhu dan kelembaban yang terbaca di Serial Monitor.
  • Lakukan troubleshooting jika terdapat masalah dalam pembacaan data atau jika nilai yang terbaca tidak sesuai.

Penjelasan Kode

#include <ModbusMaster.h>
  • Inklusi Library: Baris ini menyertakan library ModbusMaster, yang menyediakan fungsi untuk berkomunikasi dengan perangkat Modbus melalui komunikasi serial. Library ini memungkinkan Anda untuk membaca dan menulis register dari perangkat Modbus.
// Mendefinisikan pin komunikasi serial

const int rxPin = 16;  // Pin RX (D5)

const int txPin = 17;  // Pin TX (D6)
  • Definisi Pin: Di sini, dua konstanta didefinisikan untuk pin RX (Receive) dan TX (Transmit) yang digunakan untuk komunikasi serial. Pin ini akan terhubung ke konverter TTL ke RS485.
// Membuat objek ModbusMaster

ModbusMaster node;
  • Pembuatan Objek: Sebuah instance dari kelas ModbusMaster dibuat dengan nama node. Objek ini akan digunakan untuk berkomunikasi dengan perangkat Modbus slave.
Fungsi Setup

void setup() {

// Inisialisasi komunikasi serial

Serial.begin(115200);

Serial2.begin(9600, SERIAL_8N1, rxPin, txPin); // Gunakan Serial2 untuk SoftwareSerial atau HardwareSerial
  • Inisialisasi Serial: Fungsi setup() menginisialisasi komunikasi serial:
  • Serial.begin(115200) memulai komunikasi serial untuk debugging dengan baud rate 115200.
  • Serial2.begin(9600, SERIAL_8N1, rxPin, txPin) menginisialisasi komunikasi serial untuk koneksi Modbus pada baud rate 9600 dengan 8 bit data, tanpa paritas, dan 1 bit stop. Serial2 digunakan di sini, yang biasanya tersedia di mikrokontroler seperti ESP32.
 // Inisialisasi komunikasi Modbus

 node.begin(1, Serial2); // 1 adalah ID slave

}
  • Inisialisasi Modbus: Baris ini menginisialisasi komunikasi Modbus dengan perangkat slave, di mana 1 adalah ID slave. Ini memberi tahu objek node perangkat Modbus mana yang akan berkomunikasi.
Fungsi Loop

void loop() {

 // Membaca nilai register input

uint8_t result;

uint16_t data[2];
  • Deklarasi Variabel: Di dalam fungsi loop(), dua variabel dideklarasikan:
  • result: Variabel untuk menyimpan hasil operasi pembacaan Modbus.
  • data[2]: Array untuk menyimpan nilai yang dibaca dari register input.
 // Membaca dari alamat 1 - sesuaikan jika diperlukan

 result = node.readInputRegisters(1, 2); // Membaca 2 register mulai dari alamat 1
  • Membaca Register: Fungsi readInputRegisters(1, 2) mencoba membaca 2 register input mulai dari alamat 8501. Hasil dari operasi ini disimpan dalam variabel result.
 if (result == node.ku8MBSuccess) {
  • Pemeriksaan Keberhasilan: Baris ini memeriksa apakah operasi pembacaan berhasil dengan membandingkan hasil dengan node.ku8MBSuccess, yang menunjukkan komunikasi yang berhasil.
 // Menyimpan nilai register

 data[0] = node.getResponseBuffer(0); // Register pertama

data[1] = node.getResponseBuffer(1); // Register kedua
  • Menyimpan Nilai: Jika pembacaan berhasil, nilai dari buffer respons disimpan dalam array data. getResponseBuffer(0) mengambil register pertama, dan getResponseBuffer(1) mengambil register kedua.
float data1 = data[0]/10.0;

float data2 = data[1]/10.0;
  • Konversi Data: Nilai register yang mentah dibagi dengan 10.0 untuk mengonversinya menjadi nilai floating-point yang bermakna. Ini sering dilakukan ketika data sensor sudah diskalakan.
// Mencetak nilai register input

    Serial.print("Nilai Register Input: ");

    Serial.print(data1);

    Serial.print("°C");

    Serial.print(", ");

    Serial.print(data2);

    Serial.println("%");
  • Output: Nilai yang telah dikonversi dicetak ke monitor serial, diformat dengan unit yang sesuai (°C untuk suhu dan % untuk kelembaban)

Kesimpulan

Dalam jobsheet ini, kita telah menghubungkan sensor SHT20 langsung ke ESP32 menggunakan pin RX dan TX tanpa menggunakan RS485 to TTL converter. Dengan program yang telah diimplementasikan, ESP32 mampu membaca dan menampilkan data suhu dan kelembaban dari sensor SHT20 melalui komunikasi Modbus RTU.

Related Articles

Leave a Reply

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

Daftar Sekarang