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

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

  1. serg3295

    serg3295 Гуру

    Шрифт ему нужен, однако.
    disp:setFont(u8g2.font_6x10_tf)
    Всякие разные шрифты можно подсмотреть в nodeMCU-firmware/app/u8g2lib/u8g2/keywords.txt
    Добавлять их руками через запятую в строку (Top) → Component config → NodeMCU modules → U8G2 module → Fonts
    02-05-24_16-10.png
     
    ИгорьК нравится это.
  2. serg3295

    serg3295 Гуру

    Тогда, чтобы много не писать, коротко порядок действий:

    - если установлены какие-либо расширения для работы с гитом в VSCode, то можно их временно запретить. Или снести нахрен. Всё равно, кроме одного расширения (следующий пункт) ничего не надо для домашнего применения.
    - установить расширение VSCode https://marketplace.visualstudio.com/items?itemName=mhutchie.git-graph Вот это маст хэв, рулёз форева и т.д.!
    Показать граф можно, нажав GitGraph слева внизу синей полоски. Дальше по картинке.
    upload_2024-5-2_17-31-5.png
    - щёлкаем правым глазом мыши на коммите Updated docs after review. который сразу перед испорченным Initial support for ESP32-C6 and ESP32-H2, plus assorted fixes & improvements (#3646) по синенькой ветке.
    - соглашаемся на detached HEAD
    02-05-24_17-12_1.png
    - смотрим на финальной картинке что синий кружочек на нужном нам коммите и, нажав enter в терминале, видим что хэш коммита тот, что нужен. Последнее необязательно. Просто подсказка.
    glog набирать не надо, это сокращение от git log

    upload_2024-5-2_17-31-5.png
    Собственно, всё.
    make

    примечание. Прошивка будет собираться с IDF v5.1.3. Так как уже был применён следующий коммит и субмодуль sdk подтянулся с ней. Это не страшно, с 5.1.3 всё нормально работает.
    Если зачем-то понадобится 5.1.2, то git submodule update --recursive. Но я бы не заморачивался.

    Ах да! Вернуться можно тем же путём, сделав checkout на dev-esp32
     
    Последнее редактирование: 2 май 2024
    ИгорьК нравится это.
  3. ИгорьК

    ИгорьК Гуру

    Урааа! Заработалааа! В том смысле, что суть управления стала понятна и ничего не вылетает.

    Одна мелочь: на дисплее ничего не вырисовывается :)

    Вот это, от (приблизительно) тех же авторов - работает. То есть с дисплеем все нормально.

    Но дальше - дело логического анализатора.
     
    serg3295 нравится это.
  4. ИгорьК

    ИгорьК Гуру

    Фундаментально!
     
    serg3295 нравится это.
  5. serg3295

    serg3295 Гуру

    Вот так выводит буковку "а"
    Код (Javascript):
    ---@diagnostic disable: lowercase-global
    id  = i2c.SW
    sda = 16
    scl = 17
    sla = 0x3c
    i2c.setup(id, sda, scl, i2c.SLOW)
    disp = u8g2.ssd1306_i2c_128x64_noname(id, sla)
    disp:setContrast(177)
    disp:setFont(u8g2.font_6x10_tf)
    disp:drawStr(1,10,"a")
    disp:sendBuffer()
     
     
    ИгорьК нравится это.
  6. ИгорьК

    ИгорьК Гуру

    Выводит!!! Воистину так! Миллион плюсов!
     
    serg3295 нравится это.
  7. serg3295

    serg3295 Гуру

    В классе u8g2 есть два недокументированных метода, то есть физически они присутствуют, но в описании на сайте их нет. Это updateDispla() и updateDisplayArea(). Эти функции описаны в моих аннотациях для LuaLS, причём в аннотации я написал updateDisplay, а в коде опечатка - updateDispla.
    Я уже сделал PR в upstream с исправлением, подождём пока примут. То есть, пока писать надо updateDispla.

    Edit.
    PR был принят. Можно писать updateDisplay()
     
    Последнее редактирование: 3 май 2024
    ИгорьК нравится это.
  8. ИгорьК

    ИгорьК Гуру

    Это где обитает?
     
  9. serg3295

    serg3295 Гуру

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

    ИгорьК Гуру

    Опять помощь необходима.
    Не въезжаю, как вызвать " u8g2.disp:setDisplayRotation()"

    disp:setDisplayRotation(2) или disp:setDisplayRotation(U8G2_R2) вызывает медитацию имени гуру :(
     
    Последнее редактирование: 4 май 2024
  11. serg3295

    serg3295 Гуру

    disp:setDisplayRotation(u8g2.R1)

    Если бы вы подключили в VSCode LuaLS с моими аннотациями, то правильный вариант предложился бы автоматически :)
     
    ИгорьК нравится это.
  12. ИгорьК

    ИгорьК Гуру

    Ну не все сразу! :) Когда проект жжет пятки, сосредоточен только на нем :)
     
    serg3295 нравится это.
  13. ИгорьК

    ИгорьК Гуру

    Вот он:

    upload_2024-5-4_16-28-11.png
     
    serg3295 нравится это.
  14. serg3295

    serg3295 Гуру

    Измеритель качества воздуха?
     
  15. ИгорьК

    ИгорьК Гуру

    Да, в некоторых местах требуется, к сожалению. Будет две версии - в помещении и для улицы с питанием от солнечной панели.

    Датчик заказан уже другой для улицы.

    На снимке общее - концепция, основной код, etc.

    Уличный - FireBeetle 2 на ESP32-C6, оный NodeMCU не поддерживается, вернусь к истокам - Ардуино :)
     
    Последнее редактирование: 4 май 2024
    serg3295 нравится это.
  16. serg3295

    serg3295 Гуру

    Как раз этот коммит, который поломал нам программу, предназначен для поддержки esp32-c6.
    У меня такого чипа нет под рукой, а было бы очень интересно - заработает, или нет.
    Если будет время и желание проверить, то собрать прошивку можно вот так:

    1. Перейти на их ветку dev-esp32

    2. На всякий случай сделать
    make clean
    male fullclean
    ./install

    3. Задать новую цель

    make IDFPY_ARGS="set-target esp32с6"

    4. проверим правильность target:
    make menuconfig
    /
    target

    посмотрели, что цель верна

    5. делаем прошивку. Хотя она может сделаться на шаге #3.
    > make IDF_TARGET=esp32с6

    6. шьём
    make flash

    порт может быть /dev/ttyACM0

    С поломанной прошивкой работает мой форк консольной утилиты nodemcu-tool.
    Так что файлы можно будет залить по старинке.

    Edit - Вернуться к esp32 можно, указав цель esp32 в соответствующей команде из п.3
    Цель можно устанавливать один раз в начале. Если надо просто сгенерировать новую прошивку после изменения параметров в sdkconfig, то достаточно команды из п.5
     
    Последнее редактирование: 5 май 2024
    virtual и ИгорьК нравится это.
  17. ИгорьК

    ИгорьК Гуру

    "Немного о себе".

    Оставил плату на даче, так что до следующих выходных. Мне было бы не только интересно, но и полезно :)
    С другой стороны, опять не займусь изучением неведомой мне IDE Arduino ;)

    ##############

    Всегда компилировал прошивки на виртуальной машине на NAS (ибо доступно из любых точек в пространстве).

    Нынче. Установил расширение Git Graph, сделал git pull на WSL на локальной Windows машине. Захожу в нее и (Ура!) вижу необходимую картинку.

    Все выполнил по вашему посту - прошивка скомпилировалась для ESP32, шрифт добавился - все отлично!
    ##############

    Перехожу к установке вашего плагина из https://github.com/serg3295/nodeMCU-emmylua

    1. sumneko's lua-language-server first. - установлено ранее.
    2. Директория с файлами создана.
    3. User Settings Json дополнен
    001.png

    4. Настройки локальной директории указаны:

    upload_2024-5-5_14-53-3.png

    5. Набираю:
    disp:setD - заканчивает как disp:setDisplayRotation()

    6. Ставлю курсор внутрь скобок - не предлагает ничего.
    7. Если дальше набрать аж u8g2.R то окончание будет предложено:
    upload_2024-5-5_14-57-50.png

    Но, до такого состояния я бы (не понимая в данный момент какие возможны аргументы) сам не дошел и без вашей помощи не справился бы.

    Вопрос вот в чем - я все правильно сделал или что-то упустил?

    ... а вообще вы круто делаете, отличная работа! Спасибо!

    PS: Да!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

    upload_2024-5-5_15-11-48.png


    upload_2024-5-5_15-12-22.png


    !!!!!!!
     
    Последнее редактирование: 5 май 2024
    serg3295 нравится это.
  18. serg3295

    serg3295 Гуру

    Да, без .../esp32/plugin.lua аннотация некоторых модулей не полностью функциональна.

    К написанному выше могу добавить следующее:

    1. Если нужно в произвольном месте запросить автодополнение, то надо нажать ctrl+space

    2. Файлы аннотаций это просто каталоги. Они не устанавливаются как плагины, или как расширения. Просто копируются. То, что я называю "ручной" установкой.

    Существует два способа установки файлов определений.
    Первый - вручную, просто скопировав директории в любое место и прописав к ним пути в settings.json (как вы и сделали). Я также предпочитаю этот способ.
    git clone https://github.com/serg3295/nodeMCU-emmylua.git
    Для обновления потом достаточно делать git pull моего репозитория.

    Второй - с помощью встроенной команды расширения LuaLS из репозитория https://github.com/LuaLS/LLS-Addons.git

    upload_2024-5-5_16-1-51.png

    там установится всё автоматически. Но дело в том, что я свой репозиторий обновляю часто, исправляя ошибки, или добавляя новые вещи, а тот центральный репо, из которого подтягивается в LuaLS, обновляю раз в квартал, чтобы не напрягать maintainer'a частыми pull request.

    3. Если заметите какие-либо ошибки в аннотациях, или захотите сделать исправления/дополнения, то лучше сразу писать issue в мой репо, желательно на русском. Китайцы вон не стесняются писать на своём, и мы не будем.
     
    ИгорьК нравится это.
  19. ИгорьК

    ИгорьК Гуру

    ... но есть проблемы. nodeMCU-emmylua установился и заработал без проблем на первом компьютере.

    На другом происходит такое:

    upload_2024-5-6_9-44-57.png

    То есть записи затемнены и указано что неподдерживаемый параметр.

    Никакой особой разницы между VS Code на компах не вижу. Что посмотреть, где возможна проблема?
     
    Последнее редактирование: 6 май 2024
  20. serg3295

    serg3295 Гуру

    Затенённая строчка в settings.json означает, что не включено расширение.
    В последних версиях VSCode добавлено много новых опций для управления расширениями. В частности, можно указывать - какие расширения включать в конкретном workspace. Какие обновлять, какие нет. Много ещё чего.
    У меня глобально включены только несколько расширений, которые нужны всегда. Остальные включаю в конкретном workspace в зависимости от требуемого окружения. В js/ts свои расширения, в Lua - свои. Это позволяет немного сократить время старта VSCode. Лишнее не грузим.
    Вот мои глобальные разрешения в качестве примера.
    06-05-24_09-53.png
     
    ИгорьК нравится это.