#include <DHT.h>
#include <WiFi.h>
#include <ThingsBoard.h>
#include <Arduino_MQTT_Client.h>
#define DHTPIN 4
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
#define WIFI_AP "Wokwi-GUEST"
#define WIFI_PASS ""
#define TB_SERVER "thingsboard.cloud"
#define TOKEN "ofxd0iqwrvq1y7ydtwns"
constexpr uint16_t MAX_MESSAGE_SIZE = 128u;
WiFiClient espClient;
Arduino_MQTT_Client mqttClient(espClient);
ThingsBoard tb(mqttClient, MAX_MESSAGE_SIZE);
#define POT_PIN 34
#define LED_PIN 25
#define RELAY_PIN 33
#define BUZZER_PIN 26
const int gasThreshold = 100; // Sesuaikan threshold sesuai kebutuhan
void connectToWiFi() {
Serial.println("Connecting to WiFi...");
int attempts = 0;
while (WiFi.status() != WL_CONNECTED && attempts < 20) {
WiFi.begin(WIFI_AP, WIFI_PASS, 6);
delay(500);
Serial.println(".");
attempts++;
}
if (WiFi.status() != WL_CONNECTED) {
Serial.println("\nFailed to connect to WiFi...");
} else {
Serial.println("\nConnected to WiFi");
}
}
void connectToThingsBoard() {
if (!tb.connected()) {
Serial.println("Connecting to ThingsBoard server");
if (!tb.connect(TB_SERVER, TOKEN)) {
Serial.println("Failed to connect to ThingsBoard");
} else {
Serial.println("Connected to ThingsBoard");
}
}
}
void sendDataToThingsBoard(float Temperature, int Humidity, int gasValue) {
String jsonData = "{\"Temperature\":" + String(Temperature) + ", \"Humidity\":" + String(Humidity) + ", \"gasValue\":" + String(gasValue) + "}";
tb.sendTelemetryJson(jsonData.c_str());
Serial.println("Data sent");
}
void setup() {
Serial.begin(115200);
dht.begin();
pinMode(POT_PIN, INPUT);
pinMode(RELAY_PIN, OUTPUT);
pinMode(BUZZER_PIN, OUTPUT);
pinMode(LED_PIN, OUTPUT);
}
void loop() {
connectToWiFi();
if (!tb.connected()) {
connectToThingsBoard();
}
// Membaca data dari sensor
float Temperature = dht.readTemperature();
float Humidity = dht.readHumidity();
int gasValue = analogRead(POT_PIN);
sendDataToThingsBoard(Temperature, Humidity, gasValue);
Serial.print("Humidity: ");
Serial.print(Humidity);
Serial.print(" %\t");
Serial.print("Temperature: ");
Serial.print(Temperature);
Serial.print(" *C\t");
Serial.print("Gas Value: ");
Serial.println(gasValue);
if (gasValue > gasThreshold) {
digitalWrite(RELAY_PIN, HIGH); // Mengaktifkan ventilasi
digitalWrite(BUZZER_PIN, HIGH); // Mengaktifkan alarm
digitalWrite(LED_PIN, HIGH); // Mengaktifkan lampu alaram
} else {
digitalWrite(RELAY_PIN, LOW);
digitalWrite(BUZZER_PIN, LOW);
digitalWrite(LED_PIN, LOW);
}
delay(2000);
}