Raspberry Pi Pico: инструкция, программирование на MicroPython / C++ и документация
Используйте платформу Raspberry Pi Pico для создания электронных гаджетов, метеостанций, роботов и других изобретений. Плата программируется на языке MicroPython или C++ и отлично подойдёт как начинающим мейкерам, так и опытным разработчикам.
Платформа Raspberry Pi Pico поставляется в двух вариантах исполнения:
- Плата Pico с ножками пригодится для разработки и прототипирования устройств на макетной плате.
- Плата Pico без ножек для установки в самых труднодоступных местах.
Программирование на MicroPython
Рассмотрим программирование Raspberry Pi Pico на языке MicroPython с помощью ПК на OS Windows.
Подключение и настройка
- На этом всё, можно смело переходить к примерам работы.
Примеры работы
Рассмотрим несколько примеров работы программирования Pico на MicroPython.
Маячок
Для начала мигнём встроенным светодиодом LED
на 25
пине.
Что понадобится
Код для MicroPython
- raspberry-pi-pico-example-micropython-blink.py
# Библиотека для работы с пинами ввода-вывода from machine import Pin # Библиотека для работы с временем import time # Светодиод в режим выхода на 25 пине led = Pin(25, Pin.OUT) while True: # Зажигаем светодиод led.value(1) # Ждём 1 секунду time.sleep(1) # Гасим светодиод led.value(0) # Ждём 1 секунду time.sleep(1)
После запуска скрипта, светодиод начнёт мигать раз в секунду.
Гирлянда
Главная фишка Пико — возможность программируемого ввода-вывода через блоки PIO, на которых можно реализовать произвольный интерфейс. В следующем примере заставим Pico рулить светодиодами WS2812.
Что понадобится
Схема устройства
Код для MicroPython
Для работы примера скачайте и установите библиотеку MicroPython Neopixel Pi Pico.
- raspberry-pi-pico-example-micropython-ws2812-rainbow.py
# Библиотека для работы с временем import time # Библиотека для работы со светодиодами WS2812 from neopixel import Neopixel # Номер пина, к которому подключена матрица WS2812 led_pin = 11 # Количество светодиодов led_count = 16 # Создаём объект для работы со светодиодной матрицей strip = Neopixel(led_count, 0, led_pin, "GRB") # Создаём фиксированные цвета red = (255, 0, 0) green = (0, 255, 0) blue = (0, 0, 255) off = (0, 0, 0) colors = (red, green, blue, off) # Устанавливаем яркость светодиодов # Диапазон значений от 0 до 255 strip.brightness(40) while True: # Перебираем цвета for color in colors: # Перебираем светодиоды for i in range(led_count): #Выставляем цвет светодиода strip.set_pixel(i, color) # Ждём 100 мс time.sleep(0.1) # Обновляем изменения strip.show()
После прошивки управляющей платформы, вы увидите заполнение по очереди каждого светодиода матрицы из красного, зелёного и синего цветов.
Вывод информации на дисплей
Что понадобится
Схема устройства
Код для MicroPython
Для работы примера скачайте и установите библиотеку MicroPython ST7032
- raspberry-pi-pico-example-micropython-lcd-1602.py
# Библиотека для работы с пинами ввода-вывода from machine import Pin, I2C # Библиотека для работы дисплеем на чипе ST7032 from ST7032 import ST7032 # Номер пина, к которому подключена подсветка дисплея lcd_led_pin = 11 # Пин подсветки в режим выхода lcd_led = Pin(lcd_led_pin, Pin.OUT) # Включаем подсветку lcd_led.value(1) # Создаём I²C соединение i2c=I2C(0, scl=Pin(1), sda=Pin(0), freq=100000) # Создаём объект для работы с дисплеем lcd = ST7032(i2c) # Очищаем экран lcd.clear() # Устанавливаем контрастность lcd.setContrast(15) # Устанавливаем курсор в колонку 0, строку 0 lcd.setCursor(0, 0) lcd.print('Hello, world!') # Устанавливаем курсор в колонку 0, строку 1 lcd.setCursor(0, 1) lcd.print('Pico chip RP2040')
После прошивки управляющей платформы, на дисплее отобразится приветствующий текст.
Программирование на С++ через Arduino IDE
Рассмотрим программирование Raspberry Pi Pico на языке C++ в среде Arduino IDE с помощью ПК на OS Windows.
Подключение и настройка
- По умолчанию среда Arduino IDE настроена только на AVR-платы. Для работы с платформой Raspberry Pi Pico — добавьте в менеджере плат поддержку платформ Arduino Mbed OS RP2040 Boards.
- В Arduino IDE выберите плату Raspberry Pi Pico:
- В Arduino IDE выберите COM-порт:, где — номер текущего порта.
- Это значит всё получилось и можно смело переходить к примерам работы.
Примеры работы
Рассмотрим несколько примеров работы программирования Pico на C++ через Arduino IDE.
Маячок
Для начала мигнём встроенным светодиодом
на пине.Код для Arduino
- raspberry-pi-pico-example-arduino-blink.ino
// Даём имя встроенному светодиоду на 25 пине constexpr uint8_t LED_PIN = 25; void setup() { // Настраиваем пин со светодиодом в режим выхода pinMode(LED_PIN, OUTPUT); } void loop() { // Зажигаем светодиод digitalWrite(LED_PIN, HIGH); // Ждём 1 секунду delay(1000); // Гасим светодиод digitalWrite(LED_PIN, LOW); // Ждём 1 секунду delay(1000); }
После прошивки скетча, светодиод начнёт мигать раз в секунду.
Гирлянда
Главная фишка Пико — возможность программируемого ввода-вывода через блоки PIO, на которых можно реализовать произвольный интерфейс. В следующем примере заставим Pico рулить светодиодами WS2812.
Что понадобится
Схема устройства
Код для Arduino
Для работы примера скачайте и установите библиотеку Adafruit NeoPixel.
- raspberry-pi-pico-example-arduino-ws2812-rainbow.ino
// Библиотека для работы со светодиодами WS2812 #include <Adafruit_NeoPixel.h> // Номер пина, к которому подключена матрица WS2812 constexpr uint8_t LED_PIN = 11; // Количество светодиодов в матрице constexpr uint8_t LED_COUNT = 16; // Создаём объект для работы со светодиодной матрицей Adafruit_NeoPixel matrix = Adafruit_NeoPixel(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800); void setup() { // Инициализация матрицы matrix.begin(); // Устанавливаем яркость светодиодов // Диапазон значений от 0 до 255 matrix.setBrightness(40); } void loop() { // Заполняем матрицу по сегментам «бегущий огонь» красного цвета colorWipe(matrix.Color(255, 0, 0), 100); // Заполняем матрицу по сегментам «бегущий огонь» зелёного цвета colorWipe(matrix.Color(0, 255, 0), 100); // Заполняем матрицу по сегментам «бегущий огонь» синего цвета colorWipe(matrix.Color(0, 0, 255), 100); // Гасим матрицу по сегментам «бегущая тень» colorWipe(matrix.Color(0, 0, 0), 100); } // Функция заполнения каждого сегмента void colorWipe(uint32_t c, uint8_t wait) { for (uint16_t i = 0; i < matrix.numPixels(); i++) { // Заполняем текущий сегмент выбранным цветом matrix.setPixelColor(i, c); matrix.show(); // Ждём delay(wait); } }
После прошивки управляющей платформы, вы увидите заполнение по очереди каждого светодиода матрицы из красного, зелёного и синего цветов.
Вывод информации на дисплей
Что понадобится
Схема устройства
Код для Arduino
Для работы примера скачайте и установите библиотеку TroykaTextLCD.
- raspberry-pi-pico-example-arduino-lcd-1602.ino
// Библиотека для работы с дисплеем #include <TroykaTextLCD.h> // Номер пина, к которому подключена подсветка дисплея constexpr uint8_t LCD_LED_PIN = 15; // Создаём объект I²C и передаём ему номера пинов SDA и SCL MbedI2C i2c(0, 1); // Создаём объект для работы с дисплеем // передаём ему объект I²C, I²C-адрес и пин подсветки TroykaTextLCD lcd(&i2c, 0x3E, LCD_LED_PIN); void setup() { // Устанавливаем количество столбцов и строк экрана lcd.begin(16, 2); // Устанавливаем контрастность в диапазоне от 0 до 63 lcd.setContrast(45); // Устанавливаем яркость в диапазоне от 0 до 255 lcd.setBrightness(255); // Устанавливаем курсор в колонку 0, строку 0 lcd.setCursor(0, 0); // Печатаем первую строку lcd.print("Hello, world!"); // Устанавливаем курсор в колонку 0, строку 1 lcd.setCursor(0, 1); // Печатаем вторую строку lcd.print("Pico chip RP2040"); } void loop() { }
После прошивки управляющей платформы, на дисплее отобразится приветствующий текст.
Запись загрузчика
- Перетяните файл с прошивкой методом
Drag-and-drop
в устройство Flash-накопителя с именемRPI-RP2
. - Переподключите питание на плате.
Режимы загрузки
Raspberry Pi Pico поддерживает два метода загрузки: штатный режим и режим загрузчика.
Штатный режим
Платформа загружается с внешней Flash-памяти, распаянной на плате Raspberry Pi Pico. В диспетчере устройств OS Windows плата отображается как виртуальный COM-порт с именем Устройство с последовательным интерфейсом USB
.
Активация режима происходит простым подключением плате по USB.
Режим загрузчика
Платформа загружается с внутренней памяти микроконтроллера RP2040. В диспетчере устройств OS Windows плата отображается как съёмный накопитель с именем RPI-RP2
. Режим служит для загрузки прошивки в формате UF2
простым перемещением файла с одного носителя на другой.
Активация режима происходит с помощью кнопки BOOTSEL:
- Зажмите кнопку
BOOTSEL
. - Подключите плату к компьютеру по USB.
- Отпустите кнопку
BOOTSEL
.
Элементы платы
Микроконтроллер RP2040
Платформа Pi Pico выполнена на чипе собственной разработки RP2040 от компании Raspberry Pi Foundation. Кристалл содержит двухъядерный процессор на архитектуре ARM Cortex M0+ с тактовой частотой до 133 МГц. На RP2040 также расположились часы реального времени, датчик температуры и оперативная память на 264 КБ.
Внешняя Flash-память
Внешняя Flash-память распаяна на отдельном чипе W25Q16JVUXIQ объёмом 2 МБ.
Порт micro-USB
Разъём USB Micro предназначен для прошивки и питания платформы Raspberry Pi Pico. Для подключения к ПК понадобится кабель USB (A — Micro USB).
Светодиодная индикация
Пользовательский светодиод на 25
пине микроконтроллера. При задании значения высокого уровня светодиод включается, при низком – выключается.
Преобразователь напряжения
На плате расположен универсальный преобразователь питания SMPS (Switch Mode Power Supply) на чипе RT6150-33GQW, который обеспечивает питание микроконтроллера RP2040 и другой логики платы.
Диапазон входного напряжения — от 1,8 до 5,5 вольт: при низком входном напряжении регулятор поднимет питание до 3,3 вольт, а при высоком — понизит до 3,3 вольт. Максимальный выходной ток 800 мА. Выходное напряжение с регулятора можно снять с пина 3V3(OUT)
.
Кнопка BOOTSEL
На плате Pi Pico расположена кнопка, которая служит для перевода платформы в режим загрузчика.
Распиновка
Пины питания
Имя пина | Описание |
---|---|
VBUS | Входной пин для внешнего источника питания с напряжением ровно 5 В. Дублирует питание от USB. Линия VBUS связана с линией VSYS через обратный диод. VBUS = 5 В → VSYS = 5 В, VSYS = 5 В → VBUS ≠ 5 В. |
VSYS | Входной пин для внешнего источника питания с напряжением от 1,8 до 5,5 В. Питание поступает на универсальный DC-DC преобразователь, который при низком входном напряжении поднимет питание до 3,3 вольт, а при высоком — понизит до 3,3 вольт. Максимальный выходной ток 800 мА. |
3V3_EN | Входной пин для управления DC-DC преобразователем. При высоком уровне регулятор включён и соотвествено плата включена, при низком уровне регулятор отключён и плата выключена. По умолчанию 3V3_EN подтянут через резистор к линии питания VSYS, для отключения регулятора замкните контакт 3V3_EN на низкий уровень. |
3V3_OUT | Выходной пин с DC-DC преобразователя с напряжением 3,3 В и максимальным током 800 мА. |
ADC_REF | Входной пин для внешнего опорного напряжения АЦП, относительно которого происходят аналоговые измерения. |
GND | Общая земля. |
AGND | Общая аналоговая земля, которая является эталоном при использовании АЦП. |
Пины ввода-вывода
Категория пинов | Количество пинов | Используемые пины | Описание |
---|---|---|---|
Пины ввода-вывода GPIO | 26 | 0 – 22, 26 – 28 | Пины могут быть настроены как вход или выход. Логический уровень единицы — 3,3 В, нуля — 0 В. На вход можно подавать сигнал до 5 В. |
ШИМ / PWM | 26 (16 одновременно) | 0 – 22, 26 – 28 | Позволяют выводить аналоговое напряжение в виде ШИМ-сигнала. Разрядность ШИМ — 16 бит. |
АЦП / ADC | 3 | 26–28 | Позволяют представить аналоговое напряжение в цифровом виде. Диапазон входного напряжения — от 0 до 3,3 В. Разрядность АЦП — 12 бит. |
Интерфейс | Количество / Название | Используемые пины | Описание |
---|---|---|---|
I²C | I²C0 | SDA0 — 4 (0, 8, 12, 16, 20, 24, 28) SCL0 — 5 (1, 9, 13, 17, 21, 25, 29) | Для общения с периферией по интерфейсу I²C. |
I²C1 | SDA1 — 26 (2, 6, 10, 14, 18, 22) SCL1 — 27 (3, 7, 11, 15, 19, 23, 27) |
||
SPI | SPI0 | SCK0 — 18 (2, 6, 22) TX0 — 19 (3, 7, 23) RX0 — 16 (0, 4, 20) CS0 — 17 (1, 5, 21) | Для общения с периферией по интерфейсу SPI. |
SPI1 | SCK1 — 14 (10, 26) TX1 — 15 (11, 27) RX1 — 12 (8, 24, 28) CS1 — 13 (9, 25, 29) |
||
Serial / UART | UART0 | RX0 — 1 (13, 17, 29) TX0 — 0 (12, 16, 28) | Для общения с периферией по интерфейсу UART. |
UART1 | RX1 — 9 (5, 21, 25) TX1 — 8 (4, 20, 24) |
Принципиальная схема
Габаритные чертежи
Размеры Pico (без ног)
Размеры Pico (с ногами)
Характеристики
- Микроконтроллер: RP2040
- Ядро: 2× ARM Cortex-M0+ (32 бита)
- Тактовая частота: 133 МГц
- Flash-память: 2 МБ
- SRAM-память: 264 КБ
- Контакты ввода-вывода: 26
- Контакты с АЦП: 3
- Разрядность АЦП: 12 бит
- Контакты с ШИМ: 16
- Разрядность ШИМ: 16 бит
- Контакты с программируемым PIO: 8
- Каналы DMA: 12
- Аппаратные интерфейсы:
- 2× UART
- 2× I²C
- 2× SPI
- 2× PIO
- Встроенные периферийные устройства:
- Часы реального времени (RTC)
- Датчик температуры
- Напряжение логических уровней: 3,3 В
- Входное напряжение питания:
- Через USB: 5 В
- Через пин VSYS: 1,8–5,5 В
- Габариты платы (без ног): 52,7×21×3,6 мм
- Габариты платы (с ногами): 52,7×21×12,3 мм