Всезнающие господа, прошу Вашей помощи! Хочу к откатным воротам привязать телеграмм бота, т.к. радио пульт и реле ловят не так далеко, да и ворота открываются медленно. От радио отказываться не собираюсь, т.к. когда пешком, то с пультом удобнее. Чтобы исключить наложение команд с брелка и телеграма, хочу в последнем поставить ограничение по времени замыкания реле. Но не работaет millis! Уже все перечитал, не могу найти схожей проблемы, прошу Вашей помощи! Второе: иногда происходит зависания при коннекте к "pool.ntp.org", можно ли обойтись без данного пункта? Если нет, то как настроить реконект через промежуток времени? Код (C++): #include <ESP8266WiFi.h> #include <WiFiClientSecure.h> #include <UniversalTelegramBot.h> #define WIFI_SSID "" #define WIFI_PASSWORD "" #define BOT_TOKEN "" #define CHAT_ID "" const unsigned long BOT_MTBS = 1000; X509List cert(TELEGRAM_CERTIFICATE_ROOT); WiFiClientSecure secured_client; UniversalTelegramBot bot(BOT_TOKEN, secured_client); unsigned long bot_lasttime; const int Relay1 = D5; //Реле1 const int Relay2 = D6; //Реле2 int Relay1Status = 0; //Переменная для хранения статуса Реле1 int Relay2Status = 0; //Переменная для хранения статуса Реле2 uint32_t myTimer1; void handleNewMessages(int numNewMessages) { Serial.print("обработка Новых Сообщений "); Serial.println(numNewMessages); for (int i = 0; i < numNewMessages; i++) { 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 == "/open")) { digitalWrite(Relay1, HIGH); Relay2Status = 0; Relay1Status = 1; if (millis() - myTimer1 >= 8000) { // ищем разницу myTimer1 = millis(); digitalWrite(Relay1, LOW); } } if (text == "/stop") { digitalWrite(Relay2, LOW); digitalWrite(Relay1, LOW); Relay2Status = 0; Relay1Status = 0; } if (text == "/close") { digitalWrite(Relay2, HIGH); digitalWrite(Relay1, LOW); Relay2Status = 1; Relay1Status = 0; if (millis() - myTimer1 >= 8000) { // ищем разницу myTimer1 = millis(); digitalWrite(Relay2, LOW); if (text == "/start") { String welcome = "Бот ворот\n"; welcome += "/open : открыть ворота\n"; welcome += "------------------------------\n"; welcome += "/close : закрыть ворота\n"; welcome += "------------------------------\n"; welcome += "/stop : экстренный останов\n"; welcome += "------------------------------\n"; } } } void setup() { Serial.begin(115200); Serial.println(); pinMode(Relay1, OUTPUT); // Инициализируем как Выход pinMode(Relay2, OUTPUT); // Инициализируем как Выход digitalWrite(Relay1, LOW); digitalWrite(Relay2, LOW); // attempt to connect to Wifi network: configTime(0, 0, "pool.ntp.org"); // Сервер точного времени UTC NTP secured_client.setTrustAnchors(&cert); // Добавляем сертификат api.telegram.org Serial.print("Соединяемся с Wifi "); Serial.print(WIFI_SSID); WiFi.begin(WIFI_SSID, WIFI_PASSWORD); while (WiFi.status() != WL_CONNECTED) { Serial.print("."); delay(500); } Serial.print("\nСоединились. IP адрес: "); Serial.println(WiFi.localIP()); Serial.print("Получение времени: "); time_t now = time(nullptr); while (now < 24 * 3600) { Serial.print("."); delay(100); now = time(nullptr); } Serial.println(now); } void loop() { if (millis() - bot_lasttime > BOT_MTBS) { int numNewMessages = bot.getUpdates(bot.last_message_received + 1); while (numNewMessages) { Serial.println("Ответ получен"); handleNewMessages(numNewMessages); numNewMessages = bot.getUpdates(bot.last_message_received + 1); } bot_lasttime = millis(); } }
в этом коде нет никакого "реконнекта", связь с таймсервером используется только для того. чтобы вывести время в момент запуска бота. Если вам это время не нужно - все. что относится. кнему. можно смело выкинуть, в основном коде бота время никак не используется
Я так и сделал. С воротами сделал проще—команды Телеграмма управляют клоном радиобрелка находящимся в гараже тобишь эмулируют его. Команда Открыть посылает код Открыть (который надо предварительно считать с оригинального брелка и прописать в коде) а команда Закрыть соответственно посылает код Закрыть. Вот и все—никакого вмешательства в схему. Ворота думают что я рядом и управляю брелком. Но есть одно НО! В гараже должен быть интернет в виде WiFi сети
А схемы и нет. Сам собираю, мотор асинхронник, ПЧ и редуктор(для создания момента), детектор препятствий(лазер) с Али.
Тоесть Вы сами собираете механизм открытия/закрытия дверей? Не подскажу. Тут надо на месте смотреть как шустро сам механизм будет работать. Я выбрал способ управления готовым механизмом по RF
у вас в коде нет никакого "ограничения времени замыкания реле". Напишите яснее, что вы имели в виду под "не работaет millis"