Raspberry Pi Pico на RP2040: чем он лучше Arduino и где проигрывает
Что это за плата
Raspberry Pi Pico — не уменьшенный «Raspberry Pi», а отдельная линейка микроконтроллерных плат на собственном чипе RP2040. Linux тут нет: прошивка заливается в flash и исполняется напрямую, как на Arduino. Но внутри RP2040 заметно больше ресурсов, чем в привычном ATmega328P, и часть возможностей — вроде блоков PIO — на обычных Arduino просто нет. Цифры ниже — из официального Raspberry Pi Pico Datasheet и RP2040 Datasheet.
Чип RP2040 и начинка платы
Сердце платы — RP2040: два ядра Cortex-M0+ с тактовой до 133 МГц, частоту каждого ядра можно менять через встроенный PLL. На кристалле — 264 КБ SRAM, разбитых на шесть независимых банков, что разгружает шину при параллельном доступе ядер и DMA. Собственной flash-памяти в чипе нет — на плате распаян отдельный чип Winbond W25Q16JV на 2 МБ, подключённый по QSPI; при тактовой 125 МГц интерфейс SPI с него выдаёт порядка 62,5 МГц. Код исполняется в режиме XIP прямо из flash, с кэшем 16 КБ на кристалле.
Фишка RP2040, которой нет у Arduino — два блока PIO (Programmable I/O) по восемь state machines. Это крошечные программируемые сопроцессоры: гоняют простые ассемблерные программы независимо от основных ядер и формируют на лету протоколы вроде SPI, VGA или эмуляции SD-карты без нагрузки на CPU.
Питание и GPIO — здесь легко обжечься
У Pico на борту buck-boost преобразователь, который принимает питание в диапазоне VSYS 1,8–5,5 В и выдаёт стабильные 3,3 В для чипа и периферии. Это удобно: можно питать плату хоть от одной литиевой банки, хоть от трёх батареек АА. Вход VBUS — это отдельный пин, который берёт напряжение прямо с USB-разъёма (номинально 5 В ±10%) и физически не связан с логикой VSYS.
Главный источник проблем у новичков, пришедших с Arduino: GPIO Raspberry Pi Pico жёстко зафиксированы на 3,3 В и НЕ толерантны к 5 В. Воткнуть сюда сигнал с 5-вольтового датчика или Arduino Uno напрямую — верный способ спалить вход. Нужен делитель или логический преобразователь уровня. Из 30 линий RP2040 на разъём выведено 26: GPIO0–22 чисто цифровые, GPIO26–28 можно использовать и как АЦП. У линий 26–29 есть встроенный защитный диод на шину 3V3 — поэтому превышать напряжение на них даже при выключенной плате нельзя, диод «протечёт» в питание. Четыре линии (GPIO23–25, 29) заняты внутри платы — управлением SMPS, светодиодом и измерением напряжений — и на разъём не выведены.
Вывод 3V3 можно использовать для питания внешней мелочи, но производитель рекомендует не превышать нагрузку 300 мА — это именно рекомендация по датащиту, не абсолютный предел чипа, но превышать её не стоит.
Характеристики по datasheet
| Параметр | Значение |
|---|---|
| Процессор | 2× ARM Cortex-M0+, до 133 МГц |
| SRAM | 264 КБ, 6 независимых банков |
| Flash | 2 МБ (Winbond W25Q16JV, внешний чип по QSPI) |
| GPIO | 26 выведенных линий из 30 на чипе, фиксированные 3,3 В, НЕ 5В-толерантны |
| АЦП | 12 бит, 500 ksps, GPIO26–28 (+ внутренний канал ADC3 на VSYS/3) |
| Периферия | 2×UART, 2×I2C, 2×SPI, 16×PWM, 2 блока PIO по 8 state machines |
| USB | USB 1.1 controller/PHY, режимы device и host |
| Питание VSYS | 1,8–5,5 В (встроенный buck-boost SMPS → 3,3 В) |
| Питание VBUS | 5 В ±10% от USB-разъёма |
| Лимит на 3V3-выход | рекомендовано не более 300 мА нагрузки |
| Ток в DORMANT | около 0,8–1,4 мА по VBUS @5В (из таблиц datasheet) |
| Размер платы | 51×21 мм, 40 пинов, шаг 2,54 мм (DIP-совместимый) |
| Рабочая температура | −20…+85 °C (с учётом самонагрева) |
Подключение к Arduino и ESP32
Pico не заменяет Arduino в проекте — он скорее отдельный узел, который ставят рядом или вместо него. Для датчиков на 3,3 В (I2C-дисплеи, большинство современных модулей) GPIO подключаются напрямую, как на ESP32. Если нужно завести на Pico сигнал с 5-вольтовой логики Arduino Uno — между выходом Arduino и входом Pico ставят делитель напряжения или преобразователь уровня (74HC4050 или аналог); в обратную сторону делитель не нужен — 3,3 В Arduino Uno воспринимает как логическую единицу.
Схема минимального запуска: VSYS Pico — на 5 В от USB-блока питания или батарейного модуля (в пределах 1,8–5,5 В), GND — общий с остальной схемой, GPIO для датчика — через делитель, если источник сигнала 5-вольтовый.
// MicroPython для Raspberry Pi Pico: мигаем встроенным светодиодом
// и читаем аналоговый датчик на GPIO26 (ADC0).
// Важно: напряжение на GPIO26 не должно превышать 3,3 В.
from machine import Pin, ADC
import time
led = Pin(25, Pin.OUT) # встроенный LED подключён именно к GPIO25
sensor = ADC(Pin(26)) # GPIO26 = ADC0, диапазон 0-3,3 В
while True:
raw = sensor.read_u16() # 0..65535
voltage = raw * 3.3 / 65535 # пересчёт в вольты
print("ADC0:", round(voltage, 3), "V")
led.toggle()
time.sleep(0.5)
Частые ошибки
- Подают 5 В прямо на GPIO. Самая частая причина убитых Pico. Любой сигнал от Arduino Uno, старого датчика или реле на 5 В идёт через делитель или level shifter.
- Путают VSYS и 3V3. VSYS — вход для внешнего питания (1,8–5,5 В), 3V3 — выход встроенного стабилизатора: питание на него подавать нельзя, можно только брать нагрузку до 300 мА.
- Ищут питание на GPIO23–25 и 29. Эти линии не выведены на разъём — заняты управлением SMPS, светодиодом и измерением VSYS/3.
- Ждут от Pico Wi-Fi «из коробки». У обычного Pico на RP2040 беспроводного модуля нет — для Wi-Fi/BLE нужна версия Pico W с чипом CYW43439.
- Загружают прошивку не в BOOTSEL-режиме. Чтобы плата появилась как флешка для записи .uf2, нужно держать кнопку BOOTSEL при подключении USB — иначе Pico стартует в обычном режиме и диск не монтируется.
Когда брать Pico, а когда Arduino или ESP32
Для PIO-трюков (программный VGA, нестандартные протоколы) или когда нужны два ядра и много SRAM за несколько долларов — Pico выигрывает у классической Arduino Uno или Nano по производительности. Для IoT-проекта с Wi-Fi из коробки проще взять ESP32 или Pico W. А для простого учебного старта без непривычного MicroPython классическая Arduino с её IDE и готовыми примерами удобнее новичку.
Информация собрана из открытых источников и паспортов производителей и не является истиной в последней инстанции. Характеристики, распиновку и совместимость проверяйте по документации конкретной партии модуля перед покупкой и подключением.