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

Общие баги/глюки/проблемы в пакете Sming

JustACat

Moderator
Команда форума
verzi, а, так у вас же там еще и ШИМ, чего-то я вчера упустил этот момент. Да, думаю, что с ШИМ'ом могут быть проблемы... Честно говоря, я шим не пробовал на ESP - что ADC, что PWM обычно делаю чем-то снаружи...
Тут нужно выяснять детальнее, подождем @anakod'а.
 

verzi

New member
Обидно что столкнулся с проблемой в таком месте в котором ее совсем не ожидал. В nodemcu шим более менее стабильный, а тут такое. Сейчас пробую прикрутить ардуино мини для управления шимом.
 

anakod

Moderator
Команда форума
verzi, я все еще считаю что дело в чем-то другом.
  1. Попробуйте сменить GPIO2 на другой пин (подобную проблему кто-то уже наблюдал ранее)
  2. Для ШИМ есть встроенная функция analogWrite, Ваш код не очень похож на классический ШИМ. Вы уверены что это правильный подход?
  3. Приведите полный выходной лог работы программы с COM порта
 

pvvx

Активный участник сообщества
@anakod Имеющийся ШИМ на прерывании по таймеру работать правильно не может. В новых SDK чаше встречается ets_intr_lock().
Отличие NodeMCU и sming = СИ и C++. В pvPortMalloc, vPortFree и т.д. стоит ets_intr_lock() и если C++ часто запрашивает память для объектов, то дело такое...

И кто-бы рассказал, чем GPIO2 отличается от другого порта ? :)
 
Последнее редактирование:

verzi

New member
Другие пины я пробовал. Использую как раз analogWrite. Тот код что я привел состоит собственно из примера FtpServer и слегка модифицированного Basic_Blink. Просто использую не digitalWrite, а analogWrite. Подобных примеров полно в мире ардуино. В моменты когда идет передача данных по ftp (да и по http тоже собственно) начинает люто моргать. Проблемы с железом я могу полностью исключить, потому что сразу после этого кода заливал прошивку на lua, использующую и шим и передачу данных. Светодиод при этом ведет себя адекватно.
 

anakod

Moderator
Команда форума
Имеющийся ШИМ на прерывании по таймеру работать правильно не может.
Насколько помню в более свежих СДК реализация ШИМ в примерах от китайцев тоже была обновлена но я еще не вникал.

В новых SDK чаше встречается ets_intr_lock().
Т.е. на новых СДК ШИМ будет работать хуже чем на старых?

Кстати, насколько я понимаю, в чипе есть еще как минимум один аппаратный ШИМ? Вы не подскажите где можно почитать о нем информацию?

В pvPortMalloc, vPortFree и т.д. стоит ets_intr_lock() и если C++ часто запрашивает память для объектов, то дело такое...
Да, прерывания могут быть причиной. Но поверьте Си++ память не выделяет сам по себе. И new фактически эквивалентен malloc. Неужели NodeMCU построен только на статических объектах?

И кто-бы рассказал, чем GPIO2 отличается от другого порта ? :)
В главном топике проскакивало - у кого-то были проблемы. (Может быть с питанием?)


UPD И еще, я бы пожалуй, предложил отключить вывод отладочной информации в Serial, мне кажется это может оказать очень существенное влияние в данном вопросе.
 
Последнее редактирование:

pvvx

Активный участник сообщества
Т.е. на новых СДК ШИМ будет работать хуже чем на старых?
Не уверен, но есть подозрения. Надо пробовать - поставить тест на прерывание аппаратного таймера 0 на 10 us с коммутацией какого I/O и смотреть логическим анализатором или осциллографом пропуски.

Да, прерывания могут быть причиной. Но поверьте Си++ память не выделяет сам по себе. И new фактически эквивалентен malloc. Неужели NodeMCU построен только на статических объектах?
Практически - да, только на статических. Память запрашивается очень редко и большими кусками. А кол-во кусков может сказаться на времени их разбора с отключенными прерываниями в процедурах mem... Тут надо глядеть реализацию распределителя памяти...
Когда измерял потребление, то показалось или так и есть - когда идут запросы памяти, то потребление модулем сильно повышается. От этого и подозрения... Ведь всё в системе построено на вызове ets_run(), а там (в ROM-BIOS) всё стоит на waiti, ожидая прерывания и далее выполнения назначенного системного callback-а и снова на waiti.
Вот тут вечно сидит CPU:
Код:
ROM:40000F65                     waiti           0
ROM:40000F68                     call0           ets_intr_unlock
ROM:40000F6B                     j               loc_40000F4F
The WAITI (Wait for Interrupt) instruction, which is a part of the Interrupt Option, saves
power by setting the current interrupt level, powering down the processor’s logic, and
waiting for an interrupt.
 
Последнее редактирование:

waskez

New member
Здравствуйте!
Возможно ли с помощью фреймворка Sming реализовать ШИМ на модуле ESP8266-01. Хочу реализовать проект управление телевизором и другими устройствами c помощью смартфона.
Спасибо.
Проблему ШИМ решил с помощью NE555 (временно). Настроил на 38 kHz и дёргаю GPIO2 выход RESET NE555.
 

anakod

Moderator
Команда форума
Прекрасно, выложите потом свои наработки посмотреть?
 

Victor

Administrator
Команда форума
Настроил на 38 kHz и дёргаю GPIO2
Недавно появился такой документ 0B-ESP8266 Hardware User Guide EN там на странице 18 сказано, что ESP8266 поддерживает IRDA на GPIO5
The functionality of IRDA interfaces can be implemented via software programming. NEC coding,
modulation, and demodulation are used by this interface. The frequency of modulated carrier signal
is 38KHz, while the duty ratio of the square wave is 1/3. The length of data transmission, which is
around 1m, is determined by two factors: one is the maximum value of rated current, the other is
internal current-limiting resistance value in the infrared receiver. The larger the resistance value, the
lower the current, so is the power, and vice versa. The transmission angle is between 15° and 30°,
and is mainly determined by the radiation direction of the infrared receiver.
Notes:
Among the eight interfaces mentioned above, most of them can be multiplexed. Pin definitions that
can be defined is not limited to the eight ones herein mentioned, customers can self customise the
functions of the pins according to their specific application scenarios. Functions of these pins can be
implemented via software programming and hardware.
Может ваш проект можно сделать более изящно, хоть и ESP-01 для этого и не очень удачный кандидат :)
 

verzi

New member
Все так же не работает Wi-Fi. Тут на четвертой странице об этом было. Приходится ставить Espressif-ESP8266-DevKit-v2.0.2-x86.exe. С более новыми версиями к роутеру не подключается.
 

anakod

Moderator
Команда форума
verzi, было в старой версии Sming, т.к. Espressif сломал совместимость с Open LWIP: https://github.com/kadamski/esp-lwip/issues/7
В последних версиях Sming все ок, т.к. сейчас он временно переведен на закрытую версию LWIP. Как тестировали?

UPD Возможно у Вас старая версия Make файла скопированная из предыдущей версии Sming? В таком случае достаточно заменить "openlwip" на "lwip", но можно обновить и makefile целиком.
 

verzi

New member
Вчера установил последнюю версию сминга через choco. Проект мой основан на примере meteo control, т.е. настройка сети от туда. И собственно Wi-Fi не заработал. Раньше писали что он сломан в новой версии sdk, 1.0.1b кажется. Make файл точно, старый. Сейчас попробую сделать как Вы сказали. Спасибо.
 

verzi

New member
Заменил "openlwip" на "lwip", Wi-Fi заработал, но минут через 5 esp виснет. Пробовал откатиться на старый sdk, тоже самое. Если вернуть openlwip обратно (естественно со старым sdk), то все ОК.
1.png
Почитал то что раньше написали. Надо было конечно с этого начинать. В общем моя проблема уже не нова, как я понял. Буду пока openlwip использовать.
 
Последнее редактирование:

JustACat

Moderator
Команда форума
Если вернуть openlwip обратно (естественно со старым sdk), то все ОК.
@anakod, есть идеи, что с этим делать и как быть? Сам пока сижу на старом SDK... И думаю, стоит ли обновляться.
Но хотелось бы для новых пользователей что-то решить, кто с нуля ставит (и, соответственно, автоматом получает именно новую версию SDK).
 

Okadzaki

New member
Нашел глюк в SystemClock. При установке таймзоны +3 (3.0 задавал) , от полученного времени из NTP оно отнимает 3 часа, а не инкрементирует. При установке -3, всё работает как положено.
Time : 24.05.2015 21:11:43
UTC Time:25.05.2015 00:11:43

При:
SystemClock.setTimezone(-3.0);
 

anakod

Moderator
Команда форума
Да там в пулл реквестах были ошибки. Но не беспокойтесь, по этой части уже зреет новый комит :)
 

pvvx

Активный участник сообщества
@anakod - запустил свой правленый OpenLwip v1.4.0 со своим web с кусками от SDK 1.1.0 + новый свой eagle_lwip_if.c. На первый взгляд всё работает и смещения в структурах соответствуют.
Могу кинуть куда, только всё в куче, всю свалку web c Openlwip 1.4.0... В общей версии я пока не использую правленый Openlwip 1.4.0...
Кинул пока тут: Версия с OpenLwIP 1.4.0 на SDK 1.1.0
 
Последнее редактирование:

anakod

Moderator
Команда форума
pvvx, большое спасибо. Да мне было бы очень интересно, если Вы подскажите что нужно менять, я бы хотел отправить пулл-реквест или просто подсказку автору проекта (т.к. он сам не смог разобраться), а мне бы хотелось чтобы этот проект был продолжен и в дальнейшем включен в новый открытый SDK как замена эспрессифскому черному ящику.
 

pvvx

Активный участник сообщества
Главный файл дан - eagle_lwip_if.c. Передайте его kadamski и всё.
Описать что менял не знаю как - просто загнал коды в IDA, взял его старый файл и переписал чтобы совпадали имена по дизасму SDK 1.1.0 для его СИ. Каждая версия SDK от китайцев всегда имеет отличия... :) Я уже говорил - мне всё равно какой язык программирования - пару часов макс потыкаться и можно на нем писать :) Коды и алгоритмы у автоматов сочиненных людьми мало отличаются... Призма восприятия всегда одна и та-же. Исключения очень редки.
Файл asm-a того куска из IDA тоже приложил - eagle_lwip_if.ida.asm.
Да, а чем вам не равится Lwip v1.4.0? Столь обязательно 1.4.1? :)
 
Последнее редактирование:
Сверху Снизу