#include <WiFi.h>
#include <PubSubClient.h>
#include <ArduinoJson.h>
#include <DHT.h>
const char* ssid = "Wokwi-GUEST";
const char* password = "";
const char* mqtt_server = "103.147.91.68";
const char* access_token = "ffryz9n90f2c0ec7u8c9";
const int mqtt_port = 1883;
WiFiClient espClient;
PubSubClient client(espClient);
#define Ledpin 13
#define Ledpin2 12
#define DHT_PIN 4
#define DHTTYPE DHT22
DHT dht(DHT_PIN, DHTTYPE);
void setup_wifi() {
delay(10);
Serial.println("Menghubungkan ke WiFi...");
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nWiFi Terhubung!");
}
// Callback untuk menerima pesan MQTT dari ThingsBoard
void callback(char* topic, byte* payload, unsigned int length) {
Serial.print("Pesan diterima di topik: ");
Serial.println(topic);
String message = "";
for (int i = 0; i < length; i++) {
message += (char)payload[i];
}
Serial.print("Payload: ");
Serial.println(message);
StaticJsonDocument<200> doc;
DeserializationError error = deserializeJson(doc, message);
if (error) {
Serial.println("Gagal parse JSON!");
return;
}
String method = doc["method"];
String params = doc["params"];
Serial.print("Method: ");
Serial.println(method);
Serial.print("Params: ");
Serial.println(params);
if (method == "setLED") {
if (params == "true") {
digitalWrite(Ledpin, HIGH);
Serial.println("LED ON");
} else if (params == "false") {
digitalWrite(Ledpin, LOW);
Serial.println("LED OFF");
}
}
}
void reconnect() {
while (!client.connected()) {
Serial.print("Menghubungkan ke MQTT ThingsBoard...");
if (client.connect("ESP32Client", access_token, NULL)) {
Serial.println("Terhubung!");
client.subscribe("v1/devices/me/rpc/request/+");
} else {
Serial.print("Gagal, kode kesalahan: ");
Serial.print(client.state());
Serial.println(" Coba lagi dalam 5 detik...");
delay(5000);
}
}
}
void sendTemperatureData() {
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
if (isnan(temperature) || isnan(humidity)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
StaticJsonDocument<200> payload;
payload["temperature"] = temperature;
payload["humidity"] = humidity;
char data[100];
serializeJson(payload, data);
client.publish("v1/devices/me/telemetry", data);
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.print(" °C, Humidity: ");
Serial.print(humidity);
Serial.println(" %");
}
void setup() {
Serial.begin(115200);
pinMode(Ledpin, OUTPUT);
pinMode(Ledpin2, OUTPUT);
dht.begin();
setup_wifi();
client.setServer(mqtt_server, mqtt_port);
client.setCallback(callback);
}
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
static unsigned long lastSendTime = 0;
if (millis() - lastSendTime > 10000) {
lastSendTime = millis();
sendTemperatureData();
}
}