CircuitPython — это прежде всего интерпретатор языка python (об это подробнее в уроке про CircuitPython). И чтобы микроконтроллер можно было программировать на Python, необходимо этот интерпретатор на него как-то установить.
Разберём эту процедуру на примере установки CircuitPython на плату Графит-S2 от RobotClass (ESP32-S2-WROOM-I). Алгоритм установки на другие ESP контроллеры будет аналогичным.
Отладочную плату Графит-S2 или её аналоги можно купить у нас в интернет-магазине.
Загрузчик TinyUF2
Начнём с установки загрузчика TinyUF2. Напомню, загрузчик — это такая небольшая программа, которая постоянно хранится в памяти микроконтроллера и обеспечивает более удобную загрузку на него пользовательских программ. Например, благодаря загрузчику мы можем так легко загружать программы на Arduino через USB (по факту, через виртуальный COM-порт).
Так вот, TinyUF2 — ещё более крутой: он заставляет контроллер работать как USB-накопитель и загружать программы простым копированием файлов. То есть, подключаете плату к свободному USB порту вашего компьютера, она определяется как флешка, и копируете туда файлы библиотек и саму программу. Очень удобно.
Для своих плат мы уже подготовили компоненты загрузчика TinyUF2, так что их остаётся только загрузить на микроконтроллер. Делается это с помощью python-утилиты esptool.
Перед запуском esptool, необходимо перевести контроллер в режим прошивки. По факту, мы должны активировать на нём ещё один загрузчик, более низкого уровня, который примет прошивку и разместит её в нужном месте памяти. Для платы Графит-S2 это делается так:
- зажимаем кнопку RST (сброс);
- нажимаем кнопку GPIO0;
- отпускаем кнопку RST.
В результате в диспетчере устройств Windows должен появиться новый COM-порт. Запомним его номер. Для Linux ситуация аналогичная — смотрим какой порт появился и запоминаем его идентификатор.
Теперь запускаем esptool вот такой длинной командой. В команде можно заметить, что мы перечисляем все компоненты TinuUF2 и адреса в памяти контроллера, куда их следует записать.
c:\python39\python.exe c:\esp\esptool\esptool.py -p COM18 -b 460800 --before default_reset --after hard_reset --chip esp32s2 write_flash --flash_mode dio --flash_size detect --flash_freq 40m 0x1000 c:\esp\firmware\bootloader.bin 0x8000 c:\esp\firmware\partition-table.bin 0xe000 c:\esp\firmware\ota_data_initial.bin 0x2d0000 c:\esp\firmware\tinyuf2.bin
Измените номер порта (COM18) на тот, который мы запомнили ранее. Также измените пути к файлам, чтобы они соответствовали реальному расположению на вашем компьютере. По завершении процедуры, компьютер обнаружит новый накопитель.
Интерпретатор CircuitPython
Второй шаг — установка интерпретатора языка Python. Для этого используем всю прелесть TinyUF2 и просто скопируем файл с прошивкой на контроллер. После этого накопитель переподключится к компьютеру и сменит имя на CIRCUITPY.

Готово. Теперь можно обратиться к самому первому уроку на тему circuitpython и написать свою программу на языке Python.
Полезная информация
ESPTool
ESPTool — это программа на python, которая умеет загружать прошивки ESP модулей через COM-порт. Самый простой способ её установить — это воспользоваться установщиком пакетов pip
$ pip install esptool
Компоненты TinyUF2 для Графит-S2
https://download.robotclass.ru/circuitpython/graphite-s2/tinyuf2/
Прошивка CircutPython для Графит-S2
https://download.robotclass.ru/circuitpython/graphite-s2/firmware.uf2