Что такое MicroPython? Основные команды, REPL и первые программы
Что такое MicroPython и чем он отличается от Python? REPL, machine.Pin, PWM, АЦП, I2C, ticks_ms, main.py, Thonny, mpremote, mip и настройка Pico и ESP32.
MicroPython — небольшая и быстрая реализация языка Python 3 для микроконтроллеров. После загрузки MicroPython на плату вроде Raspberry Pi Pico или ESP32 плата выполняет код Python самостоятельно: вводишь команду без этапа компиляции и сразу видишь, как загорается светодиод. Если Python тебе уже знаком по школе или работе на компьютере, тот же синтаксис поможет считывать состояние пинов, управлять моторами, собирать данные датчиков и подключаться к Wi-Fi.
В этом руководстве ты узнаешь, чем MicroPython отличается от обычного Python, как мгновенно взаимодействовать с платой через REPL и как использовать самые нужные модули: machine.Pin, PWM, ADC и I2C, с примерами кода. Затем разберём разницу между time.sleep и ticks_ms, файлы main.py и boot.py, которые выполняются при включении, загрузку файлов через Thonny и mpremote, добавление библиотек с помощью mip и установку прошивки на Pico и ESP32. В последнем разделе сравним MicroPython и Arduino C++.

Что такое MicroPython и чем он отличается от Python?
MicroPython — проект с открытым исходным кодом, который Дэмиен Джордж начал в 2013 году для небольшой платы; сегодня он поддерживает десятки микроконтроллеров. Прошивка, которую ты загружаешь на плату, содержит интерпретатор Python, основные модули и небольшую файловую систему. Сначала код на плате преобразуется в байт-код, а затем интерпретатор выполняет его шаг за шагом. В несколько сотен КБ ОЗУ невозможно вместить весь Python с компьютера, поэтому язык остаётся тем же, но большинство библиотек урезаны или вовсе отсутствуют. Зато добавлено то, чего нет в Python для компьютера: модуль machine, который даёт прямой доступ к аппаратной части.
| Тема | Python (компьютер) | MicroPython (плата) |
|---|---|---|
| Где работает | Компьютер с гигабайтами ОЗУ | Микроконтроллер с сотнями КБ ОЗУ |
| Стандартная библиотека | Очень большая: datetime, threading, urllib... | Небольшое подмножество: time, os, json, re, struct, random, math... |
| Пакеты | numpy, pandas и тысячи других через pip | Нет numpy и pandas; пакеты micropython-lib через mip |
| Доступ к аппаратной части | Нет, нужны дополнительные библиотеки | Модуль machine: Pin, PWM, ADC, I2C, SPI, UART, Timer |
| Числа с плавающей точкой | 64-битные (около 15 цифр) | 32-битные на Pico и ESP32 (около 7 цифр) |
| Время | time.time(), datetime (функции времени в обычном Python) | time.sleep_ms(), time.ticks_ms(), machine.RTC (функции времени в MicroPython) |
| Запуск программы | Запускаешь из командной строки | boot.py и main.py выполняются автоматически при включении |
Платы, на которых работает MicroPython
| Плата | Файл прошивки | Всего ОЗУ | Примечание |
|---|---|---|---|
| Raspberry Pi Pico (RP2040) | RPI_PICO (.uf2) | 264 КБ | Самая простая плата для старта |
| Raspberry Pi Pico W | RPI_PICO_W (.uf2) | 264 КБ | Модуль network для Wi-Fi; прошивка обычной Pico не включает здесь Wi-Fi |
| Raspberry Pi Pico 2 (RP2350) | RPI_PICO2 (.uf2) | 520 КБ | Быстрее, больше памяти |
| ESP32 (WROOM) | ESP32_GENERIC (.bin) | 520 КБ (часть использует Wi-Fi) | Wi-Fi и Bluetooth; в моделях с PSRAM гораздо больше памяти |
| ESP8266 (NodeMCU, Wemos D1 Mini) | ESP8266_GENERIC (.bin) | Около 80 КБ | Работает, но памяти мало; для новых проектов выбирай ESP32 |
| Arduino Uno (ATmega328P) | Нет | 2 КБ | Не поддерживает MicroPython; программируется на C++ |
Установка прошивки MicroPython на Pico и ESP32
- Pico: Удерживай кнопку BOOTSEL на плате при подключении USB-кабеля, затем отпусти. На компьютере появится диск RPI-RP2 (RP2350 для Pico 2).
- Скачай подходящий для платы файл .uf2 с официальной страницы загрузок MicroPython (RPI_PICO для Pico, RPI_PICO_W для Pico W) и перетащи его на этот диск.
- Когда копирование завершится, плата автоматически перезапустится, а диск исчезнет: MicroPython установлен. В Thonny выбери MicroPython (Raspberry Pi Pico) в разделе Инструменты › Параметры › Интерпретатор (Tools › Options › Interpreter).
- ESP32: Если на компьютере установлен Python, введи в командной строке pip install esptool. Подключи плату и найди её порт (например, COM3 в Windows, /dev/ttyUSB0 в Linux).
- Сначала сотри флеш-память командой esptool.py --chip esp32 --port COM3 erase_flash. Если плата не подключается, удерживай кнопку BOOT во время выполнения команды.
- Запиши прошивку командой esptool.py --chip esp32 --port COM3 --baud 460800 write_flash -z 0x1000 ESP32_GENERIC-....bin. Для ESP32-S3 и ESP32-C3 используется адрес 0x0. Пункт Thonny Install or update MicroPython (esptool) (установить или обновить MicroPython) выполняет ту же задачу через окно программы.
REPL: мгновенное взаимодействие с платой
REPL (Read-Eval-Print Loop, цикл «чтение — вычисление — вывод») — командная строка, которую плата открывает через последовательный порт. Приглашение >>> в нижнем окне Оболочка (Shell) в Thonny означает, что REPL ждёт команду. Введи 1 + 1, и плата вычислит и вернёт 2; введи from machine import Pin, а затем Pin("LED", Pin.OUT).value(1), и светодиод Pico загорится в тот же момент. REPL — самый быстрый способ прочитать значение датчика, проверить правильность подключения пина или изучить работу библиотеки без ожидания компиляции и загрузки.
| Сочетание клавиш или команда | Что делает |
|---|---|
| Ctrl+C | Останавливает выполняемую программу (KeyboardInterrupt) и возвращает в REPL |
| Ctrl+D | Программный сброс; boot.py и main.py выполняются заново |
| Ctrl+E | Режим вставки: вставь длинный код без нарушения отступов и запусти его сочетанием Ctrl+D |
| Tab | Автодополнение; введи machine. и нажми Tab, чтобы увидеть всё содержимое модуля |
| help("modules") | Выводит список всех модулей прошивки |
| import gc; gc.mem_free() | Показывает свободное ОЗУ, доступное программе, в байтах |
| import os; os.listdir() | Выводит список файлов на плате |
Первая программа и её аналог на Arduino C++
1# İlk program: dahili LED'i yakıp söndür / First program: blink the onboard LED
2from machine import Pin
3import time
4
5led = Pin("LED", Pin.OUT) # Pico ve Pico W; ESP32'de Pin(2, Pin.OUT) / Pico and Pico W; Pin(2, Pin.OUT) on ESP32
6
7while True:
8 led.value(1) # yak / on
9 time.sleep(0.5) # saniye cinsinden / in seconds
10 led.value(0) # söndür / off
11 time.sleep(0.5)1// Aynı program Arduino C++ ile / The same program in Arduino C++
2void setup() {
3 pinMode(LED_BUILTIN, OUTPUT);
4}
5
6void loop() {
7 digitalWrite(LED_BUILTIN, HIGH);
8 delay(500); // milisaniye cinsinden / in milliseconds
9 digitalWrite(LED_BUILTIN, LOW);
10 delay(500);
11}Обе программы выполняют одну задачу, но устроены по-разному. В MicroPython нет setup() и loop(): файл выполняется один раз сверху вниз, а бесконечный цикл ты создаёшь с помощью while True:. Вместо фигурных скобок и точек с запятой используются отступы; все строки внутри цикла должны иметь одинаковый отступ (обычно 4 пробела). Задержка тоже задаётся в других единицах: time.sleep(0.5) принимает секунды, а delay(500) в Arduino — миллисекунды. В MicroPython для миллисекунд используется time.sleep_ms(), а для микросекунд — time.sleep_us(). Основы варианта для Arduino разобраны в статье «Основы программирования Arduino».
machine.Pin: цифровой ввод и вывод
| MicroPython | Аналог на Arduino C++ | Описание |
|---|---|---|
| led = Pin(15, Pin.OUT) | pinMode(15, OUTPUT) | Настраивает пин как выход |
| led.value(1) или led.on() | digitalWrite(15, HIGH) | Устанавливает HIGH на пине; value(0) или off() устанавливает LOW |
| buton = Pin(14, Pin.IN, Pin.PULL_UP) | pinMode(14, INPUT_PULLUP) | Вход со встроенным подтягивающим резистором |
| buton.value() | digitalRead(14) | Возвращает 0 или 1 |
| led.toggle() | digitalWrite(15, !digitalRead(15)) | Инвертирует состояние; доступно на Pico, а на ESP32 используй value(not led.value()) |
| buton.irq(trigger=Pin.IRQ_FALLING, handler=f) (настройка прерывания в MicroPython) | attachInterrupt(..., f, FALLING) | Вызывает функцию f при изменении состояния пина |
time.sleep и ticks_ms: измерение времени без блокировки
time.sleep() заставляет плату полностью ждать; в это время кнопки не опрашиваются и датчики не проверяются. Для одновременного выполнения нескольких задач используй аналог подхода с millis() в Arduino: time.ticks_ms() возвращает миллисекунды с момента запуска, а time.ticks_diff(new, old) вычисляет разницу между двумя моментами времени. Важно получать разницу через ticks_diff, а не обычным вычитанием: достигнув определённого значения, счётчик переполняется, и обычное вычитание в этот момент даёт неверный результат. Код ниже мигает светодиодом без блокировки и одновременно отслеживает кнопку через прерывание (IRQ); каждое нажатие меняет частоту мигания.
1# delay kullanmadan iki iş: LED yanıp söner, buton kesmeyle modu değiştirir
2# Two jobs without blocking: the LED blinks, a button interrupt switches the mode
3from machine import Pin
4import time
5
6led = Pin(15, Pin.OUT) # LED + 220 Ω, GP15
7buton = Pin(14, Pin.IN, Pin.PULL_UP) # buton GP14 ile GND arasında / button between GP14 and GND
8
9hizli = False
10son_basma = 0
11son_degisim = time.ticks_ms()
12
13def buton_kesme(pin): # kesme fonksiyonu kısa olmalı / keep the handler short
14 global hizli, son_basma
15 simdi = time.ticks_ms()
16 if time.ticks_diff(simdi, son_basma) > 200: # 200 ms debounce / 200 ms debounce
17 son_basma = simdi
18 hizli = not hizli
19
20buton.irq(trigger=Pin.IRQ_FALLING, handler=buton_kesme) # basınca HIGH'dan LOW'a iner / goes HIGH to LOW when pressed
21
22while True:
23 aralik = 100 if hizli else 500
24 if time.ticks_diff(time.ticks_ms(), son_degisim) >= aralik: # taşmaya karşı güvenli / safe against wrap-around
25 son_degisim = time.ticks_ms()
26 led.value(not led.value())
27 # burada başka işler yapılabilir / other work can run herePWM: яркость, сервоприводы и звук
1# PWM: LED parlaklığı ve servo açısı / PWM: LED brightness and servo angle
2from machine import Pin, PWM
3import time
4
5led = PWM(Pin(15))
6led.freq(1000) # 1 kHz: titreme görünmez / no visible flicker
7
8for d in range(0, 65536, 2048): # duty_u16: 0 (kapalı) ... 65535 (tam) / 0 (off) ... 65535 (full)
9 led.duty_u16(d)
10 time.sleep_ms(20)
11led.duty_u16(0)
12
13servo = PWM(Pin(16))
14servo.freq(50) # servolar 50 Hz (20 ms) ister / servos expect 50 Hz (20 ms)
15
16def servo_aci(derece):
17 us = 500 + derece * 2000 // 180 # 0° = 0,5 ms, 180° = 2,5 ms; servona göre ayarla / tune for your servo
18 servo.duty_ns(us * 1000)
19
20for a in (0, 90, 180, 90):
21 servo_aci(a)
22 time.sleep(1)Объект PWM очень быстро включает и выключает пин, задавая среднюю мощность. freq() определяет, сколько раз в секунду это повторяется, а duty_u16() задаёт длительность включённого состояния числом от 0 до 65 535; 32 768 соответствует примерно 50 процентам. Такая шкала даёт гораздо меньший шаг, чем диапазон 0–255 у analogWrite в Arduino. Сервоприводам нужен сигнал 50 Hz с длительностью импульса от 0,5 до 2,5 мс; duty_ns() задаёт длительность импульса прямо в наносекундах, что значительно упрощает код сервопривода. Меняя значения freq(), можно также играть ноты на пассивном зуммере. Коэффициент заполнения и частота подробно разобраны в статье «Что такое PWM».
АЦП: чтение аналогового сигнала
1# ADC: potansiyometre ve Pico'nun dahili sıcaklık sensörü
2# ADC: a potentiometer and the Pico's internal temperature sensor
3from machine import ADC, Pin
4import time
5
6pot = ADC(Pin(26)) # GP26 = ADC0; ESP32'de ADC(Pin(34)) / ADC(Pin(34)) on ESP32
7yonga = ADC(4) # 4. kanal: dahili sıcaklık / channel 4: internal temperature
8
9def ortalama(adc, n=16): # gürültüyü azalt / reduce noise
10 toplam = 0
11 for _ in range(n):
12 toplam += adc.read_u16()
13 return toplam // n
14
15while True:
16 ham = ortalama(pot) # 0-65535 (12 bit ölçüm 16 bite ölçeklenir) / 12-bit reading scaled to 16 bits
17 volt = ham * 3.3 / 65535
18 v_t = ortalama(yonga) * 3.3 / 65535
19 derece = 27 - (v_t - 0.706) / 0.001721 # RP2040 veri sayfasındaki formül / formula from the RP2040 datasheet
20 print("Pot: {} ({:.2f} V) Yonga / chip: {:.1f} C".format(ham, volt, derece))
21 time.sleep(1)read_u16() возвращает значение от 0 до 65 535 на любой плате, поэтому один и тот же код работает на Pico и ESP32. В действительности АЦП Pico 12-битный, а результат масштабируется до 16 бит. У Pico три доступных пользователю аналоговых пина: GP26 (ADC0), GP27 (ADC1) и GP28 (ADC2); четвёртый канал — датчик температуры внутри микросхемы, который измеряет температуру кристалла, а не комнаты. На ESP32 для чтения всего диапазона 0–3,3 V нужен вызов adc.atten(ADC.ATTN_11DB), а пины ADC2 нельзя использовать при включённом Wi-Fi, поэтому выбирай пины ADC1 в диапазоне GPIO 32–39. Усреднение 16 отсчётов в коде заметно уменьшает шум АЦП. Понятия разрешения и опорного напряжения разобраны в статье «Что такое АЦП».
I2C: подключение датчиков и дисплеев
1# I2C: hattı tara ve SSD1306 OLED'e yaz / I2C: scan the bus and write to an SSD1306 OLED
2from machine import Pin, I2C
3import ssd1306 # önce: mpremote mip install ssd1306 / first: mpremote mip install ssd1306
4
5i2c = I2C(0, sda=Pin(4), scl=Pin(5), freq=400000) # Pico; ESP32'de I2C(0, sda=Pin(21), scl=Pin(22))
6adresler = i2c.scan()
7print("Bulunan / found:", [hex(a) for a in adresler]) # OLED genelde 0x3c / OLED is usually 0x3c
8
9if 0x3C in adresler:
10 oled = ssd1306.SSD1306_I2C(128, 64, i2c)
11 oled.fill(0)
12 oled.text("MicroPython", 0, 0)
13 oled.text("I2C: " + hex(adresler[0]), 0, 16)
14 oled.show()I2C(0, sda=..., scl=...) запускает аппаратный блок I2C на выбранных пинах, а scan() возвращает список адресов всех устройств, ответивших на шине. Если датчик не работает, начни с этого сканирования: пустой список указывает на проблему с подключением, а неожиданный адрес означает, что нужно исправить адрес в коде. На Pico набор пинов для каждого блока I2C фиксирован; например, пары GP0-GP1, GP4-GP5 и GP8-GP9 подходят для I2C0, а выбор неверной пары вызывает ValueError. На ESP32 I2C можно назначить почти на любые пины. Подробности о дисплее — в статье «OLED-дисплей», а о самом протоколе — в статье «Что такое I2C».
main.py и boot.py: код, который выполняется при включении
Когда ты нажимаешь Запустить (Run) в Thonny, код выполняется только в этот момент и не сохраняется на плате; после отключения USB он исчезает. Чтобы код запускался автоматически при каждом включении платы, нужно сохранить файл на плате под именем main.py. При запуске сначала выполняется boot.py, затем main.py. Файл boot.py предназначен для разовой подготовки, например подключения к Wi-Fi или настройки часов; прошивка ESP32 создаёт его автоматически, а на Pico его обычно нет. Сама программа всегда находится в main.py. Функции из других твоих файлов можно подключить в main.py через import, а показания сохранять в файловую систему платы через open().
1# main.py: kart her açıldığında otomatik çalışır / runs automatically every time the board starts
2import time
3from machine import Pin
4
5time.sleep(3) # Ctrl+C ile durdurmak için güvenlik payı / a safety window for Ctrl+C
6led = Pin("LED", Pin.OUT)
7sayac = 0
8
9try:
10 while True:
11 sayac += 1
12 led.value(sayac % 2)
13 print("Calisiyor / running", sayac)
14 time.sleep(1)
15except KeyboardInterrupt: # Thonny'de Stop ya da Ctrl+C / Stop in Thonny or Ctrl+C
16 led.value(0)
17 print("Durduruldu / stopped")Загрузка файлов: Thonny и mpremote
Для первых шагов проще всего использовать Thonny: напиши код, выбери Файл › Сохранить как… (File › Save as), в открывшемся окне укажи Raspberry Pi Pico или Устройство MicroPython (MicroPython device) и назови файл main.py. Открой Вид › Файлы (View › Files), чтобы увидеть рядом файлы компьютера и платы; копировать их между устройствами можно через меню правой кнопки мыши. Для тех, кто предпочитает командную строку и редактор вроде VS Code, есть официальная утилита mpremote; установи её командой pip install mpremote, и она автоматически подключится к первой найденной плате с MicroPython.
| Команда mpremote | Что делает |
|---|---|
| mpremote | Подключается к первой найденной плате и открывает REPL (выход: Ctrl+X) |
| mpremote ls | Выводит список файлов на плате |
| mpremote cp main.py :main.py (команда копирования файла на плату) | Копирует файл с компьютера на плату; двоеточие (:) обозначает плату |
| mpremote run test.py (команда запуска файла) | Выполняет файл без сохранения на плате и показывает его вывод |
| mpremote mip install ssd1306 (команда установки библиотеки) | Скачивает библиотеку через интернет компьютера и устанавливает её в папку /lib на плате |
| mpremote reset | Перезапускает плату |
| mpremote connect COM3 ls | Подключается к плате на указанном порту (например, /dev/ttyACM0 в macOS и Linux) |
Добавление библиотек: mip
В MicroPython нет pip; вместо него используется небольшой менеджер пакетов mip. На плате с доступом в интернет, например Pico W или ESP32, сначала подключись к Wi-Fi, затем введи в REPL import mip и mip.install("ssd1306"); пакет загрузится из официального репозитория micropython-lib и попадёт в папку /lib на плате. Драйвер с GitHub тоже можно установить командой mip.install("github:user/repo"). Для Pico без Wi-Fi выполни ту же задачу с компьютера командой mpremote mip install или через меню Thonny Инструменты › Управление пакетами (Tools › Manage packages). Можно и просто скопировать на плату драйвер из одного файла (например, файл .py для датчика); если файл находится в корневой папке или в /lib, его можно загрузить через import. Шаги подключения к Wi-Fi описаны в статье «Wi-Fi на Pico W».
MicroPython или Arduino C++?
| Характеристика | MicroPython | Arduino C++ |
|---|---|---|
| Язык | Синтаксис Python 3 | C++ и ядро Arduino |
| Как выполняется | Интерпретатор на плате выполняет байт-код | Компилируется в машинный код на компьютере |
| Время до результата | Мгновенно в REPL; сохранение занимает 1–2 секунды | Компиляция и загрузка при каждом изменении, 10–60 секунд |
| Скорость | Циклы на чистом Python примерно в 10–100 раз медленнее | Скорость машинного кода |
| Точность времени | Сборщик мусора иногда делает короткие паузы | Предсказуемость до микросекунд |
| Файловая система | Есть: main.py, файлы данных и настроек | Нет; нужна EEPROM или дополнительная библиотека |
| Библиотеки | micropython-lib и драйверы сообщества | Огромная экосистема библиотек Arduino |
| Платы | Pico, ESP32, ESP8266 | Почти все, включая Uno, Nano и Mega |
| Сообщения об ошибках | Понятные сообщения с номерами строк во время выполнения | Ошибки компиляции; Serial.print для наблюдения за выполнением |
| Лучше подходит для | Учёбы, быстрых экспериментов, Wi-Fi и обработки данных | Точного отсчёта времени, плат с малым объёмом памяти, множества готовых библиотек |
На практике выбор зависит от проекта. Чтение датчика и отправка данных по Wi-Fi, обслуживание веб-страницы или управление дисплеем требуют меньше строк и быстрее реализуются на MicroPython. Если нужно генерировать сигналы с микросекундной точностью, очень быстро обновлять сотни светодиодов или использовать только небольшую плату вроде Uno, преимущество у C++. Медленную функцию можно ускорить декоратором @micropython.native, а паузы сборщика мусора сократить, если не создавать новые списки и строки внутри циклов. О выборе платы также читай в статье «Arduino или ESP32».
Частые ошибки и их решения
| Ошибка или симптом | Причина | Решение |
|---|---|---|
| ImportError: no module named 'ssd1306' | Библиотеки нет на плате | Установи её через mip или mpremote mip либо скопируй файл .py на плату |
| IndentationError | Неодинаковые отступы, смешаны пробелы и табуляция | Используй 4 пробела во всём файле; Thonny делает это автоматически |
| OSError: [Errno 5] EIO (I2C) | Устройство не отвечает: проблема с подключением, адресом или питанием | Проверь адрес через scan(), проверь SDA и SCL |
| ValueError: bad SCL pin | Выбранные пины не относятся к этому блоку I2C | Выбери правильную пару I2C0 или I2C1 по распиновке Pico |
| Код работает в Thonny, но не после отключения USB | Файл не сохранён на плате под именем main.py | Через «Сохранить как…» сохрани его на плате под именем main.py |
| MemoryError: memory allocation failed (сообщение об ошибке: не удалось выделить память) | ОЗУ заполнено: большой список, длинная строка или большой буфер | Обрабатывай данные частями, вызывай gc.collect(), используй bytearray |
| Thonny: Device is busy or does not respond (сообщение Thonny: устройство занято или не отвечает) | main.py выполняет цикл без пауз или порт занят другой программой | Нажми «Стоп» или Ctrl+C, закрой другую программу, при необходимости сотри флеш-память |
Если Python тебе уже знаком, MicroPython — кратчайший путь в мир микроконтроллеров: результат проверки пина в REPL виден мгновенно, а для чтения датчика и подключения к Wi-Fi хватает нескольких строк. После освоения основных модулей, принципа main.py и отсчёта времени без блокировки через ticks_ms твои проекты быстро становятся сложнее. В приложении BlueGrays ты найдёшь проекты для Raspberry Pi Pico со светодиодами, светофором, кнопками и PWM, с пошаговыми схемами подключения и кодом MicroPython.
Частые вопросы
Что такое MicroPython?
MicroPython — небольшая версия языка Python 3 для микроконтроллеров. Благодаря загруженной прошивке платы вроде Raspberry Pi Pico и ESP32 выполняют код Python напрямую; модуль machine даёт доступ к пинам, PWM, АЦП и I2C.
MicroPython — это то же самое, что Python?
Синтаксис одинаковый, но MicroPython — урезанное подмножество Python для компьютера. Крупных библиотек вроде numpy и pandas нет, стандартная библиотека сокращена, а числа с плавающей точкой на Pico и ESP32 32-битные. Взамен добавлен модуль machine для прямого доступа к аппаратной части.
Что лучше: MicroPython или Arduino?
Зависит от цели. MicroPython удобнее для учёбы, быстрых экспериментов и проектов с отправкой данных по Wi-Fi; Arduino C++ работает быстрее, точнее выдерживает интервалы времени и предлагает гораздо больше готовых библиотек. Pico и ESP32 можно программировать обоими способами.
Работает ли MicroPython на Arduino Uno?
Нет. У микросхемы ATmega328P на Arduino Uno всего 2 КБ ОЗУ и 32 КБ флеш-памяти, и интерпретатор MicroPython в них не помещается. Для MicroPython выбирай более мощную плату, например Raspberry Pi Pico или ESP32.
Как установить библиотеку в MicroPython?
На плате с подключением к интернету введи в REPL import mip и mip.install("package_name"). Для плат без Wi-Fi выполни то же с компьютера командой mpremote mip install package_name или через менеджер пакетов Thonny. Драйверы из одного файла также можно просто скопировать на плату.
Как сохранить код на Pico, чтобы он не пропадал?
В Thonny открой «Файл › Сохранить как…», выбери Raspberry Pi Pico и назови файл main.py. При каждом запуске платы сначала выполняется boot.py, а затем автоматически main.py; даже если отключить USB от компьютера и подключить к другому источнику 5 V, программа продолжит работать.
Что собрать после прочтения
Все проекты
Мигание встроенным светодиодом Raspberry Pi Pico (Pico и Pico W)
Первый проект серии Raspberry Pi Pico! Мигаем зелёным встроенным светодиодом, чтобы проверить, что плата работает, — классический первый опыт «Hello World». НИКАКИХ внешних компонентов, только Pico и USB-кабель. Код написан на MicroPython (официальном языке, поддерживаемом Raspberry Pi Foundation). Изучи в Thonny IDE класс machine.Pin, режим Pin.OUT, методы led.on()/off() и time.sleep(). Каждое переключение видно в выводе (REPL).

Raspberry Pi Pico: управление внешним светодиодом (макетная плата)
Следующий шаг после встроенного светодиода Pico: подключить внешний светодиод на макетной плате и управлять им через пин GP14. В этом проекте ты узнаешь, как использовать любой пин GPIO общего назначения у Pico как выход, какая полярность у светодиода (длинная ножка = анод/+, короткая = катод/–) и зачем нужен токоограничивающий резистор (220Ω). Без резистора через светодиод пойдёт слишком большой ток, и он может сгореть. Схема очень простая: Pico GP14 → резистор 220Ω → светодиод → GND.

Два попеременно мигающих светодиода на Pico (узор мигалки)
Следующий шаг после одного светодиода на Pico: два светодиода мигают попеременно по классическому узору мигалки. Когда один гаснет, другой загорается — самый простой пример согласованной работы нескольких GPIO. В этом проекте два светодиода разных цветов (красный на GP14, зелёный на GP13) меняются состояниями каждые 500ms. Метод MicroPython Pin.toggle() делает код коротким и понятным. Та же логика лежит в основе светофоров, полицейских мигалок, бегущих огней и многих светодиодных анимаций.

Симулятор светофора на Pico (3 светодиода по очереди)
Настоящий светофор на красном, жёлтом и зелёном светодиодах — первый проект серии Pico с 3 светодиодами! Зелёный 4 с «едем», жёлтый 1,5 с «внимание», красный 3 с «стоп» и красный + жёлтый 1 с «приготовиться» (европейская схема светофора). Изучи объявление функций (def all_off()), логику конечного автомата (последовательность) и синхронизацию нескольких GPIO. Простая схема: 3 светодиода на GP11 (зелёный), GP12 (жёлтый), GP13 (красный), у каждого токоограничивающий резистор 220Ω.

Светодиод с управлением кнопкой на Pico (удержание)
Первый проект Pico с входом — чтение кнопки! Светодиод горит, пока кнопка нажата, и гаснет после отпускания. Это большой шаг после светодиодных анимаций: сигнал из внешнего мира в Pico. Изучи Pin.IN (режим входа), Pin.PULL_UP (встроенный подтягивающий резистор — стандарт для кнопок) и чтение button.value(). Светодиод на GP14, кнопка на GP2 (встроенный PULL_UP). Нажата = LOW (0), отпущена = HIGH (1) — обратная логика сначала путает, но это промышленный стандарт.

Антидребезг кнопки на Pico: IRQ против программного опроса
Нажимаешь кнопку один раз, а код насчитывает 3–4? Это дребезг контактов — металлические контакты колеблются доли миллисекунды! Сравни в мониторе два способа подсчёта рядом: сырой опрос (ловит дребезг и считает лишнее) и IRQ + программный антидребезг (точно). Изучи физику дребезга, программный антидребезг (ticks_diff() > 50ms), регистрацию прерывания Pin.irq(), триггер IRQ_FALLING, обработчики ISR и безопасность global в ISR.

Плавное затухание светодиода с PWM на Pico (эффект дыхания)
Светодиод больше не просто мигает — он дышит! С помощью PWM (широтно-импульсной модуляции) Raspberry Pi Pico яркость светодиода медленно растёт и медленно падает, как огонёк спящего MacBook. Изучи класс machine.PWM, duty_u16() (16-битная яркость 0–65535), частоту PWM (freq(1000) — 1000 циклов вкл/выкл в секунду, мерцания не видно), циклы range() с шагом (вверх и вниз) и почти аналоговый выход с цифрового пина.

Смена цветов RGB-светодиода на Pico (3 канала PWM)
Один светодиод — миллионы цветов! RGB-светодиод содержит 3 светодиода: красный, зелёный и синий. Если управлять каждым своим каналом PWM Pico, цвета смешиваются: красный + зелёный = жёлтый, зелёный + синий = голубой, все три = белый. Светодиод перебирает 8 цветов. Изучи несколько каналов PWM, объявление функций (def set_color(...)), смешивание RGB, перевод 8 бит → 16 бит (x257) и общий катод и общий анод.
Другие статьи
Приложение BlueGrays
Собери эту схему шаг за шагом в телефоне
Схема подключения, код и список деталей на одном экране. 200+ проектов на Arduino, ESP32 и Pico готовы к сборке.
Наведи камеру телефона
Наведи камеру на код — откроется магазин приложений на телефоне.
или открыть магазин

