Setelah berhasil memposisikan arduino menjadi modbus master, kita akan butuh sedikit usaha lagi untuk melengkapi piramida IOT nya. Untuk itu perlu penggabungan dari beberapa tulisan sebelumnya yaitu dasar MQTT pada ESP8266 disini dengan tulisan seri modbus part 3 disini. Ada dua mode mqtt yang ingin saya gunakan yaitu mode request-reply dan mode periodic. Perhatikan rangkaian dasar yang telah kita bahas sebelumnya.
Skematik arduino mqtt bridge |
Dengan asumsi pembaca telah memahami pembahasan sebelumnya, mode request-reply memiliki 5 type perintah yang akan dikirim ke perangkat modbus dan jika di tuliskan dalam script seperti berikut :
if (Serial.available() > 0) { //perintah dari serial port monitor/putty
// read the incoming byte:
incomingByte = Serial.read();
if (incomingByte == '1') { //toggle led mati hidup
if (!led) mod.write(ledOn, sizeof(ledOn)); //modbus led on
else mod.write(ledOff, sizeof(ledOff)); //modbus led off
led=!led;
}
else if (incomingByte == '2') mod.write(tombol, sizeof(tombol)); //cek tombol
else if (incomingByte == '3') mod.write(humitemp, sizeof(humitemp)); //baca dht11
else if (incomingByte == '4') mod.write(aisi, sizeof(aisi)); //baca holding register
}
Pada script diatas merupakan perintah atau request yang dikirimkan oleh Terminal Serial semisal putty atau serial monitor sketch arduino dimana terjemahan perintah nya seperti berikut :
- '1' : Togle led On atau Off
- '2' : Baca penekanan tombol
- '3' : Baca sensor DHT11
- '4' : Baca Holding Register
Kita dapat merubah request dari terminal serial menjadi perintah yg dikirim melalui SUBSCRIBE TOPIK MQTT, jadi esp8266 akan menunggu apakah ada request dari server/broker yang masuk dan membandingkan isi payloadnya sesuai script berikut :
void mqtt_callback(char* topic, byte* payload, unsigned int length) {
Serial.print("Message arrived in topic: ");
Serial.println(topic);
Serial.print("Message:");
String message;
for (int i = 0; i < length; i++) {
message = message + (char)payload[i]; //Convert *byte to String
}
Serial.print(message);
if(message == "1"){ //bandingkan payload yang masuk dan kirim modbus
if (!led) mod.write(ledOn, sizeof(ledOn));
else mod.write(ledOff, sizeof(ledOff));
led=!led;
}
if(message == "2")mod.write(tombol, sizeof(tombol));
if(message == "3")mod.write(humitemp, sizeof(humitemp));
if(message == "4")mod.write(aisi, sizeof(aisi));
}
Untuk memahaminya tidaklah begitu sulit jika anda rajin membaca blog ini dari seri tulisan mengenai mqtt yang sering saya bahas sebelumnya.
Setelah modbus me-reply request maka esp8266 akan membandingkan reply modbus dan selanjutnya melakukan PUBLISH MQTT ke topik yang telah ditentukan ke broker mqtt. Anda juga bisa menggunakan Smartphone dengan aplikasi IOT MQTT PANEL untuk menerima data yang di PUBLISH oleh bridge mqtt esp8266 dan tentunya juga bisa mengirimkan perintah/request ke modbus.
Untuk mode periodic cukup menambahkan timer pada loop utama yang akan mengirimkan perintah modbus untuk pengecekan tombol dan pembacaan DHT11 setiap jeda waktu tertentu. Selengkapnya ikuti penjelasan pada video berikut ini :
0 komentar:
Posting Komentar