#include <WiFi.h>
#include <PubSubClient.h>
#include <DHT.h>
// WiFi credentials
const char *ssid = "Wokwi-GUEST";
const char *password = "";
// ThingsBoard credentials
#define TOKEN "xZo8A5dnJDeQ1jR4d9oD" // Access token dari perangkat ThingsBoard
const char* mqtt_server = "mqtt.thingsboard.cloud";
// DHT sensor settings
#define DHTPIN 21 // Pin yang digunakan untuk sensor DHT
#define DHTTYPE DHT22 // Jenis sensor DHT (DHT22 atau DHT11)
DHT dht(DHTPIN, DHTTYPE);
// Ultrasonic sensor settings
const int trigPin = 5; // Pin Trig
const int echoPin = 18; // Pin Echo
// LDR sensor settings
const int ldrPin = 33; // Pin untuk LDR
// Additional sensor settings
const int additionalSensorPin = 34; // Pin untuk sensor tambahan
// Initialize WiFi and MQTT client
WiFiClient wifiClient;
PubSubClient client(wifiClient);
void setup() {
Serial.begin(115200);
// Setup Wi-Fi
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nWiFi connected");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
// Setup MQTT
client.setServer(mqtt_server, 1883);
// Initialize DHT sensor
dht.begin();
// Initialize Ultrasonic sensor pins
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
// Initialize LDR and additional sensor pins
pinMode(ldrPin, INPUT);
pinMode(additionalSensorPin, INPUT);
}
void loop() {
// Reconnect if disconnected
if (!client.connected()) {
reconnect();
}
// Read data from DHT sensor
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
// Ultrasonic sensor operation
long duration, distance;
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = duration * 0.034 / 2;
// Read data from LDR and additional sensor
int ldrValue = analogRead(ldrPin);
int additionalSensorValue = digitalRead(additionalSensorPin);
// Check if any reads failed
if (isnan(humidity) || isnan(temperature)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
// Log sensor readings
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.print("°C, Humidity: ");
Serial.print(humidity);
Serial.print("%, Distance: ");
Serial.print(distance);
Serial.print(" cm, LDR Value: ");
Serial.print(ldrValue);
Serial.print(", Additional Sensor Value: ");
Serial.println(additionalSensorValue);
// Prepare payload
String payload = "{";
payload += "\"temperature\":"; payload += temperature; payload += ",";
payload += "\"humidity\":"; payload += humidity; payload += ",";
payload += "\"distance\":"; payload += distance; payload += ",";
payload += "\"ldr_value\":"; payload += ldrValue; payload += ",";
payload += "\"additional_sensor_value\":"; payload += additionalSensorValue;
payload += "}";
char attributes[1000];
payload.toCharArray(attributes, 1000);
// Publish data to ThingsBoard
client.publish("v1/devices/me/telemetry", attributes);
Serial.println("Data sent: " + String(attributes));
// Delay before next reading
delay(5000);
}
void reconnect() {
while (!client.connected()) {
Serial.print("Connecting to ThingsBoard...");
if (client.connect("ESP32Client", TOKEN, "")) {
Serial.println("[DONE]");
} else {
Serial.print("[FAILED] [ rc = ");
Serial.print(client.state());
Serial.println(" : retrying in 5 seconds]");
delay(5000);
}
}
}