// --- sketch.cpp (REVISI FINAL DENGAN TLS/SSL) ---
#include <WiFi.h>
#include <WiFiClientSecure.h> // <-- PENTING: Gunakan library untuk koneksi aman
#include "PubSubClient.h"
// --- KONFIGURASI JARINGAN & MQTT ---
const char* ssid = "Wokwi-GUEST";
const char* password = "";
// <-- DIUBAH: Sesuaikan dengan detail cluster barumu
const char* mqtt_server = "ba3e8ab2eb604380a0eb9a50caded79d.s1.eu.hivemq.cloud";
const int mqtt_port = 8883; // <-- DIUBAH: Gunakan port aman 8883
// <-- DIUBAH: Kredensial dari screenshot-mu
const char* mqtt_user = "armanyrs25";
const char* mqtt_pass = "AHk2VJT2invz_72";
// <-- PENTING: Gunakan WiFiClientSecure untuk handle koneksi TLS/SSL
WiFiClientSecure espClient;
PubSubClient client(espClient);
// --- PIN POTENSIOMETER ---
const int POT_JEMPOL = 32;
const int POT_TELUNJUK = 33;
const int POT_TENGAH = 34;
const int POT_MANIS = 35;
const int POT_KELINGKING = 25;
void setup_wifi() {
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nWiFi connected!");
}
void reconnect() {
while (!client.connected()) {
Serial.print("Attempting MQTTS connection...");
if (client.connect("wokwi-secure-client-arman", mqtt_user, mqtt_pass)) {
Serial.println("connected to HiveMQ Cloud!");
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
delay(5000);
}
}
}
void setup() {
Serial.begin(115200);
// <-- PENTING: Untuk development/simulasi, kita skip verifikasi sertifikat server.
// Ini membuat koneksi tetap terenkripsi tapi tidak seketat di production.
espClient.setInsecure();
setup_wifi();
client.setServer(mqtt_server, mqtt_port);
}
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
int sudutJempol = map(analogRead(POT_JEMPOL), 0, 4095, 0, 180);
int sudutTelunjuk = map(analogRead(POT_TELUNJUK), 0, 4095, 0, 180);
int sudutTengah = map(analogRead(POT_TENGAH), 0, 4095, 0, 180);
int sudutManis = map(analogRead(POT_MANIS), 0, 4095, 0, 180);
int sudutKelingking = map(analogRead(POT_KELINGKING), 0, 4095, 0, 180);
char json_data[200];
sprintf(json_data, "{\"jempol\":%d, \"telunjuk\":%d, \"tengah\":%d, \"manis\":%d, \"kelingking\":%d}",
sudutJempol, sudutTelunjuk, sudutTengah, sudutManis, sudutKelingking);
// Tampilkan data yang akan dikirim di Serial Monitor untuk debugging
Serial.println(json_data); // <-- TAMBAHKAN BARIS INI
client.publish("glove/data", json_data);
delay(50);
}