#include <WiFi.h>
#include <PubSubClient.h>
#define BTN_PIN 16
const char *mqtt_broker = "yandex-cpp.cloud.shiftr.io";
const char *topic = "light";
const char *mqtt_username = "yandex-cpp";
const char *mqtt_password = "O1UNfc6vB9DtjEvl";
const int mqtt_port = 1883;
const char *client_name = "switch-esp32";
bool btnLastState = true;
bool btnState = false;
bool lampState = false;
WiFiClient espClient;
PubSubClient client(espClient);
void connectWiFi(){
Serial.print("Connecting to WiFi");
WiFi.begin("Wokwi-GUEST", "", 6);
while (WiFi.status() != WL_CONNECTED) {
delay(100);
Serial.print(".");
}
Serial.println(" Connected!");
}
void connectMQTT(){
Serial.print("Connecting to MQTT");
while (!client.connected()) {
if (client.connect(client_name, mqtt_username, mqtt_password)) {
Serial.println(" Connected!");
} else {
Serial.print(".");
delay(1000);
}
}
}
void setup() {
Serial.begin(115200);
pinMode(BTN_PIN, INPUT_PULLUP);
connectWiFi();
client.setServer(mqtt_broker, mqtt_port);
connectMQTT();
}
void checkBtn(){
btnState = digitalRead(BTN_PIN);
if (btnLastState == true && btnState == false) { // Проверили, что состояние изменилось
lampState = !lampState;
if (lampState) {
client.publish(topic, "on");
} else {
client.publish(topic, "off");
}
}
btnLastState = btnState;
}
void loop() {
if (WiFi.status() != WL_CONNECTED) {
connectWiFi();
}
if (!client.connected()) {
connectMQTT();
}
client.loop();
checkBtn();
delay(10);
}