#include <WiFi.h>
#include "DHTesp.h"
#define DHT_PIN 15
#define BUZZER 12
#include<PubSubClient.h>
WiFiClient espClient;
PubSubClient mqttClient(espClient);
char tempAr[6];
DHTesp dhtSensor;
void setup() {
Serial.begin(115200);
setupWiFi();
setupMqtt();
dhtSensor.setup(DHT_PIN,DHTesp::DHT22);
pinMode(BUZZER,OUTPUT);
digitalWrite(BUZZER,LOW);
}
void loop() {
if(!mqttClient.connected()){
connectToBroker();
}
mqttClient.loop();
updateTemperature();
Serial.println(tempAr);
mqttClient.publish("ENTC-ADMIN-TEMP",tempAr);
delay(1000);
}
void updateTemperature(){
TempAndHumidity data =dhtSensor.getTempAndHumidity();
String(data.temperature,2).toCharArray(tempAr,6);
}
void setupWiFi(){
Serial.println();
Serial.println("Connecting to");
Serial.println("Wokwi-GUEST");
WiFi.begin("Wokwi-GUEST"); //connecting to wifi
while (WiFi.status()!=WL_CONNECTED){ // if not connected retry again in half a second
delay(500);
Serial.print(".");
}
Serial.println("WIFi connected");
Serial.println("IP Address");
Serial.println(WiFi.localIP());
}
void buzzerOn(bool on){
if(on){
tone(BUZZER,256);
}
else{
noTone(BUZZER);
}
}
void receivedCallback(char*topic, byte* payload, unsigned int length){
Serial.print("Message arrived [");
Serial.print(topic);
Serial.print("]");
char payloadCharAr[length];
for(int i=0;i<length;i++){
Serial.print((char)payload[i]);
payloadCharAr[i]=(char)payload[i];
}
Serial.println();
if (strcmp(topic,"ENTC-ADMIN-MAIN-ON-OFF")==0){
if (payloadCharAr[0]=='1'){
buzzerOn(true);
}
else{
buzzerOn(false);
}
}
}
void setupMqtt(){
mqttClient.setServer("broker.hivemq.com",1883);
mqttClient.setCallback(receivedCallback); //this is not a keyword, this is calling a function called callback (customisable)
}
void connectToBroker(){
while(!mqttClient.connected()){
Serial.println("Attempting MQTT connection...");
if(mqttClient.connect("ESP32-123456")){
Serial.println("connected");
// subscribe functions
mqttClient.subscribe("ENTC-ADMIN-MAIN-ON-OFF");
}
else{
Serial.println("Failed");
Serial.print(mqttClient.state());
delay(5000);
}
}
}