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

Разработка ‘библиотеки’ малого webсервера на esp8266.

pvvx

Активный участник сообщества
Не работает Pull Down у I/O пинов. Опять Espressif обманул и написал в include\eagle_soc.h для SDK, что работает :mad:. У меня он практически как Pull UP работает...

В новой версии всё добавлено для теста Pull UP + Pull Down + "Открытый коллектор" для управления в табличку GPIO....
 
Последнее редактирование:

lvm1976

New member
pvvx, при частом сохранении настроек память области настроек переполняется и тогда сохранение не происходит? или предусмотрен механизм перезаписи?
Код:
bool ICACHE_FLASH_ATTR flash_save_cfg(void *ptr, uint16 id, uint16 size)
 

pvvx

Активный участник сообщества
pvvx, при частом сохранении настроек память области настроек переполняется и тогда сохранение не происходит? или предусмотрен механизм перезаписи?
Код:
bool ICACHE_FLASH_ATTR flash_save_cfg(void *ptr, uint16 id, uint16 size)
Там три блока (сектора) и переносится последние данные (по id), с алгоритмом "пофиг отключение питание в любой момент".
Сложнее от туда удалить запись и этого не предусмотрено в коде :)
Всё это для уменьшения кол-ва итераций записи/стирания flash...
 
Последнее редактирование:

AnonymUser

New member
сервер может работать без жесткого прописания ip? чтоб что пользователь не ввел в адресной строке - выдавать ему то что нужно или - неправильный ип - кастомную страницу ошибки(не 404)
 

pvvx

Активный участник сообщества
В связи с реверсом старта SDK стало легче делать разные загрузчики для опроса датчиков.
Скопировал сюда, разные мои сообщения, "чтобы было в куче":
"Измерил предельную достижимую скорость загрузки специального "лоадера", после "ресета" (или deep-sleep) до начала опроса датчика:
StartBiosPvLoaderTime.gif
30 ms и уже идет опрос - шевелит портами с загруженного куска кода первого (не стандартного!) загрузчика из flash... WiFi выключен до второго загрузчика, который запустится если надо передавать, и весь процесс потребляет копейки.
Эти 30 ms говорят о том, что если требуется засыпание менее чем на 100 ms, то лучше отключить таймер и процессы и использовать внутреннюю команду sleep у CPU ( он в ней тоже жрет очень мало) для ожидания инициализации датчиков или между ожиданием результатов с них.
Но главное, что у данного загрузчика в доступе более 100 килобайт RAM, т.к. без SDK, а результаты замеров он пишет в RTC и в flash. Потом монстр SDK перешлет :) "

"Лоадером" можно грузить разные "прошивки" если стоит большая Flash. "Прошивку" WEB сервера при этом можно использовать для конфигурации модуля.
Стандартная загрузка c SDK WEB "свалки" занимает от 310 ms и где-то так-же, до 0.5 секунды получен ответ от dns и время с интернета уже у модуля, если он подключается к роутеру...
Т.е., если у нас не сервер, а передаем что-то, то к концу 1-ой секунды от старта уже может быть передано 500 килобайт и далее 1 мегабайт в секунду...
В итоге, если используем deep-sleep, то достаточно 1 секунды активности модуля для полной передачи накопленных состояний. Но, безусловно, всё зависит от удаленности сервера, пинга к нему. По тому и надо иметь распределенную сеть - на роутре должен быть хотя-бы аналог MQTT и никаких обращений к дальним IoT серверам модулем. Пусть этим занимается роутер - у него обычно ресурсов достаточно.
 

pvvx

Активный участник сообщества
Проблема со скоростью в Chrome решена. Китайцы установили по умолчанию nagle в LwIP. Скоро в новой версии...
Chrome2.gif
Но появилась новая, китайская - вылет по: lmac.c 599 при записи flash с HTTP. Опять вылезла, а они писали, что устранили :) :)
Наверно задержек навставляли, но теперь их в PvSDK не хватает...
Исправлю - закину новую версию.
Понижение частоты CLK CPU в момент записи flash и работы WiFi похоже спасает дело.
Но ошибка "lmac.c 599" и так не стабильная, не всегда вылетает. Пока оставлю патч на понижение CLK...
 
Последнее редактирование:

AnonymUser

New member
смотрел тему от начала...такие хорошие показатели скорости,но у меня(esp-01,память не расширенная) при замерах почему то не больше 60кб/с
а если картинка на странице (вес примерно 25кб) - она прогружается около 1-2сек
ну с картинкой могу предположить,что там отдельный запрос и оно притормаживает.. не критично, но общая скорость почему такая низкая?(
 

pvvx

Активный участник сообщества
смотрел тему от начала...такие хорошие показатели скорости,но у меня(esp-01,память не расширенная) при замерах почему то не больше 60кб/с
Это "вылечено" c ГуглХромом в текущей версии.
а если картинка на странице (вес примерно 25кб) - она прогружается около 1-2сек
ну с картинкой могу предположить,что там отдельный запрос и оно притормаживает.. не критично, но общая скорость почему такая низкая?(
timelll23.gif->timell29.gif
Передача HEX Damp всей Flash в тексте:
speedll26.gif
Все претензии к браузеру :)
 
Последнее редактирование:

pvvx

Активный участник сообщества
В новой версии немного оптимизировал либы и включил все "инклуды". Транслируется с -Wall опцией.
На первом этапе выудил в Free IRam : 10429 байт:
Код:
   Section|                   Description| Start (hex)|   End (hex)|Used space
------------------------------------------------------------------------------
      data|        Initialized Data (RAM)|    3FFE8000|    3FFE8AC0|    2752
    rodata|           ReadOnly Data (RAM)|    3FFE8AC0|    3FFE9A60|    4000
       bss|      Uninitialized Data (RAM)|    3FFE9A60|    3FFF2650|   35824
      text|            Cached Code (IRAM)|    40100000|    40105755|   22357
irom0_text|           Uncached Code (SPI)|    40240000|    4026F450|  193616
Total Used RAM : 42576
Free RAM : 39344
Free IRam : 10429
Идем к оверлеям. Но UDK имеет неверные внутренние опции сборки и оверлеев на ней пока не будет.
На Xplorer-6.0.2 всё Ok...
 

lincinus

New member
уважаемый pvvx, ошибки сборки под линуксом
>Текущая свалка ver 0.2.8 (25.04.15) на PvSDK version: 0.0.0 (b1)

1) переведите пожалуйста следующие имена папок в нижний регистр, для совместимости
Web_Base/app/user/Include а в makefile используется Web_Base/app/user/include
Web_Base/app/main/Include на Web_Base/app/main/include

2)в файлах tcp_srv_conn.c, tcp_terminal.c, web_srv.c
в [HASHTAG]#include[/HASHTAG] желательно заменить \ на / , вроде бы виндовые компиляторы должны понимать пути в [HASHTAG]#include[/HASHTAG] с прямыми слешами.
я использовал такую команду

Код:
find ./ -name web_srv.c -exec sed -i '/^#include/s&\\&/&g' '{}' \;
для сборки использовал инструкцию по установке компилятора отсюда
https://github.com/anakod/Sming/wiki/Linux-Quickstart#
с установкой переменных окружения https://github.com/anakod/Sming/issues/10
(anakod, спасибо)
 

sharikov

Active member
to pvvx
я не большой знаток английского но по моему текст в вебморде "HexDamp..." неправильный.
По моему надо писать HexDump.
 

pvvx

Активный участник сообщества
я не большой знаток английского но по моему текст в вебморде "HexDamp..." неправильный.
По моему надо писать HexDump.
Да. Я знаю :) Это защита от коммерции. Чтобы без труда было не продать. :)
Потом исправлю. Там много ошибок, да по английски писать не умею - только читать :)
в [HASHTAG]#include[/HASHTAG] желательно заменить \ на / , вроде бы виндовые компиляторы должны понимать пути в [HASHTAG]#include[/HASHTAG] с прямыми слешами.
Т.е. винда значит круче линукса? :)
 

lincinus

New member
Т.е. винда значит круче линукса? :)
можно и так сказать.
Спасибо за ваш труд.

ещё
1) было бы здорово если PVFS2 был бы кросс платформенным, там вроде никаких особых зависимостей от винды нет.
2) почему то последний этап как загрузить прошивку нигде не описан (или я не нашёл)
3) галочку AutoConnect в профиле station mode желательно поднять повыше, а то режим STATIONAP_MODE включен по умолчанию, но не сразу понятно что для того чтобы station заработал нужно кроме SSID и пароля еще и эту галочку поставить.
4) да ещё желательно отображать baudrate стандартными скоростями, а то крышу от таких записей уносит :), может встроить калькулятор на javascript в страничку, поле uart_0_baud сделать скрытым и добавить новое в которое нужно будет вводить стандартные скорости, а перед отправкой формы пересчитать.

Вставка длинного текста проходит с ошибками, знаю что желательно использовать аппаратный flow control, но пока попробую без него.
 
Последнее редактирование:

sharikov

Active member
можно и так сказать.
Спасибо за ваш труд.
+1
4) да ещё желательно отображать baudrate стандартными скоростями, а то крышу от таких записей уносит :), может встроить калькулятор на javascript в страничку, поле uart_0_baud сделать скрытым и добавить новое в которое нужно будет вводить стандартные скорости, а перед отправкой формы пересчитать.
У меня почему то крышу не уносит.
baudrate отображается идеологически правильно.
Если чип не может в точности установить заданное значение нехер вводить пользователля в заблуждение красивыми цифрами. Реальное значение битрейта должно быть в явном виде выдано пользователю а там он сам решает устраивает его это или нет.
Общий принцип для профессиональных систем: всегда показываем правду даже если эта правда не очень красивая.
 

lincinus

New member
+1

У меня почему то крышу не уносит.
baudrate отображается идеологически правильно.
Если чип не может в точности установить заданное значение нехер вводить пользователля в заблуждение красивыми цифрами. Реальное значение битрейта должно быть в явном виде выдано пользователю а там он сам решает устраивает его это или нет.
Общий принцип для профессиональных систем: всегда показываем правду даже если эта правда не очень красивая.
Насколько я понял такой финт ушами только из за того что это именно то значение которое хранится во флеше и которое в последствии заносится в регистр конфигурации uart

У меня на одном конце 115200 а на другом 115273
Теперь я хочу установить скорость в 1000000 , какое значение я должен записать? поддерживается ли оно этим чипом, намного удобнее выбрать из доступных которые гарантированно рабочие, т.е. реальная скорость отличается не более 3%.
 

PostLast

Member
pvvx, Подскажите, можно ли и где получить прерывание от UART когда нет подключения к сокету? Реализовал обработку буфера uart при отсутствии подключения по сокету на таймере, но это как-то неправильно.
Спасибо за ваш труд.
+1
Планов по реализации загрузки кода по воздуху не возникает?
 
Сверху Снизу