Всех приветствую.
Программистом не являюсь, но на просторах интернета нашел код управления и немного его поковырял. Спустя пару вечеров справился.
На данный момент код работает. Через меню в чате с telegram ботом управляю модулем на 4 реле (огород, сад, теплица, печь)и получаю статус работы.
Что хочу, но не знаю как запилить:
-каким-то образом нужно прилепить к ESP32 4 физические тактовые кнопки которые так же будут управлять реле (если телефон не под рукой)
-добавить датчик температуры и влажности
-добавить маленький oled дисплей 128×64 на котором будет отображаться температура, влажность и статус каждого канала реле.
Не знаю насколько фантастична моя задумка, но если кто поможет буду благодарен.
Есть куча всяких wifi релюшек, но они все работают от 220 вольт, я мне нужны 12.
На сарай установлены две солнечные панели которые через контроллер заряжают 80Ач аккумулятор (освещение в сарае, магнитолу, роутер и две камеры тянет легко). Не хочу делать привязку к электрической сети от дома.
/* Rui Santos Complete project details at https://RandomNerdTutorials.com/telegram-control-esp32-esp8266-nodemcu-outputs/ ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ Использовал библиотеки вот таких версий ↓↓↓↓↓↓↓↓↓↓↓ ArduinoJson -by Benoit ► 6.15.2 UniversalTelegramBot ► 1.3.0. ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ */ #ifdef ESP32 #include <WiFi.h> #else #include <ESP8266WiFi.h> #endif #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> // Replace with your network credentials const char* ssid = "сюда WIFI"; // ▓▓ const char* password = "сюда пароль от WIFI"; //▓▓ // Initialize Telegram BOT #define BOTtoken "сюда токен бота" // ▓▓ // Use @myidbot to find out the chat ID of an individual or a group // Also note that you need to click "start" on a bot before it can // message you #define CHAT_ID "сюда ваш ID телеграм" // ▓▓ #ifdef ESP8266 X509List cert(TELEGRAM_CERTIFICATE_ROOT); #endif WiFiClientSecure client; UniversalTelegramBot bot(BOTtoken, client); // Checks for new messages every 1 second. int botRequestDelay = 1000; unsigned long lastTimeBotRan; const int ledPin = 2; const int led4Pin = 4; const int led16Pin = 16; const int led17Pin = 17; bool ledState = LOW; bool led4State = LOW; bool led16State = LOW; bool led17State = LOW; // Handle what happens when you receive new messages void handleNewMessages(int numNewMessages) { Serial.println("handleNewMessages"); Serial.println(String(numNewMessages)); for (int i=0; i<numNewMessages; i++) { // Chat id of the requester String chat_id = String(bot.messages[i].chat_id); if (chat_id != CHAT_ID){ bot.sendMessage(chat_id, "Unauthorized user", ""); continue; } // Print the received message String text = bot.messages[i].text; Serial.println(text); String from_name = bot.messages[i].from_name; if (text == "/start") { String welcome = "Привет, " + from_name + ".\n"; welcome += "В сети! Готов!\n\n"; welcome += "🟢-/led_on сад ON \n\n"; welcome += "🔴-/led_off сад OFF \n\n"; welcome += "🟢-/led4_on огород ON \n\n"; welcome += "🔴-/led4_off огород OFF \n\n"; welcome += "🟢-/led16_on теплица ON \n\n"; welcome += "🔴-/led16_off теплица OFF \n\n"; welcome += "🟢-/led17_on печь ON \n\n"; welcome += "🔴-/led17_off печь OFF \n\n\n"; welcome += "🟡-/state - статус реле \n"; bot.sendMessage(chat_id, welcome, ""); } if (text == "/led_on") { bot.sendMessage(chat_id, "🟢-сад", ""); ledState = HIGH; digitalWrite(ledPin, ledState); } if (text == "/led_off") { bot.sendMessage(chat_id, "🔴-сад", ""); ledState = LOW; digitalWrite(ledPin, ledState); } if (text == "/led4_on") { bot.sendMessage(chat_id, "🟢-огород", ""); led4State = HIGH; digitalWrite(led4Pin, led4State); } if (text == "/led4_off") { bot.sendMessage(chat_id, "🔴-огород", ""); led4State = LOW; digitalWrite(led4Pin, led4State); } if (text == "/led16_on") { bot.sendMessage(chat_id, "🟢-теплица", ""); led16State = HIGH; digitalWrite(led16Pin, led16State); } if (text == "/led16_off") { bot.sendMessage(chat_id, "🔴-теплица", ""); led16State = LOW; digitalWrite(led16Pin, led16State); } if (text == "/led17_on") { bot.sendMessage(chat_id, "🟢-печь", ""); led17State = HIGH; digitalWrite(led17Pin, led17State); } if (text == "/led17_off") { bot.sendMessage(chat_id, "🔴-печь", ""); led17State = LOW; digitalWrite(led17Pin, led17State); } if (text == "/state") { if (digitalRead(ledPin)){ bot.sendMessage(chat_id, "🟢-сад", ""); } else{ bot.sendMessage(chat_id, "🔴-сад", ""); } if (digitalRead(led4Pin)){ bot.sendMessage(chat_id, "🟢-огород", ""); } else{ bot.sendMessage(chat_id, "🔴-огород", ""); } if (digitalRead(led16Pin)){ bot.sendMessage(chat_id, "🟢-теплица", ""); } else{ bot.sendMessage(chat_id, "🔴-теплица", ""); } if (digitalRead(led17Pin)){ bot.sendMessage(chat_id, "🟢-печь", ""); } else{ bot.sendMessage(chat_id, "🔴-печь", ""); } } } } void setup() { Serial.begin(115200); #ifdef ESP8266 configTime(0, 0, "pool.ntp.org"); // get UTC time via NTP client.setTrustAnchors(&cert); // Add root certificate for api.telegram.org #endif pinMode(ledPin, OUTPUT); pinMode(led4Pin, OUTPUT); pinMode(led16Pin, OUTPUT); pinMode(led17Pin, OUTPUT); digitalWrite(ledPin, ledState); digitalWrite(led4Pin, led4State); digitalWrite(led16Pin, led16State); digitalWrite(led17Pin, led17State); // Connect to Wi-Fi WiFi.mode(WIFI_STA); WiFi.begin(ssid, password); #ifdef ESP32 client.setCACert(TELEGRAM_CERTIFICATE_ROOT); // Add root certificate for api.telegram.org #endif while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("Connecting to WiFi.."); } // Print ESP32 Local IP Address Serial.println(WiFi.localIP()); } void loop() { if (millis() > lastTimeBotRan + botRequestDelay) { int numNewMessages = bot.getUpdates(bot.last_message_received + 1); while(numNewMessages) { Serial.println("got response"); handleNewMessages(numNewMessages); numNewMessages = bot.getUpdates(bot.last_message_received + 1); } lastTimeBotRan = millis(); } }
Добрый день, отличная вещь 👍
По расширению функционала - все абсолютно реализуемо, лучше всего разбить на этапы: подключить кнопки, получить с них сигнал, затем интегрировать в текущий вариант проекта и т. д.