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

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

Метки:
  1. serg3295

    serg3295 Гуру

    Не сразу понял, в чём заключался вопрос @SergeiL .
    Я подумал о символе \r как о тестовом сценарии при обработке программой цепочки "лишних" \r во входном потоке. Это от слишком низкоуровневого взгляда на проблему :)

    В действительности, при выполнении оператора print() в драйвере uart'a nodemcu автоматически происходит добавление \r при каждом встреченном \n. И на host машину приходит уже комбинация \r\n. Поэтому пользователю нет необходимость набирать лишние символы в строке для print().

    При использовании оператора uart.write() поведение esp32 и esp8266 будет отличаться. Esp8266 по умолчанию будет отправлять в порт именно то, что написано в uart.write(). То есть, если вы напишете uart.write(0, 'a\nb'), то именно 'a\nb' и отправится в последовательный порт.
    А вот esp32, при выполнении uart.write(0, 'a\nb'), по умолчанию вставляет дополнительный символ \r, когда встречает в выходном потоке символ \n. И на host машине вы уже получите 'a\r\nb'.

    Это поведение драйвера uart esp32 можно изменить при компиляции прошивки, задавая в файле конфигурации параметр Component config -> Newlib -> Line ending for UART output. По умолчанию стоит NEWLIB_STDOUT_LINE_ENDING_CRLF.
    И я не уверен, что установка именно этого значения было хорошей идеей при проектировании. Установка по умолчанию в LF избавила бы от очень многих проблем.
    Всё думаю, открыть issue с предложением поменять на LF, или забить.
     
    ИгорьК нравится это.
  2. ИгорьК

    ИгорьК Гуру

    Сделал две железки ESP32/UART с разными устройствами, не заметил проблем.
     
    serg3295 нравится это.
  3. serg3295

    serg3295 Гуру

    Обычно терминальное устройство - "чёрный ящик" - нормально обрабатывает как CR, так и CRLF в качестве принятого конца строки. Поэтому, в большинстве случаев, проблем не возникает. Однако, если попадётся какой-нибудь тупой девайс, который не будет воспринимать строку при получении CRLF, то придётся перекомпилироваться на вариант отправки LF.
    Кроме того, если потребуется отправить на устройство не строку символов, а двоичный файл, содержащий код 10, то на приёме вы получите вместо одного байта сразу два [13, 10]. Байт с кодом \r вам заботливо подсунет драйвер uart.
    Это как раз то, с чем мне приходилось постоянно сталкиваться при работе над данным расширением.

    То есть, нужно просто помнить, что может произойти безусловное изменение драйвером пользовательской строки байт в stdout при отправке через uart при установке параметра по умолчанию в прошивке.

    А по поводу issue, может я и погорячился. Пока всё работает, применим стандартное решение - "Ну его нафиг, ещё два пива..."
     
    ИгорьК нравится это.
  4. 8bitai

    8bitai Нерд

    Вообще както странно это если сделано поразному,
    возврат каретки (CR - 0Dh) и новая строка (LF - 0Ah) всегда было стандартной командой для любого терминала начать вывод с начальной позиции новой строки - кому интересно пришло в голову сокращать стандартную команду на один байт и автоматом дописывать чтото что оператор не посылал.
     
  5. 8bitai

    8bitai Нерд

    Хотел уточнить upload_2023-5-24_11-50-16.png lua53 билды они что по умолчанию флоат числа поддерживают и потому не помечаются?
    Как можно уточнить NODEMCU upload_2023-5-24_11-54-6.png он луа5.1 или 5.3?
    то что я собирал точно флоат версию в этом я уверен так как в юзерконфиге целочиленность закоментированна upload_2023-5-24_11-57-18.png а вот луа5.1 или 5.3 я неуверен
    В каталоге прошивки луа53 присутствует
    upload_2023-5-24_12-3-50.png

    Второй вопросик наверно несовсем в тему
    А можно ли както собирать уже отлаженые NODEMCU прошивки с LFS без доступа их модификации на устройстве?
    грубо говоря отключать серийный порт камня а пины использовать для чеголибо другого?
    я относительно недавно заинтересовался этой системой и заранее извиняюсь если глупые вопросы.
    я вижу что вся программа может исполнятся прямо из ЛФС
    upload_2023-5-24_13-7-23.png
    немного непонятна ахитектура рапределения памяти
    без ЛФС програма хранится тоже во влеш памяти но организованой както подругому - это просто изначально из за минимального размера фляш памяти так было организовано и когда стали добавлять флеш память появилась возможность её так использовать?
    Если это карта рапределения областей флаш пямяти
    upload_2023-5-24_13-22-48.png
    то зачем разделение на SPIFFS и LFS?
    в какой области и какого она размера находится программа пользователя если прошивка собрана без поддержки LFS?
     
    Последнее редактирование: 24 май 2023
  6. serg3295

    serg3295 Гуру

    Да
    Информация о версии Lua и типе числа выдаётся в предпоследней строке startup баннера.
    Я так не пробовал. Не в курсе.
    SPIFFS это раздел, куда вы можете записывать файлы в процессе выполнения программы пользователя. LFS невозможно изменить в runtim'e.
    В esp32 разделы задаются в файле partitions.csv.
    В esp8266 разделы можно посмотреть так
    Код (Javascript):
    do
      local s,p={},node.getpartitiontable()
      for _,k in ipairs{'lfs_addr','lfs_size','spiffs_addr','spiffs_size'} do
        s[#s+1] ='%s = 0x%06x' % {k, p[k]}
      end
      print ('{ %s }' % table.concat(s,', '))
    end
     
    Размер программы пользователя зависит от количества модулей, которые включили в прошивку.
    Где она там начинается, я не помню. Возможно с 0x10000
     
    8bitai нравится это.
  7. 8bitai

    8bitai Нерд

    К сожалению с отображением стартап банера всегда были проблемы почему-то
    upload_2023-5-25_11-49-29.png
    стартап банер в цонфигурации для билда никогда не отключал
    upload_2023-5-25_11-57-24.png
    тем не менее вц екстешон откудатоже берёт эту инфомацию
    upload_2023-5-25_11-46-41.png
    где-то читал что, для того чтоб видеть стартап банер скорость передачи серийной консоли должна быть выставлена на какое-то нестандартное значение 78ххх bps а где это можно изменить чтоб пересобрать не нашел.

    Вообще как мне видится этот мод екстеншона ещё идеальней - если б в него были встроены возможности сборки firmware простым и удобным путём указания пути к папкам или даже зипфайла с тулчейном и зипфайла с firmware a также удобные подручные кнопочки линки на все необходимые для сборки конфигурационные файлы чтоб не возиться переключаться на линукс пересобирать базовую прошивку, а всё делать из одного окна.

    Я не знаю можно сюда подобные вопросы продолжать задавать или лучше отдельную тему создать для таких вопросов связанных с нюансами сборок прошивок нодмцу?
     
  8. ИгорьК

    ИгорьК Гуру

    С одной стороны нельзя не согласиться, что лучше чтобы всего было побольше. Но с другой стороны, это похоже на "дайте мне таблетку от жадности, да побольше, побольше".

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

    Кроме того, со временем эти прошивки накапливаются и используются переиспользуются многократно.
     
    8bitai нравится это.
  9. ИгорьК

    ИгорьК Гуру

    upload_2023-5-25_11-40-34.png

    У вас дальше модуль на что-то простое реагирует? Похоже вы его неудачно прошили.
     
    8bitai нравится это.
  10. serg3295

    serg3295 Гуру

    Дело даже не в расширении функционала приложения, а в том, что я не знаю способа собрать прошивку под Windows. А расширение подразумевалось как кроссплатформенное.
    Крайний раз, когда я заходил во Windows для компиляции luac.cross.exe, я убедился, что отсутствует корневой файл cmake для проекта nodemcu. Espressif SDK с xtensa toolchain собралось, а прошивка нет. Так что сборка прошивок из расширения отменяется.

    Если у вас отключен startup баннер, то узнать состав модулей, тип числа, версию Lua можно, подав команды из консоли. Все эти команды были описаны чуть раньше в темах, посвящённых Lua. Пройдитесь поиском.

    Тот мусор, что вы видите в консоли на скорости 78кб - это сообщения bootloader'a. Вам они не нужны. Startup баннер выдаётся на 115200.
    Во! Даже картинка есть! :)
     
    8bitai и ИгорьК нравится это.
  11. ИгорьК

    ИгорьК Гуру

    Дабы был цветной вывод, делаю глобальную функцию prtcol:
    Код (Lua):
    function prtcol(d, c)
        local cl = {'\027[0;31m','\027[0;32m','\027[0;33m','\027[0;34m','\027[0;36m'}
        if not c then c = 3 end
        print(string.format("%s"..d.."%s ", cl[c], '\027[0m'))
    end
    Применять:
    Код (Lua):
    prtcol('1234567')
    prtcol('1234567', 2)
     
    Последнее редактирование: 25 май 2023
    serg3295 нравится это.
  12. 8bitai

    8bitai Нерд

    Я думаю замечание не конструктивное :)
    Что значит от жадности?
    Если это мне нужно и нет аргументов почему этого лучше не делать, а у меня самого достаточных навыков для этого нет, то почему бы и не заплатить тому кто делает замечательные и удобные инструменты, в своё время я донатил автору есплорера когда обнаружил что модули есп могут быть доступны не только по АТ командному интерфейсу.


    это если ты не пишешь и не модифицируешь и не тестируешь свою прошивку подобную нодемцу и нет необходимости собирать тестировать то что наваял часто и отлаживать непосредственно на устройстве.
    Гдето натыкался на способ с СДК под виндой отличный от этого

    - этот в общем тоже подходит для начала, но я подумал может это заинтересует автора темы и мода.

    В смысле накапливаются? кем переиспользуются?
     
    Последнее редактирование: 25 май 2023
  13. ИгорьК

    ИгорьК Гуру

    Спору нет :) "Чем вы занимались до революции" Какой у вас ник на ардуино.ру? :)

    У себя накапливаются и самим собой переиспользуются. Прошивка ESP32 у меня работает и в электросчетчике и в амперметре и в управлении поливом. etc. То есть я уже забыл где и как ее компилировал. В общем, делайте проект, а не бесконечно "точите нож" и все станет понятно.
     
    serg3295 нравится это.
  14. serg3295

    serg3295 Гуру

    Может я добавлю ещё оставшийся цвет magenta с кодом 35? Я не включал его, потому что он редко где используется. А так можно будет передавать параметром функции цифру, однозначно соответствующую коду цвета. Тогда её можно будет просто подставлять в строку форматирования. И таблица вообще не нужна будет.
    ansicolors.png

    Заодно сделаю поддержку bash style color codes в виде [31m, [32m, и т.д. Набирать ещё короче будет.
     
    ИгорьК нравится это.
  15. serg3295

    serg3295 Гуру

    К сожалению, у меня видео почему-то не открылось.
     
  16. 8bitai

    8bitai Нерд

    На что что-то простое? Программа работает штатно, после того как залил ЛФС образ - даже стала жрать меньше памяти но пока полностью из лфс прога не работает
    upload_2023-5-25_16-44-28.png
    прошил оказывается с отключеной опцией банера
    #define DISABLE_STARTUP_BANNER
    прошу простить за пустой вопрос
     
    serg3295 и ИгорьК нравится это.
  17. 8bitai

    8bitai Нерд

    подправил должно открыться
     
  18. ИгорьК

    ИгорьК Гуру

    Обычно крокозяблы без окончания вылазят когда прошивка неудачная.
     
  19. 8bitai

    8bitai Нерд

    ваш скриншот пояснил что эти кроказябры старт камня..
    Ни на каком ардуино.ру никогда небыл.
    Занимался исключительно в качестве хобби пиками и аврами на асемблере в связке мплаб+протеус или аврстудио+протеус

    Вот и у меня уже года3 работает простейшее управление котлом с кучкой датчиков по всему дому на эспе нодмцу луа с столетней давности прошивкой и также недавно столкнулся что напрочь не помню где и как компилировал и где она вообще
    хобби дело такое что не всегда время есть им заниматься недавно появилась необходимость восстановить человеку микро поливалку :) оригинальные кишки поливалки приказали долго жить решил сменить кишки на более компактный и менее жрущий вариант на есп01
    вроде сделал всё работает поливает... от солнечных батарей заряжается, нужен код? могу предъявить :) он хоть и прекрасно рабочий, но разумеется далёк от идеала, но случайно задержался на описании, а чтоже такое всётки этот LFS и обнаружил для себя эспу совсем в другом ракурсе пошли поиски , я вообще по форумам шарить не очень люблю, предпочитаю сам дотукиваться по своим способностям насколько возможно из оригинальных источников, а тут задержался на вашем прекрасном описании программирования этой железки и альтернативе эсплорера. Вот как то так знаний железки не так много, вопросов дуратских куча, просто поразился сам себе на примере эспы насколько может быть просто войти в высокоуровневые языки и чтото хороше работающее даже на них кодить без особых пониманий что именно ты кодиш :) в смысле без функционального описания железа камня.

    :)

     
    ИгорьК и serg3295 нравится это.
  20. serg3295

    serg3295 Гуру

    Выпущена версия 3.5.12

    • Осуществлён переход на версию 11 библиотеки serialport. Для пользователей это означает, что теперь минимальная версия node должна быть >= 14;
    • Исправлен ряд ошибок в интерфейсе;
    • Расширены возможности работы с цветной строкой:
    1. Добавлен цвет magenta с кодом 35;
    2. Дополнительно поддерживается вариант кодирования цвета без указания Font Effects. То есть, допускаются конструкции как [31m, [32m ..., так и [0;31m, [0;32m... Первый вариант, очевидно, более удобен для вывода, программируемого пользователем. Необходимо отметить, что изменение цифры Font Effects не отразится на выводе на терминал. Она будет просто проигнорирована и всегда установлена в normal.
    Код (Javascript):
    local fgColor = {
      red     = '\027[31m',
      green   = '\027[32m',
      yellow  = '\027[33m',
      blue    = '\027[34m',
      magenta = '\027[35m',
      cyan    = '\027[36m',
      reset   = '\027[0m' ,
    }
    local data = {
      red     = ('%s$> Red    |%s'),
      green   = ('%s$> Green  |%s'),
      yellow  = ('%s$> Yellow |%s'),
      blue    = ('%s$> Blue   |%s'),
      magenta = ('%s$> Magenta|%s'),
      cyan    = ('%s$> Cyan   |%s'),
    }
    for color, message in pairs(data) do
      print(message:format(fgColor[color], fgColor.reset))
    end
     
     
    ИгорьК и 8bitai нравится это.