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

Общие вопросы по Arduino IDE для ESP8266

Telek

New member
Тестирую, но пока не получается воспроизвести. Сейчас попробую с другой точкой доступа.
Я через роутер с Ётой отправляю, причем Ёта в бесплатном 64к режиме. Поэтому можно допустить, что это сбой связи. Причем, я раньше отправлял данные раз в минуту. Глюк мог произойти как через несколько циклов, так и через несколько часов(300-600 циклов.) Сейчас стал пересылать данные раз в 15 мин, первый глюк поймал на 10 цикле, т.е. через 2.5 часа. Как получить стабильное воспроизведение глюка - не знаю. Предполагаю, что при неполучении ответа, WiFiclient не разрывает соединение, или что-то оставляет в памяти. Хотя client.stop() я вроде делаю.

Код:
// 10й цикл
Pressure(mm Hg):745.21Temp:24.50
Connecting to HAME_A2_31a3
..
WiFi connected
IP address:
192.168.169.2
connecting to 184.106.153.149
Requesting URL: GET /update?key=&field1=745.21&field2=24.50&field3=0&field4=1&field5=0&field6=31760&field7=0
10
Wait.
-16204 // ответ от сервера
closing connection
RAIN_COUNTER: 0
LastMs: 0
32152 // Объем памяти
VCC: 83.00
364


// 11й цикл
Pressure(mm Hg):745.13Temp:24.70
Connecting to HAME_A2_31a3
.
WiFi connected
IP address:
192.168.169.2
connecting to 184.106.153.149
Requesting URL: GET /update?key=&field1=745.13&field2=24.70&field3=0&field4=1&field5=0&field6=31760&field7=0
11
Wait........................................................................................................................
wait_cnt 120 // не получен ответ

closing connection
RAIN_COUNTER: 0
LastMs: 0
31960 // Объем памяти
VCC: 89.00
372

UPD. Приложил часть лога с проявлением глюка(в лог дописал пояснения)
 
Последнее редактирование:

Nikita

New member
Я пользуюсь String и тоже много текста, и ьтак же иногда вываливается по wdt reset, как у Вас.
Пытался использовать PROGMEM, но не получилось пока
У меня вылетать начало, когда перешел к динамически создаваемым строкам, со статичными строками, прописанными в коде проблем не было, работало без вылета больше суток.
PROGMEM использовал, но не ощутил разницы. Учитывая информацию от Игоря, что он только для совместимости - понятно почему. :)
Тем не менее, как я понимаю, даже в случае с Ардуино переменная объявленная PROGMEM не занимает место в ОЗУ лишь до момента обращения к ней, при обращении к переменной данные из нее будут скопированы в ОЗУ.
 

Nikita

New member
Nikita, У меня тоже периодически ресетится, с таким же логом. Объем оперативы смотрел - все стабильно. Один из вариантов когда это происходит - не получение ответа от сервера. (GET запрос на сервер проходит, а ответка не получается... причем непонятно, не получается в следствии плохого приема(я через Ёту гоняю), или это какой-то сбой в sdk, который после вытекает в ресет). Причем периодичность разная. Может пол-дня отправлять данные раз в минуту, а может через десяток циклов ребутнутся.
И второй момент, если я сам рестартую модуль вызовом ((void (*)(void))0x40000080)();, то после ресета, модуль рестарует повторно... получается какой-то не правильный вызов ресета...
У меня есть стойкое ощущение, что к подобному падению приводит попытка прочитать данные из ОЗУ по неверному указателю. Т.е. программа работает несколько циклов, за это время происходит сильная фрагментация ОЗУ, либо его заполнение, что попытка записать в него новые данные не приводит к успеху, но и к падению тоже. А вот попытка считать эти данные (вывести в консоль или отправить на сервер) приводит к перезагрузке. В моем случае очень похоже на это, возможно, у Вас что-то другое.

Обновил.

Проверил описанную Вами проблему с неудачным подключением. У меня также куда-то пропало 56 байт ОЗУ после неудачного подключения к thingspeak
 
Последнее редактирование:

Nikita

New member
@vvzvlad добавили небольшой фикс, теперь скорость нашего простенького веб-сервера, идущего в комплекте, увеличилась до 900kbps за счет уменьшения задержки отправки пакета (раньше было 100kbps). так что может быть в вашем тесте тоже станет немного лучше.
Игорь, фикс добавлен в исходники, обновляется ли сборка для Mac OS? Я работаю с версией Arduino IDE скачанной около месяца назад, за это время видел, что вы многое пофиксили, очень бы хотелось скачать новую сборку для Mac OS.
 

Nikita

New member
Нашел куда уходит память, создавал строки char* выделяя память с помощью new, но не очищал память руками. Начал удалять принудительно, проблема с утечкой памяти ушла, падение sketch'а прекратились.
Но до удаления я наблюдал довольно таки странное поведение. На каждой итерации я терял 560-576 байт ОЗУ. Начинал с 35 160 байт свободного ОЗУ, и уже после 7 итераций, получил вынужденный reboot, свободной памяти в этот момент было 31 144. Это очень странно, за один цикл я использую явно меньше оставшегося ОЗУ. Есть ли идеи, почему так вышло? Неужели проблема в сильной фрагментации ОЗУ?

Лог оставшейся памяти
loop() start 35160
loop() end 34560

loop() start 34600
loop() end 33984

delta -560

loop() start 34024
loop() end 33424

delta -576

loop() start 33464
loop() end 32848

delta -560

loop() start 32888
loop() end 32280

delta -576

loop() start 32320
loop() end 31712

delta -568

loop() start 31752
loop() end 31144

delta -568

Crash

delta - разница между количеством ОЗУ на старте соседних циклов, т.е. фактически утечка памяти за один цикл
 

mischaka

New member
ESP работает как access point
WiFi.mode(WIFI_STA);
ESP имеет IP 192.168.4.1
как мне установить другой IP адресс?
 

Vladimir

New member
@igrr Добрый день! Подскажите, планируется ли работа функции dtostrf(); в arduino ide для esp8266, или подскажите ее аналог.Спасибо
 

Nikita

New member
ESP работает как access point
WiFi.mode(WIFI_STA);
ESP имеет IP 192.168.4.1
как мне установить другой IP адресс?
Судя по ESP8266WiFi.h необходимо использовать метод softAPConfig

/* Configure access point
*
* param local_ip: access point IP
* param gateway: gateway IP
* param subnet: subnet mask
*/
void softAPConfig(IPAddress local_ip, IPAddress gateway, IPAddress subnet);
 

valeraba

Moderator
Команда форума
Хочу создать библиотечку для людей, поэтому пытаюсь сделать всё как можно проще.
Использовать Arduino IDE для esp8266 в качестве основного инструмента разработки было бы очень заманчиво.
Но мне нужен пример работы с TCP/IP. Интересует именно клиентская сторона, чтобы клиент открыл соединение с сервером для двухстороннего обмена.
Я новичок в этой в теме, и только присматриваюсь к модулям и средам разработки.
 

valeraba

Moderator
Команда форума
Да,люди - это не животные! Людям, все по.. Для них надо как можно проще и желательно на халяву. Но что-то не припомню, когда им нужна была библиотека?
Про водку знаю -нужна,
про пиво -знаю, тоже востребовано, еще про секс и футбол, особенно как можно проще надо,
а Вот про библиотеку - это что-то новое?
Откуда такая информация, что людям нужна библиотека?
:) Да ладно, всё не так плохо, вы то по любому программы рисуете, вот и другие, глядя на вас, начнут коды выводить.
- Живут же люди! Влюбляются... Ходят в театры. В библи...
- Не выражайся, Билли!
- В библиотеки...
 

Nikita

New member
Отвечу на свой вопрос про сборку для Mac OS. На странице проекта https://github.com/esp8266/Arduino/releases сборка старая, от 28 марта. Но самому собрать, как выяснилось, гораздо проще чем под Linux. Использовал для этого инструкцию, ссылкой на которую поделился Victor: #78

1. Установить Xcode (я не понял нужен ли для Mac OS 10.9 и старше, у меня установлен)
2. Скачать и установить клиент git
3. Установить Homebrew (в терминале ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" ), который требуется для установки ant (в терминале: brew install ant ).
4. Создать папку для исходников, перейти в нее, после клонировать исходники: в терминале выполнить git clone https://github.com/esp8266/Arduino.git ) - это самый длительный процесс, исходники занимают около 1.2Гб
5. Войти в созданную папку: cd Arduino/build
6. Из этой папки для компиляции и сборки выполняем в терминале: ant
7. Если предыдущий шаг завершился без ошибок, то пробуем запустить собранное Arduino IDE командой: ant run
8. Собираем исполняемый пакет, который можно будет поместить в папку с программами, для этого выполняем в терминале: ant dist. В результате должны получить запакованный в zip исполняемый пакет, последними строками лога выполнения будет указано где он располагается. В моем случае: macosx/arduino-1.6.1-macosx-java-latest.zip
 

valeraba

Moderator
Команда форума
Я, наверное, лентяй, но кто знает, ответьте пожалуйста на мой вопрос.
Возможен ли спящий режим при открытом соединении по WiFi?
Или после пробуждения микроконтроллера, старое соединение уже не восстановить?
Также интересуют примеры в этой IDE для работы со спящим режимом, самому найти не получилось (может плохо искал).
 

valeraba

Moderator
Команда форума
спящий режим еще не реализовал,
но что мешает снова его открыть?
Опаньки.... так вы разработчик этой штуки :)
Эта IDE для создания автономных устройств пока не подходит?
Или когда нет соединения, и все пользовательские задачи выполнены, то устройство автоматически уходит в сон?
...Или когда вы реализуете спящий режим, то можно будет спать и во время открытого соединения?
Что верно, из моих предположений?
 

leszekw

New member
Есть вот такой вариант, он реализован в моем форке esptool, и нормально работает в Arduino IDE.
На него можно переключиться, изменив в boards.txt
esp01.upload.resetmethod=none
на
esp01.upload.resetmethod=wifio
Минус — нужно найти транзистор и конденсатор.
R1, R2, R3, C1 - какие?
 

Telek

New member
Новая загадка. Есть два 3g роутера: один Hame A2(с родной прошивкой), второй китайский мини 3g роутер(перешит на openWRT).
Код esp с некой переодичностью подключается к роутеру и передает данные.
С Hame все отлично, со вторым роутером после каждого подключения утекает 328 байт(практически каждый цикл, за редким исключением).
Причем достаточно просто подключиться к Wifi и отключиться без передачи данных - памяти становится на 328 байт меньше. Уже мозг сломал.
 

alexhi

Member
Начал делать клиента MQTT , пока еще сыро но основное работает. Есть плата мастеркитовая с ESP8266 на ней реле подключенное к GPIO2 и датчик температуры ds18b20.Написал приложение под нее и под Андроид через которое можно удаленно включить/выключить реле , получить температуру и состояние входа GPIO0. Данные получаем по запросу с подтверждением,то есть если включаем реле то видим что она включилась. Кто мало знаком с MQTT поясняю, что он удобен тем что не надо внешнего IP , можно посылать команды и данные и устройства легко объединять в группы . Для удаленного управления по моему самое то.У каждой платы свой уникальный тоpic по CHIP ID. Есть много реализаций под разные платформы. Работаю через брокера eclipse.Конечно он достаточно "тормозной" по сравнению с установленным москитто в локальной сети.И команды проходят с большой задержкой (на 3G бывает секунд до 10) . Клиент под Андроид по умолчанию подключен к моей тестовой плате, так что можно попробывать ,буду тестировать дня 3. Работа с ним проста устанавливаем арк, запускаем.Нажимаем в правом нижнем углу кнопку с глобусом в верхней строке должно появиться Conntcted (бывает не с 1 раза,клипса сбрасывает ) Нажимаем на термометр получаем температуру в Турции :) Нажимаем лампу включаем реле у меня на столе. Когда приходит ответ через несколько секунд, должен быть слышен короткий писк. Пробывал реализации MQTT на LUa,на UDK и Arduino для ESP работают примерно одинаково.Падения есть конечно, но WDT и дисконект помогает.Все восстанавливается.Совсем "жестких" подвисов не было.На Sming хотел попробывать , но там какой то гемор с установкой у меня (server 2003) терпения не хватило, бросил.(через автоматическую установку не получается) Идея хорошая, но по моему надо сделать нормальный инстал c хорошим описанием по шагам ручной и автоматической установки.Больше народа подтянется. Пример UDK. Кому интересно попробуйте.
Внешний вид проги на Андроид:
 

Вложения

valeraba

Moderator
Команда форума
Начал делать клиента MQTT ...
Я тоже сегодня спортировал свою библиотечку для esp8266 , всё заработало (протокол схожий с MQTT).
Протестирую хорошенько, а потом выложу в общий доступ.
http://habrahabr.ru/post/257451/

Подскажите, кто знает, какой макрос включается при выборе платформы esp8266 в этой IDE?
Это нужно для использования одного и того же исходного кода для разных платформ.
 

Ivizil

New member
Всем привет. Хочу спросить ещё раз. Может кто в курсе почему в качестве клиента esp так долго отправляет GET запрос? Получается примерно раз в 8 секунд. И как это можно исправить? У всех влюченный светодиод ,который должен просто гореть, постоянно моргает? И моргает так, что иногда на входе релейного модуля пропадает "1" и происходит кратковременное отключение реле.
 
Сверху Снизу