#include <WiFi.h>
#include <PubSubClient.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
const char* ssid = "Wokwi-GUEST";
const char* password = "";
const char* mqtt_server = "broker.hivemq.com";
WiFiClient espClient;
PubSubClient client(espClient);
#define BUZZER D10
#define BUTTON D0
#define LCD_ADDRESS 0x27
LiquidCrystal_I2C lcd(LCD_ADDRESS,16,2);
bool isOn = false;
void setup_wifi(){
WiFi.begin(ssid,password);
while(WiFi.status() != WL_CONNECTED){ delay(500); Serial.print("."); }
Serial.println("\nWiFi connected: "+WiFi.localIP().toString());
lcd.clear();
lcd.noBacklight();
}
void print_break(int duration) {
lcd.backlight();
lcd.clear();
lcd.setCursor(0,0);
lcd.print("PAUSE!");
lcd.setCursor(0,1);
lcd.print(duration); lcd.print(" min");
digitalWrite(BUZZER,HIGH);
delay(2000);
digitalWrite(BUZZER,LOW);
isOn = true;
}
void callback(char* topic, byte* payload, unsigned int length){
String msg;
for(int i=0;i<length;i++){ msg+=(char)payload[i]; }
Serial.println("Received: "+msg);
if(msg.startsWith("ping:")){
int value = msg.substring(5).toInt();
print_break(value);
}
}
void reconnect(){
while(!client.connected()){
if(client.connect("ESP32_Receiver")){
client.subscribe("esp32/test");
} else { delay(2000); }
}
}
void setup(){
Serial.begin(115200);
pinMode(BUZZER,OUTPUT);
pinMode(BUTTON,INPUT_PULLUP);
Wire.begin(D8,D9);
lcd.init();
lcd.backlight();
lcd.setCursor(0,0);
lcd.print("Connecting to");
lcd.setCursor(0,1);
lcd.print(ssid);
setup_wifi();
client.setServer(mqtt_server,1883);
client.setCallback(callback);
}
void loop(){
if (digitalRead(BUTTON) == LOW && isOn) {
lcd.clear();
lcd.noBacklight();
isOn = false;
}
if(!client.connected()){ reconnect(); }
client.loop();
}