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

  Рет қаралды 5,145

Arduino и прочие питомцы

Arduino и прочие питомцы

Күн бұрын

Радикальное увеличение точности RTC часов ESP32 с помощью внешнего кварца на 32768 Гц.
Код проекта из видео: github.com/Moo...
Ролик про настройку бота для Telegram: • Простейший Telegram BO...
PS: на все свои вопросы пытайтесь найти ответы самостоятельно! Гугл вам в помощь!

Пікірлер: 29
@The-Digital-Mind
@The-Digital-Mind Жыл бұрын
Спасибо большое! Очень полезная информация!
@StalkerSoft
@StalkerSoft Жыл бұрын
Спасибо! Очень интересная информация о возможности использовать два фремверка в одном проекте!
@-Darkweider
@-Darkweider Жыл бұрын
Реально интересно и полезно. Впрочем, как всегда.
@avechess
@avechess 5 ай бұрын
Лайк!
@Avenir-Sigrun
@Avenir-Sigrun Жыл бұрын
Вы молодец ).
@Физик-г4о
@Физик-г4о Жыл бұрын
Хотелось лайки в течении всего видео ставить.
@АлександрБулыга-н2г
@АлександрБулыга-н2г Жыл бұрын
Alex Morozov, спасибо за идею, очень интересно. Я правильно понял, если нам нужно подкрутить настройки ESP в Arduino, мы просто добавляем espidf к фреймворкам, правим в нём настройки и они применяются к фреймворку Arduino? Всё гениальное просто! Интересно, если поменять местами espidf и Arduino в строке framework, будет работать? т.е. настойки берутся из последнего фреймворка?
@alexmorozov73
@alexmorozov73 Жыл бұрын
У Arduino нет изменяемых настроек кроме настроек самого проекта, но это другое. Так что от перемены мест "слагаемых" "сумма" явно не изменится.
@borovtsovable
@borovtsovable Жыл бұрын
А что, так можно было? Пошёл копать!
@localixdots9698
@localixdots9698 Жыл бұрын
Вопрос к вам, задумался о теме и ваше видео попало под горячую руку)) Скажите довелось ли вам работать с Pi Pico RP2040? У него есть RTC внутренний, хотел заюзать эти часы, не могу разобраться какая в итоге точность будет, даташит либо читать не умею либо не вижу информации. Может есть опыт расскажите стоит или нет?
@alexmorozov73
@alexmorozov73 Жыл бұрын
Опыта нет. Если у RTC часов на плате свой кварц на низкую частоту (32768 Гц), то точность будет высокая, если тактируется от основного кварца через делитель, то точность будет хуже. Насколько - надо проверять.
@localixdots9698
@localixdots9698 Жыл бұрын
@@alexmorozov73 вы меня прям расстроили, я уже хотел схему рисовать без внешних часов. МК тактируется от 12мгц кварца. Придется тестирование делать
@Vasily7708
@Vasily7708 2 ай бұрын
Может ли esp32-s стартовать из deep sleep по внешнему сигналу (появление внешнего напряжения питания) или использовать небольшой интервал sleep? Какое потребление esp32-s в глубоком сне?
@alexmorozov73
@alexmorozov73 2 ай бұрын
Можно и от "цифрового" сигнала проснуться и от "аналогового" (напряжения), степень возни только различная. А сколько потребляет в глубоком сне именно ваша плата - мерять вам, потому что все платы разные. Если LDO не прожорливый и USB-UART моста нет, то можно рассчитывать примерно на 30 мкА. Но и это сильно зависит от обвязки и пр. На типовой плате скорее ближе к 100 мкА.
@КириллКалита-ч3ж
@КириллКалита-ч3ж 4 ай бұрын
А для esp8266 можно два фреймворка использовать?)) Что бы freertos на Ардуино заработал
@alexmorozov73
@alexmorozov73 4 ай бұрын
А зачем? Если есть куча свободного времени, то наверное можно перенести дурино-фреймворк для esp8266 на rtos-sdk, но вот снова "зачем"?...
@ВасилийШумилов-о8ь
@ВасилийШумилов-о8ь Жыл бұрын
Я бы наверное вышел из ситуации просто тупо каждый раз синхронизируя время
@СергейМочало-з4ь
@СергейМочало-з4ь Жыл бұрын
А нельза просто подстроить время как коррекция в часах? При старте с интернетом отсенхронизировать. Записать в епром коррекци. И у меня идея с часами модуль времени еормаоьный сделать все на есп добавить батарейку и как только нет питания то контролео в сон и наинает работать часы на ulp . Вроде ничего сложного нет...
@alexmorozov73
@alexmorozov73 Жыл бұрын
А зачем ULP? RTC счетчик и так сам прекрасно тикает в глубоком сне. Да и частота кварца ULP ядра такая же "точная", как и RTC. Учитывая непредсказуемость температурного дрифта, никакой постоянной компенсации точности RTC добиться без использования внешнего точного кварца невозможно.
@tituszx1
@tituszx1 Жыл бұрын
Пойду перекурю после увиденного
@СергейМочало-з4ь
@СергейМочало-з4ь Жыл бұрын
Сделай видео как в 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. Так что делай видео сам, будешЬ в топе еще долго :)
@СергейМочало-з4ь
@СергейМочало-з4ь Жыл бұрын
@@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 Жыл бұрын
И что это даст? Ничего, что дурино-фреймворк уже откомпилирован с конкретными параметрами и повлиять на них можно только пересборкой фреймворка?
@СергейМочало-з4ь
@СергейМочало-з4ь Жыл бұрын
@@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
@СергейМочало-з4ь
@СергейМочало-з4ь Жыл бұрын
Резонатор кварцевый 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; }
"Arduino" для CH32V003
24:27
Arduino и прочие питомцы
Рет қаралды 8 М.
PlatformIO или прощай, Arduino IDE
35:23
Arduino и прочие питомцы
Рет қаралды 157 М.
GIANT Gummy Worm Pt.6 #shorts
00:46
Mr DegrEE
Рет қаралды 75 МЛН
Поветкин заставил себя уважать!
01:00
МИНУС БАЛЛ
Рет қаралды 6 МЛН
Brawl Stars Edit😈📕
00:15
Kan Andrey
Рет қаралды 51 МЛН
Платы LuatOS ESP32C3
29:40
Arduino и прочие питомцы
Рет қаралды 25 М.
Измерение уровня жидкости с помощью ESP32
9:11
Arduino и прочие питомцы
Рет қаралды 8 М.
Вывод изображения с Arduino и ESP32 на монитор
3:59
Заметки ESPшника
Рет қаралды 30 М.
Использование PWM для управления адресным светодиодом APA106
20:20
RP2040 малинка без остинок
51:53
Arduino и прочие питомцы
Рет қаралды 9 М.
SuperMini - это Супер или Мини?
20:14
Arduino и прочие питомцы
Рет қаралды 3,9 М.
GIANT Gummy Worm Pt.6 #shorts
00:46
Mr DegrEE
Рет қаралды 75 МЛН