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

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

pvvx

Активный участник сообщества
на сегодняшний момент WEBFiles.bin весит 64,4 кб, но по итогу урежу ещё.
Можно всё перенести. Запись конфигов SDK (4 последних сектора) запросто переносится куда угодно (суть метода описана тут). За первой загрузочной областью (0x00000.bin) можно сразу сделать 0x40000.bin и/или между ними запись конфигов SDK. Остальное линейно до конца flash и выйдет больше.
 

Andy Korg

Moderator
Команда форума
скиньте пожалуйста файлики для поиска точек доступа и подключения к ним, а то что то не очень понял, что нужно делать, чтоб повторить
дык все в топике прикрепил, больше у меня ничего нету :)
Привинтить к синей шкурке можно добавив в файл wireless_ru.html кнопку вот таким кодом:
HTML:
        <form method="post" action="site_survey.html">
                    <input type='hidden' name='wifi_scan' value="1">
                    <input type='submit' value='Сканировать' class="btn">
        </form>
И положить файлы site_survey.html и scan.xls в корень диска. Данные сканирования будут выдаваться "свалкой" в виде файла scan.xml на лету (если конечно уважаемый pvvx согласится пустить мои потуги в продакшн :))
PS. Имейте в виду у меня получился не кросс-браузерный код, т.к. в хроме рендеринг xslt у меня не выходит. С этой точки зрения код у aloika однозначно лучше.
 
Последнее редактирование:

mcmega

Member
Andy Korg, Файлы site_survey.html и scan.xls из 365 поста или там не обновлённая версия?
А код у aloika вставляется в site_survey.html
 

mcmega

Member
aloika, а можно по подробнее опись, как файл назвать с кодом (</html> походу в конце лишний) и какие действия сделать с сайтом, чтоб всё заработало?
 

aloika

Active member
mcmega, берем с первой странички последний вариант архива (который pvvx называет "свалка"), добавляем туда файл scan.htm с вышеприведенным кодом. Далее можно вызвать просто http://192.168.4.1/scan.htm или, например, в файл меню добавить ссылку на эту страничку.
Собственно, все.

Да, </html> в конце лишний.
 

mcmega

Member
pvvx, Спасибо, буду пробовать, кстати, ошибки при компиляции на 137 строке make файла возникают, когда номер COM порта меняется, а комп не перезагружается после этого))
 

pvvx

Активный участник сообщества

mcmega

Member
Это к C:\Espressif\utils\esptool.exe и её автору в UDK, но беда у вас с драйверами USB-COM...
Да нет, всё нормально, просто я поменял порт с Com5 на Com6 (как в прошивке, чтоб не лазить постоянно в make файл)... а порт походу был открыт, вот и глюк был... перезагрузил и всё нормально.
 

aloika

Active member
pvvx, а что означают эти строчки:

HTML:
<input type='hidden' name='wifi_rdcfg' value='0x1C00'></td>
и

HTML:
<input type='hidden' name='wifi_newcfg' value='0x11C00'>
т.е. что это за переменные wifi_rdcfg и wifi_newcfg ? и что за значения...
 

aloika

Active member
А что к ним подключать? Вывод звука c ADC на 22кГц дискр.?
В остальном там UTF-8 (два байта на символ, в стандартных текстовых) и это многим не по душе....
Делать тег в bin-кодах?
Может, я глупость напишу, но вот что бы лично я хотел от websocket'ов.

Я бы хотел переходник websocket-uart. Не напрямую, а так: пришло сообщение от клиента в websocket, из uart вылетела команда для железки.
И обратно: прилетела строчка в uart (а строчка эта о состоянии железки) - всем подключенным клиентам пришло сообщение от websocket-сервера.
Команды (и статусы состояния) редкие и короткие.

Зачем это нужно, казалось бы, железкой можно и сейчас управлять. Но если я хочу управлять и с веб-странички, и из Delphi, и с Андроида, и из Python'а, к примеру? Сейчас для web нужно что-то одно городить, через запросы, с другими перечисленными вариантами - совсем другое - использовать TCP-клиентов.

А с websocket'ами было бы гораздо красивее - был бы просто словарь команд и статусов. И его можно было бы использовать для всех клиентов, независимо от языка, платформы и т.д.

Поэтому я бы хотел просто websocket и ничего не подключать к нему - просто вынести в отдельный .c файл заготовки для callback'ов (с простыми примерами) и все. Типа onMessage, on Error, onClose, onConnect и т.д. И каждый сам себе напишет там что хочет.

(На большее у меня масштаба не хватает, хоть бы светодиодом через websocket помигать :)
 

pvvx

Активный участник сообщества
т.е. что это за переменные wifi_rdcfg и wifi_newcfg ? и что за значения...
Существует некая структура, через которою обслуживаются все установки WiFi. Она же и сохраняется. Для управления конфигом WiFi есть всего 4-ре процедуры:
1) Считать состояние WiFi в данную структуру
2) Записать состояние из структуры в WiFi
3) Сравнить структуру и состояние WiFi
4) Установить значения в структуре в default
Каждая из этих процедур управляется только флагами/маской:
Код:
#define WIFI_MASK_ALL        0x00003FFF // 0x00003FFF
#define WIFI_MASK_MODE        0x00000001
#define WIFI_MASK_PHY        0x00000002
#define WIFI_MASK_CHL        0x00000004
#define WIFI_MASK_SLEEP        0x00000008
#define WIFI_MASK_APIP        0x00000010
#define WIFI_MASK_APCFG        0x00000020
#define WIFI_MASK_APDHCP    0x00000040
#define WIFI_MASK_APIPDHCP    0x00000080
#define WIFI_MASK_APMAC        0x00000100
#define WIFI_MASK_STIP        0x00000200
#define WIFI_MASK_STCFG        0x00000400
#define WIFI_MASK_STDHCP    0x00000800
#define WIFI_MASK_STACN        0x00001000
#define WIFI_MASK_STMAC        0x00002000
#define WIFI_MASK_SAVE        0x00010000
#define WIFI_MASK_REBOOT    0x00020000

struct bits_wifi_chg { // структура передачи изменений или ошибок
    unsigned mode        : 1;    //0  0x00000001
    unsigned phy        : 1;    //1  0x00000002
    unsigned chl        : 1;    //2  0x00000004
    unsigned sleep        : 1;    //3  0x00000008
    unsigned ap_ipinfo    : 1;    //4  0x00000010
    unsigned ap_config    : 1;    //5  0x00000020
    unsigned ap_dhcp    : 1;    //6  0x00000040
    unsigned ap_ipdhcp     : 1;    //7  0x00000080
    unsigned ap_macaddr    : 1;    //8  0x00000100
    unsigned st_ipinfo    : 1;    //9  0x00000200
    unsigned st_config    : 1;    //10 0x00000400
    unsigned st_dhcp    : 1;    //11 0x00000800
    unsigned st_autocon    : 1;    //12 0x00001000
    unsigned st_macaddr    : 1;    //13 0x00002000
    unsigned st_connect : 1;    //14 0x00004000
    unsigned none       : 1;    //15 0x00008000
    unsigned save_cfg     : 1;    //16 0x00010000
    unsigned reboot     : 1;    //17 0x00020000
} __attribute__((packed));
Например сравнение структуры с реальной WiFi сравнивает что указано в маске и выставляет биты в выходной маске что разнится.
Эту выходную маску направляем на установку WiFi из структуры, что устанавливать. Она отвечает маской ошибок установки по тем же битам. :)
Что обновить, считать в структуру из WiFi тоже задается битовой маской.... Дефаултовые поля - аналогично.
Непосредственно разные разрозненные процедуры установок WiFi из SDK "свалка" таким образом не использует. Это всё ещё необходимо для определения порядка последовательности установок WiFi, что требуется включить или выключить перед применением каждого блока из структуры...
Значения из Web передаются только в структуру, а потом, когда дана команда wifi_newcfg, когда закроется соединение (после передачи HTML страницы) то произойдет их применение к аппаратуре WiFi... Это не всё, а коротко - условий много. Основная причина такого - сложность установок WiFi в SDK от Espressif.
Смотрите Web_Base4\app\web\wifi.c - там всё и увидите :)
Можно и нужно это переработать-доработать, т.к. делалось давно для старых SDK и не всё было четко и известно... Так-же не известны были оптимальные алго установок WiFi с Web, а счас это уже более менее устоялось...

HTML:
<input type='hidden' name='wifi_rdcfg' value='0x1C00'></td>
- Считать что счас у WiFi в st_config, st_dhcp, и st_autocon (на всякий случай, т.к. потом будем менять и вдруг кто не долетит :) ....)
HTML:
<input type='hidden' name='wifi_newcfg' value='0x11C00'>
- Установить в WiFi st_config, st_dhcp, и st_autocon + записать конфиг в flash, если он отличается от прошлой записи там.
 
Последнее редактирование:

aloika

Active member
pvvx, спасибо за объяснение. Я даже немного что-то понял.
(тут писал доп. вопросы, а Вы их предугадали и в это время на них уже ответили в посте :)
 

pvvx

Активный участник сообщества
pvvx, спасибо за объяснение. Я даже немного что-то понял.
(тут писал доп. вопросы, а Вы их предугадали и в это время на них уже ответили в посте :)
Писать долго, а я ещё занят разным, да семья... По тому хожу и дописываю :)
 

pvvx

Активный участник сообщества
Я бы хотел переходник websocket-uart. Не напрямую, а так: пришло сообщение от клиента в websocket, из uart вылетела команда для железки.
И обратно: прилетела строчка в uart (а строчка эта о состоянии железки) - всем подключенным клиентам пришло сообщение от websocket-сервера.
Как-то это не очень - всем сразу открытым соединениям? А управляет одно или сразу все? Uart не многопользовательский. Прикидываю - будут беды и переполнения. Безусловно, при нормировании со стороны запрошающего (клиента) проблем не будет, но если вдруг на uart накинутся все соединения? Да даже одно - оно заполнит буфер передачи в uart и websocket умрет (не сможет отвечать). А значит надо городить спец.протокол и просто стандартными передачами бинарных данных для websocket тут не обойтись. Этих протоколов (Subprotocol) у websocket уже мульоны... Не охота городить ещё один. - может через него сделать транспорт HTTP :)
Надо выдумать как вписаться в простые стандартные рамки....
 
Последнее редактирование:

mcmega

Member
pvvx, подскажите пожалуйста, в Эклипсе открыл проект и открыл файл Web_Base4\app\Include\wifi.h, хотел поменять WIFI_AP_PASSWORD и кое что другое по мелочи...., но при открытии этого файла выскакивает ошибка на строке 116, AUTH_MODE authmode; и вопросики на строках 125-135. После открытия файла, проект не собирается. Что делать?
 
Последнее редактирование:

lvm1976

New member
добрый день. Вы бы не могли бы написать кусок кода обращения по get и post запросу с другим таким же устройством, типа http://192.168.4.1/?gpio1_out=3.
 

pvvx

Активный участник сообщества
в Эклипсе открыл проект и открыл файл Web_Base4\app\Include\wifi.h, хотел поменять WIFI_AP_PASSWORD и кое что другое по мелочи...., но при открытии этого файла выскакивает ошибка на строке 116, AUTH_MODE authmode; и вопросики на строках 125-135. После открытия файла, проект не собирается. Что делать?
Сменить файл wifi.h на новый из архива. Может что побили... или вставили/стерли лишнее?
не могли бы написать кусок кода обращения по get и post запросу с другим таким же устройством, типа http://192.168.4.1/?gpio1_out=3.
Уточните, что имеете в виду. Совершенно не ясно кто, зачем и когда должен послать запрос...
 

mcmega

Member
pvvx, дело в том, что я ничего не менял, а просто открыл файл в эклипс и он походу проверил файл и выдал ошибку в этом блоке
struct bss_scan_info { // структуры, сохранямые для вывода scan.xml (в iram)
uint8 bssid[6];
uint8 ssid[32];
uint8 channel;
sint8 rssi;
AUTH_MODE authmode; - Ошибка на этой строке
uint8 is_hidden;
};

Пишет:
Type 'AUTH_MODE' could not be resolved wifi.h /Web_Base4/app/include line 116 Semantic Error
 
Сверху Снизу