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

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

rybeg

New member
А у меня на микротике норм: WebFig v6.35.4, WiFi - Atheros AR9300.
Проблема только с Linksys и Zyxel.
У Вас нормально работает связь двух esp через роутер микротик 6.37.3? Чип AR9344. Как не пробывал, не получается, может в свое время в firewall какую защиту поставил.
Еще вопрос про OTA, если флешка большая, можно загружать новую прошивку выше по памяти, чем webdisk?
 

DorianGray

New member
Добрый день. Вот пытаюсь добавить несколько новых параметров, но вот для сохранения строки c IP адресом сервера - необходимо задать ID объекта:
#define ID_CFG_UURL 0x5552 // id для сохранения строки tcp_client_url
#define ID_CFG_UURL2 0x5553 // id для сохранения строки tcp_server_url
но я не могу понять, как именно эта константа выбирается.
Я так понял по коду, что данные хранятся в отдельных участках памяти по 512 байт максимум - размер объекта для хранения, а сохраняются они как ассоциативный массив "ключ - значение" в памяти
 

pvvx

Активный участник сообщества
Еще вопрос про OTA, если флешка большая, можно загружать новую прошивку выше по памяти, чем webdisk?
На всех Flash более 512 килобайт (определяется автоматически) web-диск начинается с 512 килобайтной границы и может достигать до конца 16 мегабайтной Flash (15.5 МБ). Если не используете большой диск на всю flash - то после него пишите что выдумается. Всё ПО и настройки живут в "песочнице" ограниченной первыми 512 килобайтами Flash... Прошивку для обновления можете положить и в диск...
 

relink

New member
Не плохо было-бы отдельную ветку по Makefile создать и помочь поисковикам вразумительные ответы на такие вопросы давать.
Никто не подскажет, чему эти флаги и опции способствуют:
LINKFLAGS_eagle.app.v6 = \
-nostartfiles \
-u call_user_start \
 

pvvx

Активный участник сообщества
Не плохо было-бы отдельную ветку по Makefile создать и помочь поисковикам вразумительные ответы на такие вопросы давать.
Никто не подскажет, чему эти флаги и опции способствуют:
LINKFLAGS_eagle.app.v6 = \
-nostartfiles \
-u call_user_start \
GNU make — Linux-библиотека
Ещё надо отдельные ветки:
  • Как установить windows
  • Изучаем СИ
  • Как работать в Eclipse
Всё равно будут вопросы. У каждого - свои. По этому, обобщение в таких вещах не применимо.
Вопрос надо ставить конкретный – тогда на него можно ответить.
LINKFLAGS_eagle.app.v6 - это опции линковщику GCC. GCC online documentation - GNU Project - Free Software Foundation (FSF)

Option Summary - Using the GNU Compiler Collection (GCC) :
Linker Options
See Options for Linking.
object-file-name -fuse-ld=linker -llibrary
-nostartfiles -nodefaultlibs -nostdlib -pie -rdynamic
-s -static -static-libgcc -static-libstdc++
-static-libasan -static-libtsan -static-liblsan -static-libubsan
-static-libmpx -static-libmpxwrappers
-shared -shared-libgcc -symbolic
-T script -Wl,option -Xlinker option
-u symbol -z keyword
 
Последнее редактирование:

relink

New member
Спасибо за дельную ссылку, давно искал что-то подробное по make на русском. Интересовало -u call_user_start в контексте WebBase, как вам удалось эту функцию переопределить. Допустим у нас есть системная функция из библиотеки, которая может вызываться из другой функции из библиотеки. Как сделать так, чтобы все вызовы перенаправлялись на собственно определенную функцию.
Подумал, что в других ветках такого ответа не найти, тем более, ответ кажись ни в make (-u(undefined) call_user_start и в других мэйках встречается, без определения кода функции). Надо было наверное поконкретней вопрос сформулировать.
 
Последнее редактирование:

rybeg

New member
На всех Flash более 512 килобайт (определяется автоматически) web-диск начинается с 512 килобайтной границы и может достигать до конца 16 мегабайтной Flash (15.5 МБ). Если не используете большой диск на всю flash - то после него пишите что выдумается. Всё ПО и настройки живут в "песочнице" ограниченной первыми 512 килобайтами Flash... Прошивку для обновления можете положить и в диск...
Спасибо за ответ, буду пробывать.
И еще маленький вопрос, больше пару суток не могу добиться аптайма, после изменения http://имя_или_IP/web.cgi?sys_const_112=0 стало получше,
[URL='https://esp8266.ru/forum/#realtek-rtl8710-rtl8711-rtl8195.83']RTL8710
постабильнее будет? или у меня где-то криво или много времени процессора отнимаю на опрос датчиков. [/URL]
 

pvvx

Активный участник сообщества
RTL8710 постабильнее будет? или у меня где-то криво или много времени процессора отнимаю на опрос датчиков.
В принципе - да. Но на него ещё нет распространенного и готового для пользователей ПО, т.к. мне одному не в состоянии всё и сразу сделать, да и не стремлюсь...
 

086dx66

Member
Спасибо за ответ, буду пробывать.
И еще маленький вопрос, больше пару суток не могу добиться аптайма, после изменения http://имя_или_IP/web.cgi?sys_const_112=0 стало получше,
RTL8710 постабильнее будет? или у меня где-то криво или много времени процессора отнимаю на опрос датчиков.
У меня неделю уже работает есп-01(древний с 512кб) с по esp-link прошивает ардуинку удаленно и команды ей передает
 

pvvx

Активный участник сообщества
У меня неделю уже работает есп-01(древний с 512кб) с по esp-link прошивает ардуинку удаленно и команды ей передает
Там HTTPD c ограничениями в 4-ре соединения. Скорость в HTTPD поправили (пару лет назад :) ) только после указания как это сделать, а кол-во соединений исправить там невозможно, т.к. используется espconn. Давно уже сказано - web-свалка свою миссию выполнила - показала, что более-менее web на ESP-8266 возможен. Но программисты так и не чешутся... А я не проф.программист и не моя это задача - ублажать пользователей - рисовать рюшечки и шашечки... :) Вот пусть теперь европейцы или штатовщики ублажают и рисуют рюшечки - на это и расcчитано :) В принципе с RTL-ами ситуация аналогична -> дать старт, прецедент, а далее доить сливки :)
И неоднократная практика за 30 лет показала – они не могут осилить определенный уровень. Ограничены :)
 
Последнее редактирование:

Virtual

New member
ну вот опять влез в проект на 2 года позже чем нужно было :(.
собрал Unofficial Development Kit for Espressif ESP8266 (c) by CHERTS. на Linux F21 в 3 попытки (забыл либы)
а вот esp8266web компилировалось не без бубна :(.
1. нужно сделать копию
/opt/Espressif/ESP8266_SDK и поверх накатить esp8266web (не знаю может не верно но так работает)
2. в Makefile и по аналогии в ovls/Makefile
Код:
--- Makefile.orig       2017-01-05 20:42:57.000000000 +0300
+++ Makefile    2017-01-05 19:29:11.990326429 +0300
@@ -36,7 +36,7 @@
BLANKBIN := ./$(FIRMWAREDIR)/blank.bin
#BLANKADDR := 0x7E000
BLANKADDR := $(shell printf '0x%X\n' $$(($(SPI_SIZE)*1024 - 2*4096)))
-WEB_BASE := $(subst \,/,$(CWD))
+WEB_BASE ?= $(subst \,/,$(CWD))
(нету системной переменной CWD)
3. из оверлеев не собралось
10dof i219u tcp_client udplog wdrv
с руганью:
Код:
 error: dereferencing type-punned pointer will break strict-aliasing rules [-Werror=strict-aliasing]
может важно:
gcc version 4.8.2 (crosstool-NG 1.20.0)

4. компилил так:
Код:
#! /bin/sh
#
#
#
PATH=/opt/Espressif/crosstool-NG/builds/xtensa-lx106-elf/bin:$PATH
WEB_BASE="$PWD/" \
XTENSA_TOOLS_ROOT=/opt/Espressif/crosstool-NG/builds/xtensa-lx106-elf/bin \
ESPTOOL="python $PWD/esptool.py" \
OVLTOOL="python $PWD/ovls.py" \
UPLOADTOOL="python $PWD/uploader.py" \
make
(в WEB_BASE пришлось добавить слеш ибо в большинстве место он не добавляется :( )

PS пока не шил..... потихоньку распаиваю 12-F на адаптер.
 

pvvx

Активный участник сообщества
1. нужно сделать копию
/opt/Espressif/ESP8266_SDK и поверх накатить esp8266web (не знаю может не верно но так работает)
Внешний SDK в web-свалке не используется. Всё находится в директории "проекта". На Linux не рассчитано вовсе, т.к. если поддерживать разные платформы, то нужно поддерживать все, вплоть до Андроид :) и нет унифицированных компиляторов...
 

Virtual

New member
увы используется
облом сразу случился на на минимум 2х хидерах

#include <stdlib.h>
#include <string.h>
это стандартные хидеры но вот почто их нет в тулчейне по умолчанию :(
в тулчейне Unofficial Development Kit for Espressif ESP8266 (c) by CHERTS. этого нет!.
но прилетает на пункте
Добавляем библиотеки libc, libhal и заголовочные файлы в SDK
так что и поступил "влоб"

На Linux не рассчитано вовсе
очень жаль :( хотя мой тест выше говорит о обратном ;) все работает с небольшими правками.

PS нет у мну возможности захламлять вендовую хост систему кодом... ибо очень активно используется cygwin с специфическими sdk
зато есть сервер под такие задачи ;) не производительный, за -то 24/7 да доступный в сети.
 
Последнее редактирование:

pvvx

Активный участник сообщества
увы используется
облом сразу случился на на минимум 2х хидерах

#include <stdlib.h>
#include <string.h>
Это инклуды из либ компилятора, а не из SDK.
PS нет у мну возможности захламлять вендовую хост систему кодом... ибо очень активно используется cygwin с специфическими sdk
Аналогичная ситуация. Но производители железа с MCU не дают ПО на Linux, как и на другое оборудование. От этого и процветает Win-да.
Тут ещё второй фактор – винда 10 ныне бесплатна, как и её поддержка для большинства местных пользователей… Частична совместимость с Linux в web-свалке оставлена, но имеет низший приоритет. Не имею возможностей исправлять и поддерживать всё. Хотите помочь - проект открыт и могу дать доступ для правки, хоть на гит... :) (c) там всё равно нет и можете использовать куда и как угодно, кроме частей имеющих лицензии...
 
Последнее редактирование:

Virtual

New member
во и мне непонятно как стандартные либы коим место в тулчейне CHERTS закинул в часть SDK
PS но это не критично... просто нать в заметки добавить да не забывать....
важнее другое почто часть из папки оверлеев не собралось :(
//могу дать логи если нужно.
//гугл говорит про более строгую проверку кода
 
Последнее редактирование:

aloika

Active member
Pvvx, хотел спросить, может вы прокомментируете.

В режиме AP+STA при подключении к точке доступа время от времени возникает такая ситуация: телефон показывает, что wi-fi подключен, виден уровень сигнала и т.д. Но по факту - соединения нет, ни браузером, ни пингом. Помогает следующее - нужно отключить wi-fi в телефоне и включить его снова - и всё сразу работает. Я бы не писал об этом, предполагая, что это глюки телефона, но такое наблюдается время от времени и на Андроиде, и на iPhone, и в винде 10. В винде, кстати, программное перевключение wi-fi не помогает, нужно выдернуть сетефой адаптер из USB и воткнуть снова (у меня он внешний, воткнут, да). Отключиться от сети wi-fi и снова подключиться - не помогает (ни на одной ОС).

ЕСП при этом трогать не надо.

Не могу пока что поймать, когда это происходит, но происходит систематически.

(Всё это примерно на полугодовой давности версии "свалки").
 

pvvx

Активный участник сообщества
(Всё это примерно на полугодовой давности версии "свалки").
Много что уже утекло за это время... Была ошибка при пересоединении к AP. Если пауза между разрывом малая, то тот-же порт в LwIP не открывается. Надо ждать TIME_WAIT - 120 сек. Нет управления netif-ами и оповещения LwIP от WiFi - данный уровень отсутcвует в SDK.
Вторая фича - при инициализации модуля нет случайного числа. Открываемый порт через LwIP всегда начинается с одного и того-же номера. Это, при реконнекте AP вызывает приколы у других, особенно при TCP. :)
Третья фича - баги китай-автоподстройки WiFi для station. Если автоподстройка WiFi включена в esp_init_data_default.bin, то внешний сигнал любого работающего рядом WiFi вызывает уход в дебри station на модуле. Может вернуться на правильные настройки, если ещё не совсем "поехали мозги" у драйвера и не произошел по этой причине "протектед" в глубинах драйвера WiFi.
Четвертая фича - баги с определением смены ключа при WPA и т.д.
Пятая ... устал писать - выбросите ESP8266 на помойку - не годится он для применения в рабочих вещах.
 
Последнее редактирование:

Virtual

New member
разобрался почто папка ovls не собиралась, нужно в папке ovls в мэйкфайл добавить
Код:
-fno-strict-aliasing
(вероятно этот параметр в компиляторе под Вин уже по дефолту)
+минимум 1 опечатка.

очепятка в секции без отладки
Код:
--- ovls/10dof/main/main.c.old  2017-01-06 17:31:49.887789452 +0300
+++ ovls/10dof/main/main.c      2017-01-06 10:49:45.160769062 +0300
@@ -234,7 +234,7 @@
                        os_printf("HSPI CLK = %u Hz\n", hspi_master_init(0x07070300,1000000)); // 8 bit addr, 8 bit cmd, CS none, SPI MODE 3, SETUP + no HOLD, 1 MHz
                        os_printf("Init BMP280...\n");
#else
-                       hspi_master_init(0x07070300,1000000)); // 8 bit addr, 8 bit cmd, CS none, SPI MODE 3, SETUP + no HOLD, 1 MHz
+                       hspi_master_init(0x07070300,1000000); // 8 bit addr, 8 bit cmd, CS none, SPI MODE 3, SETUP + no HOLD, 1 MHz
#endif
                        if(!init_bmp280()) {
#if DEBUGSOO > 1
применение WEB_BASE из уровня выше + параметр уменьшения строгости
кст точно CWD ? обычно PWD что в кигвине что в линух (текущая директория)
наверно стоит в скрипте компиляции сделать
CWD="$PWD/" \
для совместимости с вендой ;)
Код:
--- ovls/Makefile.old   2017-01-06 17:39:32.059010530 +0300
+++ ovls/Makefile       2017-01-06 09:43:34.109513215 +0300
@@ -5,7 +5,7 @@
#############################################################

UPLOADOPTION = ./bin/tcp_client.ovl http://aesp8266/fsupload
-WEB_BASE := $(subst \,/,$(CWD))
+WEB_BASE ?= $(subst \,/,$(CWD))

ADDR_FW1 = 0x00000
ADDR_FW2 = 0x10000
@@ -23,7 +23,7 @@
NM := $(XTENSA_TOOLS_ROOT)/xtensa-lx106-elf-nm
CPP = $(XTENSA_TOOLS_ROOT)/xtensa-lx106-elf-cpp
OBJCOPY = $(XTENSA_TOOLS_ROOT)/xtensa-lx106-elf-objcopy
-CCFLAGS += -Os -Wall -Wno-pointer-sign -fno-tree-ccp -mno-target-align -mno-serialize-volatile -foptimize-register-move
+CCFLAGS += -Os -Wall -Wno-pointer-sign -fno-strict-aliasing -fno-tree-ccp -mno-target-align -mno-serialize-volatile -foptimize-register-move
#
# -Wall -Wno-pointer-sign -mno-target-align -mno-serialize-volatile -foptimize-register-move
# -fomit-frame-pointer -fmerge-all-constants
 
Последнее редактирование:

aloika

Active member
выбросите ESP8266 на помойку - не годится он для применения в рабочих вещах
Выбросил бы, если бы была альтернатива. RTL - это, конечно, здорово и перспективно, но проекта уровня вашей "свалки" для нее нет и неизвестно, будет ли в ближайшее время. Ценность ESP в том, что для нее есть ваша "свалка". А самому такое даже близко не написать - одно дело, подправить мелочи уже в работающем коде, а другое - начать всё с "нуля", с истоков.
 
Сверху Снизу