Universaltelegrambot.h и millis

Тема в разделе "Arduino & Shields", создана пользователем mir_art, 29 авг 2021.

  1. mir_art

    mir_art Нуб

    Всезнающие господа, прошу Вашей помощи!
    Хочу к откатным воротам привязать телеграмм бота, т.к. радио пульт и реле ловят не так далеко, да и ворота открываются медленно.
    От радио отказываться не собираюсь, т.к. когда пешком, то с пультом удобнее. Чтобы исключить наложение команд с брелка и телеграма, хочу в последнем поставить ограничение по времени замыкания реле. Но не работ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();
      }
     
          }
     
  2. b707

    b707 Гуру

    в этом коде нет никакого "реконнекта", связь с таймсервером используется только для того. чтобы вывести время в момент запуска бота.
    Если вам это время не нужно - все. что относится. кнему. можно смело выкинуть, в основном коде бота время никак не используется
     
  3. Airbus

    Airbus Радиохулиган Модератор

    Я так и сделал. С воротами сделал проще—команды Телеграмма управляют клоном радиобрелка находящимся в гараже тобишь эмулируют его. Команда Открыть посылает код Открыть (который надо предварительно считать с оригинального брелка и прописать в коде) а команда Закрыть соответственно посылает код Закрыть. Вот и все—никакого вмешательства в схему. Ворота думают что я рядом и управляю брелком. Но есть одно НО! В гараже должен быть интернет в виде WiFi сети
     
    Последнее редактирование: 29 авг 2021
    Andrey12 нравится это.
  4. mir_art

    mir_art Нуб

    По вопросу длительности включения реле не подскажите?
     
  5. mir_art

    mir_art Нуб

    А схемы и нет. Сам собираю, мотор асинхронник, ПЧ и редуктор(для создания момента), детектор препятствий(лазер) с Али.
     
  6. Airbus

    Airbus Радиохулиган Модератор

    Тоесть Вы сами собираете механизм открытия/закрытия дверей?
    Не подскажу. Тут надо на месте смотреть как шустро сам механизм будет работать. Я выбрал способ управления готовым механизмом по RF
     
  7. b707

    b707 Гуру

    у вас в коде нет никакого "ограничения времени замыкания реле". Напишите яснее, что вы имели в виду под "не работaет millis"