ESP32 RTC часы с внешним кварцем

แชร์
ฝัง
  • เผยแพร่เมื่อ 26 ม.ค. 2023
  • Радикальное увеличение точности RTC часов ESP32 с помощью внешнего кварца на 32768 Гц.
    Код проекта из видео: github.com/MoonFox2006/Tele_RTC
    Ролик про настройку бота для Telegram: • Простейший Telegram BO...
    PS: на все свои вопросы пытайтесь найти ответы самостоятельно! Гугл вам в помощь!
  • วิทยาศาสตร์และเทคโนโลยี

ความคิดเห็น • 29

  • @StalkerSoft
    @StalkerSoft ปีที่แล้ว +2

    Спасибо! Очень интересная информация о возможности использовать два фремверка в одном проекте!

  • @The-Digital-Mind
    @The-Digital-Mind ปีที่แล้ว +3

    Спасибо большое! Очень полезная информация!

  • @-Darkweider
    @-Darkweider ปีที่แล้ว

    Реально интересно и полезно. Впрочем, как всегда.

  • @Avenir-Sigrun
    @Avenir-Sigrun ปีที่แล้ว

    Вы молодец ).

  • @avechess
    @avechess 3 หลายเดือนก่อน

    Лайк!

  • @user-cm9nh5hv7w
    @user-cm9nh5hv7w ปีที่แล้ว +2

    Alex Morozov, спасибо за идею, очень интересно. Я правильно понял, если нам нужно подкрутить настройки ESP в Arduino, мы просто добавляем espidf к фреймворкам, правим в нём настройки и они применяются к фреймворку Arduino? Всё гениальное просто! Интересно, если поменять местами espidf и Arduino в строке framework, будет работать? т.е. настойки берутся из последнего фреймворка?

    • @alexmorozov73
      @alexmorozov73  ปีที่แล้ว +3

      У Arduino нет изменяемых настроек кроме настроек самого проекта, но это другое. Так что от перемены мест "слагаемых" "сумма" явно не изменится.

  • @localixdots9698
    @localixdots9698 ปีที่แล้ว

    Вопрос к вам, задумался о теме и ваше видео попало под горячую руку)) Скажите довелось ли вам работать с Pi Pico RP2040? У него есть RTC внутренний, хотел заюзать эти часы, не могу разобраться какая в итоге точность будет, даташит либо читать не умею либо не вижу информации. Может есть опыт расскажите стоит или нет?

    • @alexmorozov73
      @alexmorozov73  ปีที่แล้ว

      Опыта нет. Если у RTC часов на плате свой кварц на низкую частоту (32768 Гц), то точность будет высокая, если тактируется от основного кварца через делитель, то точность будет хуже. Насколько - надо проверять.

    • @localixdots9698
      @localixdots9698 ปีที่แล้ว

      @@alexmorozov73 вы меня прям расстроили, я уже хотел схему рисовать без внешних часов. МК тактируется от 12мгц кварца. Придется тестирование делать

  • @Vasily7708
    @Vasily7708 20 วันที่ผ่านมา

    Может ли esp32-s стартовать из deep sleep по внешнему сигналу (появление внешнего напряжения питания) или использовать небольшой интервал sleep? Какое потребление esp32-s в глубоком сне?

    • @alexmorozov73
      @alexmorozov73  20 วันที่ผ่านมา

      Можно и от "цифрового" сигнала проснуться и от "аналогового" (напряжения), степень возни только различная. А сколько потребляет в глубоком сне именно ваша плата - мерять вам, потому что все платы разные.
      Если LDO не прожорливый и USB-UART моста нет, то можно рассчитывать примерно на 30 мкА. Но и это сильно зависит от обвязки и пр. На типовой плате скорее ближе к 100 мкА.

  • @user-wh6hn7tr5e
    @user-wh6hn7tr5e ปีที่แล้ว

    А нельза просто подстроить время как коррекция в часах? При старте с интернетом отсенхронизировать. Записать в епром коррекци. И у меня идея с часами модуль времени еормаоьный сделать все на есп добавить батарейку и как только нет питания то контролео в сон и наинает работать часы на ulp . Вроде ничего сложного нет...

    • @alexmorozov73
      @alexmorozov73  ปีที่แล้ว +1

      А зачем ULP? RTC счетчик и так сам прекрасно тикает в глубоком сне. Да и частота кварца ULP ядра такая же "точная", как и RTC.
      Учитывая непредсказуемость температурного дрифта, никакой постоянной компенсации точности RTC добиться без использования внешнего точного кварца невозможно.

  • @user-sf9nn6dh2q
    @user-sf9nn6dh2q 2 หลายเดือนก่อน

    А для esp8266 можно два фреймворка использовать?)) Что бы freertos на Ардуино заработал

    • @alexmorozov73
      @alexmorozov73  2 หลายเดือนก่อน

      А зачем? Если есть куча свободного времени, то наверное можно перенести дурино-фреймворк для esp8266 на rtos-sdk, но вот снова "зачем"?...

  • @user-jq1ml7yx4t
    @user-jq1ml7yx4t ปีที่แล้ว +1

    Хотелось лайки в течении всего видео ставить.

  • @borovtsovable
    @borovtsovable ปีที่แล้ว +1

    А что, так можно было? Пошёл копать!

  • @user-bh2ot5ks8f
    @user-bh2ot5ks8f ปีที่แล้ว

    Я бы наверное вышел из ситуации просто тупо каждый раз синхронизируя время

  • @tituszx1
    @tituszx1 ปีที่แล้ว

    Пойду перекурю после увиденного

  • @user-wh6hn7tr5e
    @user-wh6hn7tr5e ปีที่แล้ว

    Сделай видео как в IDE включить будеш в топе ещё долго подсказки boards.txt esp32.menu.CPUFreq.ext=External Quartz
    esp32.menu.CPUFreq.ext.build.f_cpu=32768L
    esp32.menu.CPUFreq.32=32.768kHz
    esp32.menu.CPUFreq.32.build.f_cpu=32768L

    • @alexmorozov73
      @alexmorozov73  ปีที่แล้ว

      А причем здесь CPUFreq? Это частота основных ядер, а не источник тактирования RTC.
      Так что делай видео сам, будешЬ в топе еще долго :)

    • @user-wh6hn7tr5e
      @user-wh6hn7tr5e ปีที่แล้ว

      @@alexmorozov73 menu.QuartzFreq=Quartz Frequency
      menu.RTC_CLOCK_SOURCE=RTC Clock Source
      esp32.build.extra_flags=-DQUARTZ_FREQ={build.quartz_freq}
      esp32.menu.QuartzFreq.disabled=Disabled
      esp32.menu.QuartzFreq.disabled.build.quartz_freq=
      esp32.menu.QuartzFreq.32k=32.768kHz
      esp32.menu.QuartzFreq.32k.build.quartz_freq=32768L
      esp32.menu.RTC_CLOCK_SOURCE.Internal_RC=Internal RC oscillator
      esp32.menu.RTC_CLOCK_SOURCE.Internal_RC.build.define=CONFIG_ESP32_RTC_CLOCK_SOURCE_INTERNAL_RC
      esp32.menu.RTC_CLOCK_SOURCE.External_crystal=External crystal oscillator
      esp32.menu.RTC_CLOCK_SOURCE.External_crystal.build.define=CONFIG_ESP32_RTC_CLOCK_SOURCE_EXTERNAL_CRYSTAL так может поближе

    • @alexmorozov73
      @alexmorozov73  ปีที่แล้ว

      И что это даст? Ничего, что дурино-фреймворк уже откомпилирован с конкретными параметрами и повлиять на них можно только пересборкой фреймворка?

    • @user-wh6hn7tr5e
      @user-wh6hn7tr5e ปีที่แล้ว

      @@alexmorozov73 Понял спосибо пош устанавливать Я думал не так всё плохо..просто минюшки добавить ну может кто прочтёт и в обновления уже с этими будет добавьтmenu.QuartzFreq=Quartz Frequency
      esp32.menu.QuartzFreq=Quartz Frequency
      esp32.menu.QuartzFreq.disabled=Disabled
      esp32.menu.QuartzFreq.disabled.build.define=CONFIG_QUARTZ_FREQ_DISABLED
      esp32.menu.QuartzFreq.32k=32.768kHz
      esp32.menu.QuartzFreq.32k.build.define=CONFIG_QUARTZ_FREQ_32768
      menu.RTCCLOCKSOURCE=RTC Clock Source
      esp32.menu.RTCCLOCKSOURCE.int_rc=Internal 150kHz RC oscillator
      esp32.menu.RTCCLOCKSOURCE.int_rc.build.define=CONFIG_ESP32_RTC_CLK_SRC_INT_RC
      esp32.menu.RTCCLOCKSOURCE.ext_crys=External 32kHz crystal
      esp32.menu.RTCCLOCKSOURCE.ext_crys.build.define=CONFIG_ESP32_RTC_CLK_SRC_EXT_CRYS
      esp32.menu.RTCCLOCKSOURCE.ext_osc=External 32kHz oscillator at 32K_XN pin
      esp32.menu.RTCCLOCKSOURCE.ext_osc.build.define=CONFIG_ESP32_RTC_CLK_SRC_EXT_OSC
      esp32.menu.RTCCLOCKSOURCE.int_8md=Internal 8.5MHz oscillator, divided by 256 (~33kHz)
      esp32.menu.RTCCLOCKSOURCE.int_8md.build.define=CONFIG_ESP32_RTC_CLK_SRC_INT_8MD256
      menu.RTCCalCycles=RTC CalCycles
      esp32.menu.RTCCalCycles.disabled=Disabled (0)
      esp32.menu.RTCCalCycles.disabled.build.define=CONFIG_ESP32_RTC_CLK_CAL_CYCLES=0
      esp32.menu.RTCCalCycles.rc_1024=RC Oscillator (1024 cycles)
      esp32.menu.RTCCalCycles.rc_1024.build.define=CONFIG_ESP32_RTC_CLK_CAL_CYCLES=1024
      esp32.menu.RTCCalCycles.crys_3000=Crystal Oscillator (3000 cycles)
      esp32.menu.RTCCalCycles.crys_3000.build.define=CONFIG_ESP32_RTC_CLK_CAL_CYCLES=3000
      menu.XtalCalRetry=XTAL Calibration Retry
      esp32.menu.XtalCalRetry.default=Default (1)
      esp32.menu.XtalCalRetry.default.build.define=CONFIG_ESP32_RTC_XTAL_CAL_RETRY=1
      esp32.menu.XtalCalRetry.higher=Higher (3)
      esp32.menu.XtalCalRetry.higher.build.define=CONFIG_ESP32_RTC_XTAL_CAL_RETRY=3
      menu.BootstrapCycles=Bootstrap Cycles for External 32kHz Crystal
      esp32.menu.BootstrapCycles.disabled=Disabled (0)
      esp32.menu.BootstrapCycles.disabled.build.define=CONFIG_ESP32_RTC_XTAL_BOOTSTRAP_CYCLES=0
      esp32.menu.BootstrapCycles.default=Default (150)
      esp32.menu.BootstrapCycles.default.build.define=CONFIG_ESP32_RTC_XTAL_BOOTSTRAP_CYCLES=150
      menu.XtalFreq=Main XTAL Frequency
      esp32.menu.XtalFreq.auto=Autodetect
      esp32.menu.XtalFreq.auto.build.define=CONFIG_ESP32_XTAL_FREQ_AUTO=1
      esp32.menu.XtalFreq.26=26 MHz
      esp32.menu.XtalFreq.26.build.define=CONFIG_ESP32_XTAL_FREQ_26=1
      esp32.menu.XtalFreq.40=40 MHz
      esp32.menu.XtalFreq.40.build.define=CONFIG_ESP32_XTAL_FREQ_40=1
      menu.BasicRom=Basic ROM
      esp32.menu.BasicRom.disabled=Disable
      esp32.menu.BasicRom.disabled.build.define=CONFIG_ESP32_DISABLE_BASIC_ROM=1
      esp32.menu.BasicRom.enabled=Enable
      esp32.menu.BasicRom.enabled.build.define=CONFIG_ESP32_DISABLE_BASIC_ROM=0

    • @user-wh6hn7tr5e
      @user-wh6hn7tr5e ปีที่แล้ว

      Резонатор кварцевый X321532768KGD2SI / 32.768 kHz, 20ppm, 12.5pF, 3.2x1.5 С таким не заработало, купил кварц и два конденсатора вот не понятно резистор нужна или нет кусок переделал а группу шлет static bool teleSend(uint32_t rtcTime, uint32_t ntpTime) {
      WiFiClientSecure *tcp;
      HTTPClient *https;
      bool result = false;
      tcp = new WiFiClientSecure();
      if (tcp) {
      tcp->setInsecure();
      https = new HTTPClient();
      if (https) {
      char msg[256];
      String answer;
      int64_t chat_id = TELE_CHAT;
      // Если TELE_CHAT равен 0, выходим из функции, не отправляя сообщение
      if (TELE_CHAT == 0) {
      Serial.println("TELE_CHAT is zero, not sending a message!");
      delete https;
      delete tcp;
      return false;
      }

      if (TELE_CHAT < 0) {
      chat_id = TELE_CHAT; // Заменяем chat_id значением TELE_CHAT, если оно отрицательное
      }
      // Для положительного значения TELE_CHAT оставляем chat_id без изменений
      snprintf(msg, sizeof(msg), "api.telegram.org/bot%s/", TELE_KEY);
      Serial.print("Connecting to Telegram BOT API... ");
      if (https->begin(*tcp, msg)) {
      Serial.println("OK");
      https->addHeader("Content-Type", "application/json");
      https->addHeader("Connection", "close");
      if (teleMsgId)
      sprintf(msg, "{\"method\":\"editMessageText\",\"chat_id\":\"%" PRId64 "\",\"message_id\":%d", chat_id, teleMsgId);
      else
      sprintf(msg, "{\"method\":\"sendMessage\",\"chat_id\":\"%" PRId64 "\"", chat_id);
      sprintf(&msg[strlen(msg)], ",\"text\":\"RTC time: %u
      NTP time: %u
      Sleep duration: %u sec.\"}",
      rtcTime, ntpTime, sleepDuration / 1000);
      Serial.print("Sending BOT message ");
      result = https->POST(msg) == 200;
      if (result)
      Serial.println("OK");
      else
      Serial.println("FAIL!");
      answer = https->getString();
      if (result) {
      if (getMessageId(answer.c_str())) {
      Serial.printf("Message Id: %d
      ", teleMsgId);
      }
      } else {
      if (teleMsgId) {
      sprintf(msg, "{\"method\":\"sendMessage\",\"chat_id\":\"%" PRId64 "\",\"text\":\"RTC time: %u
      NTP time: %u
      Sleep duration: %u sec.\"}", chat_id, rtcTime, ntpTime, sleepDuration / 1000);
      Serial.print("Resending BOT message ");
      result = https->POST(msg) == 200;
      if (result)
      Serial.println("OK");
      else
      Serial.println("FAIL!");
      answer = https->getString();
      if (result) {
      if (getMessageId(answer.c_str())) {
      Serial.printf("Message Id: %d
      ", teleMsgId);
      }
      }
      }
      }
      https->end();
      } else
      Serial.println("FAIL!");
      delete https;
      }
      delete tcp;
      }
      return result;
      }