Скрыть объявление
На нашем форуме недоступен просмотр изображений для неавторизованных пользователей. Если Вы уже зарегистрированы на нашем форуме, то можете войти. Если у Вас еще нет аккаунта, мы будем рады, если Вы к нам присоединитесь. Зарегистрироваться Вы можете здесь.

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

Тема в разделе "SDK и создание собственных прошивок", создана пользователем pvvx, 3 янв 2015.

  1. pvvx

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

    Сообщения:
    10.162
    Симпатии:
    1.347
    Поставить Python27
    Последние отличия в makefile всего такие:
    Было:
    ESPTOOL ?= $(SDK_TOOLS)/esptool
    #ESPTOOL ?= C:/Python27/python.exe $(SDK_TOOLS)/esptool.py
    Стало:
    #ESPTOOL ?= $(SDK_TOOLS)/esptool
    ESPTOOL ?= C:/Python27/python.exe $(SDK_TOOLS)/esptool.py
    :)
     
  2. mcmega

    mcmega Новичок

    Сообщения:
    93
    Симпатии:
    1
    Поставил python-2.7.9, всё равно ошибка на строке 147. и пути верные.
    Вернул как было, ошибок пропали... что то с питоном значит или нужна другая версия?
     
    Последнее редактирование: 22 фев 2015
  3. pvvx

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

    Сообщения:
    10.162
    Симпатии:
    1.347
    Кратко про команды wifi.rdcfg=<битовая маска>, wifi.newcfg=<битовая маска>, wifi.read=<битовая маска>, wifi.save=<битовая маска>:
    Посмотреть (раскрыть)

    Все команды установки типа wifi.st.ssid=значение работают не на прямую с WiFi, а с внутренним блоком управления конфигурацией WiFi.
    После них необходимо применение wifi.newcfg=<битовая маска>. Это связано с тем, что параметры очень хитро завязаны друг с другом, некоторые параметры нельзя установить не передав другие, и существует определенная последовательность установки, чтобы оборудование WiFi их приняло.
    Команды считывания значений работают напрямую с оборудованием WiFi и показывают текущее установленное значение.
    По этому, перед изменением любого параметра необходимо считать текущую аппаратную конфигурацию в блок управления конфигурацией командой wifi.rdcfg=<битовая маска>. Потом передать изменение, а затем уже применить wifi.newcfg=<битовая маска>.

    Биты маски (value / параметр):
    0x00000001 wifi.mode
    0x00000002 wifi.phy
    0x00000004 wifi.chl
    0x00000008 wifi.sleep
    0x00000010 wifi.ap.ip, wifi.ap.gw, wifi.ap.msk
    0x00000020 wifi.ap.ssid, wifi.ap.psw, wifi.ap.chl, wifi.ap.aum, wifi.ap.hssid, wifi.ap.mcns, wifi.ap.bint
    0x00000040 wifi.ap.dncp
    0x00000080 wifi.ap.sip, wifi.ap.eip
    0x00000100 wifi.ap.mac
    0x00000200 wifi.st.ip, wifi.st.gw, wifi.st.msk
    0x00000400 wifi.st.sbss, wifi.st.bssid, wifi.st.psw, wifi.st.ssid
    0x00000800 wifi.st.dncp
    0x00001000 wifi.st.aucn
    0x00002000 wifi.st.mac

    У wifi.rdcfg=<битовая маска> задает, что будет считано из аппаратуры WiFi перед приемом изменений в во внутренний блок управления конфигурацией WiFi. Не отмеченные биты маски указывают, какие значения будут подставлены по умолчанию перед приемом изменений.

    У wifi.newcfg=<битовая маска> задает, что будет передано (что будет устанавливаться) из внутреннего блока управления конфигурацией в оборудование WiFi.

    У wifi.save=<битовая маска> задает, что будет считано из аппаратуры WiFi перед записью установок во flash, а не отмеченные биты маски указывают, какие значения будут подставлены по умолчанию.

    У wifi.read=<битовая маска> задает, что будет передано (что будет устанавливаться) из считанного блока управления конфигурацией из flash в оборудование WiFi. Можно просто считать все прошлые запомненные значения из flash перед последующим изменением отдельных и дальнейшей установкой по выбору.

    Какие ошибки возникли после перечисленных операций можно прочитать в переменной ~stop~. В ней, биты выставленные в "1", по той-же маске, описывают, что SDK ответило "ошибкой" при применении этого блока параметров. Но переменная ~stop~ используется и в других командах. По тому надо считывать непосредственно после применения указанных команд, в этом-же TCP соединении.

    Пример для изменения имени ST: wifi.rdcfg=0x0400&wifi.st.ssid=NEWAP&wifi.newcfg=0x0400
    При этом параметры автоконнекта и другие могут быть восприняты значениями по умолчанию. Для изменения только имени ST лучше дать wifi.rdcfg=0xfffff&wifi.st.ssid=NEWAP&wifi.newcfg=0x0400

    Такой подход дает массу разных возможностей и решает проблемы невозможности изменить один параметр WiFi в SDK и автоматически решает последовательность установок с отключениями и включениями WiFi перед их применениями. Там не всё гладко и запутано - но без этого всё усложняется ещё больше, если на Web странице требуется изменить всего пару параметров.
     
    Последнее редактирование: 26 фев 2015
  4. pvvx

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

    Сообщения:
    10.162
    Симпатии:
    1.347
    В процессе дизассемблирования но уже всего сразу (BIOS, SDK и т.д. база IDA больше 2Гегов) найдена ещё фича, почему модуль может зависать по WDT и прочему:
    default_exception_handler записывает состояние для перезагрузки в память RTC system_rtc_mem_write(), выводит сообщение через ets_printf "Fatal exception (%d):\n" "epc1=0x%08x, epc2=0x%08x, epc3=0x%08x, ...", затем, в бесконечном цикле, ожидает когда fifo tx UART0 и UART1 станет пустым и только после этого вызывает system_restart(). На каждой вызванной процедуре, после краха системы, default_exception_handler может намертво зависнуть, что и наблюдается. Очередной привет от Espressif.
     
    Последнее редактирование: 26 фев 2015
    alexsmd нравится это.
  5. sharikov

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

    Сообщения:
    604
    Симпатии:
    52
    И как это обходить ?
    Не работать самостоятельно с uart ?
     
  6. pvvx

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

    Сообщения:
    10.162
    Симпатии:
    1.347
    Да не только UART - если слетит стек, то будет ещё прикольнее. А если у системы случилось просто стороннее зависшее немаскируемое прерывание во время отработки данного прикола от Espressif? :) Там очень много этих "а если", по причине вызова от туда процедур работающих по указателям в "сбитой" памяти, да ещё обращающихся к распределению памяти :)... А одно из этих "если" и вызывает данные процедуры в надежде перезагрузить сиcтему и зарегистрировать это "если" :)
    А работать просто - выдернуть все процедуры работы с WDT из SDK, путем разборки и сборки библиотек на объектники и замены на свои функции с WDT. Благо исходники по WDT из SDK все уже "реверсированы". Куски уже описывались. Если не терпиться и надо всё счас и сразу - то помочь никто не сможет. Собирать малыми кусками новый SDK пока не собираюсь - надо "довырезать" максимум Espressif-кого кода из SDK, до самого предела, и оставить только самый-самый минимум, безусловно оставив open-source либы, которых там немерянно. А это дело не быстрое и тяп-ляп не делается. Наступление идет сразу по всем фронтам :) - иначе не победить.
     
    Последнее редактирование: 27 фев 2015
    JustACat, Lstt и AlexeyGR нравится это.
  7. svh

    svh Новичок

    Сообщения:
    1
    Симпатии:
    0
    pvvx, Спасибо за прошивку.
    Я использовал ESP-01 для подключения через TCP2UART датчика СО2. Он каждую секунду выдает две строки с результатами измерений в уарт порт. С вашей прошивкой все работает отлично - данные отображаются в терминале.
    Но столкнулся с проблемой их считывания в OpenHab. Посоветуйте как можно сделать это по HTTP.
     
  8. CHERTS

    CHERTS Moderator Команда форума

    Сообщения:
    483
    Симпатии:
    108
    pvvx подскажи где скачать последнюю версию твоей прошивки, а то я тут подключил одного питон-програмера, может он сваяет консольную утилитку для создания образа mpfs.
     
  9. pvvx

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

    Сообщения:
    10.162
    Симпатии:
    1.347
    На первой странице, пока всегда по ссылке https://yadi.sk/d/xB_vsQ_bdqeMg
    И PVFS2.exe изначально консольно работет и включена в маке:
    $(USERFBIN):
    ./PVFS2.exe -h "*.htm, *.html, *.cgi, *.xml, *.bin, *.txt, *.wav" -z "*.inc, snmp.bib" ./WEBFiles ./webbin WEBFiles.bin
    Даже help какой-то дает в окошко, если ткнуть PVFS2.exe /?
    Но консоль от неё особо не требуется, т.к. она может сама грузить файлы в модуль с программой, без диска... и браузер тоже может грузить готовый WEBFiles.bin по http://192.168.4.1/fsupload .
     
    Последнее редактирование: 27 фев 2015
  10. CHERTS

    CHERTS Moderator Команда форума

    Сообщения:
    483
    Симпатии:
    108
    PVFS2.exe это клон MPFS2.exe или что то там менялось?
     
  11. CHERTS

    CHERTS Moderator Команда форума

    Сообщения:
    483
    Симпатии:
    108
    А дополнить файл WEBFiles.bin до кратности размера 16 байтами 0xFF теперь нужно?
     
  12. pvvx

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

    Сообщения:
    10.162
    Симпатии:
    1.347
    По HTTP, в связи с "западной" политикой безопасности для сетей, открыть сокет порта TCP на JAVA достаточно сложно. Это требует отдельного приложения. Реализаций отображения любых статических массивов по HTTP в данной свалке Web-сервера нет и не предвидится из-за того, что такое дело не многопользовательское, не универсальное и реализуется только под конкретную задачу-проект. А тут пока вся память по максимуму свободна.
    Из за этого нет даже отложенного переключения установок WiFi и сканирования станций, хотя это очень просто реализуется и стыкуется, но требует статические (постоянные долговременные и достаточно большие) буфера в памяти, которой изначально мало...
     
  13. pvvx

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

    Сообщения:
    10.162
    Симпатии:
    1.347
    Ничего не надо - оно всё само делает. Это исправленный клон MPFS2.1 (исходники вложены), но формат упрощен - нет ни бита лишнего.
    Проблема у данной проги одна - не мультиплатформенна
     
  14. CHERTS

    CHERTS Moderator Команда форума

    Сообщения:
    483
    Симпатии:
    108
    А есть где-то внятное описание формата MPFS, ну то есть PVFS уже?
     
  15. pvvx

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

    Сообщения:
    10.162
    Симпатии:
    1.347
    В начале WEBFS1.c, в комментах :) Тоже подправленное описание от MPFS.
    Но там мелкая неточность - начальный маркер = "FWEB". Исправил, в следующей версии будет комент правильнее :)
    Код (Text):
    1.  
    2. * PVFS Structure:
    3. *
    4. *     [F][W][E][B][uint8 Ver Hi][uint8 Ver Lo] // заголовок диска
    5. *     [uint16 Number of Files] // кол-во файлов на диске
    6. *
    7. *     [Name Hash 0][Name Hash 1]...[Name Hash N] // uint16 типа хеш на каждое имя файла :)
    8. *
    9. *     [File Record 0][File Record 1]...[File Record N] // uint32 указатели на адреса структур файлов, относительно начала диска
    10. *
    11. *     Pointers are absolute addresses within the WEBFS image.
    12. *
    13. * File Record Structure:
    14. *     [uint32 Len] размер файла с заголовком
    15. *     [uint16 HeadLen] длина заголовка, включая размер, флаг, имя (адрес данных - адрес позиции len)
    16. *     [uint16 Flags] бит 0 =1 - файл сжат GZIP, бит 1 = 1 - "парсится" - имеет динамические переменные
    17. *     [File Name, 0] Имя файла с "СИ" терминатором
    18. *     [File Data] данные файла
    19. *
    20. * Name hash (2 uint8s) is calculated as follows:
    21. *     hash = 0
    22. *     for each(uint8 in name)
    23. *    hash += uint8
    24. *    hash <<= 1
    25.  
     
    Последнее редактирование: 27 фев 2015
  16. CHERTS

    CHERTS Moderator Команда форума

    Сообщения:
    483
    Симпатии:
    108
    Эмммм... а сжатия чтоль нет? Тогда смысл использовать эту FS, чем та что в esphttpd не нравится, под ней хоть программа создания бинарника на Си есть?
     
  17. pvvx

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

    Сообщения:
    10.162
    Симпатии:
    1.347
    Сжатие делается до того и оно GZIP. Файлы, которые "парсятся" не сжимаются.
    Используйте esphttpd - это ваш выбор :) там сжатие на 5% :) :) зато мороки и тормозов - полная копилка.
    Объясните мне смысл того 5% "сжатия" на flash в 16Мег :)
    Код (Text):
    1.  
    2. .\WEBFiles :
    3.     404.htm: 364 bytes
    4.     adc.htm: 3051 bytes, 2 vars
    5.     adc.wav: 10 bytes, 1 vars
    6.     adc.xml: 45 bytes, 1 vars
    7.     disk_er1.htm: 97 bytes, 1 vars
    8.     disk_er2.htm: 81 bytes, 1 vars
    9.     disk_er3.htm: 69 bytes, 1 vars
    10.     disk_ok.htm: 84 bytes, 1 vars
    11.     esp.gif: 6571 bytes
    12.     favicon.ico: 810 bytes (gzipped by 64%)
    13.     grfx1.inc: 1894 bytes
    14.     grfx2.inc: 12904 bytes
    15.     index.htm: 7290 bytes, 23 vars
    16.     logo.gif: 393 bytes
    17.     sample.htm: 897 bytes, 36 vars
    18.     site.js: 1321 bytes (gzipped by 59%)
    19.     status.xml: 46 bytes, 1 vars
    20.     system.xml: 3563 bytes, 93 vars
    21.     test.htm: 3081 bytes, 2 vars
    22.     timeout.htm: 849 bytes, 2 vars
    23.     timer.inc: 587 bytes
    24.     tst.htm: 3054 bytes, 2 vars
    25.     tst.xml: 50 bytes, 1 vars
    26.     upload.htm: 688 bytes (gzipped by 35%)
    27.     vdd.htm: 3054 bytes, 2 vars
    28.     vdd.xml: 76 bytes, 1 vars
    29. E:\ESP8266\workspace\Web_base\WEBFiles\protect :
    30.     protect/chiprams.xml: 83 bytes, 2 vars
    31.     protect/cookie.js: 853 bytes (gzipped by 61%)
    32.     protect/dsleep.htm: 991 bytes (gzipped by 44%)
    33.     protect/flash.bin: 11 bytes, 1 vars
    34.     protect/hexdamp.htm: 1060 bytes (gzipped by 54%)
    35.     protect/hexdamp.txt: 9 bytes, 1 vars
    36.     protect/hexdmpd.htm: 1060 bytes (gzipped by 54%)
    37.     protect/hexdmpd.txt: 9 bytes, 1 vars
    38.     protect/ram.bin: 8 bytes, 1 vars
    39.     protect/sys_reset.cgi: 11 bytes, 1 vars
    40.     protect/sys_restart.cgi: 13 bytes, 1 vars
    41.     protect/tstfuncs.htm: 3155 bytes, 2 vars
    42.     protect/wifi.htm: 7900 bytes, 30 vars
    43. GENERATED WEBFS IMAGE: 67168 bytes
    44.  
    У меня итого больше на текушей свалке - из 74254 выходит 67168, но в проекте одни скрипты... и никаких мер по сжатию не применялось. А их там много - есть ~inc:имяфайла~
     
    Последнее редактирование: 27 фев 2015
  18. CHERTS

    CHERTS Moderator Команда форума

    Сообщения:
    483
    Симпатии:
    108
    Не понял, а что тогда сжимается то, какие данные? я что-то в упор не вижу GZIP сжатия, накидал простых текстовых файлов с разными данными для лучшего понимания структуры, в результате в WEBFiles.bin оно все в открытом виде, сжатия нет.
     
  19. pvvx

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

    Сообщения:
    10.162
    Симпатии:
    1.347
    То, что содержит динамические переменные не сжимается. Всё остальное сжимается GZIP-пом и так и отдается в HTTP.
    Проверьте в esphttpd - там общее сжатие 'итого' не достигает 5% :) Зато не читается :)
    Вам данные диска хорнуть каким-либо числом, чтобы сказать что это сжатие? :)
     
  20. CHERTS

    CHERTS Moderator Команда форума

    Сообщения:
    483
    Симпатии:
    108
    Все, теперь все ясно стало. Спасибо.
     

Поделиться этой страницей