/* Застосовувалося
2 датчики DH22 - Як датчик температури/вологості ґрунту та повітря
1 Photoresistor (LDR) для управління освітленістю через ТГ бот і автоматично.
2 Relay Module (Один якпідігрівач, другий як встновлювач вологості)
1 Servo (Провітрювання)
Булій Даніл
Група: КН-4-2
*/
#include <WiFi.h>
#include "DHTesp.h"
#include <WiFiClientSecure.h>
#include <UniversalTelegramBot.h> // Universal Telegram Bot Library written by Brian Lough: https://github.com/witnessmenow/Universal-Arduino-Telegram-Bot
#include <ArduinoJson.h>
#include <FastLED.h> // конфигурация матрицы // LED matrix configuration
#define NUM_LEDS 17 // количество светодиодов в матрице // number of LEDs
#define LED_PIN 13 // пин к которому подключена матрица // matrix pin
#define PHOTO_PIN 33 // Подключение фоторезистора
int brightness = 0; // Переменная для определения текущей яркости светодиодов
int mapBrightness(int lightValue) {
return map(lightValue, 0, 1023, 0, 255); // Функция для конвертации значения освещенности в диапазон яркости FastLED
}
int isLightTurned = 0;
const int LIGHT_THRESHOLD = 500; // Указываем пороговое значение освещенности для включения/выключения света
CRGB leds[NUM_LEDS];
// Подключение пинов датчиков
#define DHT_PIN1 23
#define DHT_PIN2 15
DHTesp dht1;
DHTesp dht2;
const int trig = 32;
const int echo = 33;
const char* SSID = "Wokwi-GUEST";
const char* password = "";
#define BOTtoken "6929559274:AAEAYaZqnH3BM7ASIA2DSfPOzBIOfrNguQ4"
#define CHAT_ID "687163088"
WiFiClientSecure client;
UniversalTelegramBot bot(BOTtoken, client);
int botRequestDelay = 500;
unsigned long lastTimeBotRan;
int statusCode;
void setup(void){
dht1.setup(DHT_PIN1, DHTesp::DHT22); //Инициалиазация DHT1 DHT2 датчиков
dht2.setup(DHT_PIN2, DHTesp::DHT22);
FastLED.addLeds<NEOPIXEL, LED_PIN>(leds, NUM_LEDS);
Serial.begin(9600);
Serial.begin(9500);
pinMode(trig, OUTPUT);
pinMode(echo, INPUT);
Serial.println();
Serial.println("Ініціалізація системи...");
WiFi.mode(WIFI_STA);
WiFi.begin(SSID, password);
client.setCACert(TELEGRAM_CERTIFICATE_ROOT);
Serial.print("З'єднення до WI-FI..");
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.print(".");
}
Serial.println();
Serial.println("З'єднано!");
}
void handleNewMessages(int numNewMessages) {
for (int i = 0; i < numNewMessages; i++)
{
if (bot.messages[i].type == "callback_query")
{
String text = bot.messages[i].text;
String chat_id = String(bot.messages[i].chat_id);
Serial.print("Кнопка: ");
Serial.println(text);
if (text == ("LAMP")){ // Команды от кнопки (Включение/выключение)
if (isLightTurned == 0){
fill_solid( leds, NUM_LEDS, CRGB(255, 255, 255));
isLightTurned = 1;
FastLED.show();
bot.sendMessage(chat_id, "Світло є!", "");
}
else if (isLightTurned == 1) {
fill_solid( leds, NUM_LEDS, CRGB(0, 0, 0));
isLightTurned = 0;
FastLED.show();
bot.sendMessage(chat_id, "Світло вимкнено", "");
}
}
if (text == ("COLORLAMP")){ //Рандом цвет (Скоро вырезан будет)
String keyboardJson = "[[{ \"text\" : \"Синій колір\", \"callback_data\" : \"BLUECOLOR\" }], [{ \"text\" : \"Красный спектр (для цветение)\", \"callback_data\" : \"REDCOLOR\" }]]";
bot.sendMessageWithInlineKeyboard(chat_id, "Оберіть колір для світла", "", keyboardJson);
}
if (text == ("REDCOLOR"))
{
fill_solid ( leds, NUM_LEDS, CRGB(255,0,0));
FastLED.show();
bot.sendMessage(chat_id, "Включено червоне світло", "");
}
if (text == ("BLUECOLOR"))
{
fill_solid ( leds, NUM_LEDS, CRGB(0,77,255));
FastLED.show();
bot.sendMessage(chat_id, "Включено синє світло", "");
}
if (text == ("INFODHT22")){ //Информация с датчика DHT22
float temperature1 = dht1.getTemperature();
float humidity1 = dht1.getHumidity();
float temperature2 = dht2.getTemperature();
float humidity2 = dht2.getHumidity();
String info = "🌡 Температура повітря: " + String(temperature1) + " °C" + ".\n";
info += "💧 Вологість повітря: " + String(humidity1) + " %" "\n";
info += "🌱 Температура ґрунту: " + String(temperature2) + " °C" "\n";
info += "🌱 Вологість ґрунту: " + String(humidity2) + " %" "\n";
bot.sendMessage(chat_id, info, "");
}
} else {
String chat_id = bot.messages[i].chat_id;
String text = bot.messages[i].text;
String from_name = bot.messages[i].from_name;
if (from_name == "")
from_name = "Guest";
if (text == "/start")
{
String keyboardJson = "[[{ \"text\" : \"Включити/Выкмкнути світло\", \"callback_data\" : \"LAMP\" }], [{ \"text\" : \"Змінити колір світла\", \"callback_data\" : \"COLORLAMP\" }], [{ \"text\" : \"Дані про стан теплиці\", \"callback_data\" : \"INFODHT22\" }]]";
bot.sendMessageWithInlineKeyboard(chat_id, "Оберіть команди для роботи із теплицею", "", keyboardJson);
}
}
}
}
void loop() {
int lightValue = analogRead(PHOTO_PIN); // Считываем значения с фоторезистора
brightness = mapBrightness(lightValue); // Конвертируем значение освещенности в диапазон яркости FastLED
FastLED.setBrightness(brightness); // Применяем яркость ко всем светодиодам
FastLED.show(); // Обновляем состояние светодиодов
delay(100);
if (millis() - lastTimeBotRan > botRequestDelay) {
int numNewMessages = bot.getUpdates(bot.last_message_received + 1);
Serial.println("Нове СМС : " + String(numNewMessages));
while(numNewMessages) {
Serial.println("Є відповідь!");
handleNewMessages(numNewMessages);
numNewMessages = bot.getUpdates(bot.last_message_received + 1);
}
lastTimeBotRan = millis();
}
}