Library Qbyte-IoT

Library ESP32/ESP8266 IoT dengan dukungan WebSocket untuk komunikasi Real-Time

Dukungan WebSocket Real-Time Pub/Sub

Fitur Utama

Koneksi WebSocket

Dibangun di atas WebSocketsClient untuk koneksi dua arah yang cepat dan andal.

Sistem Pub/Sub

Mendukung pola publish/subscribe (Pub/Sub) ringan yang sangat mudah digunakan.

Integrasi ESP32 & ESP8266

Didesain khusus untuk mikrokontroler berbasis arsitektur ESP.

Instalasi

  1. Unduh repository atau folder Qbyte-IoT.
  2. Pindahkan folder Qbyte-IoT ke dalam folder library Arduino Anda (biasanya di Documents/Arduino/libraries/).
  3. Restart Arduino IDE.
  4. Pastikan Anda juga telah menginstal library WebSocketsClient (dapat dicari melalui Library Manager Arduino).

Menambahkan Perangkat ke Web

Untuk menghubungkan perangkat keras (ESP32/ESP8266) dengan dashboard web Qbyte-IoT, Anda perlu menggunakan Topic yang unik.

  • ID Pengguna (User ID): Setiap pengguna memiliki ID unik yang ada di dashboard web (misalnya USR_123456).
  • ID Perangkat (Device ID): Setiap perangkat atau komponen juga memiliki ID tersendiri (misalnya relay_1 atau sensor_suhu).
  • Format Topic: Topic disusun dengan format UserID/DeviceID. Contoh: USR_123456/relay_1.

Di halaman web (Dashboard), saat Anda menambahkan perangkat (misalnya menambahkan tombol Relay atau widget Suhu), Anda akan diminta untuk memasukkan Topic tersebut. Ini memastikan agar web dapat melakukan publish (mengirim perintah) ke perangkat keras, atau sebaliknya web melakukan subscribe untuk menampilkan data (sensor) yang dikirim perangkat keras.

Contoh 1: Kontrol Relay

Contoh ini menunjukkan bagaimana perangkat Anda (ESP32) melakukan subscribe ke sebuah topic untuk menerima perintah kontrol dari web, dan mengubah status dari sebuah Relay/LED.

ControlRelay.ino
1#include <Arduino.h>
2#include <WiFi.h>
3#include <WebSocketsClient.h>
4#include "Qbyte-IoT.h"
5
6WebSocketsClient webSocket;
7QbyteIoT iot(webSocket);
8
9const int RELAY_PIN = 2; // Pin untuk Relay (LED Built-in pada umumnya)
10
11void setup() {
12  Serial.begin(115200);
13  pinMode(RELAY_PIN, OUTPUT);
14  digitalWrite(RELAY_PIN, LOW); // Matikan relay secara default
15  
16  // 1. Hubungkan ke WiFi
17  WiFi.begin("SSID", "PASSWORD");
18  while (WiFi.status() != WL_CONNECTED) {
19    delay(500);
20    Serial.print(".");
21  }
22  Serial.println("\nWiFi Connected!");
23  
24  // 2. Hubungkan ke Server WebSocket Qbyte
25  webSocket.begin("server-iot-qbyte.qbyte.web.id", 443, "/ws");
26  
27  // 3. Mulai layanan Qbyte-IoT
28  iot.begin();
29  
30  // 4. Subscribe ke topic khusus untuk perangkat ini
31  // Ganti USR_123456 dengan User ID Anda di Web
32  iot.sub("USR_123456/relay_1");
33}
34
35void loop() {
36  // Wajib memanggil loop dari iot agar komunikasi websocket berjalan
37  iot.loop();
38  
39  // Cek apakah ada data masuk pada topic tersebut
40  if (iot.has("USR_123456/relay_1")) {
41    // Ambil pesannya
42    String payload = iot.get("USR_123456/relay_1");
43    Serial.println("Perintah diterima: " + payload);
44    
45    // Proses perintah dari Web (Misal: web mengirim "1" untuk ON, "0" untuk OFF)
46    if (payload == "1") {
47      digitalWrite(RELAY_PIN, HIGH);
48      // Opsional: Kirim feedback kembali ke web bahwa relay sudah menyala
49      iot.pub("USR_123456/relay_1/status", "ON"); 
50    } 
51    else if (payload == "0") {
52      digitalWrite(RELAY_PIN, LOW);
53      iot.pub("USR_123456/relay_1/status", "OFF");
54    }
55  }
56}

Contoh 2: Monitoring Suhu

Pada contoh ini, ESP32 membaca data dari sensor suhu buatan (dummy) lalu mem-publish-nya ke web setiap 5 detik. Web (Dashboard) kemudian dapat melakukan subscribe untuk menampilkan suhunya secara Real-Time.

MonitorSuhu.ino
1#include <Arduino.h>
2#include <WiFi.h>
3#include <WebSocketsClient.h>
4#include "Qbyte-IoT.h"
5
6WebSocketsClient webSocket;
7QbyteIoT iot(webSocket);
8
9unsigned long lastSend = 0;
10
11void setup() {
12  Serial.begin(115200);
13  
14  WiFi.begin("SSID", "PASSWORD");
15  while (WiFi.status() != WL_CONNECTED) { 
16    delay(500); 
17    Serial.print(".");
18  }
19  
20  webSocket.begin("server-iot-qbyte.qbyte.web.id", 443, "/ws");
21  iot.begin();
22}
23
24void loop() {
25  iot.loop();
26  
27  // Setiap 5000 ms (5 detik) kirim data suhu ke web
28  if (millis() - lastSend > 5000) {
29    lastSend = millis();
30    
31    // Membaca sensor suhu (Contoh simulasi nilai dummy)
32    float suhu = 25.0 + random(0, 10) / 10.0;
33    
34    // Publikasi data suhu ke topic Anda
35    // Topic: USR_123456/sensor_suhu
36    iot.pub("USR_123456/sensor_suhu", String(suhu));
37    
38    Serial.println("Kirim Suhu: " + String(suhu) + " °C");
39  }
40}

Referensi API (QbyteIoT)

FungsiDeskripsi
void begin()Inisialisasi layanan dan event listener untuk WebSocket.
void loop()Wajib dipanggil di dalam loop() utama program Arduino untuk mempertahankan koneksi.
void sub(const String& topic)Mendaftarkan perangkat ke suatu topic agar dapat menerima pesan dari server web.
void pub(const String& topic, int payload)Mengirim data berjenis integer ke sebuah topic.
void pub(const String& topic, const String& payload)Mengirim data berjenis string ke sebuah topic.
bool has(const String& topic)Mengecek apakah ada pesan/data baru yang diterima pada topic tersebut. Mengembalikan nilai boolean.
int getInt(const String& topic)Mengambil data/pesan terakhir yang diterima pada topic sebagai tipe Integer.
String get(const String& topic)Mengambil data/pesan terakhir yang diterima pada topic sebagai tipe String.