#include <WiFi.h>
#include <DHTesp.h>
#include <PubSubClient.h>
#define DHT_PIN 15
#define BUZZER 12
// setting up the wifi client
// setting up the pubsub client with the aid of wificlient for the communication.
WiFiClient espClient;
PubSubClient mqttClient(espClient);
char tempAr[6];
// creating an instance of dht sensor
DHTesp dhtSensor;
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
setupWifi();
setupMqtt();
dhtSensor.setup(DHT_PIN, DHTesp::DHT22);
pinMode(BUZZER, OUTPUT);
digitalWrite(BUZZER, LOW);
}
void loop() {
// put your main code here, to run repeatedly:
if(!mqttClient.connected()){
connectToBroker();
}
mqttClient.loop();
updateTemperature();
Serial.println(tempAr);
mqttClient.publish("prl-test_buzzer_b11wokwi", tempAr);
delay(1000);
}
void buzzerOn(bool on){
if (on){
tone(BUZZER, 256);
}else{
noTone(BUZZER);
}
}
void setupMqtt(){
mqttClient.setServer("test.mosquitto.org", 1883);
mqttClient.setCallback(receiveCallback);
}
void updateTemperature(){
TempAndHumidity data = dhtSensor.getTempAndHumidity();
String(data.temperature, 2).toCharArray(tempAr, 6);
}
void setupWifi(){
Serial.println();
Serial.print("connecting to...");
Serial.println("wokwi-guest");
WiFi.begin("Wokwi-GUEST", "");
while (WiFi.status() != WL_CONNECTED){
delay(500);
Serial.print(".");
Serial.println("WiFi connected");
Serial.println("IP address:");
Serial.println(WiFi.localIP());
}
}
void connectToBroker(){
while(!mqttClient.connected()){
Serial.print("Attempting MQTT connection...");
if (mqttClient.connect("ESP32-4646")) {// random address in this case
Serial.println("connected");
mqttClient.subscribe("prl-on-off-buzzer_b11wokwi");
}else {
Serial.print("failed");
}
}
}
void receiveCallback(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];
}
if (strcmp(topic, "prl-on-off-buzzer_b11wokwi")==0){
buzzerOn(payloadCharAr[0] == '1');
}
}