Прошивка для esp32 nodemcu lua на базе последней idf4.4

Тема в разделе "ESP8266, ESP32", создана пользователем serg3295, 11 июл 2022.

  1. ИгорьК

    ИгорьК Гуру

    Esplorer жжот!
    upload_2024-5-9_15-1-55.png

    Но файлы не грузит :)
     
    serg3295 нравится это.
  2. serg3295

    serg3295 Гуру

    Это хорошо. Теперь интересно как будет работать cli nodemcu-tool.
    У меня на S2 он делает всё, кроме загрузки\выгрузки файлов. А на esp32 на прошивке со сломанным коммитом даже грузит\выгружает файлы.
    Но работоспособность S2 никто и не обещал. А вот С6 может и заработать.

    P.S. ESPlorer не будет работать с файлами по той же причине, что и nodemcu-tools (VSCode)
     
  3. ИгорьК

    ИгорьК Гуру

    upload_2024-5-9_19-10-53.png

    Модуль висит на СОМ4 и виден любым терминалом
     
  4. serg3295

    serg3295 Гуру

    Предустановки.

    nodejs >= 18. Можно 20.
    Утилита nodemcu-tool не менялась, но на всякий случай взять отсюда https://github.com/serg3295/NodeMCU-Tool/releases/tag/4.0.0
    файлы из zip архива распаковать, перейти в /out и запускать
    > node ./nodemcu-tool.js --port /dev/ttyACM0 или что там под виндоуз.

    под линуксом удобно запускать так
    Код (Bash):
    #!/usr/bin/env bash

    # Shortcut
    node ./out/nodemcu-tool.js "$@"
     
  5. ИгорьК

    ИгорьК Гуру

  6. serg3295

    serg3295 Гуру

    Нет, рабочая ветка - auto. Но на уже собранный релиз я дал прямую ссылку. Просто скачать один zip файл nodemcu-tool.zip
    Вот, даже ссылка на сам файл случайно получилась :)
     
  7. ИгорьК

    ИгорьК Гуру

    upload_2024-5-9_19-38-10.png
     
  8. serg3295

    serg3295 Гуру

    Пока всё хорошо. А если попробовать
    node nodemcu-tool.js -p COM4 fsinfo
    node nodemcu-tool.js --help
     
  9. ИгорьК

    ИгорьК Гуру

    upload_2024-5-9_19-46-7.png
     
  10. ИгорьК

    ИгорьК Гуру

    А вот терминал через nodemcu-tools:

    upload_2024-5-9_19-50-53.png
     
  11. serg3295

    serg3295 Гуру

    А, блин! Я же уже скорректировал у себя прошивку самого nodemcu для поддержки всех esp32 с буквами в хвосте. Там засада как раз была с node.chipid()
    Придётся вам переходить на следующий уровень владения Git'ом:)
    1. git checkout на самый последний коммит ветки dev-esp32
    2. создадим ветку с произвольным именем, скажем work32, и перейдём на неё.
    git checkout -b work32
    3. в файлe components/modules/node.c меняем кусочек кода (всю функцию node_chipid) на правильный
    Код (C++):
    // Lua: node.chipid()
    static int node_chipid( lua_State *L )
    {
    #if defined(CONFIG_IDF_TARGET_ESP32)
      // This matches the way esptool.py generates a chipid for the ESP32 as of
      // esptool commit e9e9179f6fc3f2ecfc568987d3224b5e53a05f06
      // Oddly, this drops the lowest byte what's effectively the MAC address, so
      // it would seem plausible to encounter up to 256 chips with the same chipid
      uint64_t word16 = REG_READ(EFUSE_BLK0_RDATA1_REG);
      uint64_t word17 = REG_READ(EFUSE_BLK0_RDATA2_REG);
      const uint64_t MAX_UINT24 = 0xffffff;
      uint64_t cid = ((word17 & MAX_UINT24) << 24) | ((word16 >> 8) & MAX_UINT24);
      char chipid[17] = { 0 };
      sprintf(chipid, "0x%llx", cid);
    #else
      const char *chipid = "0x_unknown";
    #endif
      lua_pushstring(L, chipid);
      return 1;
    }
     
    и комментируем две строчки в этом же файле
    Код (C++):
    LROT_BEGIN(node, NULL, 0)
      LROT_FUNCENTRY( bootreason, node_bootreason )
    // #if defined(CONFIG_IDF_TARGET_ESP32)
      LROT_FUNCENTRY( chipid,     node_chipid )
    // #endif
      LROT_FUNCENTRY( compile,    node_compile )
      LROT_FUNCENTRY( dsleep,     node_dsleep )
    #if defined(CONFIG_LUA_VERSION_51)
    4. git add components/modules/node.c
    5. git commit -m"fix node_chipid"

    можно собирать прошивку.
    Вот это не понял. nodemcu-tools не должна работать с испорченным коммитом
     
    Последнее редактирование: 9 май 2024
  12. ИгорьК

    ИгорьК Гуру

    node nodemcu-tool.js -p COM4 terminal - получается терминал. Вот через него взаимодействует

    ... а все остальное позже.
     
  13. ИгорьК

    ИгорьК Гуру

    Слуш, собери прошивку - я попробую. Не получается что-то... Не пойму где.
     
  14. ИгорьК

    ИгорьК Гуру

    In file included from /home/igor/dev-esp32/components/base_nodemcu/include/module.h:4,
    from /home/igor/dev-esp32/components/modules/node.c:1:
    /home/igor/dev-esp32/components/modules/node.c:900:31: error: 'node_chipid' undeclared here (not in a function); did you mean 'node_compile'?
    900 | LROT_FUNCENTRY( chipid, node_chipid )
    | ^~~~~~~~~~~
    /home/igor/dev-esp32/components/lua/lua-5.3/lnodemcu.h:22:37: note: in definition of macro 'LRO_FUNCVAL'
    22 | #define LRO_FUNCVAL(v) {{.f = v}, LUA_TLCF}
    | ^
    /home/igor/dev-esp32/components/modules/node.c:900:3: note: in expansion of macro 'LROT_FUNCENTRY'
    900 | LROT_FUNCENTRY( chipid, node_chipid )
    | ^~~~~~~~~~~~~~
    /home/igor/dev-esp32/components/modules/node.c:900:3: warning: missing initializer for field 'value' of 'ROTable_entry' {aka 'const struct ROTable_entry'} [-Wmissing-field-initializers]
    In file included from /home/igor/dev-esp32/components/lua/lua-5.3/lnodemcu.h:8:
    /home/igor/dev-esp32/components/lua/lua-5.3/lobject.h:564:16: note: 'value' declared here
    564 | const TValue value;
    | ^~~~~
    /home/igor/dev-esp32/components/modules/node.c:902:3: warning: missing initializer for field 'value' of 'ROTable_entry' {aka 'const struct ROTable_entry'} [-Wmissing-field-initializers]
    902 | LROT_FUNCENTRY( compile, node_compile )
    | ^~~~~~~~~~~~~~
    /home/igor/dev-esp32/components/lua/lua-5.3/lobject.h:564:16: note: 'value' declared here
    564 | const TValue value;
    | ^~~~~
    /home/igor/dev-esp32/components/modules/node.c:903:3: warning: missing initializer for field 'value' of 'ROTable_entry' {aka 'const struct ROTable_entry'} [-Wmissing-field-initializers]
    903 | LROT_FUNCENTRY( dsleep, node_dsleep )
    | ^~~~~~~~~~~~~~
    /home/igor/dev-esp32/components/lua/lua-5.3/lobject.h:564:16: note: 'value' declared here
    564 | const TValue value;
    | ^~~~~
    /home/igor/dev-esp32/components/modules/node.c:907:3: warning: missing initializer for field 'value' of 'ROTable_entry' {aka 'const struct ROTable_entry'} [-Wmissing-field-initializers]
    907 | LROT_FUNCENTRY( flashreload,node_lfsreload_deprecated )
    | ^~~~~~~~~~~~~~
    /home/igor/dev-esp32/components/lua/lua-5.3/lobject.h:564:16: note: 'value' declared here
    564 | const TValue value;
    | ^~~~~
    /home/igor/dev-esp32/components/modules/node.c:908:3: warning: missing initializer for field 'value' of 'ROTable_entry' {aka 'const struct ROTable_entry'} [-Wmissing-field-initializers]
    908 | LROT_FUNCENTRY( flashindex, node_lfsindex )
    | ^~~~~~~~~~~~~~
    /home/igor/dev-esp32/components/lua/lua-5.3/lobject.h:564:16: note: 'value' declared here
    564 | const TValue value;
    | ^~~~~
    /home/igor/dev-esp32/components/modules/node.c:909:3: warning: missing initializer for field 'value' of 'ROTable_entry' {aka 'const struct ROTable_entry'} [-Wmissing-field-initializers]
    909 | LROT_TABENTRY( LFS, node_lfs )
    | ^~~~~~~~~~~~~
    /home/igor/dev-esp32/components/lua/lua-5.3/lobject.h:564:16: note: 'value' declared here
    564 | const TValue value;
    | ^~~~~
    /home/igor/dev-esp32/components/modules/node.c:910:3: warning: missing initializer for field 'value' of 'ROTable_entry' {aka 'const struct ROTable_entry'} [-Wmissing-field-initializers]
    910 | LROT_FUNCENTRY( heap, node_heap )
    | ^~~~~~~~~~~~~~
    /home/igor/dev-esp32/components/lua/lua-5.3/lobject.h:564:16: note: 'value' declared here
    564 | const TValue value;
    | ^~~~~
    /home/igor/dev-esp32/components/modules/node.c:911:3: warning: missing initializer for field 'value' of 'ROTable_entry' {aka 'const struct ROTable_entry'} [-Wmissing-field-initializers]
    911 | LROT_FUNCENTRY( input, node_input )
    | ^~~~~~~~~~~~~~
    /home/igor/dev-esp32/components/lua/lua-5.3/lobject.h:564:16: note: 'value' declared here
    564 | const TValue value;
    | ^~~~~
    /home/igor/dev-esp32/components/modules/node.c:912:3: warning: missing initializer for field 'value' of 'ROTable_entry' {aka 'const struct ROTable_entry'} [-Wmissing-field-initializers]
    912 | LROT_FUNCENTRY( output, node_output )
    | ^~~~~~~~~~~~~~
    /home/igor/dev-esp32/components/lua/lua-5.3/lobject.h:564:16: note: 'value' declared here
    564 | const TValue value;
    | ^~~~~
    /home/igor/dev-esp32/components/modules/node.c:913:3: warning: missing initializer for field 'value' of 'ROTable_entry' {aka 'const struct ROTable_entry'} [-Wmissing-field-initializers]
    913 | LROT_FUNCENTRY( osprint, node_osprint )
    | ^~~~~~~~~~~~~~
    /home/igor/dev-esp32/components/lua/lua-5.3/lobject.h:564:16: note: 'value' declared here
    564 | const TValue value;
    | ^~~~~
    /home/igor/dev-esp32/components/modules/node.c:914:3: warning: missing initializer for field 'value' of 'ROTable_entry' {aka 'const struct ROTable_entry'} [-Wmissing-field-initializers]
    914 | LROT_FUNCENTRY( restart, node_restart )
    | ^~~~~~~~~~~~~~
    /home/igor/dev-esp32/components/lua/lua-5.3/lobject.h:564:16: note: 'value' declared here
    564 | const TValue value;
    | ^~~~~
    /home/igor/dev-esp32/components/modules/node.c:915:3: warning: missing initializer for field 'value' of 'ROTable_entry' {aka 'const struct ROTable_entry'} [-Wmissing-field-initializers]
    915 | LROT_FUNCENTRY( setonerror, node_setonerror )
    | ^~~~~~~~~~~~~~
    /home/igor/dev-esp32/components/lua/lua-5.3/lobject.h:564:16: note: 'value' declared here
    564 | const TValue value;
    | ^~~~~
    /home/igor/dev-esp32/components/modules/node.c:916:3: warning: missing initializer for field 'value' of 'ROTable_entry' {aka 'const struct ROTable_entry'} [-Wmissing-field-initializers]
    916 | LROT_FUNCENTRY( sleep, node_sleep )
    | ^~~~~~~~~~~~~~
    /home/igor/dev-esp32/components/lua/lua-5.3/lobject.h:564:16: note: 'value' declared here
    564 | const TValue value;
    | ^~~~~
    /home/igor/dev-esp32/components/modules/node.c:917:3: warning: missing initializer for field 'value' of 'ROTable_entry' {aka 'const struct ROTable_entry'} [-Wmissing-field-initializers]
    917 | LROT_FUNCENTRY( stripdebug, node_stripdebug )
    | ^~~~~~~~~~~~~~
    /home/igor/dev-esp32/components/lua/lua-5.3/lobject.h:564:16: note: 'value' declared here
    564 | const TValue value;
    | ^~~~~
    /home/igor/dev-esp32/components/modules/node.c:918:3: warning: missing initializer for field 'value' of 'ROTable_entry' {aka 'const struct ROTable_entry'} [-Wmissing-field-initializers]
    918 | LROT_TABENTRY ( task, node_task )
    | ^~~~~~~~~~~~~
    /home/igor/dev-esp32/components/lua/lua-5.3/lobject.h:564:16: note: 'value' declared here
    564 | const TValue value;
    | ^~~~~
    /home/igor/dev-esp32/components/modules/node.c:919:3: warning: missing initializer for field 'value' of 'ROTable_entry' {aka 'const struct ROTable_entry'} [-Wmissing-field-initializers]
    919 | LROT_FUNCENTRY( uptime, node_uptime )
    | ^~~~~~~~~~~~~~
    /home/igor/dev-esp32/components/lua/lua-5.3/lobject.h:564:16: note: 'value' declared here
    564 | const TValue value;
    | ^~~~~
    /home/igor/dev-esp32/components/modules/node.c:920:3: warning: missing initializer for field 'value' of 'ROTable_entry' {aka 'const struct ROTable_entry'} [-Wmissing-field-initializers]
    920 | LROT_TABENTRY ( wakeup, node_wakeup )
    | ^~~~~~~~~~~~~
    /home/igor/dev-esp32/components/lua/lua-5.3/lobject.h:564:16: note: 'value' declared here
    564 | const TValue value;
    | ^~~~~
    make[4]: *** [esp-idf/modules/CMakeFiles/__idf_modules.dir/build.make:319: esp-idf/modules/CMakeFiles/__idf_modules.dir/node.c.obj] Error 1
    make[4]: *** Waiting for unfinished jobs....
    [ 97%] Building C object esp-idf/modules/CMakeFiles/__idf_modules.dir/pipe.c.obj
    make[4]: Leaving directory '/home/igor/dev-esp32/build'
    make[3]: *** [CMakeFiles/Makefile2:5570: esp-idf/modules/CMakeFiles/__idf_modules.dir/all] Error 2
    make[3]: Leaving directory '/home/igor/dev-esp32/build'
    make[2]: *** [Makefile:130: all] Error 2
    make[2]: Leaving directory '/home/igor/dev-esp32/build'
    make failed with exit code 2, output of the command is in the /home/igor/dev-esp32/build/log/idf_py_stderr_output_7377 and /home/igor/dev-esp32/build/log/idf_py_stdout_output_7377
    make[1]: *** [Makefile:18: all] Error 2
    make[1]: Leaving directory '/home/igor/dev-esp32'
    make: *** [Makefile:10: all] Error 2
    igor@ASER-Extensa:~/dev-esp32$ mc
     
  15. serg3295

    serg3295 Гуру

    Да, без проблем. В приложении прошивка для esp32c6 и файл node.c
    Я чего-то сразу не подумал. Надо было мне node.c целиком приложить, а не патчи копировать.
    А то, судя по логам, остался не закомментирован старый #ifdefined(CONFIG_IDF_TARGET_ESP32) перед функцией node_chipid
    Если поменять файл целиком, то должно собраться. Я думаю :rolleyes:
     

    Вложения:

    • firmwareEsp32c6.zip
      Размер файла:
      710,8 КБ
      Просмотров:
      51
    • node.zip
      Размер файла:
      8,6 КБ
      Просмотров:
      43
  16. ИгорьК

    ИгорьК Гуру

    upload_2024-5-10_12-22-12.png

    upload_2024-5-10_12-29-20.png

    upload_2024-5-10_12-35-31.png

    Трудится исправно с вашим файлом nodemcu-tool.js

    Можно ли теперь это в проект как-то запустить?

    P.S. Ваша прошивка оставила соединение с модулем через UART. Заменил файл node.c, поправил меню конфиг, запустил make IDFPY_ARGS="set-target esp32с6" - скомпилировалось, но опять с UART.

    Таким образом, make IDFPY_ARGS="set-target esp32с6" сбрасывает меню конфиг к дефолту.

    make IDF_TARGET=esp32с6 - не сбрасывает.
     
    Последнее редактирование: 10 май 2024
  17. serg3295

    serg3295 Гуру

    Хорошо. Теперь осталось починить расширение для vscode и esplorer.
    Изменения в node.c я попозже оформлю как PR в upstream.
    Настройки uart | cdc хранятся в файле sdkconfig в корне директории nodemcu-firmware. Возможно, при изменении цели этот файл переписывается по дефолту. А может это make clean или fullclean его сбрасывает. Надо посмотреть будет.
     
    ИгорьК нравится это.
  18. ИгорьК

    ИгорьК Гуру

    @serg3295 . Пытаюсь сделать ревизию головы наплечной на тему получения необходимого софта без излишеств.

    Мы устанавливали Lua. Lua нам был нужен только для luac.cross и LuaScriptDiet? И по сути лишь для того, чтобы к этим файлам был путь по умолчанию?

    Проблема в чем - тот luac.cross, что лежит в папке "C:\Program Files (x86)\Lua\5.1" - он и подхватывается при делании LFS.
    Даже если в tasks.json в части "label": "Кросс компилятор", прописать прямой путь к другому luac.cross - подхватывается все равно из директории Lua.

    Это невеликая проблема, но если начинать установку софта на чистый комп (или для желающего приобщиться) - может можно как-то без Lua 5.1?
     
  19. serg3295

    serg3295 Гуру

    luac.cross - это exe'шник. Ему сам компилятор Lua не нужен.
    luaSrcDiet - это скрипт на Lua 5.1, значит ему нужен установленный Lua.
    luaSrcDiet я не использовал несколько лет, потому что во-первых, он только для Lua 5.1, во-вторых, не было необходимости. В расширение nodemcu-tools встроен Lua minifier. Он и для 5.1, и для 5.3. Но его я тоже не часто использовал.

    Проблему с каталогами я не очень понял. У меня сейчас из-за процесса отладки приложений куча этих разных компиляторов разбросано по каталогам под разными именами. Какой каталог укажешь для вызова, тот компилятор и выполнится.
     
    ИгорьК нравится это.
  20. ИгорьК

    ИгорьК Гуру

    LuaScriptDiet я тоже не помню когда применял, значит Lua 5.1 долой.

    Вот. Можно чуть подробнее, где этот каталог указать, чтобы это не было "по умолчанию".