Reading Temperature and Humidity SHT20 using Modbus RTU with ESP32

Dasar Teori
- 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).
- 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.
- 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
- ESP32
- Sensor SHT20 yang mendukung Modbus RTU
- Kabel jumper
- Breadboard
- Power supply (misalnya 5V untuk ESP32)
- Software: Arduino IDE / PlatformIO, Modbus library for ESP32
Langkah Kerja
Ads Jadwal Training bisaioti Offline
No | Materi | Tanggal | Waktu | Harga | Lokasi | View | Action |
---|---|---|---|---|---|---|---|
1 | IOT PLC SCADA Siemens | 7-8 Juni 2025 | 08.00 - 16.00 | 2000000 | Surabaya | Silabus | Daftar Sekarang |
2 | IOT PLC SCADA Omron | 14 - 15 Juni 2025 | 08.00 - 16.00 | 2000000 | Surabaya | Silabus | Daftar Sekarang |
3 | IOT PLC SCADA Schneider | 21-22 Juni 2025 | 08.00 -16.00 | 2000000 | Surabaya | Silabus | Daftar Sekarang |
4 | IOT PLC SCADA Allen Bradley | 28-29 Juni 2025 | 08.00-16.00 | 2000000 | Surabaya | Silabus | Daftar Sekarang |
- 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.
- 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>
- 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
}
- 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.
- 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.