Сброс настроек NodeMCU при долгом нажатии на RST

Добрый день!

Собственно, вопрос изложен в теме поста.

Устройство на базе NodeMCU (ESP8266), которое я делаю, должно иметь возможность:

1. При первом запуске создавать собственную точку доступа с IP и Web-интерфейсом.


2. При подключении к ней с компьютера, смартфона и т.п. после ввода IP в браузере выдавать экран для ввода имени точки доступа Wi-Fi и ее пароля.


3. После ввода - сохранять введенную информацию в EEPROM и  в дальнейшем подключаться к указанной точке доступа.


4. При долгом нажатии кнопки RST в процессе включения - сбрасывать сохраненную точку и вновь возвращаться к п. 1.


Я нашел в Интернете скетч для Arduino IDE, который проделывает почти всё из вышеперечисленного.


НО!


Для сброса настроек используется кнопка, подключенная к GPIO5.


Как вместо этого "отловить" долгое нажатие на RST?


Спасибо!


UPD: наверное, стоит уточнить, что я не выдумал это из головы.


Цитирую собственный комментарий:


"Когда мне лень писать свою прошивку, я генерирую готовую на сайте https://wifi-iot.com/.


Вот как там это устроено:


"При первом включении модуль включается в режим safe mode автоматически, так как не содержит имени точки доступа.


В режиме safe mode в эфире появится точка с именем WiFi-IoT, к которой можно подключиться, используя смартфон или ноутбук.


В режим safe mode еще можно попасть, замкнув между собой RX и TX и перезапустив модуль, или нажать 3 раза подряд (с интервалом нажатия около секунды) кнопку RESET на ESP8266".


Т.е. длинного нажатия нет, но есть несколько коротких.

Как-то же это реализовано..."

Arduino & Pi

1.4K постов20.6K подписчиков

Добавить пост

Правила сообщества

В нашем сообществе запрещается:

• Добавлять посты не относящиеся к тематике сообщества, либо не несущие какой-либо полезной нагрузки (флуд)

• Задавать очевидные вопросы в виде постов, не воспользовавшись перед этим поиском

• Выкладывать код прямо в посте - используйте для этого сервисы ideone.com, gist.github.com или схожие ресурсы (pastebin запрещен)

• Рассуждать на темы политики

• Нарушать установленные правила Пикабу

7
Автор поста оценил этот комментарий

Хм... А это у всех выскакивает в рекомендациях, кто хочет сброса настроек через RST?

Иллюстрация к комментарию
Автор поста оценил этот комментарий

Да, надо обнулять по софтверным часам, так как RTC там нету.

раскрыть ветку (1)
Автор поста оценил этот комментарий

Ну или просто ставить, например, delay (5000) перед обнулением.


В принципе, тоже своего рода использование внутреннего таймера...

1
Автор поста оценил этот комментарий

Некорректный немного вопрос. По нажатию - проц идёт на 0-й адрес, и похрен чего там было в памяти и где что выполнялось. По отпусканию - понеслось исполнение чего-то там с нулевого адреса. Резет у настольного компа так же работает. Там по отпусканию выполняем зашитое в биос, начиная с нулевого адреса.


А в данном примере - если мы успели сбросить через RST девайс за секунду после старта, то прога не успеет сбросить счетчик нажатий, и проверит его при следующем выполнении. И так 3 раза. А вы точно программист?

раскрыть ветку (1)
Автор поста оценил этот комментарий

Эээ... Причем здесь - программист я или нет?


Принцип работы кнопки Reset мне до сих пор не требовался, поэтому я его не знал.


Кстати, спасибо, что объяснили :)


Алгоритм Ваш я понял, просто надеялся, что есть способ попроще...

показать ответы
3
Автор поста оценил этот комментарий

Долгое нажатие на RST ты никак программно не отловишь. Это перезапуск процессора по сути.

У ребят (с 3-хкратным нажатием), реализовано к примеру так:

При запуске проверяем значение некоей ячейки памяти в EMMC.

- Если 0 - пишем 1, ждем секунду, пишем 0.

- Если 1 - пишем 2, ждем секунду, пишем 0.

- Если 2 - пишем 3, ждем секунду, пишем 0.

- Если 3 - пишем 0, выполняем сброс настроек.

раскрыть ветку (1)
Автор поста оценил этот комментарий

Перезагрузка происходит по нажатию или отжатию RST?


Т.е. - по переднему или заднему фронту?


Если по переднему - была надежда, что кнопке соответствует какой-то зарезервированный номер порта, который можно опросить через DigitalRead() в функции setup().

показать ответы
2
Автор поста оценил этот комментарий
А зачем именно RST?
Точно так же отловить GPIO, и выполнить скрипт начальной настройки.
раскрыть ветку (1)
Автор поста оценил этот комментарий

Не хочу я добавлять кнопку, если на плате уже есть готовая :)


Посмотрите мой коммент выше - там есть пример реализации, вот только исходного кода мне никто не даст...

показать ответы
1
DELETED
Автор поста оценил этот комментарий

Скорее всего никак

раскрыть ветку (1)
Автор поста оценил этот комментарий

Я бы так и подумал, но есть нюанс...


Когда мне лень писать свою прошивку, я генерирую готовую на сайте https://wifi-iot.com/.


Вот как там это устроено:


"При первом включении модуль включается в режим safe mode автоматически, так как не содержит имени точки доступа.


В режиме safe mode в эфире появится точка с именем WiFi-IoT, к которой можно подключиться, используя смартфон или ноутбук.


В режим safe mode еще можно попасть, замкнув между собой RX и TX и перезапустив модуль, или нажать 3 раза подряд (с интервалом нажатия около секунды) кнопку RESET на ESP8266".


Т.е. длинного нажатия нет, но есть несколько коротких.


Как-то же это реализовано...

показать ответы