Для маленьких проектов и быстрого старта среда разработки Arduino IDE версии 1.8.X удобна, однако сложные проекты в ней делать не очень просто.
Вышедшая версия 2.X стала более продвинутой в плане написания кода
и стала более похожа на серьезную среду разработки, но какая-то она слишком "тормознутая" и там пропала возможность устанавливать дополнительные плагины. Для меня критичным оказался плагин для работы с SPIFFS на ESP32, про который я писал тут.
У MIcrosoft есть бесплатный кросс-платформенный редактор кода Visual Studio Code (VS Code) с возможностями:
- подсветки синтаксиса;
- автоматического дополнения;
- контроля версий;
- отладки;
- рефакторинга.
На домашнем компьютере, на котором уже стоит куча библиотек, новое ПО мне это было тестировать лень, поэтому решил протестировать пакет на виртуальной машине.
Как программировать Arduino с виртуальной машины
Вообще, начиная с Windows 8 технология технология виртуализации серверов - Hyper-V доступна в клиентской операционной системе, однако там я столкнулся проблемой проброса виртуальных COM портов. Поэтому на компьютер поставил VirtualBox
Описание технологии виртуализации выходит за рамки данной статьи - но если по-простому, то это компьютер, железо которого, создается из ресурсов основного ПК. (эдакий компьютер в компьютере из компьютера). Туда устанавливается операционная система и можно проводить на ней всяческие эксперименты.
Например жёсткий диск виртуальной машины - это просто файлик в папке основной машины.
Поэтому, после установки на виртуальную машину ОС, можно её выключить, и в проводнике сделать полную копию этого виртуального HDD. Поигравшись или даже убив виртуальную ОС, можно выключить VM, переименовать эту копию, и подсунуть её при следующем включении VM получив чистый уже установленный образ ОС, без необходимости ставить ОС c нуля. (есть и штатные средства но мне лень с ними разбираться).
Также можно настроить сколько будет CPU, объем оперативной памяти и все остальные параметры виртуального "компкутера" - главное тут сильно не увлекаться, иначе ваша машина на которой все это крутится, будет сильно тормозить.
В игры на виртуальной машине конечно не поиграешь, но для экспериментов, тестирования ПО, изучения новых ОС лучший инструмент придумать сложно.
Шаг 1. Ставим Arduino IDE версии Arduino IDE 1.8.19
Новая версия Arduino IDE 2.X.X не подойдет!
Шаг 2. Прокидываем на VM плату Arduino
Если у Вас не виртуальная машина, а реальная этот шаг пропускаем. Подключаем например Arduino UNO к ПК и пробрасываем на виртуалку.
Вуаля
Шаг 3. Тестируем, заливая простенький скетч
Виртуальная машина готова к тестированию различных адрдуиноподобных фич. Например это может быть полезно для тестирования проекта найденного в сети Интернет, но в котором используются специфичные библиотеки, а свою папку с библиотеками трогать крайне не желательно.
Шаг 4. Устанавливаем Visual Studio Code
Шаг 5. Русификация Visual Studio Code
Клацаем на иконку расширений и набираем в поиске "russian". Устанавливаем пакет Russian Language Pack for Visual Studio Code.
Шаг 6. Установка пакета для работы с Arduino
Клацаем на иконку расширений и набираем в поиске "arduino". Устанавливаем пакет "Arduino for Visual Studio Code" от Microsoft.
Шаг 7. Устанавливаем расширение C/C++ Extension Pack
Клацаем на иконку расширений и набираем в поиске "C/C++"
Шаг 8. Прописываем путь к дистрибутиву Arduino
Для расширения "Arduino for Visual Studio Code от Microsoft" необходимо прописать путь к дистрибутиву Arduino IDE 1.8.19
Шаг 9. Тестируем
Переключаемся на проводник и добавляем папку с проектом, который мы создали в Arduino IDE
Выбираем плату и порт
Загружаем тестовый пример в плату Arduino UNO
После загрузки пользуемся "всеми прелестями цивилизации" при написании кода.
Монитор порта
В расширение встроен монитор COM порта "последовательный монитор"
эта штука по функционалу похожа на терминал Arduino IDE - тут все понятно без дополнительных комментариев.
Добавляем файл с собственными функциями
Большие проекты удобно разбивать на отдельные файлы (а еще потом эти свои заготовки удобно заталкивать в другие свои проекты).
Используя проводник VS Code создаем пустой файл с расширением .h в той же папке где лежит файл скетча .ino и подключаем его с помощью директивы #include
В файле fuction.h будет одна функция increment(); которая будет возвращать глобальную переменную i объявленную в этом же файле увеличивая её значение на 1.
Оно собралось и работает как нужно.
Установка плат не Arduino
Добавим поддержку ESP32. Поскольку VS Code надстройка над Arduino IDE установить платы необходимо именно в Arduino IDE. Подробная инструкция есть на моем канале по ссылке:
Решил попробовать поставит последний пакет 2.0.11
Как прошить ESP32 с помощью внешнего USB-UART преобразователя
В отличии от Arduino, виртуальная машина VirtualBox переходник на CP2102, который встроен в плату ESP32 WROOM DevKit v1 видеть отказалась наотрез. Для экспериментов решил прошить ESP32 внешним USB-UART мостом на микросхеме PL2303. (CH340 на VirtualBox тоже пробрасывается без проблем).
Схема подключения Переходник USB UART - ESP32 такая:
- 5.0V - Vin
- TXD - RX0
- RXD - TX0
- GND - GND
Для того, чтобы прошить ESP32 WROOM DevKit v1 с помощью внешнего USB-UART преобразователя необходимо:
- открыть монитор порта на скорости 115200;
- нажать и удерживать кнопку BOOT;
- нажать и отпустить кнопку EN;
- отпустить кнопку BOOT;
В терминале появится надпись, которая говорит о том, что ESP32 готова к загрузке новой прошивки:
Выполнение программы, которая была залита в ESP32 при этом будет приостановлено. Прошиваем:
Чтобы вернуть ESP32 к привычной жизни еще раз нажимаем кнопку EN. Микроконтроллер перезагружается, программа начинает выполнятся.
Зачем вся эта информация?
- если у Вас на ESP32 отломается USB разъем, платой по-прежнему можно будет пользоваться используя внешний USB-UART мост;
- с виртуальной машины можно вполне себе настраивать и работать с реальным оборудованием. Проброс USB устройств (правда не всех) с реальной машины на виртуальную работает на отлично.
Ускорение сборки проекта
Во время сборки проекта можно увидеть следующее предупреждение:
[Warning] Output path is not specified. Unable to reuse previously compiled files. Build will be slower. See README.
Для того, чтобы убрать это предупреждение и ускорить сборку проекта, необходимо в файл arduino.json
который будет создан после первой сборки проекта добавить через запятую строчку: "output": "../ArduinoOutput"
Из документации к расширению "Visual Studio Code для Arduino"
output— Выходной путь сборки Arduino. Если значение не установлено, Arduino каждый раз будет создавать новую временную папку вывода, что означает, что он не может повторно использовать промежуточный результат предыдущей сборки, что приводит к длительному времени проверки/загрузки, поэтому рекомендуется установить это поле. Arduino требует, чтобы выходной путь не находился в самой рабочей области или в ее подпапке, иначе она может работать неправильно. По умолчанию эта опция не установлена. Стоит отметить, что содержимое этого файла может быть удалено в процессе сборки, поэтому выберите (или создайте) каталог, в котором не будут храниться файлы, которые вы хотите сохранить.
Теперь проект будет собираться также быстро как это происходило бы в Arduino IDE. Папку ArduinoOutput - VS Code создаст самостоятельно.
Установка библиотек
В Интернет есть много подробных инструкций, как подружить VC Code с ардуиновскими библиотеками, но я видимо что-то делаю не правильно и у меня все заработало прямо из "коробки".
Попробуем собрать в VS Code проект с сайта: https://randomnerdtutorials.com/esp32-web-server-spiffs-spi-flash-file-system/
В среде Arduino IDE устанавливаем 2 необходимые для проекта библиотеки:
После первой компиляции проекта все собирается без каких-либо ошибок.
WEB страницы этого проекта хранятся в файловой системе SPIFFS, поэтому в самой Arduino необходимо установить плагин для загрузки файлов в файловую систему.
Скачиваем файл:
Находим папку со скетчами:
Создаем папку с названием tools
Распаковываем скачанный файл, соблюдая структуру каталогов
Перезапускаем Arduino IDE и проверяем, что инструмент загрузки файлов в SPIFFS появился.
В папке проекта через проводник VS Code создаем папку data и в ней 2 пустых файла index.html и style.css
Копипастим туда содержимое со страницы:
https://randomnerdtutorials.com/esp32-web-server-spiffs-spi-flash-file-system/
MS Visual Studio Code понимает практические любые языки программирования, так что писать WEB страницы в таком инструменте одно удовольствие.
Редактируем файл .ino и проверяем сборку:
Осталось отредактировать параметры для подключения к домашней сети Wi-Fi.
Перед работой с Wi-Fi не забываем подавать на плату ESP32 внешнее питание (можно просто подключить зарядку от смартфона). Питание от USB здесь не катит - плата будет уходить в бесконечную перезагрузку при попытке подключиться к сети Wi-Fi.
Сначала с помощью Arduino IDE загружаем в SPIFFS содержимое папки data. (открываем файл .ino)
Потом загружаем сам скетч:
Открываем ПОСЛЕДОВАТЕЛЬНЫЙ МОНИТОР
И оно работает.
Выводы:
Отзывы у расширения "Visual Studio Code extension for Arduino" весьма противоречивые:
Документацию можно посмотреть тут
При использовании ESP32\ESP8266 в качестве WEB сервера, код приходиться писать не только на С++ и Arduino Wiring, но и использовать HTML, CSS и JavaScript для создания WEB страниц которые, этот самый WEB сервер должен отдавать. Если на С++ еще худо-бедно, как то можно можно писать и в среде Arduino IDE (в версии 2.X уже даже не совсем худо-бедно), то про HTML и JavaScript среда Arduino совсем ничего не знает. При использовании Visual Studio Code ни какие дополнительные инструменты не нужны - все можно писать в одном окне (в том числе и код под Arduino), что на мой взгляд удобно.
У расширения 2 млн. установок, но в RUнете на эту тему почему-то молчок, поэтому я и написал эту коротенькую заметку.
p.s: данная статья не копипаста с какого-либо иностранного ресурса, возможно в ней есть ошибки. Попробую в этой среде сделать какой-нибудь проект с нуля, тогда уже дополню, если обнаружатся какие-либо подводные камни.
Оглавление канала ТУТ
Всем удачи!