#include "Adafruit_MQTT.h"
#include "Adafruit_MQTT_Client.h"
#include <WiFi.h>
int i=0; // Променлива в която ще запазваме стойностите от сензора
const int LED1 = 25;//red
const int LED2 = 18;//green
int bttn = 34; // Бутон
int bttnState = 0;
#define WLAN_SSID "Wokwi-GUEST"
#define WLAN_PASS ""
#define AIO_SERVER "io.adafruit.com"
#define AIO_SERVERPORT 1883
#define AIO_USERNAME "s_dimitrova1707"
#define AIO_KEY "aio_vUmn92n63opj0hHGvPLrbt82Efxa"
WiFiClient client;
// Блок за свързване с Adafruit IO
Adafruit_MQTT_Client mqtt(&client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME,
AIO_KEY);
Adafruit_MQTT_Subscribe Out_1 = Adafruit_MQTT_Subscribe(& mqtt, AIO_USERNAME "/feeds/led");
// !! Името на таблото - touchsensor
Adafruit_MQTT_Publish touchsensor = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME
"/feeds/touchsensor");
// Блок за управление на сензора и светодиода
void MQTT_connect();
boolean MQTT_connect1();
void setup()
{
i = 0;
Serial.begin(115200);
pinMode(LED1, OUTPUT);
digitalWrite(LED1, HIGH); // Управление на светодиода
delay(300);
digitalWrite(LED1, LOW);
delay(3000);
Serial.println("START");
//WiFi.begin("Lab32BFU", "Lab32BFU");
WiFi.begin("Wokwi-GUEST", ""); //!!!! Име и парола за мрежа
while ((!(WiFi.status() == WL_CONNECTED))) { //циклим тук докато се свържем
delay(500);
Serial.print("Свързване...");
} // Печат на серийния монитор само за информация на това – какво се случва
Serial.println("Установена е връзка.");
Serial.println("Вашият IP е:");
Serial.println((WiFi.localIP()));
Serial.println("Извършва се проверка за натискане на бутона:");
// Настройка на абонамент за MQTT за захранване на onoff. - до 5 сесии
mqtt.subscribe(&Out_1);
}
void loop()
{
delay(1000);
bttnState = digitalRead(bttn);
if(bttnState==HIGH)
{
i=1;
// Проверява се връзката и се изпраща 1
if (MQTT_connect1()) {
if (touchsensor.publish(i)) {
digitalWrite(LED1, HIGH);
delay(350);
digitalWrite(LED1, LOW);
}
}
else {
Serial.println("Неуспешмна връзка с Adafruit IO");
}
digitalWrite(LED1, HIGH);
Serial.println("Бутонът е натиснат!");
}
else if (bttnState==LOW)
{
i=0;
digitalWrite(LED1, LOW);
i=1;
digitalWrite(LED2, HIGH);
Serial.println("Бутонът не е натиснат!");
}
}
void MQTT_connect() {
int8_t ret;
// Не праи нищо, ако вече сте свързани.
if (mqtt.connected()) {
return;
}
Serial. print("Свързване с MQTT... ");
uint8_t retries = 3;
while ((ret = mqtt.connect()) != 0) { // nqtt.connect ще върне 0 за свързан
Serial. println(mqtt.connectErrorString(ret)); //Печатим грешката поради която няма връзка
Serial. println("Retrying MQTT connection in 5 seconds...");
mqtt.disconnect();
delay(5000); // изчакайте 5 секунди
retries--;
if (retries == 0) {
// правим три опита за връзка, После се чакам WDT да я нулира
while (1);
}
}
Serial. println("MQTT Свързан!");
}
boolean MQTT_connect1() {
int8_t ret;
if (mqtt.connected()) {
return true;
} uint8_t retries = 3;
while ((ret = mqtt.connect()) != 0) {
mqtt.disconnect();
delay(2000);
retries--;
if (retries == 0) {
return false;
}
} return true;
}