Raspberry Pi Pico: инструкция, примеры использования и документация

Используйте платформу Raspberry Pi Pico для создания электронных гаджетов, метеостанций, роботов и других изобретений. Плата программируется на языке MicroPython или C++ и отлично подойдёт как начинающим мейкерам, так и опытным разработчикам.

Платформа Raspberry Pi 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.

Подключение и настройка

  1. По умолчанию среда Arduino IDE настроена только на AVR-платы. Для работы с платформой Raspberry Pi Pico — добавьте в менеджере плат поддержку платформ Arduino Mbed OS RP2040 Boards.
  2. В Arduino IDE выберите плату Raspberry Pi Pico: Инструменты Плата Arduino Mbed OS RP2040 Boards Raspberry Pi Pico
  3. В Arduino IDE выберите COM-порт: Инструменты Порт COMx, где x — номер текущего порта.
  4. Это значит всё получилось и можно смело переходить к примерам работы.

Примеры работы

Рассмотрим несколько примеров работы программирования Pico на C++ через Arduino IDE.

Маячок

Для начала мигнём встроенным светодиодом LED на 25 пине.

Код для 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() {
}

После прошивки управляющей платформы, на дисплее отобразится приветствующий текст.

Запись загрузчика

  1. Перетяните файл с прошивкой методом Drag-and-drop в устройство Flash-накопителя с именем RPI-RP2.
  2. Переподключите питание на плате.

Режимы загрузки

Raspberry Pi Pico поддерживает два метода загрузки: штатный режим и режим загрузчика.

Штатный режим

Платформа загружается с внешней Flash-памяти, распаянной на плате Raspberry Pi Pico. В диспетчере устройств OS Windows плата отображается как виртуальный COM-порт с именем Устройство с последовательным интерфейсом USB.

Активация режима происходит простым подключением плате по USB.

Режим загрузчика

Платформа загружается с внутренней памяти микроконтроллера RP2040. В диспетчере устройств OS Windows плата отображается как съёмный накопитель с именем RPI-RP2. Режим служит для загрузки прошивки в формате UF2 простым перемещением файла с одного носителя на другой.

Активация режима происходит с помощью кнопки BOOTSEL:

  1. Зажмите кнопку BOOTSEL.
  2. Подключите плату к компьютеру по USB.
  3. Отпустите кнопку 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 пине микроконтроллера. При задании значения высокого уровня светодиод включается, при низком – выключается.

Преобразователь напряжения

На плате расположен универсальный преобразователь питания RT6150-33GQW, который при низком входном напряжении поднимет питание до 3,3 вольт, а при высоком — понизит до 3,3 вольт. В итоге вы можете использовать широкий выбор источников питания.

Кнопка BOOTSEL

На плате Pi Pico расположена кнопка, которая служит для перевода платформы в режим загрузчика.

Распиновка

Принципиальная схема

Габаритные чертежи

Размеры Pico (без ног)

Размеры Pico (с ногами)

Характеристики

  • Микроконтроллер: RP2040
  • Ядро: 2× ARM Cortex-M0+ (32 бита)
  • Тактовая частота: 133 МГц
  • Flash-память: 2 МБ
  • SRAM-память: 264 КБ
  • Пинов ввода-вывода всего: 26
  • Контакты с АЦП: 3
  • Разрядность АЦП: 12 бит
  • Контакты с ШИМ: 16
  • Разрядность ШИМ:
  • Каналы DMA: 12
  • Контакты с программируемым I/O: 8
  • Аппаратные интерфейсы:
    • 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 мм

Ресурсы

Полезные статьи

Документация