Review SHT30 RS485 Modbus: Akurat untuk IoT Industri?

Kalau kamu pernah pakai DHT22 atau DHT11 untuk monitoring suhu dan kelembaban, kamu pasti tahu masalah klasiknya: pembacaan sering tidak stabil, kabel maksimal cuma beberapa meter, dan kalau dipasang banyak titik sensor, wiring-nya jadi mimpi buruk. Di skala hobby mungkin masih bisa ditoleransi. Tapi begitu masuk ke skala industri — ruang server, gudang, greenhouse besar, atau pabrik — masalah ini jadi serius.
Di sinilah sensor SHT30 dengan komunikasi RS485 Modbus RTU masuk sebagai solusi. Modul ini menggabungkan chip sensor SHT30 dari Sensirion (yang sudah lama dikenal akurat) dengan antarmuka komunikasi industri RS485, jadi bisa dipasang sampai ratusan meter dan di-cascade banyak unit dalam satu bus. Artikel ini akan membahas tuntas spesifikasi, cara baca datanya lewat Modbus, kelebihan-kekurangannya, sampai perbandingan dengan sensor sejenis seperti SHT20 dan DHT22.

Spesifikasi Lengkap Sensor SHT30 RS485
| Parameter | Spesifikasi |
|---|---|
| Chip sensor | SHT30 (Sensirion) |
| Komunikasi | RS485 Modbus RTU |
| Function code | 03 (Read Holding Registers), 06 (Write Single Register) |
| Tegangan operasi | DC 5–36V (tergantung varian) |
| Range suhu | -40°C hingga +125°C |
| Akurasi suhu | ±0.2°C |
| Range kelembaban | 0–100% RH |
| Akurasi kelembaban | ±2% RH |
| Baud rate default | 9600, N, 8, 1 (bisa diubah 4800–115200 bps) |
| Alamat slave | 1–247 (dapat dikonfigurasi) |
| Jumlah unit per bus | Hingga 247 modul (sesuai limit alamat Modbus) |
| Register suhu | 0x0000 (40001, integer, dibagi 10 atau 100 tergantung mode presisi) |
| Register kelembaban | 0x0001 (40002, integer, dibagi 10 atau 100) |
| Register dew point | 0x0002 (40003, tersedia pada beberapa varian) |
| Varian tersedia | RS485 dan TTL232 |
Yang menarik dari sisi spesifikasi adalah rentang tegangannya yang fleksibel (5–36V), jadi cocok dipasang di panel kontrol industri yang biasanya pakai suplai 24V, tapi tetap bisa disambungkan ke board 5V seperti Arduino kalau kamu pakai varian yang mendukung.

Kelebihan dan Kekurangan
Kelebihan
Jarak transmisi jauh. RS485 secara teori bisa mencapai 1.200 meter, jauh dibanding sensor digital seperti DHT22 yang sangat rentan noise di kabel panjang.
Bisa multi-drop. Satu bus RS485 bisa menampung sampai 247 sensor dengan alamat berbeda — sangat efisien untuk monitoring banyak titik tanpa perlu satu kabel per sensor.
Akurasi solid. ±0.2°C untuk suhu dan ±2% RH untuk kelembaban tergolong bagus di kelas sensor industri menengah, jauh lebih stabil dibanding sensor berbasis resistif/kapasitif murah.
Tahan gangguan elektrik. Sinyal differential RS485 jauh lebih kebal terhadap noise dibanding sinyal digital single-ended, penting untuk lingkungan pabrik yang banyak motor listrik dan inverter.
Protokol standar industri. Modbus RTU sudah jadi bahasa umum di PLC dan SCADA, jadi integrasinya biasanya plug-and-play dengan sistem yang sudah ada.
Ada fitur query alamat lewat broadcast. Kalau lupa alamat sensor (misal beli unit second), kamu bisa tanya langsung pakai alamat broadcast 0xFE tanpa perlu reset manual — sangat membantu saat instalasi banyak sensor di lapangan.
Kekurangan
Butuh konverter tambahan untuk mikrokontroler hobi. Kalau kamu pakai Arduino Uno atau ESP32 biasa, perlu modul RS485-to-TTL (misalnya berbasis MAX485) karena board ini tidak punya port RS485 native.
Resolusi register cukup kasar. Karena nilai disimpan sebagai integer dibagi 10, presisi pembacaan dibatasi satu digit di belakang koma — cukup untuk kebanyakan kebutuhan, tapi bukan untuk aplikasi laboratorium presisi tinggi.
Konfigurasi awal sedikit lebih rumit dibanding sensor plug-and-play seperti DHT22. Kamu perlu paham dasar Modbus (alamat slave, baud rate, function code) sebelum bisa membaca data dengan benar.
Harga lebih tinggi dibanding sensor analog/digital sederhana, walau sepadan dengan fitur dan ketahanannya.
Cocok untuk Siapa dan Use Case Nyata
Sensor ini paling pas untuk skenario yang membutuhkan jarak jauh dan banyak titik sensor sekaligus:
Greenhouse / pertanian skala menengah-besar. Satu bus RS485 bisa menjangkau seluruh area tanpa perlu access point WiFi di setiap sudut.
Ruang server / data center. Monitoring suhu-kelembaban di banyak rak server dengan satu kabel utama yang ditarik panjang, terhubung ke sistem alarm atau SCADA.
Pabrik dan gudang industri. Dipasang langsung ke PLC existing tanpa harus membangun infrastruktur jaringan baru — tinggal sambung ke bus Modbus yang sudah ada.
Sistem HVAC building automation. Cocok diintegrasikan dengan BMS (Building Management System) yang umumnya sudah berbasis Modbus.
Buat hobbyist atau pelajar yang baru belajar IoT, sensor ini juga cocok jadi pintu masuk belajar protokol Modbus secara langsung — skill yang sangat dicari di dunia kerja otomasi industri.
Cara Membaca Data Modbus dari SHT30 RS485
Sebelum masuk ke kode, ada baiknya kamu paham dulu struktur frame Modbus RTU-nya. Ini bukan cuma teori — paham struktur ini bikin kamu bisa debug sendiri kalau suatu saat pembacaan data error atau tidak sesuai harapan.
Catatan: detail register dan function code berikut mengacu pada datasheet umum modul sensor suhu-kelembaban RS485 Modbus RTU. Beberapa varian/merk bisa punya alamat register sedikit berbeda, jadi tetap cek datasheet resmi dari produk yang kamu beli sebagai referensi utama.
Struktur Frame Modbus RTU
Setiap komunikasi Modbus RTU terdiri dari frame permintaan (query) dari master dan frame balasan (response) dari slave (sensor). Sensor ini hanya menggunakan dua function code:
- 0x03 — Read Holding Registers, untuk membaca data (suhu, kelembaban, dst.)
- 0x06 — Write Single Register, untuk menulis/mengubah satu register (alamat, baud rate, kalibrasi, dst.)
Struktur frame query (dari master ke sensor):
| Alamat Sensor | Function Code | Alamat Register Awal | Jumlah Register | CRC Low | CRC High |
|---|---|---|---|---|---|
| 1 byte | 1 byte | 2 byte | 2 byte | 1 byte | 1 byte |
Struktur frame response (dari sensor ke master):
| Alamat Sensor | Function Code | Jumlah Byte Data | Data Register 1 | Data Register 2 | … Data Register N | CRC (2 byte) |
|---|---|---|---|---|---|---|
| 1 byte | 1 byte | 1 byte | 2 byte | 2 byte | … | 2 byte |
CRC di sini adalah CRC-16 Modbus, dua byte checksum yang otomatis dihitung library Modbus (pymodbus, ModbusMaster, dll) — kamu nggak perlu hitung manual kecuali sedang membangun parser dari nol.
Tabel Register Lengkap
| Alamat Register (Hex) | Alamat PLC/SCADA | Data | Akses |
|---|---|---|---|
| 0x0000 | 40001 | Suhu | Read only |
| 0x0001 | 40002 | Kelembaban | Read only |
| 0x0002 | 40003 | Titik embun (dew point) | Read only |
Contoh 1: Baca Suhu & Kelembaban (Presisi 1 Desimal)
Misal kita mau baca suhu dan kelembaban dari sensor dengan alamat 0x01, format presisi 1 angka di belakang koma (nilai dibagi 10).
Query (hex): 01 03 00 00 00 02 C4 0B → alamat 0x01, function 0x03, mulai dari register 0x0000, baca 2 register, lalu 2 byte CRC.
Response (hex): 01 03 04 01 0C 02 FF 7A EC → jumlah byte data = 4 (2 register), nilai suhu = 01 0C, nilai kelembaban = 02 FF.
Cara hitungnya:
- Suhu: 01 0C hex = 268 desimal → 268 / 10 = 26.8°C
- Kelembaban: 02 FF hex = 767 desimal → 767 / 10 = 76.7% RH
Kalau kamu cuma butuh suhu saja, tinggal minta 1 register: query 01 03 00 00 00 01 84 0A akan membalas 01 03 02 01 0C 38 EC — hasilnya tetap 26.8°C, tapi response lebih ringkas.
Contoh 2: Baca Suhu, Kelembaban & Dew Point (Presisi 2 Desimal)
Beberapa varian sensor mendukung mode presisi lebih tinggi (2 desimal, nilai dibagi 100) dan sekaligus mengembalikan titik embun. Caranya tinggal minta 3 register sekaligus mulai dari 0x0000:
Query (hex): 01 03 00 00 00 03 05 CB
Response (hex): 01 03 06 09 14 17 65 05 DC ... (diikuti 2 byte CRC)
- Suhu: 09 14 hex = 2324 → 2324 / 100 = 23.24°C
- Kelembaban: 17 65 hex = 5989 → 5989 / 100 = 59.89% RH
- Dew point: 05 DC hex = 1500 → 1500 / 100 = 15.00°C
Jadi penting dicek dulu: sensor kamu lagi di mode presisi 1 desimal atau 2 desimal, karena rumus pembagiannya beda (÷10 vs ÷100). Mode presisi ini biasanya ditentukan dari konfigurasi/firmware sensor — cek datasheet produkmu untuk memastikan.
Mencari Alamat Sensor yang Belum Diketahui
Masalah umum kalau kamu beli sensor second atau lupa alamat yang pernah di-set: kamu bisa query alamat memakai broadcast address 0xFE, tanpa perlu tahu alamat aktualnya dulu.
Query (hex): FE 03 00 04 00 01 D1 C4 → broadcast ke alamat 0xFE, baca register alamat device di 0x0004.
Response (hex): FE 03 02 00 01 6D 90 → alamat sensor saat ini = 00 01 = 0x01.
Trik ini sangat membantu di lapangan, terutama saat instalasi banyak sensor dan kamu nggak mau repot reset manual satu-satu.
Mengubah Alamat Sensor
Kalau kamu mau pasang banyak sensor dalam satu bus RS485, masing-masing harus punya alamat unik. Gunakan function code 0x06 untuk menulis alamat baru ke register 0x0004.
Contoh: ubah alamat dari 0x01 menjadi 0x02.
Query (hex): 01 06 00 04 00 02 49 CA
Sensor akan membalas dengan frame yang sama persis sebagai konfirmasi bahwa perintah berhasil dieksekusi.
Mengubah Baud Rate
Baud rate disimpan di register 0x0005, dan nilainya ditulis langsung sebagai angka baud rate-nya (bukan kode khusus). Contoh mengubah baud rate ke beberapa nilai umum:
| Baud Rate | Query (hex) |
|---|---|
| 4800 | 01 06 00 05 12 C0 95 3B |
| 9600 | 01 06 00 05 25 80 B2 FB |
| 19200 | 01 06 00 05 4B 00 AF 3B |
Perhatikan: 0x12C0 = 4800, 0x2580 = 9600, 0x4B00 = 19200 — jadi nilai register memang representasi langsung dari baud rate dalam desimal, dikonversi ke hex.
⚠️ Setelah baud rate diubah, kamu harus menyesuaikan setting baud rate di sisi master (Python/Arduino) juga, kalau tidak komunikasi akan putus total.
Kalibrasi Presisi Suhu & Kelembaban
Kalau hasil pembacaan sensor sedikit menyimpang dari alat ukur referensi, kamu bisa memberi nilai offset/koreksi. Tapi sebelum itu, register kalibrasi terkunci password — harus dibuka dulu dengan dua password berurutan:
Buka kunci dengan password 1234: 01 06 00 09 04 D2 DB 55
Buka kunci dengan password 5678: 01 06 00 0A 16 2E 27 B4
Setelah terbuka, kamu bisa menulis nilai offset. Contoh: koreksi suhu -0.5°C (nilai 0xFFFB = -5 dalam format two’s complement, sesuai presisi 1 desimal):
Query (hex): 01 06 00 0C FF FB 49 BA
Dan koreksi kelembaban +2% RH (nilai 0x0014 = 20 desimal, dibagi 10 = 2.0):
Query (hex): 01 06 00 18 00 14 ... (byte CRC menyesuaikan, hitung otomatis lewat library Modbus)
Fitur kalibrasi ini berguna banget untuk aplikasi yang butuh akurasi terjaga jangka panjang, misalnya saat sensor sudah dipakai bertahun-tahun dan mulai ada drift kecil dibanding kondisi awal kalibrasi fabrik.
Contoh Kode Python (pymodbus)
Gunakan library pymodbus versi 3.x:
pip install pymodbus pyserialfrom pymodbus.client import ModbusSerialClient
# Konfigurasi koneksi RS485 ke USB-to-RS485 converter
client = ModbusSerialClient(
port="/dev/ttyUSB0", # ganti sesuai port di sistemmu (Windows: COM3, dst)
baudrate=9600,
parity="N",
stopbits=1,
bytesize=8,
timeout=1
)
SLAVE_ADDRESS = 1 # alamat sensor, default biasanya 1
if client.connect():
# Baca 2 register sekaligus: suhu (0x0000) dan kelembaban (0x0001)
response = client.read_holding_registers(
address=0x0000, count=2, slave=SLAVE_ADDRESS
)
if not response.isError():
suhu = response.registers[0] / 10
kelembaban = response.registers[1] / 10
print(f"Suhu: {suhu} °C, Kelembaban: {kelembaban} % RH")
else:
print("Gagal membaca data dari sensor")
client.close()
else:
print("Gagal terhubung ke sensor")Logika utamanya ada di read_holding_registers() — kita minta dua register sekaligus (suhu dan kelembaban) dalam satu request, lalu hasilnya dibagi 10 sesuai format data sensor.
Contoh Kode Arduino (Library ModbusMaster) — Konverter Waveshare TTL to RS485
Kalau kamu pakai modul Waveshare TTL to RS485 (atau modul sejenis yang sudah punya automatic flow control), kabarnya baik: kamu tidak perlu mengatur pin DE/RE secara manual lewat kode. Modul ini punya sirkuit deteksi arah otomatis, jadi cukup sambungkan TX/RX biasa seperti komunikasi serial normal.
Wiring:
| Arduino | Modul Waveshare TTL-RS485 |
|---|---|
| 5V (atau 3.3V, cek spesifikasi modul) | VCC |
| GND | GND |
| TX (mis. pin 10 via SoftwareSerial) | RXD |
| RX (mis. pin 11 via SoftwareSerial) | TXD |
Sisi RS485 (A/B) dari modul itu yang disambungkan ke sensor (A ke A, B ke B), bukan ke Arduino.
Catatan: kalau Arduino Uno/Nano, sebaiknya pakai SoftwareSerial di pin lain (bukan pin 0/1) supaya port serial bawaan tetap bebas untuk debugging lewat Serial Monitor. Kalau pakai ESP32, bisa manfaatkan Serial1 atau Serial2 (hardware serial tambahan) tanpa perlu SoftwareSerial.
#include <ModbusMaster.h>
#include <SoftwareSerial.h>
// Pin SoftwareSerial ke modul Waveshare TTL-RS485 (tanpa pin DE/RE)
#define RS485_RX_PIN 10 // ke TXD modul
#define RS485_TX_PIN 11 // ke RXD modul
SoftwareSerial rs485Serial(RS485_RX_PIN, RS485_TX_PIN);
ModbusMaster node;
void setup() {
Serial.begin(9600); // untuk Serial Monitor (debug)
rs485Serial.begin(9600); // baud rate harus sama dengan setting sensor
node.begin(1, rs485Serial); // alamat slave = 1
// Tidak perlu node.preTransmission() / node.postTransmission()
// karena modul Waveshare sudah auto-switch arah TX/RX sendiri
}
void loop() {
// Baca 2 holding register mulai dari alamat 0x0000 (suhu & kelembaban)
uint8_t result = node.readHoldingRegisters(0x0000, 2);
if (result == node.ku8MBSuccess) {
float suhu = node.getResponseBuffer(0) / 10.0;
float kelembaban = node.getResponseBuffer(1) / 10.0;
Serial.print("Suhu: ");
Serial.print(suhu);
Serial.print(" °C, Kelembaban: ");
Serial.print(kelembaban);
Serial.println(" %RH");
} else {
Serial.print("Gagal membaca sensor, kode error: ");
Serial.println(result);
}
delay(2000);
}Bedanya dengan modul berbasis MAX485 manual: di sini kita langsung pakai rs485Serial sebagai jalur komunikasi tanpa perlu fungsi preTransmission()/postTransmission() sama sekali, karena nggak ada pin DE/RE yang harus dikontrol — modul Waveshare menangani peralihan arah TX/RX secara otomatis berdasarkan deteksi sinyal di sirkuitnya.
Kalau kamu pakai ESP32 dan mau lebih stabil (SoftwareSerial kadang kurang reliable di baud rate tinggi), ganti bagian inisialisasi serial dengan hardware serial:
// Khusus ESP32, ganti SoftwareSerial dengan Serial2
HardwareSerial rs485Serial(2); // gunakan UART2
void setup() {
Serial.begin(115200);
rs485Serial.begin(9600, SERIAL_8N1, 16, 17); // RX=16, TX=17 (sesuaikan pin)
node.begin(1, rs485Serial);
}Logika loop()-nya tetap sama seperti contoh sebelumnya.
Perbandingan dengan Sensor Sejenis
| Aspek | SHT30 RS485 | SHT20 | DHT22 |
|---|---|---|---|
| Komunikasi | RS485 Modbus RTU | I2C | Digital single-wire |
| Jarak maksimal | ±1.200 m | beberapa cm–meter | ±20 m (rentan noise) |
| Akurasi suhu | ±0.2°C | ±0.3°C | ±0.5°C |
| Akurasi kelembaban | ±2% RH | ±3% RH | ±2–5% RH |
| Multi-drop sensor | Ya, hingga 247 unit | Terbatas alamat I2C | Tidak |
| Cocok untuk industri | Sangat cocok | Kurang (jarak pendek) | Tidak direkomendasikan |
| Harga relatif | Lebih mahal | Sedang | Murah |
Untuk project hobi skala kecil di meja kerja, DHT22 atau SHT20 sudah cukup dan lebih murah. Tapi begitu kebutuhanmu menyentuh jarak jauh, banyak titik sensor, atau lingkungan dengan banyak interferensi elektrik, SHT30 RS485 jelas pilihan yang lebih masuk akal — meski harus keluar budget lebih.
Kesimpulan dan Rekomendasi
Sensor SHT30 RS485 Modbus RTU ini layak dipertimbangkan kalau kamu butuh monitoring suhu-kelembaban yang andal, jangkauan jauh, dan mudah diskalakan. Kombinasi chip SHT30 yang sudah teruji akurasinya dengan protokol Modbus yang jadi standar industri membuatnya cocok dipakai mulai dari project IoT skala menengah sampai integrasi penuh ke sistem SCADA/PLC.
Kalau kamu masih di tahap belajar atau cuma butuh monitoring satu-dua titik di jarak dekat, DHT22 tetap pilihan ekonomis. Tapi kalau target kamu adalah sistem monitoring profesional — greenhouse besar, ruang server, atau otomasi pabrik — investasi di sensor RS485 Modbus seperti ini akan jauh lebih sepadan dalam jangka panjang, baik dari sisi stabilitas data maupun kemudahan integrasi ke infrastruktur industri yang sudah ada.
Baca Juga:
— Training IoT Profesional: Pelatihan Praktis & Bersertifikat
— Training ESP32 Berbasis IoT: Pelatihan Praktis Pemula hingga Mahir



