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

pvvx

Активный участник сообщества
У чипа одно адресное пространство. Думаю код из ROM ни куда не грузится. А с разу от туда выполняется.
Разговор о RAM. BiosROM выделено... см. тут: http://esp8266.ru/forum/threads/dokumentacija-na-esp8266-na-nashem-sajte-popolnjaemyj-razdel.5/#post-804
0x3FFFC000 0x004000 R/W ETS system data RAM.
Там она и распределяется его mem-ками
В SDK эта область не используется, только при обращении к функциям ROM. Там сидят и брошенные на произвол судьбы буфера приема/передачи по прерываниям UARTx и т.д.
В SDK стартует своя система распределения памяти heap + стек, которая обходит эту область стороной. :)
 
Последнее редактирование:

pvvx

Активный участник сообщества
В SDK 0.9.5 появилась либа libsmartconfig.a... и все либы построенные на open-source, включая Lwip и т.д., не имеют исходников. Т.е. стали (c) Espressif :)
Первый старт на SDK 0.9.5 и сразу баги от Espressif:

Simple WEB version: 0.1.0
SDK version: 0.9.5
Flash Header:
Number of segments: 3
SPI Flash Interface: QIO
SPI CLK: 80MHz
Flash size: 512K
Entry point: 0x40100004
Segment 1: offset: 0x40100000, size: 25900
Segment 2: offset: 0x3ffe8000, size: 2720
Segment 3: offset: 0x3ffe8aa0, size: 6072
Real Flash size: 524288 bytes
Found free IRAM: base:0x4010652c, size:6868 bytes
System memory:
data : 0x3ffe8000 ~ 0x3ffe8aa0, len: 2720
rodata: 0x3ffe8aa0 ~ 0x3ffea258, len: 6072
bss : 0x3ffea258 ~ 0x3fff20f0, len: 32408

heap : 0x3fffc000 ~ 0x9f10, len: 1073684720
Current 'heap' size: 40448 bytes
Set CPU CLK: 160 MHz

...
Врет system_print_meminfo(); и беда в том, что в данной процедуре сменили os_printf() на os_printf_plus(). Дооптимизировались :) osapi.h: USE_OPTIMIZE_PRINTF код с тал больше и глючнее - китай-оптимизация. Вместо размера heap передают адрес (heap-size) 0x3fffc000-0x9f10=1073684720

Хорошо добавили у WiFi AP:
uint8 beacon_interval; // Note: support 100 ~ 60000 ms, default 100
Как 60000 уместить в байт? :confused:

Ждем оф. патча для SDK 0.9.5 :)
 
Последнее редактирование:

Vit

New member
Решается миркухой в sot23 (типа PIC10(L)F320/322 6-Pin) Она вам отследит и отключит всё, да даст ещё ADC и жесткий WDT. Но придется пожертвовать пару uA питания :)
Возможно. Под "пузо" влезет и MSP430G2230 тоже без UART(а как хотелось), но с датчиком температуры. И есть ещё немало ценного зверья. Но можно решить одной ножкой:)
С другой стороны внутреннее сопротивление батарейки для выдачи пиковых 300 мА при не самой высокой цене предполагает не очень малый размер этой батарейки. Пока в кандидатах CR123. Но не могу пока придумать зачем мне WiFi с питанием от батарейки:) Термометры/метеостанции можно и на 434 МГц модульках делать, но оно мне и так не сильно нужно. Выключатели с ДУ как-то душа захотела, а зашел в строительный и увидал розетки с ДУ по 5 баксов - сами купились, я не виноват:)
Так что пока питаю через MCP16301 и буду искать в Вашем коде, где зацепить состояние TCP-соединения по порту для TCP/COM на ножку (или вдруг Вы великодушно подскажете;). Использовать встроенный проц в ESP01 без ног неинтересно, а насчет ESP12/13 можно думать, но и при наличии свободных ног меня пока останавливает отсутствие дебагера, а к удобствам, извините, привык:)
 
Последнее редактирование:

CHERTS

Moderator
Команда форума
В SDK 0.9.5 появилась либа libsmartconfig.a... и все либы построенные на open-source, включая Lwip и т.д., не имеют исходников. Т.е. стали (c) Espressif
Интересно, а кому можно накатать жалобу, на то что Espressif нарушает GPL и др. открытые лицензии и не выкладывает модифицированные исходники? Вроде есть такой Фонд свободного програмного обеспечения (оф. сайт FSF) и Ричард Столман, может им написать?
 
Последнее редактирование:

pvvx

Активный участник сообщества
Интересно, а кому можно накатать жалобу, на то что Espressif нарушает GPL и др. открытые лицензии и не выкладывает модифицированные исходники? Вроде есть такой Фонд свободного програмного обеспечения (оф. сайт FSF) и Ричард Столман, может им написать?
Вы это китайцам хотите сказать? :) Можно только ругаться (у нас свобода слова не запрещена :)) Кто такая Espressif ? Дурная мелкая китайская контрока и им бир-бар. Вы же видели исходники и только по ним уже ясно, что контора бабла не имеет чтобы нанять программиста, а пользуется услугами школьников или дошкольников :)
На форуме их оф.сайта аналогично - представитель фЫрмы там безграмотный.
Та и ESP8266 занимается не более 200 чел. Из них не будет и дцати, которые что-то пытаются сделать. Остальные - просто потыкать "чё есть".
http://bbs.espressif.com: Total members180
http://www.esp8266.com: Total members3300
http://esp8266.ru: Total members130
------
Обновил свалку исходников - переезд на SDK 0.9.5
 
Последнее редактирование:

pvvx

Активный участник сообщества
Использовать встроенный проц в ESP01 без ног неинтересно, а насчет ESP12/13 можно думать, но и при наличии свободных ног меня пока останавливает отсутствие дебагера, а к удобствам, извините, привык:)
Jtag говорят есть.
Так что пока питаю через MCP16301 и буду искать в Вашем коде, где зацепить состояние TCP-соединения по порту для TCP/COM на ножку (или вдруг Вы великодушно подскажете;).
Пока не до того - не работают простейшие функции system_restart() и software_reset().
Они даже иногда начинают писать, что мол грузят прошивку на своих 74880, но тут срабатывают не отключенные ими прерывания и web вызывает lwip - типа пришли ещё фреймы по TCP... :)
Аналогично и с system_deep_sleep-ами. Они просто не могут выполниться пока есть соединение и не потушена наглухо WiFi ... С такими функциями токо на заплатки и выдумывания обходных алго работать...
WDT наверно по той-же причине не пашет.
 
Последнее редактирование:

pvvx

Активный участник сообщества
Интересно, железные отладчики у них свои или (мечтательно) какие-нибудь J-Link8/OpenOCD могут подойти?
Если что-то подойдет и всё будет, и когда закончится "пока останавливает отсутствие дебагера, а к удобствам, извините, привык", то данная тема мне будет не интересна :)
 

Vit

New member
данная тема мне будет не интересна
Просто у меня от моего зоопарка(поверьте, зверушек разных хватает) при всех удобствах голова пухнет (я железячник, а программингом приходится заниматься по необходимости), а тут и без удобств, и с LwIP имел дело только в заталкивании PPPoS в невытесняющую систему, но даже не в использовании, ну и китайские ребусы мне скорее не по зубам.
По LwIP помню, что клиент вешал свой callback на соединение и там взводился флаг, который поллился в ожидании где-то в tcp_init. Как в сервере - покопаюсь. Наверно почти так же.
 

pvvx

Активный участник сообщества
Просто у меня от моего зоопарка(поверьте, зверушек разных хватает) при всех удобствах голова пухнет (я железячник, а программингом приходится заниматься по необходимости)
Т.е. уже google не набрать "ESP8266 JTAG" ? :) http://www.esp8266.com/viewtopic.php?f=6&t=12
Есть ещё soft "Trace32_Xtensa_Simulator.zip" http://www.lauterbach.com/frames.html?pro/pro__tensilica.html
ссылка на файлы с регом там http://www.esp8266.com/viewtopic.php?f=5&t=95
Я тоже не программист и паять уже не паяю и железяки не таскаю - вышел из этого возраста :) Только для развлечения.
 
Последнее редактирование:

CHERTS

Moderator
Команда форума
Кому интересно про smartconfig, гляньте сюда, там есть приложение под андроид и интересные файлы esp_iot_sdk_smartconfig_v0.9.3\app\user\smartconfig.c (*.h) которых нет в SDK.
 

pvvx

Активный участник сообщества
Кому интересно про smartconfig, гляньте сюда, там есть приложение под андроид и интересные файлы esp_iot_sdk_smartconfig_v0.9.3\app\user\smartconfig.c (*.h) которых нет в SDK.
Это не то. Должно быть более 20 жирных процедур. Имена же даны в libsmartconfig.a.
Примерно:
deal_with_ht20 init_filtration init_listen clear_init_ht20 get_magic_control_info_ht40 find_channel_csc get_magic_control_info ..
get_prefix_control_info get_sequ_data wifi_scan_done channel_timer_cb ...
Содержит 3 си файла, из которых вышли с аналогичными именами:
sc_ht_phy.o sc_ht20.o sc_sniffer.o

beacon_interval, появившийся в установках WiFi SDK 0.9.3 работает. Не совсем точно в ms, но всё-же. Жалко что не задать больше 255 ms из-за глупостей программиста от Espressif. Это желательно в режимах малого потребления...
С детектора, видно что интервал чуть более 100 ms:
WiFi_Beacon.gif
Нижняя - это передача модулем файла на чуть более 600кбайт/сек. Верхние две - в разных режимах phy (11n,b,g) (по длительности пакета передачи..).
 
Последнее редактирование:

Algis

New member
Разработка ‘библиотеки’ малого Webсервера на ESP8266..
Большое спасибо уважаемый pvxx за интереснейший проект, особую тщательность подхода и законченность всех начинаний.
Поставил тестовый проект в "Unofficial Developer Kit" - все скомпилировалось и заработало с пол пинка. Думаю использовать в системе своего дома...
Если нужна моя помощь как бывшего электронщика а теперь web разработчика, напишите.
 

Algis

New member
Кстати, в шаблонах страниц, например wifi.htm, index.htm... немало ошибок разметки, и немножко можно умешить размеры фаилов. Если нужно, могу поправить и выложить.
 

A_D

Active member
Доброго времени суток!
Столкнулся с такой забавной проблемой, возможно кто либо сталкивался или есть догадки в чем может быть причина (я только могу предположить что модуль таки подгорел как то, но об этом ниже..):
- Беру последний вариант свалки из этой темы, компилирую, не меняя ничего (в дальнейшем пробовал только частоту на 80МГц выставлять - результат тот же) - зашиваю из Эклипса напрямую командой flash. Все успешно заливается, модуль стартует и появляется wifi AP - при попытке подключится к ней модуль начинает значительно нагреваться и собственно ничего не конектится. В отладочный интерфейс сыпет такую информацию и на этом застывает:
Simple WEB version: 0.1.0
SDK version: 0.9.5
Flash Header:
Number of segments: 3
SPI Flash Interface: QIO
SPI CLK: 40MHz
Flash size: 512K
Entry point: 0x40100004
Segment 1: offset: 0x40100000, size: 26028
Segment 2: offset: 0x3ffe8000, size: 2744
Segment 3: offset: 0x3ffe8ac0, size: 4400
Real Flash size: 524288 bytes
Found free IRAM: base:0x401065ac, size:6740 bytes
System memory:
data : 0x3ffe8000 ~ 0x3ffe8ab8, len: 2744
rodata: 0x3ffe8ac0 ~ 0x3ffe9bf0, len: 4400
bss : 0x3ffe9bf0 ~ 0x3fff1a80, len: 32400
heap : 0x3fff1a80 ~ 0x3fffc000, len: 42368
Current 'heap' size: 42096 bytes
Set CPU CLK: 160 MHz
WiFi mode:3 chl:1 phy:3 dhcp:1/1
AP:ESP8266[7] hiden(0) psw:0123456789 au:0 chl:1 maxcon:4 beacon:100
ip:192.168.4.1 gw:192.168.4.1 msk:255.255.255.0 mac:1a:fe:34:98:d5:84
DHCP ip:192.168.4.2..192.168.4.6
ST:HOMEAP psw:0123456789 b:0 ff:ff:ff:ff:ff:ff ac:0
ip:0.0.0.0 gw:0.0.0.0 msk:0.0.0.0 mac:18:fe:34:98:d5:84
sleep:0
sleep disable
Disk init: 33 files, addr = 0x0001e000
TCP Server init on port 80 - Ok
Max connection 99, time waits 5 & 5, min heap size 14528
TCP Server start - Ok
TCP Server init on port 12345 - Ok
Max connection 1, time waits 0 & 0, min heap size 14528
TCP Server start - Ok
mode : sta(18:fe:34:98:d5:84) + softAP(1a:fe:34:98:d5:84)
add if0
dhcp server start:(ip:192.168.4.1,mask:255.255.255.0,gw:192.168.4.1)
add if1
pm close 0 0 0/418391
bcn 100
Test rtc memory retention... changes, new write

Пробовал полностью обнулить все во flash памяти - прошивал через FLASH_DOWNLOAD_TOOLS_v0.9.3.1 как показано на скриншоте ниже - результат тот же.

При этом, если я к примеру беру компилирую прошивку АТ команд для 0.9.4 и заливаю её стандартным способом через эклипс - модуль стартует, к сетке могу подключится и он вполне работает и АТ командами можно выплюнуть страничку браузеру.

Питание нормальное, смотрел осциллографом - при попытке подключения появляется не надолго оч малый шумок и потом пропадает. само питание от USB порта, через LM1117 с керамикой. Провалов в питании не наблюдаю.

Что это может быть, я что то упустил? Почему на старой прошивке работает а на новой нет ? Пробовал так же заливать wifi сниффера прошивку - запускается, выплевывает данные и модуль еле теплый.
Память на модуле не перепаивал, стоит стандартная.
 

Вложения

  • 33.7 KB Просмотры: 40

pvvx

Активный участник сообщества
Кстати, в шаблонах страниц, например wifi.htm, index.htm... немало ошибок разметки, и немножко можно умешить размеры фаилов. Если нужно, могу поправить и выложить.
HTM страницы вообще не оптимизированы. Я их дополнял по мере тестов кое-как и не смотрел что там. Расчет на то, что их напишет каждый сам для своего проекта. Там не только мелкие ошибки, но и глобальные - неверно используются функции установки WiFi и сохранений.
Дальнейшее развитие "библиотеки" остановилось по причине неопределенности тематики саго web-сервера. Необходим переход под конкретизацию задачи и целей web-сервера под конкретный проект. А пока это просто набор тестов. Я его и использую как среда для тестирования и проверок всего что не попадется в теме ESP8266...
За всё время никто не дал никаких предложений, кроме как сделать на его основе TCP2COM. Но для проекта TCP2COM там очень много лишнего :) и большая беда с программными таймерами. Можно использовать свой аппаратный таймер, для того там и дан и протестирован пример его реализации. Но его не задействовал, по той-же причине - не известно что надо вообще от web-сервера без конкретизации целей проекта.
Аналогично и не реализовано никаких процедур с задействованием "статических буферов" в памяти. Как пример - сканирование сети WiFi или перенаправление printf в буфера для последующего показа на Web странице... Ведь не ясно, сколько надо и как будет использоваться память в конкретном проекте, а вставлять это для "понта" не вижу смысла.
Сейчас обсуждается (стоит) немного другая задача – вообще оказаться от библиотек Espressif. Но времени на это пока нет.:(
Основные задачи, положенные в начале составления данной свалки решены. Они были в том, чтобы дать возможность другим реализовать необходимые функции на основе примера. Они уже частично используются в проектах других, таких как Lua и т.д.
Столкнулся с такой забавной проблемой
.....
Что это может быть, я что то упустил? Почему на старой прошивке работает а на новой нет ?
Там включено несколько тестов, в том числе значений в области "для пользователя" RTC_RAM. Снимите его. Он сделан для проверки, используется или нет область памяти RTC, которая "по докам" отдана пользователю. Возможно значения от туда используются либами, но не объявлено (для того он и сделан, чтобы это выявить и найти кто туда лезет). Может что-то ещё. Например на сегодня ещё не определено, почему у модулей такой разброс по показаниям vdd3.3V, а от него зависит "мощность" передатчика. К примеру модуль ESP-12, который дает меньшие показания у меня вообще не греется никак, а ESP-01 - как утюг. По схеме там может быть различие только у номинала резистора (вроде с 31 ноги) и разводке проводников на плате (в первую очередь надо поглядеть фронты от генератора "кварца").
Основные аппаратные различия в 0.9.4 и 0.9.5 в использовании кеща flash. В 0.9.5 это используется активнее и во время исполнения ПО чтений flash больше.
Но скорее всего у вас проявляются просто различия в настройках WiFi модуля...
В 0.9.5 система его старта сменилась.
И не понятно это: Test rtc memory retention... changes, new write
Это первый старт после сброса питания? (Некоторые режимы sleep тоже рубят питание у чипа и RTC память сбрасывается, т.к. на вывод его питания ничего не подведено - для продолжения исследования что там творится у Espressif нужен модуль с выводом питания RTC, а таких пока нет, как и времени мне паять туда проводники...)
 
Последнее редактирование:

evh

New member
Дальнейшее развитие "библиотеки" остановилось по причине неопределенности тематики саго web-сервера. Необходим переход под конкретизацию задачи и целей web-сервера под конкретный проект. А пока это просто набор тестов. Я его и использую как среда для тестирования и проверок всего что не попадется в теме ESP8266... За всё время никто не дал никаких предложений, кроме как сделать на его основе TCP2COM. ....
Давайте конкретно сделаем подобное - http://homes-smart.ru/index.php/oborudovanie/bez-provodov-wi-fi/62-besprovodnoj-datchik-na-baze-esp8266-dlya-servisa-narodmon-ru.

И еще, у меня не получается собрать вашу сборку под линуксом, при помощи make:

$ make
make[1]: Вход в каталог `/home/evh/workspace/Web_base/web'
DEPEND: CC -M wifi.c
DEPEND: CC -M web_utils.c
DEPEND: CC -M web_srv.c
DEPEND: CC -M web_int_vars.c
DEPEND: CC -M web_int_callbacks.c
DEPEND: CC -M WEBFS1.c
DEPEND: CC -M uart.c
DEPEND: CC -M tcp_terminal.c
DEPEND: CC -M tcp_srv_conn.c
DEPEND: CC -M flash_header.c
DEPEND: CC -M flash_eep.c
DEPEND: CC -M flash.c
make[1]: Выход из каталога `/home/evh/workspace/Web_base/web'
make[1]: Вход в каталог `/home/evh/workspace/Web_base/web'
CC flash.c
CC flash_eep.c
CC flash_header.c
CC tcp_srv_conn.c
In file included from ../include/lwip/snmp.h:42:0,
from include/espconn_add.h:15,
from tcp_srv_conn.c:10:
../include/lwip/ip_addr.h:44:8: error: redefinition of 'struct ip_addr'
struct ip_addr {
^
In file included from /opt/Espressif/ESP8266_SDK/include/user_interface.h:11:0,
from tcp_srv_conn.c:9:
/opt/Espressif/ESP8266_SDK/include/ip_addr.h:6:8: note: originally defined here
struct ip_addr {
^
....
cc1: all warnings being treated as errors
make[1]: *** [.output/eagle/debug/obj/tcp_srv_conn.o] Ошибка 1
make[1]: Выход из каталога `/home/evh/workspace/Web_base/web'
make: *** [.subdirs] Ошибка 2

Где и что нужно подправить?
 
Сверху Снизу