6. Koneksi dengan IoT MQTT Panel

Mengapa IoT MQTT Panel?

IoT MQTT Panel adalah aplikasi atau antarmuka berbasis MQTT (Message Queuing Telemetry Transport) yang dirancang untuk mengelola perangkat IoT secara terpusat. Alasan memilihnya antara lain:
  1. Kemudahan Penggunaan: memiliki antarmuka grafis (GUI) yang intuitif untuk memantau dan mengontrol perangkat IoT tanpa perlu pemrograman.
  2. Integrasi Cepat: Mendukung integrasi langsung dengan sensor, actuator, atau perangkat IoT populer (ESP32, Raspberry Pi, dll.).
  3. Efisiensi Protokol MQTT: Cocok untuk jaringan dengan bandwidth rendah atau latency tinggi karena sifatnya yang ringan.
  4. Real-Time Monitoring: Memungkinkan visualisasi data secara real-time (grafik, notifikasi, dashboard).
  5. Skema Keamanan: Mendukung enkripsi (TLS/SSL) dan autentikasi (username/password, client certificates).

Berikut ini beberapa contoh pemanfaatan aplikasinya: 

  1. Membuat 12 Tombol Counter yang nilainya tertampil di IoT MQTT Panel
  2. Menghubungkan PLC Schneider (simulasi), EasyBuilder Pro dan IoT MQTT Panel
Berikut ini uraiannya masing-masing:

=================================================================

1. Membuat 12 Tombol Counter yang nilainya tertampil di IoT MQTT Panel

Berikut ini langkah-langkahnya:
1. Buka rangkaian Wokwi ini: https://wokwi.com/projects/428731501874756609

Gambar 1.1 Rangkaian ESP32 dengan 12 Tombol dan LCD I2C

2. Berikut ini catatan kode program ESP32 di atas:
  1. #include <WiFi.h>
  2. #include <PubSubClient.h>
  3. #include <LiquidCrystal_I2C.h>
  4. #define ssid "Wokwi-GUEST"//silahkan diganti dengan ssid yang digunakan
  5. #define pass "" //silahkan diganti dengan password yang digunakan
  6. #define server "broker.emqx.io"
  7. #define port 1883
  8. WiFiClient espClient;
  9. PubSubClient client(espClient);
  10. LiquidCrystal_I2C lcd(0x27, 20, 4);
  11. int count = 0;
  12. int kaki[12] = { 32, 33, 25, 26, 27, 14, 16, 17, 5, 18, 19, 23 };
  13. int a[12] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
  14. int b[12] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
  15. int c[12] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
  16. char d[13] = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l' };
  17. void reconnect() {
  18.   while (!client.connected()) {
  19.     Serial.print("Attempting MQTT connection...");
  20.     String clientId = "ESP8266Client-";
  21.     clientId += String(random(0xffff), HEX);
  22.     if (client.connect(clientId.c_str())) {
  23.       Serial.println("MQTT Connected");
  24.       client.publish("ini/topik/bebas", "0");//silahkan topiknya diganti
  25.     } else {
  26.       Serial.print("failed, rc=");
  27.       Serial.print(client.state());
  28.       Serial.println(" try again in 5 seconds");
  29.       delay(5000);
  30.     }
  31.   }
  32. }
  33. void setup() {
  34.   Serial.begin(115200);
  35.   for (int i = 0; i < 12; i++) {
  36.     pinMode(kaki[i], INPUT_PULLUP);
  37.   }
  38.   Serial.print("Connecting to ");
  39.   Serial.println(ssid);
  40.   WiFi.begin(ssid, pass);
  41.   while (WiFi.status() != WL_CONNECTED) {
  42.     delay(500);
  43.     Serial.print(".");
  44.     if (count > 10) {
  45.       ESP.restart();
  46.     }
  47.     count++;
  48.   }
  49.   Serial.println("WiFi connected");
  50.   Serial.println("IP address: ");
  51.   Serial.println(WiFi.localIP());
  52.   lcd.init();
  53.   lcd.backlight();
  54.   lcd.setCursor(0, 0);
  55.   lcd.print("a:     b:     c:    ");
  56.   lcd.setCursor(0, 1);
  57.   lcd.print("d:     e:     f:    ");
  58.   lcd.setCursor(0, 2);
  59.   lcd.print("g:     h:     i:    ");
  60.   lcd.setCursor(0, 3);
  61.   lcd.print("j:     k:     l:    ");
  62.   client.setServer(server, 1883);
  63.   delay(1000);
  64. }
  65. void loop() {
  66.   if (!client.connected()) {
  67.     reconnect();
  68.   }
  69.   client.loop();
  70.   for (int i = 0; i < 12; i++) {
  71.     a[i] = !digitalRead(kaki[i]);
  72.     delay(10);
  73.     if (a[i] != b[i] && a[i]) {
  74.       c[i]++;
  75.       lcd.setCursor((i % 3) * 7 + 2, i / 3);
  76.       lcd.print(c[i]);
  77.       String data = "{\"" + String(d[i]) + "\":" + String(c[i]) + "}";
  78.       Serial.println(data);
  79.       client.publish("ini/topik/bebas", (char*)data.c_str());
  80.       delay(10);
  81.     }
  82.     b[i] = a[i];
  83.   }
  84. }

Catatan program:
  1. Baris 1-3 untuk menggunakan library Wi-Fi, LCD dan MQTT
  2. Untuk implementasi secara riil, ganti SSID dan Password di baris 4 dan 5, sesuaikan dengan SSID dan Password Hotspot Wi-fi yang digunakan.
  3. Broker MQTT yang digunakan di program ini adalah broker.emqx.io (lihat baris 6).
  4. Variable count di baris 11 untuk me-restart ESP32 apabila koneksi Wi-Fi belum berhasil.
  5. Variable kaki dibuat array untuk memudahkan pengulangan, khususnya untuk penugasan kaki sebagai INPUT_PULLUP dan pembacaan nilainya.
  6. Variabel array a dan b digunakan untuk mendeteksi dan mengetahui mana tombol yang ditekan.
  7. Variabel array c digunakan untuk menampung nilai counter 12 tombol. 
  8. Variabel array d digunakan untuk memberikan tanda atau tag ke 12 nilai counter.
  9. Pembuatan objek untuk Wi-Fi, MQTT dan LCD.
  10. Void reconnect untuk menghubungkan kembali koneksi ke MQTT. Pastikan untuk mengganti topik (baris 24 dan 79), agar tidak diakses oleh pihak lain.
  11. Void setup membuat pengaturan komunikasi serial, penugasan kaki sebagai INPUT_PULLUP, melakukan koneksi ke Wi-Fi, inisialisasi LCD I2C, dan penetapan broker MQTT.
  12. Void loop, mula-mula memastikan koneksi MQTT berjalan, apabila terputus, lakukan koneksi lagi. Setelah itu, membaca apakah ada tombol yang ditekan. Apabila ada tombol yang ditekan, tampilkan mana dari ke-12 tombol tersebut yang ditekan, dengan memberi label a untuk tombol pertama, label b untuk tombol ke-2 dan seterusnya hingga label l untuk tombol ke-12, dan juga nilai counter untuk tombol tersebut dinaikkan atau ditambah 1 angka. Tampilkan data tersebut di Serial Monitor, dan juga di LCD, serta kirim ke broker MQTT dengan format {"label tombol" : nilai counter}, contohnya untuk tombol ke-10 (label j) yang telah ditekan sebanyak 10 kali, maka tampilan datanya: {"j":10}.

3. Jalankan simulasi Wokwi di atas dengan menekan tombol panah (Start the Simulation). Apabila proses kompilasi di Wokwi terlalu lama, rekan-rekan dapat menggunakan cara yang lebih cepat, yaitu dengan menggunakan file hasil kompilasi berikut ini. Unduh file ini: 

4. Setelah terunduh, klik kanan pada halaman kode program, kemudian pilih Command Pallete, kemudian pilih Upload Firmware & Start Simulation, arahkan pada file hasil kompilasi yang telah diunduh di atas (12_counter,ino.elf). Seharusnya simulasi Wokwi akan langsung berjalan. Tekan salah satu tombol dari ke-12 tombol tersebut, maka seharusnya di LCD akan tampil nilai counter pada label yang sesuai dengan tombolnya. Begitu pula di Serial Monitor, akan tampil data dengan format nama label tombol, diberi titik dua, diikuti dengan nilai counter, yang dibungkus dengan kurung kurawal, seperti ditunjukkan gambar berikut ini:

Gambar 1.2 Untuk mempercepat simulasi dijalankan, gunakan cara, klik kanan halaman kode program, pilih Command palette, pilih Upload Firmware & Start Simulation, arahkan ke lokasi file hasil kompilasi 12_counter.ino.elf yang dapat diunduh di link di atas 

5. Sebelum menampilkan data tombol dan jumlah penekanannya di aplikasi IoT MQTT Panel, perlu dipastikan apakah pengiriman data melalui MQTT berhasil, untuk itu gunakan Test Client di link ini:

Gambar 1.3 Buka Test Client di https://mqtt.aarsoftwareserver.com:444/test_client/ untuk memastikan data tombol dan jumlah penekanannya dapat terkirim melalui MQTT

6. Untuk menggunakan layanan di atas, mula-mula ganti nama broker menjadi broker.emqx.io (disesuaikan dengan broker yang digunakan dalam program) dengan cara meng-klik tombol bergambar roda gigi (Configure), kemudian isi di kolom Host: broker.emqx.io, setelah itu tekan tombol Save changes. Kemudian tekan tombol Connect. Maka akan muncul halaman seperti Gambar 1.4 berikut ini. 
7. Isi di kolom topik sesuai dengan topik di baris 24 dan 79 pada program di atas. Kemudian tekan tombol Subscribe. Berikutnya jalankan simulasi Wokwi, lakukan penekanan tombol sembarang, maka seharusnya akan muncul data di kolom Messages seperti Gambar 1.4 berikut ini.

Gambar 1.4 Muncul data di kolom Messages, setelah topik diisi dan di-subscribe, dan simulasi di Wokwi dijalankan

8. Setelah data dapat terkirim, langkah berikutnya, buka aplikasi IoT MQTT Panel, dan lakukan langkah-langkah sesuai urutan gambar berikut ini:

Gambar 1.5(a) Buka aplikasi IoT MQTT Panel di HP, klik pada tombol Setup a Connection, kemudian di halaman Add Connection, isi Connection name dengan nama sembarang, isi Broker Web/IP address dengan nama broker sesuai program, dalam contoh di sini menggunakan broker.emqx.io, (b) Add Dashboard, isi kolom Dashboard name, kemudian tekan tombol Save, tekan tombol Create, (c) Muncul nama sesuai isi di kolom Connection name, klik nama tersebut sehingga muncul daftar panel

Gambar 1.6(a) Di daftar panel, pilih Text Log, (b) isi Panel name : a, isi Topic sesuai program, dalam contoh di sini topiknya: ini/topik/bebas, beri centang pada Show last message only, beri centang pada Payload is JSON Data, isi JsonPath: $.a, beri centang pada Show received timestamp, klik Create, (c) di jendela Dashboard, buat panel a hanya 1/2 screen width

Gambar 1.7(a) Tekan tombol + pada halaman Dashboard untuk menambah objek panel, pilih Text Log,  isi Panel name : b, isi Topic sesuai program, dalam contoh di sini topiknya: ini/topik/bebas, beri centang pada Show last message only, beri centang pada Payload is JSON Data, isi JsonPath: $.b, beri centang pada Show received timestamp, klik Create, (b) Ulangi hal yang sama untuk Panel ketiga, beri nama panel : c, dengan isi JsonPath: $.c, (c) Agar lebih cepat, gunakan Copy panel, buat hingga menjadi sebanyak 12 objek panel, dengan nama a - l, dan susun hingga seperti gambar di atas

Gambar 1.8 Jalankan simulasi di Wokwi, lakukan penekanan tombol, dan perhatikan tampilan di LCD dan di IoT MQTT Panel menunjukkan nilai data yang sama untuk label a, b, c, d, e, f, g, h, i, j, k, l

Gambar 1.9 Tampilan data di IoT MQTT Panel yang menunjukkan data tombol dan jumlah penekanan tombol yang sama seperti yang ditampilkan di LCD I2C (lihat Gambar 1.8)

Agar lebih jelas, video berikut ini menunjukkan langkah-langkah pembuatan di atas:

Video Bagian 1



=========================================================================


2. Menghubungkan PLC Schneider (simulasi), EasyBuilder Pro dan IoT MQTT Panel


Gambar 2.1 PLC Schneider terhubung ke IoT MQTT Panel melalui EasyBuilder Pro 

Berikut ini langkah-langkah pembuatannya:
1. Buka SoMachine atau Machine Expert, dan buat konfigurasi PLC seperti gambar di bawah ini - ambil PLC TM221CE24R dan tambahkan modul analog TM3AM6/G:

Gambar 2.2 Buka software SoMachine, di Tab Configuration, ambil PLC TM221CE24R, dan tambahkan modul TM3AM6/G

2. Atur Type Analog Input %IW1.0, dari Not Used menjadi 0 - 10V, dan ubah nilai Max dari 10000 menjadi 1000, tekan tombol Apply.

Gambar 2.3 Atur Type Analog Input %IW1.0 menjadi 0-10V, dan nilai Max menjadi 1000

3. Atur Type Analog Output %QW1.0 dari Not Used menjadi 0 - 10V, dan ubah nilai Max dari 10000 menjadi 1000.

Gambar 2.4 Atur Type Analog Output %QW1.0 menjadi 0-10V, dan nilai Max menjadi 1000

4. Buka Command Prompt, ketik ipconfig, copy IPv4 Address, dan isikan ke IP address di ETH1, kemudian beri centang pada keempat opsi Security Parameters.

Gambar 2.5 Atur IP Address di ETH1 sesuai dengan IPv4 Address komputer di Command Prompt

5. Di Tab Programming, buat program seperti gambar berikut ini:



Gambar 2.6 Di Tab Programming, buat program seperti gambar di atas

Keterangan: 
  1. %M0 dan %M1 adalah alamat memori internal untuk data digital (1 bit), yang juga merupakan alamat Modbus untuk Coil indeks 0 dan indeks 1. 
  2. %MW0 dan %MW1 adalah alamat memori internal untuk data analog (16 bit), yang juga merupakan alamat Modbus untuk Holding Register indeks 0 dan indeks 1. 
  3. %I0.0 adalah alamat untuk kaki input digital, sedangkan %Q0.0 adalah alamat untuk kaki output digital.
  4. %IW1.0 adalah alamat untuk kaki input analog di Modul tambahan (TM3AM6/G), sedangkan %QW1.0 adalah alamat untuk kaki output analog di Modul tambahan.
6. Di Tab Commissioning, tekan tombol Launch Simulator, kemudian tekan tombol Start Controller:

Gambar 2.7 Di Tab Commissioning, tekan tombol Launch Simulator, kemudian tombol Start Controller

Catatan: Apabila simulasi tidak bisa dijalankan, silahkan ubah angka Ethernet Port dari angka 502 menjadi 503 atau angka lainnya. Untuk mengubah Ethernet Port ini, tekan tombol Settings (di SoMachine tombolnya bergambar palu dan kunci, sedangkan di Machine Expert tombolnya bergambar roda gigi).

Gambar 2.8 Ubah Ethernet Port apabila simulasi tidak bisa dijalankan

7. Berikutnya, buka EasyBuilder Pro, pilih New, pilih model iE Series, pilih salah satu tipe, kemudian klik OK (Catatan: semua model mendukung fitur MQTT, kecuali model iP Series). 

Gambar 2.9 Pilih New, pilih model iE series, pilih salah satu tipe, klik OK

8. Muncul jendela System Parameter Settings, klik New Device/Server, pilih type Modbus TCP/IP, kemudian klik tombol Settings IP.

Gambar 2.10 Muncul jendela System Parameter, klik New Device/Server, pilih Modbus TCP/IP, klik tombol Settings IP

9. Di jendela Device Settings, isi IP address dengan alamat IP yang sama dengan alamat di ETH1 (lihat Gambar 2.5), dan alamat Port sesuai dengan alamat di Settings SoMachine/Mahine Expert (lihat Gambar 2.8), klik OK.

Gambar 2.11 Isi alamat IP dan Port dengan alamat IP dan Port yang digunakan di SoMachine/Machine Expert, klik OK

10. Di Tab Home, di bagian Object, pilih Toggle Switch.

Gambar 2.12 Di Tab Home, di bagian Object, pilih Toggle Switch

11. Di jendela objek Toggle Switch, isi Device: Modbus TCP/IP, isi Address: 0x-1 (alamat ini sama dengan M0), klik OK.

Gambar 2.12 Di jendela Toggle Switch, pilih Device: Modbus TCP/IP, dengan Address: 0x-1, klik OK

11. Berikutnya ambil objek Bit Lamp, di jendela objek Bit Lamp, isi Device: Modbus TCP/IP, isi Address: 0x-2 (alamat ini sama dengan M1), klik OK. 

Gambar 2.13 Di jendela Bit Lamp, pilih Device: Modbus TCP/IP, dengan Address: 0x-2, klik OK

12. Berikutnya ambil objek Numeric, di jendela objek Numeric, isi Device: MODBUS TCP/IP, isi Address: 4x-1 (alamat ini sama dengan MW0), klik OK. 

Gambar 2.14 Di jendela objek Numeric, isi Device: MODBUS TCP/IP, Address: 4x-1, klik OK 

13. Berikutnya ambil objek Slider, di jendela objek Slider, isi Device: MODBUS TCP/IP, isi Address: 6x-2 (alamat ini sama dengan 4x-2 atau MW1, angka awal 6 mengacu ke kode fungsi Write Single Holding Register), klik OK.

Gambar 2.15 Di jendela objek Slider, isi Device: MODBUS TCP/IP, Address: 6x-2, klik OK 

14. Berikutnya, buka menu IIoT/Energy, klik tombol MQTT, beri centang pada opsi Enable, di jendela New MQTT Server, beri centang pada opsi Use domain name, isi Domain name: test.mosquitto.org, kemudian klik OK.

Gambar 2.16 Buka menu IIoT/Energy, centang Enable, centang Use domain name, isi Domain name: test.mosquitto.org

15. Di bagian MQTT Topic, pilih Topic Publisher, klik New, di jendela New MQTT Topic Publisher, isi Topic: xxxxx/toggle_switch (silahkan mengganti xxxxx dengan kata yang berbeda), kemudian hilangkan tanda centang pada opsi Include timestamp dan Use top-level key 'd' for all addresses.

Gambar 2.17 Di Topic Publisher, klik New, isi Topic: xxxxx/toggle_switch, kemudian hilangkan centang pada opsi Include timestamp dan Use top-level key 'd' for all addresses

16. Masih di jendela yang sama, klik Tab Address, klik New, di jendela Type/Address, pilih Device: MODBUS TCP/IP, Address: 0x-1, beri centang pada opsi Remove JSON array bracket, klik OK.

Gambar 2.18 Buka Tab Address, klik New, pilih Device: MODBUS TCP/IP, Address: 0x-1, dan beri centang pada opsi Remove JSON array bracket

17. Masih di Topic Publisher, klik New, di jendela New MQTT Topic Publisher, isi Topic: xxxxx/bit_lamp (silahkan mengganti xxxx dengan kata yang berbeda), hilangkan tanda centang pada opsi Include timestamp dan Use top-level key 'd' for all addresses. 

Gambar 2.19 Di Topic Publisher, klik New, isi Topic: xxxxx/bit_lamp, kemudian hilangkan centang pada opsi Include timestamp dan Use top-level key 'd' for all addresses

18. Masih di jendela yang sama, klik Tab Address, apabila belum ada nama yang muncul pada daftar, klik New, di jendela Type/Address yang muncul, pilih Device: MODBUS TCP/IP, Address: 0x-2, beri centang pada opsi Remove JSON array bracket, klik OK.

Gambar 2.20 Buka Tab Address, klik New, pilih Device: MODBUS TCP/IP, Address: 0x-2, dan beri centang pada opsi Remove JSON array bracket

19. Masih di Topic Publisher, klik New, di jendela New MQTT Topic Publisher, isi Topic: xxxxx/numeric (silahkan mengganti xxxx dengan kata yang berbeda), hilangkan tanda centang pada opsi Include timestamp dan Use top-level key 'd' for all addresses. 

Gambar 2.21 Di Topic Publisher, klik New, isi Topic: xxxxx/numeric, kemudian hilangkan centang pada opsi Include timestamp dan Use top-level key 'd' for all addresses

20. Masih di jendela yang sama, klik Tab Address, klik 2 kali pada nama yang ada di daftar, pilih Type: Word, pilih Device: MODBUS TCP/IP, Address: 4x-1, beri centang pada opsi Remove JSON array bracket, klik OK.

Gambar 2.22 Buka Tab Address, klik New, pilih Device: MODBUS TCP/IP, Address: 4x-1, dan beri centang pada opsi Remove JSON array bracket

21. Masih di Topic Publisher, klik New, di jendela New MQTT Topic Publisher, isi Topic: xxxxx/slider (silahkan mengganti xxxx dengan kata yang berbeda), hilangkan tanda centang pada opsi Include timestamp dan Use top-level key 'd' for all addresses. 

Gambar 2.23 Di Topic Publisher, klik New, isi Topic: xxxxx/slider, kemudian hilangkan centang pada opsi Include timestamp dan Use top-level key 'd' for all addresses

22. Masih di jendela yang sama, klik Tab Address, klik 2 kali pada nama yang ada di daftar, di jendela Type/Address yang muncul, pilih Device: MODBUS TCP/IP, Address: 6x-2, beri centang pada opsi Remove JSON array bracket, klik OK.

Gambar 2.24 Buka Tab Address, klik New, pilih Device: MODBUS TCP/IP, Address: 6x-2, dan beri centang pada opsi Remove JSON array bracket

23. Seharusnya di Tab Topic Publisher, ada 4 buah topic, seperti berikut ini:

Gambar 2.25 Ada 4 buah topic terdaftar di Topic Publisher

24. Agar keempat Topic di Topic Publisher dapat diduplikasi dan ditempatkan di Topic Subscriber, gunakan bantuan tombol Export Import. Klik tombol Export, beri nama file Export tersebut, setelah itu buka Tab Topic Subscriber, klik tombol Import, pilih nama file yang di-Export, maka di Tab Topic Subscriber akan berisi keempat Topic tersebut.

Gambar 2.26 Di Tab Topic Publisher, klik tombol Export, beri nama file dan klik tombol Save

25. Buka Tab Topic Subscriber, klik tombol Import, arahkan pada file hasil Export.

Gambar 2.27 Di Tab Topic Subscriber, klik Import, arahkan pada file hasil Export

26. Maka di Tab Topic Subscriber akan muncul 4 topic yang sama seperti pada Tab Topic Publisher.

Gambar 2.28 Di Topic Subscriber muncul 4 topic yang sama seperti pada Topic Publisher

27. Jalankan simulasi EasyBuilder Pro dengan membuka menu Project, kemudian tekan tombol Online Simulation. Lakukan pengubahan pada Toggle_Switch dan Slider di EasyBuilder Pro, seharusnya LED di Output Digital 0 (Q0.0) dan nilai Output Analog 0 (QW1.0) PLC juga berubah. Sebaliknya, lakukan juga pengubahan pada Input Digital 0 (I0.0) dan juga nilai Input Analog 0 (IW1.0) di PLC, maka kondisi objek Bit_Lamp dan objek Numeric akan berubah mengikuti nilai Input Digital dan Input Analog PLC.

Gambar 2.29. Jalankan simulasi, ubah nilai Toggle_switch dan Slider di EasyBuilder Pro, seharusnya LED dan nilai Output Analog PLC berubah, sebaliknya ketika nilai Input Digital dan Input Analog di PLC diubah, maka kondisi objek Bit_Lamp dan objek Numeric di EasyBuilder Pro juga berubah

Catatan: Ketika objek Slider di EasyBuilder Pro selalu berubah-ubah nilainya, tidak terkontrol, maka cara mengatasinya, hapus topic xxxxx/slider di Topic Subscriber. Begitu pula untuk objek Toggle_switch selalu berubah-ubah sendiri nilainya, maka hapus topic xxxxx/toggle_switch di Topic Subscriber.

Gambar 2.30 Hapus topic xxxxx/slider di Topic Subscriber apabila kondisi objek Slider tidak terkontrol (selalu berubah-ubah sendiri nilainya)

28. Setelah PLC Schneider (simulasi) terhubung dengan EasyBuilder Pro, langkah berikutnya, menghubungkan EasyBuilder Pro dengan IoT MQTT Panel. Buka IoT MQTT Panel (silahkan instal dari PlayStore), dan ikuti langkah-langkah sesuai gambar di bawah ini:





No comments:

Post a Comment