Расширение для vs code, обеспечивающее работу с nodemcu lua

Тема в разделе "ESP8266, ESP32", создана пользователем serg3295, 2 апр 2023.

Метки:
  1. ИгорьК

    ИгорьК Гуру

    Это то, что должно работать с последним коммитом для ESP32c6?

    Значит, ситуация получается такая (обобщая две ветки).

    Это не так - на другом компе все собралось. Тем более, чуть раньше вы сами указывали на вторую опцию USB Serial/JTAG Conrtoller

    Тем не менее VS Code Nodemcu Tools 4.1.2 модуль не видит, напрямую через com-port PuTTy модуль виден.

    В диспетчере COM7 выглядит так:
    upload_2024-5-26_15-52-38.png

    node.c и менял, и не менял - все одно. Железка у меня такая.


    ... и тут NodeMCU Tool 4.2.0 вылезло, а я и не заметил. Сколько времени погубил...

    -----------------------

    Итого. Через UART оно заработало. Через COM/USB - не получилось.

    upload_2024-5-26_17-8-48.png
     
    Последнее редактирование: 26 май 2024
    serg3295 нравится это.
  2. serg3295

    serg3295 Гуру

    Это хорошо, что заработало.
    node.c трогать больше не надо. Старые ветки гита можно поудалять с флагом --force, чтобы не мешались, и не путали картину.

    Я писал про USB CDC.
    У меня тогда была только esp s2, а у неё есть usb cdc. По этому порту она и пыталась соединиться. А пункта USB Serial/JTAG controller у неё вообще нет.
    Теперь у меня есть esp с6. Вот такая. У неё наоборот. Нет USB CDC, а есть USB Serial/JTAG controller. Но соединяется она через UART.

    [​IMG]
     
    ИгорьК нравится это.
  3. ИгорьК

    ИгорьК Гуру

    То есть через USB соединение не ожидается? Невелика проблема, но если плата в устройстве то придётся делать разъём, без которого лучше бы обойтись.

    А что это за релиз NodeMCU Tool 4.2.0?
     
  4. serg3295

    serg3295 Гуру

    То же самое, что я выкладывал под временной версией 4.1.2. Вроде бы.
    Я просто увеличиваю сразу версию на единичку, чтобы разрабатываемая версия на моём компе не конфликтовала с предыдущим релизом.
    А в окончательном релизе поскольку была добавлена новая функция, то и номер версии релиза изменился на 4.2.0

    Ну, не то чтобы совсем не ожидается :)
    Вывод производится на вторичную консоль, то есть, в моём случае, на второй разъём USB.
    26-05-24_19-43.png

    Я подключил сразу два порта к плате. На первичной консоли USB to UART порт /dev/ttyACM0, и на вторичной ESP32-C6 USB порт /dev/ttyACM1. Во вторичную консоль дублируется вывод. Она похоже не поддерживает REPL. А вот должна ли она это делать, или нет, я не знаю. Надо будет код посмотреть.
    Даже в самом названии параметра явно указано, что вторичная консоль только для вывода.
    Иллюстрация:
    26-05-24_20-07.png

    Зато через этот порт можно приконнектится отладчиком OpenOCD без JTAG адаптера, если указать (x) No secondary console.
     
    Последнее редактирование: 27 май 2024
    ИгорьК нравится это.
  5. ИгорьК

    ИгорьК Гуру

    Обновление?
     
  6. serg3295

    serg3295 Гуру

    Платы на современных чипах Espressif поддерживают различные интерфейсы для взаимодействия через консоль
    - UART0
    - USB CDC
    - USB Serial/JTAG Controller

    Канал только для вывода на вторичную консоль присутствует, но должен быть отключен при работе с расширением через основную консоль.

    Channel for console secondary output
    (X) No secondary console

    Для работы с некоторыми платами может потребоваться применение параметра connection-delay

    При подключении к ножкам UART0 на devboard через FTDI адаптер расширение работает со всеми типами плат как обычно.
    При подключении по USB: EDIT. см. примечание внизу сообщения
    - C3 super mini - jtag - работает
    - C6 - jtag - работает
    - S3 zero - jtag - частично работает; подробности тут (github)
    - S2 mini - cdc - не работает

    Других плат у меня нет, так что не проверял.

    Программное обеспечение nodemcu в настоящее время поддерживает не все интерфейсы чипов Espressif.
    Частично из-за недописанных драйверов, частично из-за ошибок в upstream esp-idf, касающихся непрерывного вывода двоичных данных из чипа в консоль.

    EDIT. Небольшое, но очень важное дополнение.
    Чтобы заработали чипы C3, C6 необходимо собрать прошивку на idf 5.2.2 и заменить оригинальный файл components/platform/platform.c на мою скорректированную версию (в приложении).
     

    Вложения:

    • platform.zip
      Размер файла:
      5,1 КБ
      Просмотров:
      17
    Последнее редактирование: 13 окт 2024
    ИгорьК нравится это.
  7. ИгорьК

    ИгорьК Гуру

    upload_2024-10-13_18-3-58.png

    5.2.2 находится где-то за пределами этого выбора?

    upload_2024-10-13_18-12-26.png
     
    Последнее редактирование: 13 окт 2024
  8. serg3295

    serg3295 Гуру

    За пределами.
    Первая картинка - это ветки самой nodemcu. Вторая- это то, чем мы сейчас займёмся :)

    esp-idf это rtos, которая подсовывается и в ардуино и в nodemcu и сама по себе может использоваться.
    Это просто субмодуль с точки зрения git и просто каталог с нашей точки зрения.
    Сейчас мы на версии esp-idf 5.1.2 Начинаем переходить на v5.2.2

    от последнего коммита dev-esp32 создаём новую ветку и переходим на неё
    git checkout -b v522
    cd sdk
    rm -rf esp32-esp-idf #сносим старый idf для надёжности
    git clone -b v5.2.2 --recursive https://github.com/espressif/esp-idf.git esp32-esp-idf
    тут качнули 1.5 Гб
    cd .. # поднялись в корневой каталог
    nodemcu-firmware> git add sdk/esp32-esp-idf
    git commit -m'use 5.2.2'
    подсунуть новый platform.c и потом его закоммитить
    git add и git commit

    должно получится что-то вроде этого:
    (я про последние два коммита)
    branches.png
    ## Начали собирать прошивку
    make fullclean
    make IDFPY_ARGS="set-target esp32s3" #ну, или другой чип

    Проверяем в портянке вывода наличие строчки про версию IDF, что мы удачно всё ей подсунули.

    -- Building ESP-IDF components for target esp32s3
    Processing 2 dependencies:
    [2/2] idf (5.2.2)

    далее как обычно

    make menuconfig
    проверить цель, установить канал вывода консоли в jtag
    make

    проверяем, что хоть что-то работает
    make monitor /dev/ttyACM0

    NodeMCU ESP32 build 2024-10-13 20:35 powered by Lua 5.3.5 [5.3-int32-singlefp] on IDF v5.2.2
    cannot open init.lua: No such file or directory
    >

    (выход оттуда ctrl+])


    Чтобы вернуть всё обратно, просто git checkout на последний коммит dev-esp32
    и
    git submodule update --recursive

    теперь можно шляться между ветками и собирать на разных idf, не забывая делать
    git submodule update --recursive
    make fullclean и другие заклинания.

    Обращаю внимание, что это исправление platform.c просто заплатка и не может быть оформлена в виде PR.
    Как то работает, и ладно.
     
    Последнее редактирование: 13 окт 2024
    ИгорьК нравится это.
  9. ИгорьК

    ИгорьК Гуру

    Эээээммммм.... "Подождем твою мать"

    Есть проект пока на ESP32 обычной. Хотя лежит по одному экземпляру уж и не помню каких, но технической потребности в них не возникло.
     
    serg3295 нравится это.
  10. serg3295

    serg3295 Гуру

    Технически здесь удобство заключается в том, что ноги UART0 могут быть подключены к внешнему устройству, а консоль к USB.
    Отлаживаться удобно, если надо одновременно иметь подключенное внешнее устройство.
    Габариты и цена идут бонусом.
    Если такой задачи не стоит, то, действительно, не особо и нужно.
     
    ИгорьК нравится это.
  11. serg3295

    serg3295 Гуру

    IntelliSense для NodeMCU Lua.

    В редакторе VS Code для более комфортного написании кода для ESP8266 и ESP32 в среде NodeMCU Lua возможно использование IntelliSense. Эта возможность существует уже давно. Однако, в расширении LuaLS недавно были изменены конфигурационные параметры для подключения пользовательских библиотек. Поэтому я решил немного обновить информацию о методике установки и настройке пользовательского окружения в VS Code.

    Для того, чтобы IntelliSense заработало вам необходимо установить три вещи
    - расширение для VS Code Lua Language Server by Sumneko (LuaLS). Устанавливается стандартным способом.
    - файлы с определениями функций NodeMCU Lua.
    - систему контроля версий Git. Уверяю вас, в этом нет ничего страшного даже на Windows.

    Установить файлы определений можно через addon manager но этот способ может показаться кому-то сложным. Кроме того в репозитории LLS-Addons, откуда менеджер берёт файлы, содержатся не всегда актуальные версии nodemcu definitions. Я обновляю их там где-то раз в квартал, или даже реже.

    Самые свежие версии можно получить из моего оригинального репозитория nodeMCU-emmylua . Для этого необходимо на вашем компьютере выбрать место, куда вы хотите скачать репозиторий (это делается только один раз) и выполнить из консоли команду:
    git clone --depth=1 https://github.com/serg3295/nodeMCU-emmylua.git

    Будет создана директория nodeMCU-emmylua, и в неё склонируется репозиторий. Перейдя в эту вновь созданную директорию вы можете увидеть там несколько каталогов. Нас будут интересовать три, или даже два из них:
    - esp8266
    - esp32
    - esp32-idf3 (это определения для устаревшей ветки nodeMCU-firmware esp32. Но вдруг вы почему-то используете такую старую прошивку.)

    Итак, в каталогах esp32 и esp8266 содержатся файлы определений и конфигурации для соответствующих чипов. Именно эти каталоги мы и будем использовать в путях при конфигурировании.
    В дальнейшем, для периодического обновления файлов определений, достаточно будет перейти в директорию nodeMCU-emmylua и выполнить из консоли команду:
    git pull

    Переходим к настройкам.

    Для того, чтобы указать расширению LuaLS где находятся наши файлы определений необходимо установить несколько параметров.

    Эти параметры могут располагаться в разных местах. (Далее все пути указаны для Linux. Вариант для Windows @ИгорьК любезно добавил в сообщении ниже).
    - ~/.config/Code/User/settings.json (действуют на все ваши проекты)
    - ./.vscode/settings.json в папке вашего проекта (наивысший приоритет, то есть workspace settings переписывают совпадающие настройки из User/settings.json)

    Ещё настройки могут быть указаны в файле .luarc.json в каталоге проекта, но его мы подробно рассматривать не будем.

    В ~/.config/Code/User/settings.json прописываем следующие параметры:

    Код (Javascript):
    "Lua.workspace.userThirdParty": [ "<путь, куда мы скачали репозиторий с файлами определений>/nodeMCU-emmylua" ]
    "Lua.workspace.checkThirdParty": "Ask",
     
    Параметр workspace.userThirdParty укажет пути, где LuaLS будет искать пользовательские файлы определений. Это массив строк. Здесь мы указываем путь к директории nodeMCU-emmylua.

    Параметр workspace.checkThirdParty указывает, что нужно спрашивать пользователя о необходимости применения настроек при обнаружении кода для nodeMCU Lua.

    Для запуска автоматического конфигурирования необходимо в каталоге с проектом открыть файл .lua с кодом для esp32 или esp8266. Этот файл не должен попадать под действие .gitignore, иначе LLS его не проанализирует и автоконфигурирования не произойдёт.
    Затем LuaLS будет сделано предположение о назначении кода пользователя - для esp32 или для esp8266 и предложено обновить настройки.
    18-11-24_15-15.png
    Если автоматическое конфигурирование не предлагается, то нужно открыть файл .lua с кодом для esp32 или esp8266, и нажать ctrl+shift+p команда -> Developer: Reload Window

    Желательно провести автоматическое применение настроек хотя бы один раз, для того, чтобы посмотреть что будет сгенерировано в файле .vscode/settings.json. А именно, настройки для языка и встроенных библиотек. Для esp8266 и для esp32 эти настройки будут разными. Да и версию Lua вы можете использовать не 5.3, а 5.1.

    Пример сгенерированных настроек для esp32 и Lua 5.3:
    Код (Javascript):
    "Lua.runtime.version": "Lua 5.3",
    "Lua.runtime.builtin": {
    "utf8": "disable",
    "math": "disable",
    "bit32": "disable",
    "os": "disable",
    "bit": "disable"
    },
    "Lua.runtime.plugin": "<наш путь>/nodeMCU-emmylua/esp32/plugin.lua",
    "Lua.workspace.library": [ "<этот же путь>/nodeMCU-emmylua/esp32/library" ]
     
    В параметре workspace.library будет автоматически подставлен путь к подключенным файлам определений для конкретного чипа.
    Параметр Lua.runtime.plugin содержит путь к плагину, который нужен для того, чтобы работало автодополнение в некоторых модулях.

    Для отключения попыток автоматического конфигурирования необходимо установить параметр "Lua.workspace.checkThirdParty": "Disable" или в false.
    Это можно сделать в файле ~/.config/Code/User/settings.json (будет действовать для всех проектов), или в файле ./.vscode/settings.json для конкретного проекта.
     
    Последнее редактирование: 19 ноя 2024 в 09:56
    ИгорьК нравится это.
  12. ИгорьК

    ИгорьК Гуру

    В Windows можно открыть проводник и вставить следующее:
    Код (Bash):
    %APPDATA%\Code\User\settings.json
    upload_2024-11-19_8-36-55.png

    Файл откроется для редактирования в VSCode
     
    serg3295 нравится это.
  13. ИгорьК

    ИгорьК Гуру

    @serg3295, подниму вопрос о сборке lfs.img. Я собираю его через Terminal => Run Task...

    Эта последовательность определяется через файл tasks.json в папке .vscode.
    Как мне помнится, мы устанавливали Lua для того, чтобы через эту установку иметь доступ к файлу luac.cross.exe, который должен находиться в директории Lua. Причем самой этой Lua мы не пользуемся.

    Вместе с тем, при переходе от ESP32 к ESP8266 и обратно приходится в директории Lua менять и переименовывать luac.cross.exe.

    Изменилось ли что-то сейчас в порядке сборки lfs.img у вас?

    -------------------------------

    Нужен ли нам nodemcu-tool для чего-то, кроме непосредственной работы с ним самим, то есть, используется ли nodemcu-tool в системе еще чем-то?

    --------------------------------
     
    Последнее редактирование: 20 ноя 2024 в 17:47
  14. serg3295

    serg3295 Гуру

    Я постараюсь написать более подробно о методике сборки lfs в расширении. Скорее о практике применения.
    Пока на часть вопросов может ответить wiki на github'e.

    Если вкратце.
    Для сборки lfs расширению требуется только файл .nodemcutools в корне проекта.
    Из папки .vscode удалите всё, кроме файла settings.json.
     
    Последнее редактирование: 21 ноя 2024 в 07:49
    ИгорьК нравится это.
  15. ИгорьК

    ИгорьК Гуру

    Ну, Да! Это работает, работает замечательно! Чуть добавить: команду на компиляцию искать не в контекстном меню, а в Treminal=>Run Task=>NodeMCU=>... здесь выбор из пары значений.

    Отлично!!! Спасибо!