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

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

Tomahawk

New member
pvvx, придумал
<!--<a href='/protect/fullflash.bin'>Download fullflash.bin</a><br><br>-->
<div id="ident">temp текст</div>
<script type="text/javascript">
var set_name = 'bin_name.bin';
var output = document.getElementById('ident');
output.innerHTML = "<a href='/protect/fullflash.bin' download='" + set_name +"'>Download fullflash.bin</a><br><br>"
</script>
Но опять же работаем через атрибут download, который пока не всеми браузерами поддерживается, но это их проблемы, мне кажется :)

P.S.: это если сильно хочется через ява-скрипт ;) можно и просто <a href='/protect/fullflash.bin' download='тут написать'>Download fullflash.bin</a><br><br> :)
 
Последнее редактирование:

pvvx

Активный участник сообщества
<!--<a href='/protect/fullflash.bin'>Download fullflash.bin</a><br><br>-->
<div id="ident">temp текст</div>
<script type="text/javascript">
var set_name = 'bin_name.bin';
var output = document.getElementById('ident');
output.innerHTML = "<a href='/protect/fullflash.bin' download='" + set_name +"'>Download fullflash.bin</a><br><br>"
</script>
Но опять же работаем через атрибут download, который пока не всеми браузерами поддерживается, но это их проблемы, мне кажется :)
Нужен Chrome и всякие Андронутые броузеры. :(...
----
Ещё как жить с этим - https://github.com/espressif/esp-gdbstub ?
 

pvvx

Активный участник сообщества
Что делать с WiFi event(7): Probe Request (MAC:12:34:56:78:90:12, RSSI:-86) ?
Написал накопление их в буфер с выдачей в виде xml. Накапливает только новые MAC, вычисляя у повторяющихся минимальный и максимальный RSSI.
Пока круговой буфер на 64 MAC от Probe Request -ов (когда буфер забивается, то переписывает самые старые.)
Можно узнать, сколько долбится устройств и узнать по ним расположение (и какие двигаются, а какие нет :) ) ...
XML:
<?xml version="1.0" encoding="windows-1251"?>
<response>
<mac>00:0f:54:10:6a:b5</mac>
<min>-77</min>
<max>-41</max>
<mac>dc:71:44:6b:62:f1</mac>
<min>-94</min>
<max>-91</max>
<mac>0c:84:dc:0b:f7:23</mac>
<min>-83</min>
<max>-65</max>
<mac>fa:83:ff:0b:d5:75</mac>
<min>-90</min>
<max>-86</max>
<mac>cc:07:ab:6a:8e:8d</mac>
<min>-90</min>
<max>-70</max>
<mac>08:ed:b9:cb:82:b9</mac>
<min>-89</min>
<max>-81</max>
<mac>44:6d:57:70:28:06</mac>
<min>-94</min>
<max>-94</max>
<mac>e8:50:8b:7b:ef:fc</mac>
<min>-91</min>
<max>-87</max>
<mac>c0:63:94:79:13:79</mac>
<min>-96</min>
<max>-90</max>
<mac>d6:81:dc:bf:30:a9</mac>
<min>-93</min>
<max>-83</max>
<mac>e4:f8:ef:67:f2:53</mac>
<min>-92</min>
<max>-71</max>
<mac>66:e3:23:61:5b:96</mac>
<min>-92</min>
<max>-89</max>
<mac>84:85:06:d0:89:0b</mac>
<min>-95</min>
<max>-92</max>
<mac>be:23:d1:d1:44:33</mac>
<min>-92</min>
<max>-80</max>
<mac>dc:71:44:6b:62:44</mac>
<min>-96</min>
<max>-92</max>
<mac>8a:56:04:09:94:49</mac>
<min>-87</min>
<max>-81</max>
<mac>b6:1d:3b:55:56:94</mac>
<min>-93</min>
<max>-90</max>
<mac>7a:28:69:0f:e4:5c</mac>
<min>-89</min>
<max>-86</max>
<mac>16:09:7a:df:79:23</mac>
<min>-87</min>
<max>-85</max>
<mac>f0:f6:1c:3d:c4:b6</mac>
<min>-92</min>
<max>-89</max>
<mac>7a:16:d9:36:5c:ca</mac>
<min>-87</min>
<max>-84</max>
<mac>6a:d4:bb:9a:44:34</mac>
<min>-90</min>
<max>-83</max>
<mac>60:21:c0:08:5c:b2</mac>
<min>-91</min>
<max>-90</max>
<mac>ca:55:c1:5a:43:14</mac>
<min>-93</min>
<max>-86</max>
<mac>40:b8:37:0f:f0:a1</mac>
<min>-93</min>
<max>-93</max>
<mac>b4:52:7d:d1:23:f3</mac>
<min>-93</min>
<max>-93</max>
<mac>62:38:05:d6:dc:5a</mac>
<min>-93</min>
<max>-93</max>
<mac>00:1c:bf:0d:5d:2c</mac>
<min>-88</min>
<max>-75</max>
<total>28</total>
</response>
Надо что-то подобное и чего долепить с этими "Probe Request"?
Интерфейс и опции в Web-свалке всё увеличиваются:
Ver050.gif
:)
 
Последнее редактирование:

pvvx

Активный участник сообщества
Пора менять концепцию интерфейса :) Например прятать часть функций за кнопками или увеличивать количество вкладок
Да ладно, это же пример, чтобы были видны все переменные. И это включены все модули, в версии 050 (странным образом совпадая с номером страницы темы :) ). Вер 0.5.0 = усиленное обновление - перелопачено много переменных и немного сокращен объем общего кода и при включении всего не сильно разрослась... Ещё не всё проверено - в процессе...
Теперь в user_config.h можно выключить трансляцию и самого WEB :)
 
Последнее редактирование:

aloika

Active member
pvvx, а можно такой вопрос - как думаете, реально ли соединить этот "малый веб-сервер" и проект, который играет mp3 ? Типа выбрал из веб-интрфейса файл, находящийся на компьютере (ну или планшете или с чего там зашел), а модуль его как давай играть :)

И еще вопрос. Можно ли как-то узнать, через какой интерфейс (точку доступа или станцию) подключен к модулю данный веб-клиент? Т.е., например, подключаюсь я к модулю, как к точке доступа и хочу изменить название или пароль этой точки доступа. А веб интерфейс мне - "ай-яй-яй, нельзя так делать, а то щас связь пропадет, ты же через эту же точку доступа и подключен". И про режим станции то же.
 

pvvx

Активный участник сообщества
pvvx, а можно такой вопрос - как думаете, реально ли соединить этот "малый веб-сервер" и проект, который играет mp3 ? Типа выбрал из веб-интрфейса файл, находящийся на компьютере (ну или планшете или с чего там зашел), а модуль его как давай играть :)
Можно, но прошивка плеера MP3 сделана на RTOS, да ещё на старой версии, глючной. Берете и переписываете всё - можно всё - я разрешаю :)
И еще вопрос. Можно ли как-то узнать, через какой интерфейс (точку доступа или станцию) подключен к модулю данный веб-клиент? Т.е., например, подключаюсь я к модулю, как к точке доступа и хочу изменить название или пароль этой точки доступа. А веб интерфейс мне - "ай-яй-яй, нельзя так делать, а то щас связь пропадет, ты же через эту же точку доступа и подключен". И про режим станции то же.
Очень непонятный вопрос. Вам всю трассу route надо? Тогда что-то типа http://www.visualroute.com/ :) Вот трасса из USA до моего тестового ESP8266:
VisualRoute.gif
----
Есть запрос [inline]~web_host~[/inline] и он указывает ip: port c которого получаете данные.
IP AP: [inline]~wifi_ap_ip~[/inline] , ST: [inline]~wifi_st_ip~[/inline]
Сравниваете IP в javascript и ставите имя AP: [inline]~wifi_ap_ssid~[/inline] , ST: [inline]~wifi_st_ssid~[/inline] или ещё чего...
Пример вывода дан в http://aesp8266/system.xml:
XML:
<web>
<host>192.168.1.15:80</host><remote>192.168.1.2:8050</remote>
</web>
<tcp2uart>
<connected>1</connected><host>192.168.1.15:12345</host><remote>192.168.4.3:8045</remote>
</tcp2uart>
<modbus>
<host>192.168.4.1:502</host><remote>192.168.4.3:8056</remote>
</modbus>
<wifi>
<ap><ssid>ESP8266</ssid><ip>192.168.4.1</ip></ap>
<st><ssid>HOME_AP</ssid><ip>192.168.1.15</ip></st>
</wifi>
system.xml желательно не использовать для частых запросов - он как демо и долго отрабатывает, т.к. там много задержек на исполнении всяких типа чтения ADC, VDD и т.д. на которые накапливается дцать ms. Пишите свой xml, если хотите использовать xml или вставляете пременные прямо в HTML или javascript...
 
Последнее редактирование:

aloika

Active member
Есть запрос ~web_host~ и он указывает ip: port c которого получаете данные.
IP AP: ~wifi_ap_ip~ , ST: ~wifi_st_ip~
Сравниваете IP в javascript и ставите имя AP: ~wifi_ap_ssid~ , ST: ~wifi_st_ssid~ или ещё чего...
Спасибо за идею, действительно, в простом случае сравнить IP с учетом маски будет достаточно. Например, AP имеет адрес 192.168.4.1, а ST выдался 10.0.0.7 с маской 255.255.255.0 и если у web-клиента IP, например, 10.0.0.12 то велика вероятность, что этот клиент подключен через "ST-интерфейс".
 

A_D

Active member
Добрый вечер!
А есть ли версия голого Web сервера без всяких дополнительных пристроек ? (аля tcp2uart, управление светодиодами, adc-wave, modbus, сигмадельта и т.п.)
Пробую самостоятельно обрезать до такого состояния и не получается, точнее выходит такая картина:
Обрезается довольно легко до момента вырезания tcp2uart - он глубоко внедрен и его трудно с ходу вырезать (насколько я понял, это уже что то совмещенное просто работа с uart, вывод отладки и собственно преобразование из TCP в UART....) , ну да ладно, остальное если удалить и довести остальное до успешной компиляции, то при заливании прошивки появляется сеть ESP8266, к ней телефон коннектится, а вот при загрузке странички с 192.168.1.4 выводится только Buildin server ESP8266 - понимаю, что это страничка-заглушка, если не загружен webbin - но, в этой то части я ничего не трогал и он должен по идее заливаться вместе с прошивкой... Если заливаю оригинальную, не резанную прошивку - то все работает. (и подобная проблема у меня возникала и на самых последних сборках WebServer, сейчас использую v0.4.8c 300915 - компилируется нормально, а вот странички не грузит - это проблема в железе? если да, то как тогда 0.4.8 без правок работает?)
 

pvvx

Активный участник сообщества
Обрезается довольно легко до момента вырезания tcp2uart - он глубоко внедрен и его трудно с ходу вырезать
?
Он отключается в user_config.h закоментив [HASHTAG]#define[/HASHTAG] USE_TCP2UART. Остаются только настройки UART для любого другого проекта. Там и другое отключается.
Это только в последних версиях, на которые полные прошивки пока не делал (а имеющиеся имеют множество глюков, часть которых уже исправлена и натворены новые :) в исходниках, которые надо собирать самим). Сегодня ещё добавилось это
 
Последнее редактирование:

A_D

Active member
я полностью удалял связзанное с тем, что явно не будет использоваться, к примеру modbus - удаляю папку и далее ссылки на него, так же убираю из makefile а - в итоге собирается.
Если же закоментить в user_config.h - то этого вполне хватит что бы оно не влияло на итоговую работоспособность и быстродействие?
хочу сделать AP с веб мордой, в которой есть небольшие скрипты и через uart это дело управляет движком шаговым(там мини драйвер свой), собственно на старых sdk аля 0.9.х когда в web свалке было порядком меньше плюшек встроено, это заработало, но изза глючности самого sdk не шибко стабильно было. потом проект забросился на некоторое время - к слову, могу выложить как получится, это для товарища поворачиваемый столик городим - что то типа PhotoPizza, только с wifi и полным управлением через web.
И отсюда еще возникает вопрос - пока разбирался как чего вырезать из проекта - заметил что нету как такового в папке drivers драйвера для UART, если планирую использовать основной UART0, дебаговый вывод не буду трогать и отключать - не мешает, с чего начать или для записи\ чтения с него уже есть драйвер, только лежит в другом месте? (опять же в старых сборках web свалки был именно отдельный файл-драйвер, по анологии с adc и т.п. , тут нет такого уже..)
 

pvvx

Активный участник сообщества
Если же закоментить в user_config.h - то этого вполне хватит что бы оно не влияло на итоговую работоспособность и быстродействие?
На быстродействие там ничего не влияет.
для записи\ чтения с него уже есть драйвер, только лежит в другом месте?
После отключения [inline]//#define USE_TCP2UART[/inline]
Останутся только куски в app\web\uart_tcp.c, отвечающие за настройку и инициализацию UART0 и 1 и их выходов, инверсия там или нет входов/выходов и т.д..
app\web\tcp2uart.c полностью отключится и можете стереть.
Так-же можно стереть всё, что подсветится серым в Eclipse и в app\web\uart_tcp.c отмеченное [HASHTAG]#ifdef[/HASHTAG] USE_TCP2UART и т.д.
[inline]void uart0_write_char(char c)[/inline] находится в базовой части meSDK.
 

A_D

Active member
На быстродействие там ничего не влияет.
После отключения [inline]//#define USE_TCP2UART[/inline]
Останутся только куски в app\web\uart_tcp.c, отвечающие за настройку и инициализацию UART0 и 1 и их выходов, инверсия там или нет входов/выходов и т.д..
app\web\tcp2uart.c полностью отключится и можете стереть.
Так-же можно стереть всё, что подсветится серым в Eclipse и в app\web\uart_tcp.c отмеченное [HASHTAG]#ifdef[/HASHTAG] USE_TCP2UART и т.д.
[inline]void uart0_write_char(char c)[/inline] находится в базовой части meSDK.
Понял, спасибо большое!
Еще пара вопросов:
а изза чего может не записываться webbin ? если беру последние сборки, компилирую - заливаю и получаю в ответ от модуля не index.html а заглушку ? (самую свежую не пробовал еще)
модули у меня довольно старенькие, esp-01 и на них память стоит winbond 25q40bvnig и на другом есть ah1434 25q40bt - это вполне вменяемая память или может сбоить изза такой ? (на других - esp-07, более новых нашел еще ah1448 25q41bt - лучше такую использовать?)
 

ciuafm

New member
pvvx, я читал что вы негативно относитесь к идее подключить SD card к esp8266, но все таки это может заметно расширить область применения как девайса так и web-сервера. Я нашел два проекта на тему подключения SD:
http://esp8266.ru/forum/threads/esp8266-sd-mmc-fat16-32-demo.501/
http://www.esp8266.com/viewtopic.php?f=32&t=3558
Не могли бы вы осветить эту тему подробней?
 

pvvx

Активный участник сообщества
pvvx, я читал что вы негативно относитесь к идее подключить SD card к esp8266
если её подключать к линям FLASH.
Не могли бы вы осветить эту тему подробней?
Нет описания регистров ESP8266 работы с SD.
Замечено, что китай-инициализация лезет в зону регистров 0x60000A00 по байту sdio_configure в esp_init_data_default.bin[50]...
Кроме того есть DMA для SPI, но тоже не описана.
Дайте описание и всё будет :)
 
Последнее редактирование:

pvvx

Активный участник сообщества
Давно изменен makefile. Рассчитывать теперь надо только старт ADDR_FW2, который кратен 4096 следующему числу от размера 0x00000.bin
[inline]ADDR_FW2 = ((размер 0x00000.bin)+0xFFF)&0x7F000[/inline]
Он ещё должен быть прописан в eagle.app.v6.ld.
Как это рассчитать и изменить автоматом в makefile пока не думал. Простыми методами makefile это не выходит.
 
Последнее редактирование:
@pvvx Не планируете ли вы реализовать в своей прошивке обмен даными и управление модулем по средствам SNMP ведь это идеальный протокол для нашего модуля? Для работы с ним есть утилиты на windows и linux командочку можно хоть в ярлык вставить. Для андройда тоже есть приложения. Так жэ существует полно систем мониторинга которые работают с данным протаколом. Так жэ если настроить DDNS на домашнем роутере можно управлять удалённо. Сам пытался написать в ардуино иде прошивку, но так и не начал так как библиотека для работы с SNMP валится даже на собственном примере.
 
Последнее редактирование:

pvvx

Активный участник сообщества
Не планируете ли вы реализовать в своей прошивке обмен даными и управление модулем по средствам SNMP ведь это идеальный протокол для нашего модуля? Для работы с ним есть утилиты на windows и linux командочку можно хоть в ярлык вставить. Для андройда тоже есть приложения. Так жэ существует полно систем мониторинга которые работают с данным протаколом. Так жэ если настроить DDNS на домашнем роутере можно управлять удалённо. Сам пытался написать в ардуино иде прошивку, но так и не начал так как библиотека для работы с SNMP валится даже на собственном примере.
Пока не вижу нужды в SNMP на ESP8266. Что им управлять на модуле? Переключить сеть и потерять связь? :)
 

Tomahawk

New member
SDK 1.4.0. работает хуже, чем SDK 1.3.0. По этой причине вынужден использовать версию сборки 0.4.6f (в которой последний раз использовалась 1.3.0) и на базе неё прикручивать изменения из последующих версий, вот такой вынужденный реверс... Возьмём последнюю fullflash_web051.bin, чтобы исключить возможную кривость эклипса, и прошьём им модуль, тогда видим, как в телефоне точка доступа всё время пропадает с периодом 5-10 секунд, также с каким-то периодом рушится связь с другой АР. Не знаю как на ноутбуке, но на смартфоне подключение к модулю точно сбоит.

На данный момент хорошо показывает себя сборка 0.4.6f + фрагменты си-файлов из 0.4.8 - работает стабильно. Единственный минус только, когда пропадает сторонняя АР, то своя АР пропадает с периодом. По этой причине уже не один раз пробовал новые сборки свалки, тем более что недавно писалось об устранении проблемы, но пока использовать новые версии с SDK 1.4.0 не получается, везде идёт пропадание своей АР.
 
Сверху Снизу