Найти тему
Электроника, ESP32, Arduino

Зачем Ардуинщику виртуализация

У меня накопилось много проектов написанных в среде Arduino IDE, которые были написаны на старых версиях библиотек и ПО для поддержки ESP-шек. Все эти устройства бесперебойно работают несколько лет и переводить на новое ПО и библиотеки (в которых нередко меняются методы) мне честно говоря лениво.

Работает не трогай. С другой стороны хочется пощупать и что-то новое, а это значит придется обновлять и ПО для поддержки плат и устанавливать новые "библы". Старые разработки разумеется компилироваться перестанут - а если захочется повторить какую-нибудь свою старинную самоделку или что переписать в коде - опять ковырять папку с библиотеками и менять версии платформ!? Да и если даже просто погонять чужой код найденный в сети - возможно придется переходить на те версии ПО которые использовал автор, поделившийся своим кодом.

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

В плане применения к Ардуино-творчеству идея простая. Делаем виртуальный ПК на базе Windows, а потом размножаем его до нужных количеств.

Для старых проектов я сделаю виртуальную машину (ВМ) поставлю туда старую версию Arduino IDE и все библиотеки, которые использовал раньше. А для экспериментов можно за 10 минут из образа пустой установленной ОС сделать копию, и ставить туда что угодно.

Парочка замечаний:

Статья не предполагает подробных инструкций как ставить виндовсы и работать с гипервизором Oracle VirtualBox, а посвящена особенностям программирования из среды Arduino IDE c ВМ.

Arduino IDE это не та программа которая требует огромных вычислительных ресурсов для свой работы. Поэтому если ваш компьютер достаточно мощный, а сам гипервизор настроен правильно, гостевая ОС будет работать также шустро как и ваша ОС в которой этот самый гипервизор установлен. (тем более что запускать более одной ВМ одновременно в рамках данной задачи смысла нет ни какого, а с запуском одной ВМ справится практически любой более-менее современный ПК.

В плане использования технологии виртуализации в чисто в бытовых целях (1-2) виртуальных компа запущенных одновременно - "бутылочное горлышко" данной технологии это не мощность видеокарты, и даже не мощность процессора. Необходимо достаточно большое количество оперативной памяти и особенно важна скорость обмена данными с жестким диском.

У меня довольно старый по современным меркам процессор:

А вот с оперативкой все хорошо:

-2

2 "планки" по 16Гб (двухканальный режим работы)

-3

а вместо традиционных жестких дисков 2 твердотельных накопителя (Solid-State Drive, SSD) 477Гб и 224Гб. Объемы не большие, но все важные и редко используемые данные, я архивирую на обычном 2-х терабайтном жестком диске. В повседневной жизни предпочитаю, чтобы под столом ничего не шуршало и не тормозило работу.

2-й SSD "отдан на растерзание" гипервизору. В такой конфигурации установка ОС Win 10 на виртуальный комп занимает примерно 15 минут. Все кто считают, что виртуальная машина установленная на домашний ПК это обязательно "томознуто и глючно" - попробуйте поставить 10-ку за такое время на обычный компьютер или ноутбук.

В принципе 2-й физический жесткий диск не обязателен - работать будет и на том же HDD(SSD) на котором установлена ОС, но уже не так шустро, так как и винда и гипервизор и сама ВМ на которой будет запущена гостевая ОС будут обращаться к одному и тому же физическому накопителю.

В моем варианте конфигурации Windows не использует 2-й диск в своих корыстных целях совсем.

-4

Инструкция для желающих попробовать:

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

https://www.virtualbox.org/wiki/Downloads

-5

Скачиваем программу Oracle VirtualBox. Запускаем инсталлятор. Клацаем много раз Next. Запускаем программу.

Первым делом идем в настройки и говорим программе, что все конфиги и образы виртуальных машин необходимо сохранять на отдельном накопителе. (если у вас один физический накопитель и один раздел - тут в принципе можно ничего не трогать)

-6

Создаем первую виртуальную машину (там будет находится чистый Windows)

-7

Для экспериментов с Arduino я буду устанавливать образ Windows 10 22H2 который стал последним крупным обновлением, после которого Windows 10 больше не будет получать никаких новых функций, а только ежемесячные обновления безопасности. Установочный образ можно скачать на сайте Microsoft.

Настраиваем оборудование. Понятно, что чем больше ресурсов мы выделим гостевой ОС, тем быстрее она будет работать - но злоупотреблять не стоит, так может начать тормозить сама программа виртуализации. (остаемся в зеленой зоне).

Физической памяти у меня теперь 32Гб - поэтому выделю 8Гб, а вот процессор у меня старенький поэтому выделю 1ЦП.

-8

Осталось создать виртуальный жесткий диск. Поскольку на виртуальном компьютере будут стоять только Windows и Arduino IDE с библиотеками + ПО для поддержки различных платформ - 80Гб будет достаточно. Диск будет не фиксированного размера и по факту на физическом HDD папка с файлами будет иметь размер около 30Гб.

-9

Нажимаем кнопку "Готово"

-10

Перед тем как ставить Win10 необходимо вытащить виртуальный патч-корд из виртуальной сетевой карточки (иначе на этапе установки будут настойчивые предложения создать учетную запись Microsoft - а нам оно зачем!?)

-11

Запускаем виртуальную машину и устанавливаем Windows как на обычный ПК.

-12

Установка Windows 10 PRO около 15 минут. Дистрибутив "пустой винды" занимает 18.1Гб на виртуальном жестком диске.

-13

На реальном ПК с которого это все запущено съеденное место под эту ВМ составляет всего 10,2Гб

-14

Ресурсов для нормальной работы ВМ более чем достаточно:

-15

Отключаем Контроль учетных записей (UAC) чтобы не отвечать на дурацкие вопросы. (на машине для опытов правила информационной безопасности можно особо не соблюдать - восстановить её работоспособность легко)

-16

И первым делом после установки в "виртуальную подставку для кофе" закидываем CD-ROM с дополнениями для гостевой ОС и устанавливаем их.

-17
-18

Перезапускаемся:

-19

Подключаем виртуальный кабель к сети.

-20

Почему-то не захотела Windows сразу выходить в Интернет. Пришлось передернуть Тип NAT на "Не подключен" и обратно на "NAT".

-21

Устанавливаем все последние доступные обновления:

-22

Пока ставятся - удаляем ненужный One Drive

-23

Для удобства работы подключаем буфер обмена и разрешаем передачу файлов между ВМ и компьютером.

-24

Итоговый размер после обновлений пустой ОС Windows 25.7 ГБ

-25

ВМ занимает на диске: 18.1 ГБ

-26

Выключаем ВМ и создаем её копию.

-27
-28

На создание нового виртуального компьютера с предустановленной ОС потребовалась всего 1 минута.

-29

Запускаемся....

Установка Arduino IDE и настройка "проброса" Arduino платформ на ВМ

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

-30

В этом режиме ВМ возьмет IP непосредственно с домашнего маршрутизатора и подключится как отдельный компьютер в домашней сети.

-31
-32

(если надумаете запустить в таком режиме несколько ВМ - не забудьте присвоить уникальные сетевые имена "Имя компьютера")

-33

Устанавливаем Arduino IDE версии 2.Х

https://www.arduino.cc/en/software
-34

Arduino платформы имеющиеся у меня в наличии прошиваются через USB-UART преобразователи на базе микросхем CH340 или CP210X.

-35

ВМ в Oracle VirtualBox необходимо настроить таким образом, чтобы именно эти устройства пробрасывались в гостевую ОС при подключении к ПК. Если использовать для этих целей всегда один и тот-же USB порт - можно сделать так чтобы устройства подключенные с этого конкретного порта попадали на VM, а при подключении в другие порты попадали на ПК.

Начнем с "проброски" Nano на CH340 (Китайский клон Arduino Nano). Подключаем Nano к компьютеру и заходим в настройки ВМ.

-36

Добавляем устройство в список:

-37

Если теперь "передернуть" плату - то она попадет сразу в гостевую ОС

-38

А если включить в другой USB порт - то просто на компьютер.

Аналогично пробрасываем CP210X

-39
-40

Устанавливаем драйвер и собственно усе.

-41
-42

У нас есть виртуальный компьютер с установленной Windows, средой Arduino IDE 2.X и драйверами устройств для прошивки плат. Эта папка "весит" чуть побольше - около 25Гб

-43

Теперь можно эту ВМ клонировать и ставить определенный набор библиотек и версий ПО для поддержки различных плат.

В ближайших планах у меня протестировать несколько примеров кода из сети Интернет для платформы ESP32-WROVER, а они были написаны под версию поддержки плат 2.0.Х.

-44

Мои старые проекты для ESP32-WROOM компилируются только под версией 1.0.Х. и используют несколько старинных библиотек несовместимых с новыми версиями.

Поэтому на своем компьютере я ничего трогать не буду (пусть остается старая версия Arduino IDE (Arduino IDE 1.8.19), а тестовую площадку разверну на ВМ.

Копи-пасте образ:

-45

Ставим поддержку плат ESP32 (той версии на которую ссылался автор кода)

https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
-46
-47

Пробуем загрузить "мигалку" (пользовательского светодиода на этой плате нет - я использую внешний светодиод со встроенным резистором)

-48

Оно откомпилировалось, прошилось и работает.

-49

Теперь можно покидать библиотеки предоставленные автором кода и поэкспериментировать с другими примерами для этой платформы, не опасаясь что свои проекты "собираться" перестанут. Потребуется другая версия для платформы - можно быстренько развернуть еще одну ВМ ну а если все "заглючит" быстренько поставить все с нуля на уже предустановленную копию Windows.

В модуле ESP32-WROVER-B есть встроенная SPI-RAM память и у меня есть одна идея где бы её можно было задействовать. - Но это уже совсем другая история....

Оглавление канала тут

Всем удачи!