Wokwi - это онлайн симулятор для Arduino и некоторых других платформ, имитирует как работу самого МК, так и некоторого "железа": позволяет собрать виртуальную схему из модулей и запустить на ней программу:
- Симуляция очень точная - код выполняется именно так, как он делал бы это на реальном МК, с точностью до такта
- МК самые ходовые: AVR Arduino и ESP32 с Pi Pico в режимах C++ и Python
- Из железок доступны самые ходовые модули, их список постоянно пополняется
- Модули тоже хорошо симулируются - можно работать с ними на самом низком уровне и тестировать библиотеки
- В программу можно добавлять библиотеки из реестра Arduino
- Есть инструменты отладки - консоль Serial, плоттер графиков и логический анализатор сигналов с пинов
- Симулятор может работать как онлайн в браузере, так и локально в VS Code
- В VS Code дополнительно есть Telnet-сервер для отладки (дублирует Serial) и виртуальный сервер для проектов на ESP32
Вот несколько моих проектов и тестов библиотек:
- Проект светофор
- Симуляция группы частиц
- Тест EncButton
- Тест GyverShift
- Тест GyverSegment
- Тест GyverMIDI
В браузере #
При работе в браузере компиляция происходит на стороне сервера, а запуск - непосредственно в браузере (программа отправляется на сервер, в ответ приходит бинарник). Когда сервер загружен - компиляция может завершиться по таймауту (около 20 секунд) и симулятор предложит перейти на платный тариф с приоритетной компиляцией. Раньше такое происходило довольно редко, но на момент написания урока инструмент видимо стал популярным и иногда можно ждать компиляции суммарно несколько минут!
Библиотеки #
Для добавления библиотеки нужно просто зайти во вкладку Library Manager и найти нужную библиотеку:
У меня с какого-то момента этот способ перестал работать (кнопка не нажимается), делаю так: в проекте создаю новый файл libraries.txt
и в нём с новой строки просто перечисляются библиотеки так, как они называются в менеджере библиотек:
С платной подпиской доступно добавление библиотек архивом, в то же время бесплатно можно создавать в проекте сколько угодно файлов с кодом:
Оффлайн #
В оффлайн режиме код компилируется на компьютере и просто запускается в симуляторе, что очень быстро даже для ESP32. Для работы в оффлайн режиме понадобится VS Code + PlatformIO - по сути разработка под симулятор не отличается от обычной работы с PIO, с любыми библиотеками и всем удобством написания кода в VS Code. Один и тот же проект можно скомпилировать и загрузить в плату, а можно запустить симуляцию - это очень удобно.
Лицензия #
При первом запуске симуляции программа потребует лицензию - нужно перейти в браузер и подтвердить получение лицензии. Она бесплатная.
Редактирование схемы #
Единственное - для редактирования схемы симулятора в бесплатной версии придётся использовать браузер: в него нужно вставить json из файла проекта, отредактировать и вставить обновленный код обратно в файл в VS Code. В платной версии можно редактироватьиз схему в VS Code.
Запуск #
Для запуска нужно скомпилировать прошивку и кликнуть diagram.json
, в ней запустить симуляцию. После этого каждая новая компиляция будет автоматически перезапускаться в окне симуляции.
Симуляция работает, пока её окно есть на экране, т.е. если его не видно - она встаёт на паузу. Можно разделить экран, чтобы симуляция всегда была активна
Симуляция сервера #
Оффлайн режим позволяет имитировать работу WiFi в ESP32 - прокидывает его на localhost
, т.е. можно заниматься разработкой/отладкой вебсервера и вебморды. Вот полностью сконфигурированный проект-пример для этого.
Плоттер #
В оффлайн режиме монитор порта вынесен в терминал VS Code, а плоттер графиков по Serial
отсутствует. Мне как-то он был очень нужен и я рассмотрел три варианта визуализации данных. Они основаны на том, что Wokwi может дублировать Serial (на чтение и отправку) по Telnet:
- Скрипт на Python, который читает данные и визуализирует их нужным способом (не люблю Python)
- Скрипт на Python, который читает данные и перенаправляет их по websocket в браузер, где на JS можно написать визуализацию
- Скетч на Processing, который читает данные и может их визуализировать
Я остановился на третьем варианте, полностью готовый проект для VS Code с плоттером внутри можно скачать с GitHub.
Управление графиком:
- Отправить текст, начинающийся с
#
- заголовок графика - Отправить текст, разделённый
;
или,
- названия осей - Отправить числа, разделённые
;
или,
- данные осей - Клик ЛКМ - включить и выключить автоматическое движение графика
- Колесо - масштаб по горизонтали
Полезные страницы #
- Набор GyverKIT – наш большой стартовый набор Arduino, продаётся в России
- Каталог ссылок на дешёвые Ардуины, датчики, модули и прочие железки с AliExpress
- Обратная связь – сообщить об ошибке в уроке или предложить дополнение по тексту ([email protected])
- Поддержать автора за работу над уроками