////////////////////////////////////
// IoT_BFU //
// Сензор за достъп изпраща данни //
// В облачна БД на Adafruit IO //
////////////////////////////////////
// Включване на библиотеките за Adafruit IO и връзка с мрежа
#include "Adafruit_MQTT.h"
#include "Adafruit_MQTT_Client.h"
#include <WiFi.h>
int i; // Променлива в която ще запазваме стойностите от сензора
// Дефиниране на параметрите за връзка з Adafruit IO
int LED1 = 32; // LED на GPO32. Вградения ако го има е на GPO2
int LED2 = 26;
int Touch1 = 13; // Пин за докосване GPIO13. Обикновено се използва GPIO4
#define AIO_SERVER "io.adafruit.com"
#define AIO_SERVERPORT 1883
#define AIO_USERNAME "ZDamyanov"
#define AIO_KEY "aio_VQPY10vRi9lKjoZAHQRJEP9uJ3DX"
WiFiClient client;
// Блок за свързване с Adafruit IO
Adafruit_MQTT_Client mqtt(&client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);
boolean MQTT_connect();
boolean MQTT_connect() {
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;
}
// Функция за връзка с Adafruit IO и указание към кой акаунт и табло да се изпратят данните
Adafruit_MQTT_Publish touchsensor = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/IoTupr2");
// Блок за управление на сензора и светодиода
void setup()
{
i = 0;
Serial.begin(115200);
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
digitalWrite(LED1, HIGH); // Управление на светодиода
delay(300);
digitalWrite(LED1, LOW);
delay(3000);
Serial.println("START");
WiFi.begin("Wokwi-GUEST", ""); // Име и парола за мрежа
while ((!(WiFi.status() == WL_CONNECTED))) { //циклим тук докато се свържем
delay(500);
Serial.print("Свързване...");
} // Печат на серийния монитор само за информация на това – какво се случва
Serial.println("Установена е връзка.");
Serial.println("Вашият IP е:");
Serial.println((WiFi.localIP()));
Serial.println("Извършва се проверка за допир на сензора");
}
void loop()
{
// i = (touchRead(Touch1)); //Присвояваме на i прочетената от сензора стойност
i = digitalRead(Touch1);
Serial.println(i);
if (MQTT_connect()) { // Проверяваме дали връзката с Adafruit IO e OK
if (touchsensor.publish(i)) { //Ako e OK изпращаме стойността на i
Serial.print("ЗАПИС НА НИВО НА КОНТАКТ СЪС СЕНЗОРА: ");
Serial.println(i);
if (i == 1) {
digitalWrite(LED1, HIGH);
digitalWrite(LED2, LOW);
} else {
digitalWrite(LED1, LOW);
digitalWrite(LED2, HIGH);
}
} else { // Връзката с Adafruit IO e неуспешна
Serial.println("Има проблем в сензора или с драйвера на Adafruit");
}
}
delay(3000); // Закъснение – 350 милисекунди
}