Code Monkey home page Code Monkey logo

vedruino's Introduction

Подготовка

Нужны make, pyserial, arduino-cli и пакеты Arduino для ESP32.

Доступ к serial usb

Создание группы usb_serial и добавление пользователя:

groupadd usb_serial
usermod -a -G usb_serial $USER

Правило для udev (файл /etc/udev/rules.d/83-esp32.rules), которое даёт доступ группе usb_serial на чтение/запись устройства:

KERNEL=="ttyUSB[0-9]*", SUBSYSTEM=="tty", SUBSYSTEMS=="usb-serial", GROUP="usb_serial", MODE="0660"

Внимание! Это правило применятся ко всем последовательным USB устройствам. Чтобы ограничить его, можно использовать ATTRS.

Конфигурация

Нужно скопировать config.ini.example в config.ini и указать нужные значения.

FQBN посмотреть так:

arduino-cli board listall BOARD_NAME

Затем:

make setup

clangd

В начале использования и после добавления любого C/C++ файла, который должен обрабатываться clangd нужно сгенерировать новый compile_commands.json:

make updcc

Запускать clangd так:

clangd -query-driver=%ARDUINO%/packages/**"

Где %ARDUINO% - путь к папке с файлами ведруины, например /home/user/.arduino15.

Для nvim.lsp-config:

require 'lspconfig'.clangd.setup({
    cmd = {
        "clangd",
        "--header-insertion=never", -- Без этого вставляет странные инклюды при использовании автокомплита.
        "-query-driver=%ARDUINO%/packages/**"
    },
})

In included files ... typedef redefinition

Если такую ошибку будет выдавать clangd при подключении заголовочных файлов (WiFi.h), то можно выключить сообщения о переопределении typedef, написав в .clangd:

Diagnostics:
  Suppress: 'err_redefinition_different_typedef'

Список ошибок и предупреждений можно найти в этом файле или где-то рядом с ним.

Но сейчас конкретно эта проблема решена другим способом: передавать clangd -DSSIZE_MAX=...compile_commands.py).

Нужно сгенерировать конфиг, если его еще нет:

arduino-cli config init

Дальше всё понятно.

TCP OTA

На плате работает TCP сервер, принимающий запросы на обновление. В config.ini его можно выключить (tcp_ota.enabled=false) и задать порт (по умолчанию tcp_ota.port=5256).

С компьютера отправить запрос на обновление можно так (берёт данные из конфига):

make ota

Работает довольно быстро (у меня ~700kB за 7 секунд загружает, по usb ~6.4 секунды). Можно ускорить если использовать сжатие и многопоточность, но это пока не реализовано.

vedruino's People

Contributors

faceleft avatar mp2720 avatar

Stargazers

 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.