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

Обсуждение Обсуждение вопросов по стабильности ESP8266

Telek

New member
Может кому пригодятся мои грабли. Я раньше в этом топике писал про непонятную работу ADC(Напомню: у меня при постоянном напряжении плавало значение получаемое с ADC... отличалось в разы. При одном и том же напряжении я получал значения и 70 и 200... причем по мере работы модуля оно изменялось плавно: например, начиналось с 200, а через час становилось 70). Измерял я напряжение питания самого модуля(это была тестовая схема). Сейчас я переделал схему и стал измерять напряжение источника питания(до DC-DC 3.3в. Собственно я так изначально и собирался делать) и о чудо - ADC стало показывать верные и стабильные значения.
Т.е. если кратко, то в моем случае ADC правильно измеряет внешнее относительно модуля напряжение, и глючит, если измерять напряжение на самом модуле. Если нужно измерить напряжение на самом модуле - нужно использовать readvdd33().
 

Nikita

New member
У всех влюченный светодиод ,который должен просто гореть, постоянно моргает?
Может он у вас "перезагружается" ,что лог то кажет?
Добрый день! У меня также светодиоды подключенные к GPIO4 и GPIO5 мигают. Горят несколько секунд, гаснут на очень короткое время, так что не успевают до конца потухнуть, а потом опять горят. Происходит это не синхронно на двух горящих светодиодах. "Моргают" как и включенные оба, так и включенные по одному. С чем это связано я пока не понял, это точно не перезагрузка, т.к. у меня после перезагрузки на эти выводы подается LOW.

Перезагрузки тоже случаются, то раз в сутки, то раз в час. Размер свободной памяти при этом достаточный, не видел еще ни разу, чтобы свободной памяти было меньше 25Кбайт. При этом два характерных варианта при перезагрузке:

28776 (свободной ОЗУ в байтах)
Fatal exception (0): (также вываливается со значениями 9, 2, 28. 0 и 9 чаще всего, 2 и 28 реже)
epc1=0x402107e1, epc2=0x00000000, epc3=0x00000000, excvaddr=0x00000000, depc=0x00000000
rm match
del if0
bcn 0
del if1
usl
sul 0 0

ets Jan 8 2013,rst cause:4, boot mode:(3,6)

wdt reset
load 0x40100000, len 29348, room 16
tail 4
chksum 0x6b
load 0x3ffe8000, len 2636, room 4
tail 8
chksum 0x44
load 0x3ffe8a50, len 3536, room 0
tail 0
chksum 0x95
csum 0x95
rlscandone
add 0
aid 10
cnt

ets Jan 8 2013,rst cause:4, boot mode:(3,6)

wdt reset
load 0x40100000, len 29348, room 16
tail 4
chksum 0x6b
load 0x3ffe8000, len 2636, room 4
tail 8
chksum 0x44
load 0x3ffe8a50, len 3536, room 0
tail 0
chksum 0x95
csum 0x95
rladd 1
aid 1
station: e4:40:e2:08:0b:dc join, AID = 1
scandone
add 0
aid 10
cnt

Есть ли расшифровка для этих критических исключений? Что значит 0, 2, 9, 28? С чем могут быть связаны ошибки: с питанием, китайским качеством модулей, длительными выполнениями блоков скетча, что-то еще?

Подскажите, по опыту, рационально ли переходить на разработку под UDK вместо Arduino IDE для esp8266? Удастся ли добиться большей стабильности прошивок на UDK?
 

Telek

New member
Nikita, Я тут такую штуку заметил по еспэхе - она очень боится помех. Когда у меня все было собрано на проводках и макетках - еспэха боялась даже настольной лампы(дневного света). При включении/выключении лампы - она перезагружалась. Когда я сделал более/менее законченное устройство - стабильности стало больше.
 

Nikita

New member
[B]Telek[/B], тоже с этим столкнулся, но не думал, что все так "запущено". Ваш комментарий убедил меня в том, что стоит все спаять на макете и питание брать не с PL2303, а напрямую с USB или внешнего аккумулятора. К самому модулю esp12 проводки я уже припаял, стало лучше. Теперь думаю на него же припаять конденсатор и все это на макетку. Что же насчет среды Arduino IDE, пользуетесь ли, стабильны ли ваши прошивки? Я вот еще открыл для себя, что есть Sming, но вопрос остается тот же, будет ли конечное решение стабильным.
 

Telek

New member
Nikita, Про стабильность так скажу. Программа у меня делает следующее:
1. Запускает DC-DC преобразователь на 5в(у него есть отдельный вход для запуска). К к этому DC-DC подключен микро роутер с Yota модемом.
2. Выжидает некоторое время.(Пока роутер запустится и Yota сконнектится).
3. Получает c BMP180 температуру и давление.
4. Получает через ADC напряжение источника питания(У меня все работает от автомобильного аккумулятора).
5. Проверяет входящие команды(в моем случае на запуск насоса полива). Команды получаю с TalkBack(это приложение сервера thingspeak.com)
6. Если нужно включает насос(через реле) на заданное время. Тут кстати еще возможен болт, т.к. на насосе я не проверял, и боюсь что "искра" в контактах реле при включении насоса может дать помеху на esp. Но спаянное устройство перестало бояться настольную лампу, и это дает больше шансов. :)
7. Передает телеметрию на thingspeak.com (Давление, температуру, напряжение, количество неудачных коннектов к роутеру, количество неудачных коннектов к серверу, объем свободной памяти, факт перезагрузки esp(если был), количество осадков ).
8. Выключает DC-DC на 5в(т.е. выключаю роутер и Йоту).
9. Тупит некоторое время и повторяет все с пункта 1.
Параллельно еще есть прерывание по изменению сигнала на одном из входов(На нем весит датчик количества осадков. Замыкает контакты при прохождении через него определенного количества осадков)
При цикле раз в 5 минут, оно у меня проработало двое суток без перезагрузок, отъев 2кб оперативы(Отъедает стандартно при неполучении ответа от сервера). Это было самое продолжительное испытание. Т.к. постоянно дописываю код и дольше проверить не получалось.

В принципе, в моем случае редкие перезагрузки не критичны. Если что, потеряю данные о количестве осадков между двумя удачным коннектами. В боевых условиях я планирую передавать данные раз в 15-30 мин.

PS. Да. Все это можно сделать было на обычной ардуине + ethernet модуль(благо и роутер с wifi в непосредственной близости, причем я его сам включаю на сеанс связи), но захотелось реализовать на esp... и по размерам меньше и дешевле.
Все это планируется для полуавтоматического полива на даче. Т.е. я получаю и анализирую телеметрию(температуру и количество осадков) и выдаю команду на полив. Поливает из бочки, насосом на 12в, питается от автомобильного аккумулятора(С электричеством проблем нет, но захотелось сделать полностью автономную вещь, которую можно поставить в любом месте и управлять). В прошлом году делал аналогичный полив, но через таймер. Приходилось задавать программу таймера исходя из прогноза погоды на будущее... В этом году буду исходить уже из фактической погоды.
Боевых испытаний еще не было, поэтому как оно себя поведет покажет время.

UPD: Проверил с насосом. Не забоялась. :) Возможная помеха при включении/выключении перезагрузку не вызвала. А там ампер 7 на старте должно быть. Это добавляет позитива.
 
Последнее редактирование:

JustACat

Moderator
Команда форума
Nikita, посмотрите, пожалуйста, как у меня это все выглядит, если интересно, тут буквально недавно описывал.
И ни в коем, ни за что не брать питание с PL2303, и вообще выкинуть эту самую PL2303 и заменить ее на что-то другое. Ибо гадость редкостная, у меня сейчас на одной висит связь удаленного устройства (на АВР) с ПК - так положиться вообще нельзя, то виснет (именно PL'ка), то еще что, то может начать данные пересылать с задержкой в несколько секунд, где они при этом у нее лежат - фиг знает. В тех же самых условиях работают бесперебойно FTDI и CP2102 (другие не проверял).
С USB питание тоже брать не замечательно... Ну, я не настаиваю ни в коем разе, скорее просто указываю на возможные слабые места. А дальше - смотрите сами.
Я тут такую штуку заметил по еспэхе - она очень боится помех.
Во-во, любого чиха! @pvvx неоднократно указывал (с графиками, картинками и тестами), почему. Цитировать не буду - искать лень сейчас. Но если в двух словах: то по линии Reset ESP реагирует на самые короткие импульсы, что не хорошо. Т.к. такие импульсы могут пролезать извне откуда угодно. И бороться с этим сложно. (хотя решение @pvvx предлагал)
Так что да, перезагружается "от любой отвертки". Ну, это нужно просто иметь ввиду и учитывать при разработке программы. Что поделать, зато цена низкая :-Р
 
Последнее редактирование:

Nikita

New member
Telek, двое суток уже достаточно стабильная работа. К слову, у вас нет "дребезжания" выводов esp, которыми управляете реле (как в моем случае со светодиодами)? Подскажите, пожалуйста, по подключению. У меня сейчас подключение реализовано следующим образом:

VCC <-- +3.3В
CH_PD <-- +3.3В
REST <-- +3.3В
GPIO16 <-- +3.3В

GND <-- земля
GPIO15 <-- земля

Между +3.3В и землей стоит электролитический конденсатор на 1000 мкФ 10В.
3.3В беру от USB через преобразователь AMS11173.3 с обвесом.

Понимаю, что на CH_PD, REST, GPIO16 нужны подтягивающие резисторы, а для GPIO15 и GPIO0 стягивающие. На практике на стабильности это отражается?
 

JustACat

Moderator
Команда форума
Nikita, да отражается. И керамику на Reset.
Например, если у вас GPIO16 напрямую подключен к 3.3, а вы вдруг запустите deep_sleep - скорее всего пожжете GPIO16, так как на него будет подан 0 для выхода из deep_sleep.
И вы не упомянули про GPIO0 и 2.
Я уже устал повторять везде :) напрямую только GND и VCC. Все остальное через резисторы разного (не от балды конечно) номинала.
 

Nikita

New member
JustACat, извиняюсь, обманул, у меня CP2102. В остальном очень полезно, буду иметь ввиду.
Достаточно ли для подтягивающих и стягивающих резисторов 10кОм? Или нужны другие номиналы? Насчет GPIO16 может и сжег, из deep-sleep она у меня не возвращается.
GPIO0 использую для прошивки, остальное время "в воздухе" (как правильно?), На GPIO2 сидит Data от DHT22.

Update
Прочитал про ваше подключение. По номиналам подтягивающих и стягивающих сопротивлений вопрос немного изменился, почему все на 10К, кроме подтягивающего на CH_PD (4.7К), опытным путем?
 
Последнее редактирование:

JustACat

Moderator
Команда форума
GPIO0 использую для прошивки, остальное время "в воздухе"
Правильно - все время подтягивать: для прошивки - к 0, для работы - к 3.3. Если висит в воздухе, то, бывает, от наводок само в режиме прошивки стартует.
На GPIO2 сидит Data от DHT22
Не помню точно, что там с в данном случае, но, по идее, опять же подтяжка на 10K к 3.3V не должна мешать этому, если же все таки мешает - можно попробовать взять номинал побольше.
На самом деле положение 0 и 2 важно только при старте (но при любом, в т.ч. и после перезагрузки случайной).
опытным путем?
Ой, да много всего: и чужие схемы разные изучались, и доки Espressif (там тоже есть номиналы в них и как подключать), и личный опыт, конечно, тоже (особенно, когда автопрошивка задействована, то именно с такими у меня с ней меньше всего проблем).
Так что да, все, что пишу я - это мое личное мнение, и оно может не совпадать с чьим-то еще :) Ну и гарантий никаких я не даю :-Р
 
Последнее редактирование:

Arduino

New member
Может кому пригодятся мои грабли. Я раньше в этом топике писал про непонятную работу ADC(Напомню: у меня при постоянном напряжении плавало значение получаемое с ADC... отличалось в разы. При одном и том же напряжении я получал значения и 70 и 200... причем по мере работы модуля оно изменялось плавно: например, начиналось с 200, а через час становилось 70). Измерял я напряжение питания самого модуля(это была тестовая схема). Сейчас я переделал схему и стал измерять напряжение источника питания(до DC-DC 3.3в. Собственно я так изначально и собирался делать) и о чудо - ADC стало показывать верные и стабильные значения.
Т.е. если кратко, то в моем случае ADC правильно измеряет внешнее относительно модуля напряжение, и глючит, если измерять напряжение на самом модуле. Если нужно измерить напряжение на самом модуле - нужно использовать readvdd33().
Спасибо! я не мог найти как получить напряжение питания
 
Сверху Снизу