• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Вопрос Реагирование на кнопку в режиме deepsleep

SkyN

New member
Требуется, чтобы большая часть времени esp8266 был в режиме сна, но реагировал на нажатие кнопки. Для реализации этого придумал схему, по которой:
1) При нажатии кнопки низкий уровень на RESET и заряжается конденсатор C1.
2) Если же перезагрузка произошла по просыпанию, т.е. сигналом с GPIO16, то конденсатор не зарядился, т.к. диод.
3) Проснувшись, ESP проверяет уровень на GPIO14. Если уровень низкий, то значит кнопка была нажата. Если уровень высокий, значит проснулись по таймеру.

Это одна из первых моих схем. Посмотрите, плз, будет ли она работать?

Какие номиналы выбрать для С1, R1?

Оффтоп, не имеющий отношения к кнопке: При таком подключении R2 схема стартует в нормальном режиме, а при замыкании второго контакта коннектора CON1 на землю и перезагрузке войдет в режим прошивки? Какой номинал R2 выбрать?
 

Вложения

  • 7.5 KB Просмотры: 38

pvvx

Активный участник сообщества
1) Зачем вы делаете КЗ выходу GPIO16 через диод на корпус?
2) Зачем вы убиваете вход/выход GPIO14 разрядом через него электролита при отключении питания? Он может не выдержать и обидеться, то на него подают отрицательное напряжение и большущий ток :) Следующими обидятся Reset и GPIO16...
Время разряда емкостей по питанию должно превышать скорость разряда цепи R1 C1 при максимальных нагрузках.
3) Зачем кнопкой делается импульс по питанию? Чтобы убить кондер или сделать сбой программы?
 
Последнее редактирование:

SkyN

New member
Удалил сообщение, т.к. информация в нём устарела.
 
Последнее редактирование:

SkyN

New member
1) GPIO16 защитил диодом D2
2) GPIO14 программно планирую настроить в качестве входа, добавил емкость по питанию C2.
Reset и GPIO16 защитил диодом D3
3) что делать с импульсом по питанию не знаю. C2 меня спасёт? Добавил резистор R4 к кнопке.

Так схема похожа на работающую?
4.png
 

pvvx

Активный участник сообщества
1) GPIO16 защитил диодом D2
Поставьте резистор от 300 Ом. Диод дорог и можно спутать концы :) http://esp8266.ru/forum/threads/raz...go-webservera-na-esp8266.56/page-16#post-3379
2) GPIO14 программно планирую настроить в качестве входа, добавил емкость по питанию C2.
Надо просто уменьшить емкость С1 - там за глаза десяток нан (его энергии не хватит убить вывод, если он всегда = вход). R1 - увеличить, т.е. выкинуть. Включить внутреннюю подтяжку на I/O...
Reset и GPIO16 защитил диодом D3
Тоже резистор.
3) что делать с импульсом по питанию не знаю. C2 меня спасёт? Добавил резистор R4 к кнопке.
Забыть, если сделано как перечислено выше.
Диоды 1N5908 не применять - у них большой обратный ток = мА!
Обычного, типа КД521A, там за глаза, если надо не SMD и всё работает...

Так-же у чипа есть нога CH_PD или чип_енабле. По ней он тоже успешно сбрасывается и узнать причину сброса можно в ячейке памяти RTC (физический адрес 0x60001060, старт был по =1 reset, =0 ch_pd;):
ch_pd_reset.gif
 
Последнее редактирование:

SkyN

New member
Про ячейку памяти RTC очень интересная информация. Мне не требуется различать включение питания и нажатие на кнопку. Т.е. если кнопку сделать размыкающей питание, то на RESET в ячейке памяти RTC будет 1, а на включение или нажатие кнопки 0. Попробую.
 

pvvx

Активный участник сообщества
Т.е. если кнопку сделать размыкающей питание, то на RESET в ячейке памяти RTC будет 1, а на включение или нажатие кнопки 0.
Если выключалось питание или дергали ногу CH_PD, то в 0x60001060 будет 0. Если старт произошел по RESET, то 1. Значение в младших 16 битах. И я ошибся - в память RTC у system_rtc_mem_read() она не входит, т.к. эта процедура читает только часть памяти RTC с 0x60001100.
Читается так x = (*((uint32 *)0x60001060))&0xffff)
В старших 16 битах находится значение прошлого режима deep-sleep: x = (*((uint32 *)0x60001060))>>16 ); // если нет отдельного питания RTC и deep_sleep не устанавливался/применялся при текущем включения питания чипа, то значение неопределенно (там хлам).
 
Последнее редактирование:
Сверху Снизу