#include <WiFi.h>
#include <HTTPClient.h>
#include <WiFiClientSecure.h>
#include <DHTesp.h>
// ================= WIFI =================
#define WIFI_SSID "Wokwi-GUEST"
#define WIFI_PASSWORD ""
// ================= THINGSBOARD =================
#define TOKEN "d8RbjDGyZlt317sgIb8q"//"isi dengan token akses (access token)"//contoh: "zbiBCQG0BbDlxfxz9KaI"
#define TB_HOST "https://tb.andipensil.com"
// ================= SENSOR =================
const int DHT_PIN = 15;
DHTesp dht;
// ================= HTTPS CLIENT (GLOBAL) =================
WiFiClientSecure secureClient;
HTTPClient http;
// -------------------- CONNECT WIFI --------------------
void setupWifi() {
Serial.print("Connecting to WiFi");
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println(" OK");
}
void setup() {
Serial.begin(115200);
setupWifi();
// TLS config (WAJIB di Wokwi)
secureClient.setInsecure();
secureClient.setTimeout(15000); // TLS timeout
dht.setup(DHT_PIN, DHTesp::DHT22);
}
void sendTelemetry(float temp, float hum) {
String payload = "{";
payload += "\"temperature\":";
payload += temp;
payload += ",\"humidity\":";
payload += hum;
payload += "}";
String url = String(TB_HOST) + "/api/v1/" + TOKEN + "/telemetry";
http.begin(secureClient, url);
http.addHeader("Content-Type", "application/json");
http.setTimeout(15000); // HTTP timeout
int code = http.POST(payload);
Serial.print("HTTP Response code: ");
Serial.println(code);
http.end();
// retry 1x jika -1
if (code == -1) {
delay(1000);
Serial.println("Retrying...");
http.begin(secureClient, url);
http.addHeader("Content-Type", "application/json");
http.setTimeout(15000);
code = http.POST(payload);
Serial.print("Retry code: ");
Serial.println(code);
http.end();
}
}
void loop() {
TempAndHumidity data = dht.getTempAndHumidity();
float temp = data.temperature;
float hum = data.humidity;
Serial.print("Temp: ");
Serial.print(temp);
Serial.print(" °C | Hum: ");
Serial.println(hum);
if (WiFi.status() == WL_CONNECTED) {
sendTelemetry(temp, hum);
}
delay(5000); // ⬅️ JANGAN terlalu cepat di Wokwi
}