- ESP8266 виснет
- Victor
- Нужна помощь ESP12E не до конца возвращается из DeepSleep
- MaDerer
- Yield and Delay #3042
- Comments
- hreintke commented Mar 13, 2017
- devyte commented Sep 3, 2017
- Нужна помощь Esp8266 deep sleep — глубокий сон
- art21_res
- shuraf
- art21_res
- gerkimuyda
- art21_res
- gerkimuyda
- ESP8266 Community Forum
- Information
- About us
ESP8266 виснет
Victor
Administrator
Статистика поисковых запросов показывает, что достаточно много людей, у которых «ESP8266 виснет«.
Предлагаю вам в этой теме размещать посты с подробным описанием подключения esp8266 — мы постараемся вам помочь. Внимание! Перед тем, как размещать пост, прочитайте
ESP8266 — подключение и обновление прошивки
Если вы выполнили все рекомендации, описанные в этой статье, а esp8266 виснет, тогда можете разместить свой пост.
1. Укажите тип модуля esp8266 (ESP-01, ESP-07 и т.п.)
2. Сообщите схему подключения (какой стабилизатор питания, как и куда подтянуты GPIO, какой USB-TTL и т.д. — чем подробнее, тем больше шансов, что кто-то из пользователей форума увидит вашу ошибку и вам поможет)
3. Сообщите тип и версию прошивки (если модуль сами не перепрошивали, то так и напишите)
4. Сообщите через какое время стабильной работы происходит зависание
5. К какому роутеру подключаетесь, какую IP адресацию используете (статическую или динамическую)
Приложите как можно больше подробной информации (фото, фрагменты кода, скриптов и AT команд, только пожалуйста, уважайте других — спрячьте это все под спойлер, чтобы глаза не выпадывали от вашего поста)
Member
У меня вешался ESP-01 во время передачи посылки через вайфай, из за длинного шлейфа от стабилизатора до ESP-01.
По осцилографу просадка была при передаче менше 2.5в. Заменил шлейф на покороче и добавил емкостей, теперь ок.
ESP-0з тоже вешалась, но тут уже был виноват другой длинный кабель с USB до стабилизатора, поставил на входе стабилизатора емкость от материнки на пару тысяч микрофарад, пока полет нормальный.
Источник
Нужна помощь ESP12E не до конца возвращается из DeepSleep
MaDerer
New member
В прошлом году я слегка подсел на ESP8266 и решил я себе сделать погодную станцию на NodeMCU. В итоге получилось такое:
Участники торжества: NodeMCU Amica, сенсор BME280, экран SSD1306, вольтметр ADS1115, модуль зарядки TP4056, аккумулятор LiitoKala 18650 3400 мАч и солнечная баттарея 5В 1,5W для небольшого увеличения выживаемости.
Скетч собирал с миру по нитке и подгонял под себя. Он выполняет следующий алгоритм:
— проверяем подключение SSD1306. Если отключен — сообщение на экран и уходим в глубокий сон на 1 минуту, по пробуждении начинаем с начала;
— раз SSD1306 на месте, подключаемся к роутеру по WiFi по уже заданным ssid и pass;
— собираем данные температуры, влажности, давления, вольтажа аккумулятора;
— подключаемся и отправляем данные на narodmon.ru;
— получаем ответ от сайта и все данные с ответом выводим на экран;
— уходим в глубокий сон на 6 минут.
После окончательной сборки (то одно доходило, то другое) метеостанция проработала 10 дней. Тогда я попытался оптимизировать скетч, уменьшил или убрал задержки, убрал вывод в Serial и в итоге срок работы увеличился до 25 дней.
В надежде на уменьшение энергопотребления я заказал ESP-12E и плату адаптер под нее с уже подведенными CH_PC и GPIO15. Спаял, поставил на макетку, поморгал светодиодами — красота!
Решил я попробовать начать собирать свою метеостанцию на макетке по частям. Установил экран, подключил, залил скетч (только поменял в Arduino IDE устройство с NodeMCU 1.0 на Generic ESP8266 Module) и увидел на экране «BME280 not found» (и это правильно, ведь я его еще не подключил). Поменял время DeepSleep на 10 сек и. ничего. Светодиод моргнул, но экран не обновился.
В общем я начал разбираться по частям. Сделал вывод в Serial. Прошерстил форумы, откуда подчерпнул только то, что либо надо дополнять развязку, либо проблемы с питанием, либо мне не повезло и мне досталась бракованная/хитрокитайская партия (заказывал 2 шт.)
Источник
Yield and Delay #3042
Comments
hreintke commented Mar 13, 2017
My application is mostly async and uses tickers and other callbacks to facilitate that.
Question on yield()
In these callbacks, the yielding is not possible.
When one of the used libraries/framework functions is calling the yield() function there is a «panic» stop.
An example of this is the hexdump function within debug.cpp
Is there a specific reason for the «panic exit» instead of «just return» when «cont_can_yield(&g_cont)» returns false ?
Question on delay()
I know there should be no blocking functions in but some libs/functions use a delay(1) or delay(2) to send a pulse.
In the delay function the esp_yield() is used but when cont_can_yield(&g_cont) returns false (in callback) there is no delay at all.
The application then crashes.
An update to the code below would prevent that, any comment to that ?
The text was updated successfully, but these errors were encountered:
devyte commented Sep 3, 2017
I am not an expert on this matter, but I have looked a bit into the behavior, and I have also followed some conversations related to the topic.
Therefore, I am goin to hazard some educated answers to your questions.
is there a specific reason for the «panic exit» instead of «just return»
If a function uses yield, it is assumed that it requires it to function properly. Given the limitations of yield, it MUST therefore run inside the loop. The reason for the panic is to forcibly detect and disallow calls to yield from outside the loop.
Yield works by giving up the context inside the loop and pass it to the code outside of it, which then runs a function that services the wifi stack. Once that service is done, it returns to the stored context. If you are running async callbacks, I believe (I am not 100%sure of this) you are running from within the context of the espressif sdk, which means you are already running from within the «wifi service routine». Therefore, yield can’t work, because it would yield its context to itself, and then have to return to itself.
An update to the code below would prevent that
Your change makes use of delayMicroseconds. That essentially hogs the cpu doing nothing, which in the ESP is a Bad Idea, because during that time the wifi stack goes unserviced, and could blow up the internal buffers. In the async world, there is a guideline for maximum time that user code can be away from servicing the wifi, which I believe is about 15ms in total (if memory serves, I would have to read some docs to make sure).
In short, the code would have a radically different behavior when called from the loop vs. when called from an async callback, with different potential crash reasons and a whole lot of instability. Just to make you aware, even different environments, i.e.: lots of nearby wifi points, or many devices on the same wifi network, have an impact, because such factors stress the wifi servicing on the ESP. Adding this on top makes that a lot worse.
Personally, I am also using async callbacks, and I have already had two cases where I’ve had to deal with libs that had yields and delays in them. One case is reading a DHT, where I ended up reading the sensor from the loop, and the async interface would communicate and control through a global context. The other was a Stream object in the core, and in that case I just removed the calls to yield from Stream.cpp. That’s a bold move, it works for my own app, but I don’t think the code change should be merged, because I doubt it will work for big files or data chunks.
In case you’re wondering, yes, I did that because I had to manipulate files from within AsyncWebServer request callbacks, that had nothing to do with serving files to the http client. The files I manipulated were tiny, always under 2KB, and I read/wrote them in one pass to/from memory.
My suggestion to you: implement the changes in your own local git of the libs, and keep them there. If necessary, pull them out of your local repo to update the git version, then add them back on top. Test them, and maybe document them somewhere public. You can even report back here, even after the issue is closed. Whatever else, be VERY aware that they can cause random crashes.
Having said all that, I would say the current state of the code is a design choice, not an issue, in which case please close this. If you disagree, we can wait for somebody else to chime in, orwe can try to get somebody more knowledgable to give an opinion (doubtful with 1000 issues open atm).
Источник
Нужна помощь Esp8266 deep sleep — глубокий сон
art21_res
New member
Здравствуйте. Начал программировать чип esp8266 12e только несколько дней назад. Купил разные варианты и голый 12e и NodeMCU, пишу на Arduino IDE.
Проблема в следующем! Уже устал перебирать варианты со всех сайтов — не выходит пробудить модуль и чтобы он продолжил работу.
В секции Setup после всех выводов в порт для мониторинга того, что происходит, перевожу в спящий режим так:
ESP.deepSleep(20 * 1000000);
delay(1);
После вывода в терминал нужных цифр модуль засыпает — как я понял и просыпается с абра-кадаброй в порт и всё! Больше ничего не происходит:
Даже на RESET не реагирует. По идее после RESET программа должна запуститься заново и зависнуть как и в начале. Но ничего не происходит.
Схема подключения взята с вашего сайта с двумя кнопками. По питанию все ок — лабораторный блок питания.
GPIO-0 и RESET соединял и через резистор как на этом сайте и напрямую — одинаковый результат.
Думал, что проблема именно в этом модуле. Подключил другой — тоже самое.
Попробовал залить на NodeMCU — такая же картина.
Помогите погружать модуль в глубокий сон и его нормально пробуждать.
Очень нужно.
shuraf
Member
art21_res
New member
New member
В секции Setup после всех выводов в порт для мониторинга того, что происходит, перевожу в спящий режим так:
ESP.deepSleep(20 * 1000000);
delay(1);
gerkimuyda
New member
art21_res
New member
Да reset то работает. При нажатии на кнопку модуль мигает однократно синим, но больше ничего не происходит.
Да и для прошивки нужно жать кнопки ресет и запись без этого не прошивается ничего. Ресет работает, судя по тому, что для прошивки он нужен.
Других идей нет.
Давайте так. При нажатии на кнопку ресет в порт шлется билибирда и на этом все останавливается.
Даже на модуле с usb и встроенной кнопкой ресет.
У этого модуля так же происходит просто при нажатии на ресет не стартует программа.
gerkimuyda
New member
Мы как раз про эту плату и говорим. Если у вас после включения программа не работает — тогда deep sleep тут не причем.
«белеберда» — это стартовая информация на скорости 74880 (перепроверьте). Добейтесь работоспособности программы после физичекого powerup или reset. Потом перейдете к deepsleep. Может у вас там вечный перезапуск из-за WatchDog таймера? Посмотрите сообщения на скорости baud rate 74880.
Пс. deepsleep надо использовать с осторожностью. Если просто так, да и с частотой раз в несколько минут — то через месяц-три можно модуль выкинуть в мусорку. Встроенный SDK по каждому чиху перезаписывает один и тотже кусочек EEPROM памяти. Любые изменения в настройках WiFi, каждое включение/выключение и т.д. приводит к тому, что текущие настройки заново сохраняются в память. Т.е., если наставить всяких «автоконнект выкл» — «автоконнекст вкл» то на ровном месте мы уже два раза перезаписали эту память, плюс сюда процесс подключения — и вот уже третья запись. Таким образом, необдуманно можно добиться нескольких перезаписей (2-5-8) по каждому старту после deepsleep. А если это проиходит каждую минуту — то не трудно подсчитать, через сколько ресурс EEPROM исчерпается и модуль нам «нарисует синий экран смерти»
Источник
ESP8266 Community Forum
Explore. Chat. Share.
Information
The requested topic does not exist.
Placing multiple ESP12 on same PCB
SO, you are telleing us all the remote sensor[…]
AsyncWebServer with RTSP Video feed
Looks nice, you might want to post this in «[…]
How to store sensor’s data on a ESP8266 Flash?
Although it is possible to write to flash yourself[…]
Can’t Upload with Arduino on Linux but CAN upload on Windows
Have a look at Fail upload sketches to ESP8266 o[…]
«universal I/O bridge»
If you can me point me to a place where I can buy […]
ESP8266 oled display and inverted text
Hi everyone, I am struggling to solve how to displ[…]
Data processing with MYSQL tools
I have a code that displays the temperature from s[…]
Holding the RST low.
Yes, it WILL wake up the processor but then HALT i[…]
ESP8266 in SoftAP mode not assigning IP address
I had a similar issue when I foobarred LWIP, which[…]
How to use I2S in esp8266-01
Additionally, the ESP8266 does have a very basic f[…]
ESP8266 VS RASPBERRY PI4
The ESP8266 is a microcontroller, the Raspberry PI[…]
ESP8266MOD and sainsmart TFT ST7735 with microSD
OK, success! The Adafruit_ST7735.h library does no[…]
ESP8266 MQTT — Interrupt problems
Even Arduino IDE has to be able to use IRAM_ATTR -[…]
NodeMCU Ethernet on a WT32-ETH01
OK; a WT32-ETH01 is working for me: networking ov[…]
I used D3 as a pin, and now I can’t flash
Use another pin. https://randomnerdtutorials.com/e[…]
how to get native bitwise operators?
The online documentation explains how. Alternativ[…]
How do i clear the EPROM?
The standard method is to use Espressif’s esptool.[…]
Best 3.3 voltage regulators
Thanks for the helpful replies! LiFePO4 would be a[…]
ESP8266 with 0.96″OLED OpenWeatherMap API Weather Station
Hi guys, I am so new with ESP8266’s. I want to try[…]
ESP8266 have not been able to get into configuration mode
I bought an ESP8266 and have not been able to get […]
Follow US on Twitter and get ESP8266 news and updates first.
About us
We are a strong Community of developers, hackers, and visionaries. No, seriously, we are!
Источник