• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе 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().
Спасибо! я не мог найти как получить напряжение питания
 
Сверху Снизу