// Take-home assignment BTS
// Created by Giovani Ega Charisma
#include <WiFi.h>
#include <PubSubClient.h>
#include "DHT.h"
#define DHTPIN 21
#define DHTTYPE DHT22
#define LED_PIN 2
#define BUZZER_PIN 26
DHT dht(DHTPIN, DHTTYPE);
const char* ssid = "Wokwi-GUEST";
const char* password = "";
const char* mqtt_server = "test.mosquitto.org";
const char* topic = "giovaniega/home/temperature";
WiFiClient espClient;
PubSubClient client(espClient);
unsigned long lastPublish = 0;
const unsigned long interval = 1000;
void setup() {
Serial.begin(115200);
pinMode(LED_PIN, OUTPUT);
pinMode(BUZZER_PIN, OUTPUT);
dht.begin();
WiFi.begin(ssid, password);
Serial.println("Menghubungkan ke wifi ");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print((" . "));
}
Serial.println("Terhubung!");
client.setServer(mqtt_server, 1883);
}
void reconnect() {
while (!client.connected()) {
client.connect("Take-home-test-client");
}
}
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
// ambil data sensor
float temperature = dht.readTemperature();
if (!isnan(temperature)) {
// Logic untuk led dan buzzer
if(temperature > 40){
digitalWrite(LED_PIN, HIGH);
}
else digitalWrite(LED_PIN, LOW);
if(temperature > 50){
digitalWrite(BUZZER_PIN, HIGH);
}
else digitalWrite(BUZZER_PIN, LOW);
// logic untuk transmit data mqtt
unsigned long now = millis();
if (now - lastPublish >= interval) {
lastPublish = now;
Serial.print("Temperature : ");
Serial.println(temperature);
char payload[10];
dtostrf(temperature, 4, 2, payload);
bool success = client.publish(topic, payload);
if (success) {
Serial.print("MQTT sent: ");
Serial.println(payload);
} else {
Serial.println("MQTT publish failed");
}
}
}
}