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

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

pvvx

Активный участник сообщества
SDK 1.4.0. работает хуже, чем SDK 1.3.0.
SDK 1.4.1 вроде что-то пофиксили с AP. Даже снял патч на паузу при поиске ST в режиме AP+ST.
Версии прошивок отличаются тем, что одни были сделаны во время проведения множественных тестов и коррекций, а другие тестов практически не имели. Тесты я делаю когда мне надо и есть время - тогда и может возникнуть более стабильная версия, до выхода нового SDK и новых вставок. А что вы хотите, если коментов и сторонних тестов нет. Один я много не натестирую, только то, что мне нужно.
 
Последнее редактирование:

Tomahawk

New member
Понимаю, поэтому пишу и о своих тестах, чтобы хотя бы знать о проблеме.

Подкорректировал график rssi, судя по приложению Wifi Analyzer отличным сигналом считается -40...-60 дБм, средним -60...-86 дБм и плохим от -87 и дальше в минус. На практике при выходе за сотню модуль уже теряется из видимости, т.е. шкала совпадает. По аналогии с модулем и этой программой настраиваю цвета в веб-интерфейсе.
*Файл tst.htm
HTML:
<td width="50%"><img id="level" src="signal-no.png" width="16" height="16">&nbsp;Test: <span id="xdata" style="font-weight:bold">?</span></td>
<script type="text/javascript">
var xmlfile = 'tst.xml';
var level_1 = -60;
var level_2 = -85;
var millisPerPixel = 200;
var millisPerLine = 5000;
</script>
*Файл grf.js
JavaScript:
function addpoint(xmlData) {
    if (xmlData) {
        newval = eval(getXMLValue(xmlData, 'value'));
        if (newval == '31') {
            newval = 'нет';
            document.getElementById("level").src = "signal-no.png";
        }
        document.getElementById('xdata').innerHTML = newval;
        //сигнал хороший
        if (newval >= level_1) {
            document.getElementById('xdata').style.color = '#005E1F';
            document.getElementById("level").src = "signal-3.png";
        }
        //сигнал средний
        else if (newval >= level_2) {
            document.getElementById('xdata').style.color = '#827A00';
            document.getElementById("level").src = "signal-2.png";
        }
        //сигнал плохой
        else {
            document.getElementById('xdata').style.color = '#A00000';
            if (newval != 'нет') document.getElementById("level").src = "signal-1.png";
        }
        newval *= -1;    //теперь дБм положительное число
        line1.append(new Date().getTime(), newval);
    } else
        line1.append(new Date().getTime(), newval);
}
Число дБм будет отображаться с минусом как по стандарту, но график рисуется как для целых чисел, с этим пока не разбирался. Добавил также меняющуюся картинку уровня сигнала типа "полоски", если нравится можете добавить себе.
 

Вложения

Последнее редактирование:

FGX

Member
Добрый день. Что-то у меня модуль на версии 0,5,1 потребляет 0,13-0,14А тогда как на 0,4,8с обычные 0,07А. Пришлось вернуться а то прямо накаляется.

П.С. разобрался, прошивка не причем, дело было в схеме, просто настройка выводов была разная и через один видимо замыкало на землю.
 

pvvx

Активный участник сообщества
В режиме AP или AP+ST всегда от 70 mA.
В режиме ST работает WiFi-sleep.
В режиме ST, при поиске внешней AP, если она отключена и включен "ReConnect: 30" секунд, то в Web-свалке работает фича понижения потребления:
Power_STnoAP_ReConnect30sec.gif
Измерено на стандартном модуле ESP-01 со светодиодом.
 

PycLan

New member
Здрасте всем!
В модуль 07, была залита fullflash_web050.bin
Все работало, пока я не попробовал отключить лишние модули в Eclipse.
В user_config.h закоментировал не нужные компоненнты, Make> all - прошло все без ошибок.
Нажал FlashAll, все записалось. Точка появилась, зашел на веб страницу, элементы отключенных компонентов не работают, все ок.
Но после полного обестачивания модуля перестала появлятся точка. Пробовал повторно FlashClearSetings, FlashAll, все выполняется, но точка не появляется.
Прошил через XTCOM_UTIL, fullflash_web050.bin. Точка стала появлятся, но на веб страницу зайти немогу.
Подскажите где копать?
Спасибо.

P.S. после прошивки XTCOM_UTIL, fullflash_web050.bin все работает, просто после обновления винды, в настройках прокси сервера, снялась опция неиспользовать прокси для локальных адресов.

P.S. исходный проект без изменений, все собирается без ошибок, но не работает
 
Последнее редактирование:

Xlab.ks

New member
Добрый день. Загрузил со свалки проект Small web server on ESP8266 , импортировал его в Eclipse. Скомпилировал и прошил из Eclipse все прошло без ошибок. Но после запуска Wi-Fi не поднимается. Если прошивать fullflash_and_webfs_xxx.zip из ESP Tools то все работает. В чем моя ошибка?
 

pvvx

Активный участник сообщества
Добрый день. Загрузил со свалки проект Small web server on ESP8266 , импортировал его в Eclipse. Скомпилировал и прошил из Eclipse все прошло без ошибок. Но после запуска Wi-Fi не поднимается. Если прошивать fullflash_and_webfs_xxx.zip из ESP Tools то все работает. В чем моя ошибка?
3 минуты назад, скачал esp8266web-master.zip, распаковал, импортировал в Eclipse, нажал "all", потом "FlashAll" и модуль ESP-01 работает. До этого проверено на: ESP-01 flash 16 мегабайт и 512 килобайт, ESP-12, ESP-12E, Модуле DEVKIT с ESP-12 с flash 4 мегабайта...
На модулях с flash более 512 килобайт требуется заливать диск отдельно и указано в инструкции.
* При прошивке всегда ставим размер Flash 512 Кбайт (4Mbit)! Реальный размер определяется автоматически самой прошивкой.
* Если Flash на модуле более 512 Кбайт, то после подключения к AP "ESP8266" требуется заливка диска программой WEBFS22.exe или эксплорером набрав http://192.168.4.1/fsupload. Можно записать WEBFiles.bin и программатором по адресу 0x80000.
 

Tomahawk

New member
PycLan, Xlab.ks, а вы когда питание сбрасываете, для перевода модуля из режима программирования в режим работы подаёте "1" на CH_PD?
"0" - программирование, "1" работа.
 

PycLan

New member
Доброе утро!
Спасибо за ответы.
3 минуты назад, скачал esp8266web-master.zip, распаковал, импортировал в Eclipse, нажал "all", потом "FlashAll" и модуль ESP-01 работает. До этого проверено на: ESP-01 flash 16 мегабайт и 512 килобайт, ESP-12, ESP-12E, Модуле DEVKIT с ESP-12 с flash 4 мегабайта...
Вывод лога консоли для All и FlashAll:
https://yadi.sk/i/uaSJFSK_kCKFz

PycLan, Xlab.ks, а вы когда питание сбрасываете, для перевода модуля из режима программирования в режим работы подаёте "1" на CH_PD?
"0" - программирование, "1" работа.
Я использую схему с первой ссылки из этого раздела:
http://esp8266.ru/forum/threads/esp8266-esp-07-12-full-i-o-breadboard-adapter.547/
Полная схема здесь: https://github.com/baoshi/ESP-Breakout/blob/master/hw/ESP-Breakout.pdf
 
Последнее редактирование:

Xlab.ks

New member
3 минуты назад, скачал esp8266web-master.zip, распаковал, импортировал в Eclipse, нажал "all", потом "FlashAll" и модуль ESP-01 работает. До этого проверено на: ESP-01 flash 16 мегабайт и 512 килобайт, ESP-12, ESP-12E, Модуле DEVKIT с ESP-12 с flash 4 мегабайта...
На модулях с flash более 512 килобайт требуется заливать диск отдельно и указано в инструкции.
* При прошивке всегда ставим размер Flash 512 Кбайт (4Mbit)! Реальный размер определяется автоматически самой прошивкой.
* Если Flash на модуле более 512 Кбайт, то после подключения к AP "ESP8266" требуется заливка диска программой WEBFS22.exe или эксплорером набрав http://192.168.4.1/fsupload. Можно записать WEBFiles.bin и программатором по адресу 0x80000.
Спасибо за ответ, кажется разобрался. До этого 3 дня пытался влить и перечитал весь форум но результат был отрицательным. Вчера зашил прошивкой AT v0.23 SDK 1.0.1 flash 512k а затем снова скомпилировал проект но не в окне "Make target", которое справа в eclipse, а в окне Project Exlorer на самом проекте правой кнопкой мыши --> Make targets --> Build --> All и там же Flash All - и в результате завелась. Я думаю что разницы откуда была вызвана команда компиляции в eclipse не имеет значения скорей прошивка помогла.
Вы конечно проделали огромнейшую работу по разработке библиотеки, проект мне очень нравится. Может подскажите литературу по которой можно скорей освоить программирование по esp8266 кроме SDK.
 

PycLan

New member
Вчера зашил прошивкой AT v0.23 SDK 1.0.1 flash 512k а затем снова скомпилировал проект но не в окне "Make target", которое справа в eclipse, а в окне Project Exlorer на самом проекте правой кнопкой мыши --> Make targets --> Build --> All и там же Flash All - и в результате завелась. Я думаю что разницы откуда была вызвана команда компиляции в eclipse не имеет значения скорей прошивка помогла.
Да действительно, так заработало! А через правое окно Make Target - не пашет.
Спасибо всем за проделанную работу!
 

pvvx

Активный участник сообщества
Ну уж прямо инструкцию по пользованию Eclipse тут писать (!), когда тема не о средах программирования, а о web-свалке для ESP8266.

В панели-окне “ProjectExplorer” выбираете и отмечаете проект.
Переключение как транслировать выбираете тут:
Eclipse_Mange_config.gif
Выйдет два пути трансляции:
1) "Default (Use Makefile)" - через готовый “makefile” и пимпочки в панели “MakeTarget”.
Eclipse_Make_Target.gif
2) "AutoMake (Internal builder)" - c автоматическим созданием “makefile” и конфигурацией задаваемой в Eclipse к каждому файлу проекта.
Опции, трансляция, clean и прочее в данном режиме осуществляется средствами меню Eclipse:
Build на данной кнопке-иконке или в других меню:
Eclipse_Build.gif
Clean - в других меню.
Для заливки flash там используется пипка или меню "Run->External Tools":
Eclipse_External_tools.gif
Пример конфигурирования меню для заливки Flash в режиме "AutoMake (Internal builder)":
Eclipse_run_config.gif

Так-же можно странслировать проект web-свалки в режиме "AutoMake (Internal builder)" и переключить в режим "Default (Use Makefile)" для программировании flash.

PS: Для нормальной работы с ESP8266 в Eclipse обращайтесь за плагинами к автору UDK (!).
PS2: В данной теме вопросы как странслировать или как прошить и подобные не разбираются (!), тут не школа для обучения азам программирования и работы в разных средах.
 
Последнее редактирование:

Xlab.ks

New member
Подскажите пожалуйста. Создал html страничку с 1 кнопкой которая -бы переключала состояние gpio4. положил ее в папку protect.
Вот такого содержания:

<!DOCTYPE html>
<html><head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
<title>My test ESP8266</title>
<link rel="stylesheet" href="/style.css">
<script src="/site.js"></script>
</head>
<body>
<div class="content">
<h2 class="title">GPIO</h2>
<table id="gpios" class="scan">
<tr>
<th>
<button type=button onclick=function(){newAJAXCommand("gpio.xml?gpio4_out=3")}>Gpio4
</button>
</th>
</tr>
</table>

</div>
</body>
</html>

реакцию на событие onclick подсмотрел в примере. Но кнопка упорно не хочет переключать состояние выхода gpio4.
Пробовал через форму с кнопкой - так работает, но не устраивает что перегружается страничка и возвращает в ответ xml.
Может кто подскажет какая ошибка в моем коде?
 

PycLan

New member
Ну уж прямо инструкцию по пользованию Eclipse тут писать (!), когда тема не о средах программирования, а о web-свалке для ESP8266.
Добрый день!
Как-то инструкция не помогла... :(
В режиме AutoMake сборка запускается сама, кстати и если не исправить ошибку в пути (лишний пробел перед точка с запятой, то будет ругаться: Error: Program "xtensa-lx106-elf-gcc" not found in PATH, если зайти и посмотреть путь, то увидим лишний пробел:
Path.jpg
После исправления ошибки, запускается сборка с выдачей предупреждения:
cannot find entry symbol _start; defaulting to 00400034 esp8266web C/C++ Problem
Кстати у Вас уважаемый pvvx на скриншоте видно, что есть какое-то предупреждение - желтый ! на папке проекта.
А по примеру External Tools, приведенный пример почему-то запускает сперва сборку всех проектов имеющихся в workspace, а потом уже пытается прошивать.

Такой вопрос - возможно такое, что сборка проходит без ошибок(она у меня проходит без ошибок во всех режимах), но при этом после прошивки точка не появляется?
Если взять архив проекта без изменения и сразу нажать FlashAll, будет залита прошивка собранная Вами?
 
Последнее редактирование:

A_D

Active member
Добрый день!
Пробую перенести свой старый проект на последнюю версию web-свалки и по ходу возникли трудности, явно связанные с ухода от старого официального sdk.... или я чего не понял..вобщем, если попытаться проинициализировать таймер вот так:
Код:
os_timer_disarm(&panotable_timer);
    os_timer_setfn(&panotable_timer, (os_timer_func_t *)panotable_timer_int, (void *)0);
    os_timer_arm(&panotable_timer, 100, 1);
обработчик прерывания и сама структура, обьявляющая наш таймер - стандартна, по примеру blink2.
Так вот при компиляции вылазит ошибка, мол ets_timer_arm_new не обьявлен. Подключаю следующие файлы:
Код:
#include <ets_sys.h>
#include <osapi.h>
#include <os_type.h>
в osapi.h нахожу такие строки
Код:
#define os_timer_disarm ets_timer_disarm
#define os_timer_setfn ets_timer_setfn
#define os_timer_arm(a, b, c) ets_timer_arm_new(a, b, c, 1)
по первым двум обьявление функции находится в файле ets.h в котором обьявления функций далее не открываются (типа их нет) или это встроенные библиотечные функции, без исходников?
и самое прикольное, что по ets_timer_arm_new - саму функцию я то нашел в ets_timer.c но компилятор упорно говорит мне что она не обьявлена (что логично, ибо заголовочного файла с её обьявлением я не нашел.... ).
Что делать с этим? (верно ли что на первые 2 он не ругается, но и посмотреть исходники я тоже не могу?) Видимо таймер не проверялся - поэтому и не было подобных вопросов ранее по нему... или я что то не так сделал?

И еще вопрос по UART0 - ранее был драйвер, у меня использовались оттуда такие вещи как
Код:
rxsimbols = (UART0_STATUS >> UART_RXFIFO_CNT_S) & UART_RXFIFO_CNT;

panotable_uart_rx[0] = READ_PERI_REG(UART_FIFO(UART0)) & 0xFF;

uart0_sendStr(panotable_uart_rx);
если первые 2 - просто чтение регистров, по идее ничего не поменялось, то вот вторая - как мне писать символ или строку в uart0 с отключенным tcp2uart ?
И еще вопрос по нему - если я не предполагаю делать настройки uart0 в WEB страничке, как мне проинициализировать на старте модуля uart0 с определёнными настройками? (и не нужно ли что либо отключать дополнительно, если не вызываются соотв. настройки из web_int_callbacks.c и web_int_vars.c ?)
 

pvvx

Активный участник сообщества
по ходу возникли трудности, явно связанные с ухода от старого официального sdk..
В оф. SDK стоит опция не искать и не проверять описания функций и отключены все варнинги. В web-свалке стоит опция компилятору что любой варнинг - это ошибка и обязательны все описания.
ets_timer_arm_new описан в add_func.h, где находится и другая масса не объявленных функций.
Такие конструкции, как READ_PERI_REG(UART_FIFO(UART0)) равные UART0_FIFO выкинуты из стандартных инклудов, т.к. создают увеличение объема программы из-за обращения к регистрам без смещения (дают увеличение кол-ва загрузок адресов в регистры CPU + увеличение кол-во этих индексов в коде)
И еще вопрос по нему - если я не предполагаю делать настройки uart0 в WEB страничке, как мне проинициализировать на старте модуля uart0 с определёнными настройками?
Можно в файле WEBFiles\protect\init.ini.
Остальную обработку передачи/приема с uart в web странички пишите сами и желательно кинуть куда чтоб мы потом посмеялись. :)
 
Последнее редактирование:

A_D

Active member
В оф. SDK стоит опция не искать и не проверять описания функций и отключены все варнинги. В web-свалке стоит опция компилятору что любой варнинг - это ошибка и обязательны все описания.
ets_timer_arm_new описан в add_func.h, где находится и другая масса не объявленных функций.
Такие конструкции, как READ_PERI_REG(UART_FIFO(UART0)) равные UART0_FIFO выкинуты из стандартных инклудов, т.к. создают увеличение объема программы из-за обращения к регистрам без смещения (дают увеличение кол-ва загрузок адресов в регистры CPU + увеличение кол-во этих индексов в коде)
Можно в файле WEBFiles\protect\init.ini.
Остальную обработку передачи/приема с uart в web странички пишите сами и желательно кинуть куда чтоб мы потом посмеялись. :)
Спасибо, действительно добавив sdk/add_func.h все заработало как надо. с UART0 оказалось всё проще чем я думал, есть обьявление в app_main.c и его можно вот так использовать:
Код:
extern void uart0_write_char(char c);
void uart0_sendStr(char * stringToWrite)
{
    while(*stringToWrite)
        uart0_write_char(*stringToWrite++);
}
а вот на приём, чтение по регистрам что то не работает...код пробую такой:
Код:
uint8 rxsimbols = (UART0_STATUS >> UART_RXFIFO_CNT_S) & UART_RXFIFO_CNT;
    if(rxsimbols)
    {
        panotable_uart_rx[0] = UART_FIFO(UART0) & 0xFF;
.....
}
еще повникаю.
но вот что очень конечно обескураживает - это реально Свалка. по тому же юарту всё раскиданно куда не попадя... имею дело с нашими АРМами, да AVR\STM32 - небо и земля конечно в организации SDK\библиотеки и т.д.


Неее, мне не надо из web в uart! на WEB - морда + первоначальные расчеты, как должен крутится стол для сьемки и через какой градус поворота делать снимок, после нажатия начать сьемку - по таймеру собственно и посылаются в uart команды, что делать и какие параметры шагового двигателя выставить. на другом конце мелкая AVR (когда только затевался проект - не решился делать напрямую от ESP-01, а ща лень переделывать) и драйвер шагового двигателя, она банально ждет команд чего делать и отвечает готова ли исполнять следующую или сейчас занята.(вот на прием осталось доделать, остальное вроде уже всё заработало)

==============
Допустил невнимательность - исправил UART_FIFO(UART0) на UART0_FIFO и всё заработало :)
 
Последнее редактирование:

pvvx

Активный участник сообщества
с UART0 оказалось всё проще чем я думал, есть обьявление в app_main.c и его можно вот так использовать
...
еще повникаю.
В ESP8266 без RTOS нельзя использовать такие циклы. Только быстрая обработка по событию или работа с UART по прерываниям. При выводе длинной строки таким методом вы затормозите процессы WiFi и прочего, что приведет к непонятным сбоям.

но вот что очень конечно обескураживает - это реально Свалка. по тому же юарту всё раскиданно куда не попадя... имею дело с нашими АРМами, да AVR\STM32 - небо и земля конечно в организации SDK\библиотеки и т.д.
Ничего не разбросано. После отключения TCP2UART остается управление UART конфигурацией из Web и более ничего. Но UART связана с i/o и ими тоже требуется управлять в зависимости от занимаемых UART пинов, да ещё в разных вариантах куда можно назначить выводы UART. Когда опишите все аналогичные завязки и зависимости в ARM или STM32, тогда посмотрим действительно на "свалку" и итоговый объем коду... :)
 

A_D

Active member
В ESP8266 без RTOS нельзя использовать такие циклы. Только быстрая обработка по событию или работа с UART по прерываниям. При выводе длинной строки таким методом вы затормозите процессы WiFi и прочего, что приведет к непонятным сбоям.
строки не более 6 символов, посылаются не чаще 100мс по одной. так что думаю в моем случае это не критично..

Ничего не разбросано. После отключения TCP2UART остается управление UART конфигурацией из Web и более ничего. Но UART связана с i/o и ими тоже требуется управлять в зависимости от занимаемых UART пинов, да ещё в разных вариантах куда можно назначить выводы UART. Когда опишите все аналогичные завязки и зависимости в ARM или STM32, тогда посмотрим действительно на "свалку" и итоговый объем коду... :)
Ну если признаться честно - мне не шибко важно какой в итоге обьем кода выходит и его вылизанность в асемблерном варианте - главное что бы стабильно работало и не менее важно - что бы вполне легко было разобраться, если вдруг надо обучить\показать это коллеге\другу или банально через n времени вернуться к проекту. Даже с SPL библиотеками, многими не шибко любимыми, порог вхождения и осваиваемость переферии гораздо ниже\лучше чем с SDK от китайских братьев, я конечно Уважаю Ваш труд, Вы очень много сделали, но если посмотреть непредвзято на то, как организованно сейчас текущее SDK для ESP8266 - это свалка. Для работы того же UART для тех же STM32 или 1986ВЕ92 - я подключаю Один заголовочный файл, в котором всё необходимое описанно, а если посмотреть ситуацию с ESP ..... посмотри там, посмотри сям, допиши того, переделай другое.... нет, это не претензия именно к Вам, это просто первые мысли, когда пытаешь вникнуть в это :) p\s а если вспомнить про бедных адуринщиков и т.п. - какой ужас у них в глазах) это уж промолчу....
 

pvvx

Активный участник сообщества
Ну если признаться честно - мне не шибко важно какой в итоге обьем кода выходит и его вылизанность в асемблерном варианте - главное что бы стабильно работало и не менее важно - что бы вполне легко было разобраться, если вдруг надо обучить\показать это коллеге\другу или банально через n времени вернуться к проекту. Даже с SPL библиотеками, многими не шибко любимыми, порог вхождения и осваиваемость переферии гораздо ниже\лучше чем с SDK от китайских братьев, я конечно Уважаю Ваш труд, Вы очень много сделали, но если посмотреть непредвзято на то, как организованно сейчас текущее SDK для ESP8266 - это свалка. Для работы того же UART для тех же STM32 или 1986ВЕ92 - я подключаю Один заголовочный файл, в котором всё необходимое описанно, а если посмотреть ситуацию с ESP ..... посмотри там, посмотри сям, допиши того, переделай другое.... нет, это не претензия именно к Вам, это просто первые мысли, когда пытаешь вникнуть в это :) p\s а если вспомнить про бедных адуринщиков и т.п. - какой ужас у них в глазах) это уж промолчу....
Всё это к китайцам. Это их идеология в SDK - скрыть информацию и давать порциями, да всё запутать, чтобы продать тысячу раз добавив по крупице.
В STM32 ещё больше файлов и если там потребуется сделать аналог, то выйдет ешё запутанней или вообще ничего не выйдет при использовании стандартных либ. А тут всего пяток файлов, в которых упоминается UART. И проект не имеет вашей цели, а сделан для настройки имеющихся аппаратных кусков через Web и используемые вещи требуют высокой производительности и малого объема кода. Это не Arduino c массой ограничений.
Вам данный проект не годится. Используйте Arduino :)
 
Последнее редактирование:
Сверху Снизу