• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

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

Dodo

New member
Не как не могу отыскать способ считывания с флеша данные для перехода с AP в STA режим в Arduino IDE. Решения есть, переделать в Arduino IDE не получается, а проект перенести не представляется возможным. Заранее спасибо!
 

porex

New member
Как это не отрабатывает? Файл то не откроется.
А web.cgi и fsupload разгребаются в другом месте.
Так по идее если файл отсутствует, то должен выдать ошибку 404, а выдает ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ, т.е. считывает пустую область флешки.
 

pvvx

Активный участник сообщества
Так по идее если файл отсутствует, то должен выдать ошибку 404, а выдает ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ, т.е. считывает пустую область флешки.
По идее и в реалии, при отсутствии записи диска выдает http://aesp8266/гдедиск?:
404: File not found
А на http://aesp8266/ :
ESP8266 Built-in Web server ©
На http://aesp8266/web.cgi?start=0x4020a000&hexdmp=16 :
4020a000: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff яяяяяяяяяяяяяяяя
Эти "яяяяя" вас не устраивают?
Поменяйте адрес вывода в heх :) http://aesp8266/web.cgi?hexdmp=16 :
00000000 = Bad address!
Если вы частично затерли диск (какой-то файл), но оставили его разметку то и получите "яяя". Web-у сказано выводить этот файл - он его и выводит.
Перед входом в ту процедуру открытые файлы закрываются, а флаг открытых файлов сбрасывается и для нового открытия требуется совпадение имени файла с номером ошибки и расширением "htm" : os_sprintf(CurHTTP->pFilename, "/%u.htm", CurResp->status) + указание в переменных инициализации диска, что файлы на диске есть, получаемые по разметке при подключении диска с проверкой всех ID (заголовка диска). Иначе никаких файлов не откроется и флага открытия не выставится. Исключения составляют "web.cgi" "fsupload" и "/", но "/" не совпадает никогда с "номер_ошибки.htm" :)
webserver_open_file() флаг true/false выдает только для сокращения кода, при анализе тут-же за ним открылся ли файл. Но в Web работает всё в основном по флагам, номерам ошибок и т.д. Слишком много комбинаций чтобы поставить один if (webserver_open_file()), т.к. этих файлов может быть открыто множество (там fifo на 4-ре файла, но этот путь идет только при первом разборе заголовка, и fifo файлов тут не заполнено и т.д) и следующему шагу всё равно какой файл открыт, когда и кем :).
Так что ищите ошибку в другом месте. У меня она не возникает, а все пути, флаги и т.д. когда писалось держал в голове :)
 
Последнее редактирование:

pvvx

Активный участник сообщества
Ver 0.3.3 на SDK 1.1.0. Добавлены ST RSSI ~wifi_st_rssi~, wifi_rfopt=x, wifi_vddpw=x, wifi_maxpw=x и другие дополнения в HTML...
Значения с ADC выдаются в 16 бит, путем суммы нескольких замеров с передискретизацией...
TCP clients не дописаны. Пока некогда до них...
Глюк с включением/выключением 'Use BSSID' коррекции в SDK1.1.0 не подлежит.
 
Последнее редактирование:

porex

New member
По идее и в реалии, при отсутствии записи диска выдает http://aesp8266/гдедиск?:
404: File not found
А на http://aesp8266/ :
ESP8266 Built-in Web server ©
На http://aesp8266/web.cgi?start=0x4020a000&hexdmp=16 :
4020a000: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff яяяяяяяяяяяяяяяя
Эти "яяяяя" вас не устраивают?
Поменяйте адрес вывода в heх :) http://aesp8266/web.cgi?hexdmp=16 :
00000000 = Bad address!
Если вы частично затерли диск (какой-то файл), но оставили его разметку то и получите "яяя". Web-у сказано выводить этот файл - он его и выводит.
Проверил на ESP-01, все так как вы описывали. Прошиваю этот же код на желтую отладочную плату с ESP-12 (4МБайта флешка), выдает "яяяяяяяяяяяя", причем адрес webbin везде 0x0A000.
Фукцию WEBFS_base_addr изменил, теперь всегда возвращает 0x0A000.
 

pvvx

Активный участник сообщества
Проверил на ESP-01, все так как вы описывали. Прошиваю этот же код на желтую отладочную плату с ESP-12 (4МБайта флешка), выдает "яяяяяяяяяяяя", причем адрес webbin везде 0x0A000.
Фукцию WEBFS_base_addr изменил, теперь всегда возвращает 0x0A000.
Возможно дело связано с определением реального размера flash или ещё с чем... При прошивке Web на большие flash в их заголовке необходимо указывать, что flash 512к, а не больше. Это для организации "песочницы" в 512к для SDK в начале flash. Диск на больших flash должен располагаться за этими 512к. "4М flash с желтой платой" у меня нет - есть только перепаянные модули ESP-01 и ESP-12 с 16M flash и проверить программное определение размера flash на "желтых" не могу... Бывает, что китайцы ставят flash, которая маркирована неверно - из отбраковки, а её реальные размеры другие....
 

porex

New member
Функция [inline]spi_flash_real_size()[/inline] возвращает 4194304 Байт. т.е. 4 МБайта. У вас ESP-12 с 16 МБайтами, на нем проверяли?
 

pvvx

Активный участник сообщества
Счас проверю...
Из лога старта:
Real Flash size: 16777216 bytes
Disk init: 46 files, addr = 0x00080000

Там диск уже записан... Счас сотру...
Disk init: 0 files, addr = 0x00080000
Без записи диска там бардак. Счас найдем где он прячется :)
С открытием/закрытием файлов и выводом HTTP заголовка всё хорошо. Бяда сидит дальше, в выводе нестандартных файлов (которых нет на диске)...
Бяда сидела в маске адреса для чтения flash вообще не связанная c web :)
Исправьте в flash.h:
[HASHTAG]#define[/HASHTAG] MASK_ADDR_FLASH_ICACHE_DATA 0xfffff
Маленькая flash дублируется в адресном пространстве, а на большой уже мешает базовый адрес 0x40200000. ICACHE, где могут находиться коды процессора и данные с ICACHE_RODATA_ATTR всё равно не могут быть выше и больше 1 мегабайта от начала flash. Решением этой проблемы теперь занимается jcmvbkbc - т.е. не дождетесь :)

Файлы по ссылке в заголовке обновлены с исправлением MASK_ADDR_FLASH_ICACHE_DATA.
 
Последнее редактирование:

pvvx

Активный участник сообщества
Уровень RSSI (модуль - роутер):
RSSI.gif
В dB но с обратным знаком :) Модуль был на шнурке питания - далеко не удалось оттянуть от роутера :)
Реакция изменения rssi достаточно быстрая - десятки ms.
 

pvvx

Активный участник сообщества
А прямые функции чтения флеш на этих адресах работают?
Что за прямые?
Если просто обращаться процом по адресу "кеширования" flash - то имеем несколько ограничений: размер в 1Мег от начала flash (адрес то в неё передается последовательно с базой в 0), обращение только по смешению в кратность 4, последовательное чтение ограничено примерно в килобайт (уже забыл точные цифры - при большем блоке будет протектед), перенос данных только в область IRAM или "heap", при этом команда переноса должна выполняться из ROM или IRAM. Даже в "стек" не всегда читает (вызывает протектед) - что-то намудрено там...
Если через процедуры чтения через SPI - то ничем не ограничены, кроме 16 Мег. Больше не лезет в адресный регистр SPI автоматически работающей с flash на аппаратном уровне (отсылка команд, ожидание, чтение статуса и прочее осуществляется спец. аппаратным блоком в SPI).
Малая flash (512к) ограничена в адресе в своем нутре и старшие биты не воспринимает. По тому она читается дублями по всему 16M пространству...
Чтобы совместить адрес "кеширования" с адресом передаваемым в flash необходимо вычесть 0x40200000 - адрес в адресном пространстве CPU. Кеш кончается на 0x40300000. Это окно где-то прописано и составляет всего 1M.
Любая кэш должна иметь таблицу и это ограничение может быть по причине недостатка RAM под таблицы дескрипторов загруженных в кэш блоков... Но тогда остается возможность сместить эту зону как-то относительно физического адреса flash. И это может не пройти, если система "кэша" прописана аппаратно-жестко в свзяке FLASH-SPI-RAM-шина-CPU с его виртуальными регистрами адресов... Копаться надо и искать варианты...
Но мегабайта кода вполне хватает для трансляции десятка прошивок к жестко собранной системе SDK библиотек (они будут иметь всего одну копию на все прошивки). Тем более есть 32к IRAM для оверлеев.
Короче путей для запихивания в один модуль всех имеющихся проектов уже много... :)
Espressif расширение flash за 1M решает другим путем - путем довешивания множества маленьких flash на разные "чип-селект" и переключения их. У них остался один свободный CS :) Т.е. 3 шт. flash = 3 банка с кодами по 1Мег каждый, остальное пространство flash = только данные. :) Этот метод приводит к высокому потреблению модулем - каждая нога flash + провод до неё = емкость и для её коммутации на 80MHz треба току... а в отчетах они пишут потребление только самого чипа ESP8266ex, да без внешних коммутаций в спектре WiFi - китайцы кароче... Врут на каждом шагу...
 
Последнее редактирование:

anakod

Moderator
Команда форума
pvvx, я понял. Да я именно имел в виду функции, т.е. процедуры чтения через SPI. Спасибо.
 

Mik

New member
Здравствуйте,
При компиляции "библиотеки вэбсервера" получаю ошибки, с которыми не могу разобраться :(
C:/Python27/python.exe c:/Espressif/utils/esptool.py elf2image -o ../bin/ -ff 80m -fm qio -fs 4m .output/eagle/image/eagle.app.v6.out
Traceback (most recent call last):
File "c:/Espressif/utils/esptool.py", line 22, in <module>
import serial
ImportError: No module named serial
mingw32-make[1]: *** [.output/eagle/bin/eagle.app.v6.bin] Error 1
../Makefile:119: recipe for target '.output/eagle/bin/eagle.app.v6.bin' failed
mingw32-make[1]: Leaving directory 'C:/Espressif/examples/Web_Base/app'
C:/Espressif/examples/Web_Base/Makefile:154: recipe for target '.subdirs' failed
mingw32-make.exe: *** [.subdirs] Error 2
Не могли бы помочь?
 

pvvx

Активный участник сообщества
Не могли бы помочь?
Нет установленного C:/Python27/python.exe. А UDK имеет ошибки в esptool.py при загрузке в модуль + ошибку с созданием сегмента загрузки, если даже его размер нулевой, по тому дополнительно надо копировать esptool.py в c:/Espressif/utils/esptool.py
Но можно создать прошивку и версией в UDK.
В основном makefile (в корневой папке проекта) поменяйте:
ESPTOOL ?= $(SDK_TOOLS)/esptool
[HASHTAG]#ESPTOOL[/HASHTAG] ?= C:/Python27/python.exe $(SDK_TOOLS)/esptool.py
Ещё хочу предупредить - текущая версия на SDK 1.1.1 в git, что-то халтурит, скоро исправлю... :) Какая-то несовместимость - пока ищу.
---
Всё - поправил. :)
 
Последнее редактирование:

Mik

New member
Нет установленного C:/Python27/python.exe.
Спасибо за помощь. Phyton поставил еще раньше - до того esptool вообще не запускался. Сейчас он не находит модуль serial (?). Используя UDKашную версию скомпилировалось. Спасибо за предупреждение - я взял версию 1.1.0 с yadi.sk.
 

porex

New member
Отдельно я их заводил. DHT22 даже работает сейчас с дипслипом от батареек. Но вот в комплекте с малым вебсервером не удается даже собрать. То одни ошибки то другие то третьи. Потому и написал, что знаний недостаточно.
Доработал драйвер DHT22 под сервер версии 0.3.2. По остальным версиям не могу сказать, pvvx любит перекапывать весь код)))
 

Вложения

pvvx

Активный участник сообщества
C SDK 1.1.1 и 1.1.2 какая-то беда со сканированием станций. Само сканирование работает, но после сканирования китай-SDK зачем-то рвет связь у ST и модуль долго не может подключиться обратно к AP. В логе видно, что SDK делает несколько попыток соединения, но у неё что-то нарушено в установках WiFi после сканирования:
Код:
Start Wifi Scan...
srv[80] 192.168.1.2:7414 [1] disconnect
srv[80] 192.168.1.2:7404 [1] listen
scandone

Wifi scan done:
1: Au:4, 'mns.ru-6446', -30, bc:ae:c5:eb:09:90, Ch:1
2: Au:3, 'pulkovoair', -90, c0:4a:00:33:4c:38, Ch:1
3: Au:3, 'DIRECT-fX-BRAVIA', -79, 9e:d2:1e:b2:02:95, Ch:2
4: Au:4, 'InterZet@22', -56, 26:ff:3f:09:d9:f7, Ch:2
5: Au:4, 'mns.ru-62052', -92, 84:c9:b2:6d:c7:5d, Ch:3
6: Au:2, 'Rostelecom', -90, ac:f1:df:f2:ce:0d, Ch:6
7: Au:3, 'TC DocNet', -88, 10:9a:dd:89:83:d3, Ch:11
8: Au:2, 'DSL-2640U', -88, 78:54:2e:8d:ab:7a, Ch:11
9: Au:3, 'HP-Print-bd-LaserJet 200', -91, 48:5a:b6:3e:ce:bd, Ch:11
Found 9 APs, saved in iram:0x4010536c
srv[80] 192.168.1.2:7404 [1] read: 257 of1[scan.xml] GET f[/scan.xml] head[200]:200 send: cf1 1036 dis
reconnect
rm 0
WiFi event 1
Disconnect from ssid mns.ru-6446, reason 200
f -240, scandone
WiFi event 1
Disconnect from ssid mns.ru-6446, reason 201
no mns.ru-6446 found, reconnect after 1s
reconnect
f 0, srv[80] 192.168.1.2:7404 [1] disconnect
scandone
beacon timeout
f -240, scandone
reconnect
f 0, station: 00:0f:54:10:6a:b5 join, AID = 1
WiFi event 4
Station: 00:0f:54:10:6a:b5join, AID = 1
scandone
add 0
aid 2
cnt

connected with mns.ru-6446, channel 1
WiFi event 0
Connect to ssid mns.ru-6446, channel 1
dhcp client start...
WiFi event 3
Station ip:192.168.1.50, mask:255.255.255.0, gw:0.0.0.0
ip:192.168.1.50,mask:255.255.255.0,gw:0.0.0.0
 

aloika

Active member
Обнаружил неприятный момент в сборке от pvvx.
1. Делаем веб-страничку, которая постоянно поллит запросами сервер, заходим на эту страничку.
2. Устанавливаем скорость uart 9600.
3. Подключаемся TCP-клиентом.

Льем в uart что-нибудь, через минуты 2-3 все отваливается - TCP-соединение рвется, иногда модуль вообще зависает и Wi-Fi отключается. Может раньше отвалиться, может позже.
Если web-запросами сервер не поллить, то все работает.

Пожалуйста, проверьте кто-нибудь - действительно есть такое явление? Поллющую страничку прилагаю.
 

Вложения

Сверху Снизу