Menampilkan data Suhu dan mengatur Setpoin TK4S dari Dashboard Adafruit IO
Berikut penampilan dari kontroler suhu TK4S-T4CN:
link: Autonics
Berikut langkah-langkah untuk menampilkan data suhu Thermocouple ke Dashboard Adafruit IO:
1. Buat pengawatan berikut ini:
Gambar 1. Pengawatan Kontroler suhu TK4S Autonics dengan sensor Termokople dan Modul Konverter USB to RS485
2. Seperti terlihat pada Gambar 1 di atas, Kontroler suhu TK4S dilengkapi dengan sambungan RS-485, yang memungkinkan untuk dihubungkan dengan protokol Modbus RTU. Untuk bisa membaca suhu dan mengatur setpoint melalui protokol Modbus, gunakan bantuan software Modbus Poll. Dari manual datasheet Kontroler suhu TK4S, diketahui bahwa nilai Suhu ditempatkan di alamat 31000 (basis software - indeks mulai dari 0), atau alamat 31001 (basis hardware), sedangkan nilai Setpoin, ditempatkan di alamat 40057 (basis software), atau alamat 40058 (basis hardware). Di samping itu, untuk seting komunikasi serial, diperlukan pengaturan sebagai berikut: baud rate = 9600, data bit = 8, tanpa parity bit dan stop bit = 2.
3. Untuk mengimplementasikan pengaturan di atas, buka software Modbus Poll, dan ikuti langkah-langkah sesuai gambar berikut ini:
Gambar 2. Atur tipe memori data untuk pembacaan nilai suhu di TK4S, yaitu di Input Register (alamat awal 3x) dengan urutan indeks ke 1000 (basis software)
Gambar 3. Atur tipe memori data untuk pengaturan nilai setpoin di TK4S, yaitu di Holding Register (4x) dengan urutan indeks ke 57 (basis software)

Gambar 4. Buka Device Manager, lihat Port COM yang digunakan USB to RS485, isi Port COM tersebut di jendela Connection Setup, isi seting komunikasi: 9600, 8 bit data, no parity dan 2 stop bit
4. Hidupkan kontroler TK4S. Hubungkan USB RS485 ke port komputer. Seharusnya di Modbus Poll akan muncul data seperti gambar berikut ini:
Gambar 5. Perhatikan bahwa tampilan suhu dan setpoin di TK4S Autonics adalah sama seperti nilai suhu dan setpoin di Modbus Poll
5. Setelah data nilai suhu dan setpoin dari Autonics TK4S dapat dibaca dan ditampilkan di Modbus Poll, dan untuk nilai setpoin, tidak hanya dibaca, tetapi juga bisa diubah nilainya dari Modbus Poll, maka langkah berikutnya, membuat NodeMCU menggantikan Modbus Poll dan menghubungkannya secara RS-485 dengan Autonics TK4S. Agar bisa terhubung secara RS-485, tambahkan sebuah modul HW-0519 yang akan menghubungkan kaki TX-RX ke jalur AB RS-485 dan juga sebaliknya. Lebih jelasnya, lihat rangkaian berikut:
Gambar 6. Hubungkan kaki D1 dan D2 NodeMCU ke TXD dan RXD HW-0519, dan kaki AB H-0519 ke kaki 15 dan 16 Autonics TK4S
6. Berikutnya, agar bisa berkomunikasi dengan Modbus RTU, tambahkan library modbus-esp8266 pada program, dan upload program berikut ini ke NodeMCU ESP8266:
- #include <ModbusRTU.h>
- #include <SoftwareSerial.h>
- SoftwareSerial S(D1, D2);
- ModbusRTU mb;
- int a = 0;
- int b = 0 ;
- boolean case1 = false;
- boolean case2 = false;
- uint16_t Ireg[2];
- unsigned long skr = 0;
- void setup() {
- Serial.begin(115200);
- S.begin(9600, SWSERIAL_8N2);
- mb.begin(&S);
- mb.master();
- mb.readIreg(1, 1000, Ireg, 1);
- while (mb.slave()) {
- mb.task();
- delay(10);
- }
- delay(1000);
- }
- void loop() {
- if (millis() - skr > 1000) {
- skr = millis();
- a = a + 1;
- if (a > 2) a = 1;
- switch (a) {
- case 1:
- mb.readIreg(1, 1000, Ireg, 1);
- case1 = true;
- break;
- case 2:
- mb.writeHreg(1, 57, b);
- case2 = true;
- break;
- }
- }
- while (mb.slave()) {
- mb.task();
- delay(10);
- }
- if (case1) {
- Serial.print(Ireg[0]);
- Serial.print(',');
- case1 = false;
- }
- if (case2) {
- b = b + 1;
- if (b > 50) b = 0;
- Serial.println(b);
- case2 = false;
- }
- }
Keterangan program:
- Program di atas membutuhkan tambahan library modbus-esp8266, yang dapat diunduh di: https://github.com/emelianov/modbus-esp8266/archive/refs/heads/master.zip
- Komunikasi data Modbus dilakukan pada kaki D1 dan D2, yang terhubung dengan Modul RS-485 HW-0519, yang diprogram sebagai kaki port serial secara virtual dengan software serial, dengan baud rate 9600, 8 data bit, no parity dan 2 stop bit.
- Program di atas secara bergantian setiap detik akan membaca data suhu di alamat 31000 (basis software) dan menulis data setpoin di alamat 40057 (basis software).
- Pembacaan data suhu dan penulisan data setpoin ditampilkan di Serial Monitor.
- Untuk penulisan data setpoin, data berupa angka yang bertambah satu setiap 2 detik sekali, dan ketika mencapai angka lebih besar dari 50, akan kembali ke angka 0.
7. Setelah program di atas berhasil diupload ke NodeMCU, buka Serial Monitor, dengan baudrate 9600. Seharusnya data Suhu dan nilai Setpoin akan muncul di Serial Monitor, yang mana nilainya sama dengan nilai yang ada di Display Autonics TK4S.
8. Berikutnya diinginkan data Suhu dan nilai Setpoin ditampilkan di Dashboard Adafruit IO. Untuk bisa menampilkan data di Dashboard Adafruit IO, buat akun Adafruit IO di halaman ini: https://accounts.adafruit.com/users/sign_up
9. Apabila akun Adafruit sudah berhasil dibuat, hal penting yang harus diketahui adalah AIO Key, yang dapat dibuka dengan menekan tombol bergambar kunci di dalam lingkaran berwarna kuning. Klik tombol tersebut.
Gambar 6. Contoh tampilan AIO Key yang berisi username dan password, yang nantinya diperlukan dalam pembuatan aplikasi
10. Berikutnya, klik Tab Feeds untuk membuat 2 buah feeds, beri nama Suhu dan Setpoin.
Gambar 7. Klik Tab Feeds, pilih New Feed, beri nama Setpoin dan buat lagi dengan nama Suhu
11. Berikutnya, setelah 2 buah feeds berhasil dibuat, langkah berikutnya buat program NodeMCU berikut ini untuk bisa berkomunikasi dengan Adafruit IO melalui protokol komunikasi MQTT.
- #include <ESP8266WiFi.h>
- #include "Adafruit_MQTT.h"
- #include "Adafruit_MQTT_Client.h"
- #define WLAN_SSID "********" //silahkan bisa diganti
- #define WLAN_PASS "********" //silahkan bisa diganti
- #define AIO_SERVER "io.adafruit.com"
- #define AIO_SERVERPORT 1883
- #define AIO_USERNAME "********" //silahkan bisa diganti
- #define AIO_KEY "*********************************"
- WiFiClient client;
- Adafruit_MQTT_Client mqtt(&client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);
- Adafruit_MQTT_Publish suhu = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/suhu");
- Adafruit_MQTT_Subscribe setpoin = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/feeds/setpoin");
- void MQTT_connect();
- #include <ModbusRTU.h>
- #include <SoftwareSerial.h>
- SoftwareSerial S(D1, D2);
- ModbusRTU mb;
- int a = 0;
- uint16_t sp = 0;
- boolean case1 = false;
- boolean case2 = false;
- uint16_t Ireg[2];
- unsigned long skr = 0;
- void setup() {
- Serial.begin(115200);
- S.begin(9600, SWSERIAL_8N2);
- mb.begin(&S);
- mb.master();
- mb.readIreg(1, 1000, Ireg, 1);
- while (mb.slave()) {
- mb.task();
- delay(10);
- }
- delay(1000);
- Serial.println(F("Adafruit MQTT demo"));
- Serial.println(); Serial.println();
- Serial.print("Connecting to ");
- Serial.println(WLAN_SSID);
- WiFi.begin(WLAN_SSID, WLAN_PASS);
- while (WiFi.status() != WL_CONNECTED) {
- delay(500);
- Serial.print(".");
- }
- Serial.println();
- Serial.println("WiFi connected");
- Serial.println("IP address: "); Serial.println(WiFi.localIP());
- mqtt.subscribe(&setpoin);
- }
- void loop() {
- MQTT_connect();
- Adafruit_MQTT_Subscribe *subscription;
- while ((subscription = mqtt.readSubscription(5000))) {
- if (subscription == &setpoin) {
- sp = atoi((char *)setpoin.lastread);
- }
- }
- if (millis() - skr > 2000) {
- skr = millis();
- a = a + 1;
- if (a > 2) a = 1;
- switch (a) {
- case 1:
- mb.readIreg(1, 1000, Ireg, 1);
- case1 = true;
- break;
- case 2:
- mb.writeHreg(1, 57, sp);
- case2 = true;
- break;
- }
- }
- while (mb.slave()) {
- mb.task();
- delay(10);
- }
- if (case1) {
- suhu.publish(Ireg[0]);
- Serial.print(Ireg[0]);
- Serial.print(',');
- case1 = false;
- }
- if (case2) {
- Serial.println(sp);
- case2 = false;
- }
- }
- void MQTT_connect() {
- int8_t ret;
- if (mqtt.connected()) {
- return;
- }
- Serial.print("Connecting to MQTT... ");
- uint8_t retries = 3;
- while ((ret = mqtt.connect()) != 0) {
- Serial.println(mqtt.connectErrorString(ret));
- Serial.println("Retrying MQTT connection in 5 seconds...");
- mqtt.disconnect();
- delay(5000); // wait 5 seconds
- retries--;
- if (retries == 0) {
- while (1);
- }
- }
- Serial.println("MQTT Connected!");
- }
Keterangan program:
- Ada 4 isian di program di atas yang perlu diisi dengan yang kode sesuai, yaitu nama Wi-Fi, password Wi-Fi, username AIO Key dan password AIO Key.
- Agar layanan MQTT Adafruit IO tidak terputus akibat terlalu tingginya frekuensi pengiriman data, maka buat angka interval pengiriman data yang lebih besar dari 2 detik (lihat baris 59).
12. Upload dan kemudian buka Serial Monitor, seharusnya muncul data suhu di Serial Monitor.
13. Perhatikan tampilan data feeds suhu di Adafruit IO, seharusnya menampilkan data suhu yang sama dengan yang ada di kontroler TK4S
14. Berikutnya, di Tab Dashboard, Ambil Gauge di Dashboard, dan hubungkan feed nya dengan data feed suhu.
Lebih jelasnya, lihat video berikut ini:
Video koneksi Autonics TK4S dengan Adafruit IO, dengan data suhu ditampilkan dalam bentuk Gauge di Dashboard Adafruit IO, serta slider yang dapat digunakan untuk mengubah nilai Setpoin.








No comments:
Post a Comment