Komunikasi Modbus RTU Menggunakan Raspberry Pi sebagai Master dan Sensor Suhu dan Kelembaban sebagai Slave

Tujuan
- Memahami konsep komunikasi Modbus RTU dengan Raspberry Pi sebagai master dan sensor sebagai slave.
- Mampu mengintegrasikan sensor SHT20 dengan Raspberry Pi melalui protokol Modbus RTU.
- Menggunakan USB to RS485 untuk komunikasi antara master dan slave.
Alat dan Bahan
- Hardware:
- Raspberry Pi (dengan OS Raspbian terinstal).
- USB to RS485 Converter.
- Sensor SHT20 (Modbus RTU ready).
- Kabel RS485.
- Breadboard dan jumper kabel (opsional).
- Software:
- Python 3.
- Library pymodbus untuk Python.
- Terminal emulator (misalnya, minicom atau Putty).
- Datasheet sensor SHT20 untuk konfigurasi register.
Dasar Teori
- Modbus RTU: Protokol komunikasi serial berbasis master-slave. Master (Raspberry Pi) akan mengirim permintaan data dan slave (SHT20) akan merespons.
- Sensor SHT20: Sensor ini mendukung protokol Modbus RTU untuk membaca suhu dan kelembapan melalui register tertentu.
- RS485: Menggunakan dua kabel (A+ dan B-) untuk komunikasi serial jarak jauh dengan daya tahan terhadap gangguan.
Langkah Kerja

- Persiapan Lingkungan
- Hubungkan USB to RS485 ke Raspberry Pi.
- Sambungkan kabel RS485 ke sensor SHT20 dengan pin A(+) dan B(-).
- Pastikan Raspberry Pi dinyalakan dan login ke terminal.
- Instalasi Library Python
- Update dan install Python serta pip:
sudo apt update
sudo apt install python3 python3-pip -y
-
- Install library pymodbus:
pip3 install pymodbus
- Konfigurasi Port Serial
- Pastikan USB to RS485 terdeteksi:
ls /dev/ttyUSB*
Catat nama port (contoh: /dev/ttyUSB0).
-
- Tambahkan pengguna ke grup dialout:
sudo usermod -a -G dialout $USER
- Konfigurasi Sensor SHT20
- Pastikan ID slave, baudrate, parity, dan stopbits pada sensor sudah sesuai (lihat datasheet sensor).
- Konfigurasikan register sesuai tabel berikut:
- Address Suhu: Misalnya, 0x0001.
- Address Kelembapan: Misalnya, 0x0002.
- Program Python untuk Master Modbus RTU
- Buat file Python:
nano modbus_sht20.py
-
- Masukkan kode berikut:
from pymodbus.client.sync import ModbusSerialClient as ModbusClient
import time # Untuk membuat delay di antara loop
# Konfigurasi client
client = ModbusClient(
method='rtu',
port='/dev/ttyUSB0', # Ubah sesuai port Anda
baudrate=9600,
stopbits=1,
bytesize=8,
parity='N',
timeout=1
)
if client.connect():
print("Koneksi ke sensor SHT20 berhasil!")
else:
print("Gagal menghubungkan ke sensor SHT20.")
exit(1) # Keluar dari program jika koneksi gagal
try:
while True: # Loop terus-menerus
# Baca suhu dari Input Register
suhu = client.read_input_registers(address=1, count=1, unit=1)
if not suhu.isError():
print("Suhu (raw data):", suhu.registers[0])
print("Suhu (°C):", suhu.registers[0] / 10.0) # Asumsi scaling 10x
else:
print("Error membaca suhu:", suhu)
# Baca kelembapan dari Input Register
kelembapan = client.read_input_registers(address=2, count=1, unit=1)
if not kelembapan.isError():
print("Kelembapan (raw data):", kelembapan.registers[0])
print("Kelembapan (%):", kelembapan.registers[0] / 10.0) # Asumsi scaling 10x
else:
print("Error membaca kelembapan:", kelembapan)
# Tunggu selama 2 detik sebelum iterasi berikutnya
time.sleep(2)
except KeyboardInterrupt:
print("\nProgram dihentikan oleh pengguna.")
except Exception as e:
print("Error:", str(e))
finally:
client.close()
print("Koneksi ke sensor ditutup.")
Simpan file dan keluar.
- Jalankan Program
- Jalankan program:
python3 modbus_sht20.py
-
- Periksa apakah data suhu dan kelembapan terbaca dengan benar.
- Troubleshooting
- Pastikan baudrate, parity, stopbits, dan ID unit pada Raspberry Pi sama dengan konfigurasi sensor SHT20.
- Gunakan alat monitoring seperti Modbus Poll untuk memverifikasi komunikasi.
Tugas
- Modifikasi program untuk membaca data dari beberapa register sekaligus.
- Logging data suhu dan kelembapan ke file CSV secara berkala.
- Tambahkan visualisasi data menggunakan library seperti Matplotlib.
Kesimpulan
Jelaskan bagaimana Raspberry Pi mengirimkan query Modbus RTU dan menerima data suhu serta kelembapan dari sensor SHT20.




