Используйте платформу Raspberry Pi Pico W для создания электронных гаджетов, метеостанций, роботов и других изобретений. Плата программируется на языке MicroPython или C++ и отлично подойдёт как начинающим мейкерам, так и опытным разработчикам.
Платформа Raspberry Pi Pico W поставляется в двух вариантах исполнения:
Рассмотрим программирование Raspberry Pi Pico W на языке MicroPython с помощью ПК на OS Windows.
Рассмотрим несколько примеров работы программирования Pico Wi-Fi на MicroPython.
Для начала мигнём встроенным светодиодом LED
на плате.
В Raspberry Pi Pico W встроенный светодиод подключен не к микроконтроллеру RP2040, а к чипу беспроводной связи CYW43439 к пину WL_GPIO0
. Для удобного доступа к управлению светодиодом используйте обозначение LED
.
# Библиотека для работы с пинами ввода-вывода from machine import Pin # Библиотека для работы с временем import time # Светодиод в режим выхода # на чипе беспроводной связи CYW43439 на пине 0 led = Pin('LED', Pin.OUT) while True: # Зажигаем светодиод led.value(1) # Ждём 1 секунду time.sleep(1) # Гасим светодиод led.value(0) # Ждём 1 секунду time.sleep(1)
После запуска скрипта, светодиод начнёт мигать раз в секунду.
Главная фишка Пико — возможность программируемого ввода-вывода через блоки PIO, на которых можно реализовать произвольный интерфейс. В следующем примере заставим Pico рулить светодиодами WS2812.
Для работы примера скачайте и установите библиотеку MicroPython Neopixel Pi Pico.
# Библиотека для работы с временем 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 ST7032
# Библиотека для работы с пинами ввода-вывода 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')
После прошивки управляющей платформы, на дисплее отобразится приветствующий текст.
Рассмотрим программирование Raspberry Pi Pico W на языке C++ в среде Arduino IDE с помощью ПК на OS Windows.
На текущий момент официальное ядро Arduino Mbed OS RP2040 Boards подерживает только плату Raspberry Pi Pico, которая выпускается без модуля CYW43439 с поддержкой Wi-Fi и Bluetooth. Это накладывает ограничения на использования из среды Arduino IDE скетчи с использованием беспроводных технологий, а также управления встроенным светодиодом, который также подключён чипу CYW43439. Все примеры ниже будут использовать плату без техноголий Wi-Fi и Bluetooth.
Мы в компании Амперка уверены, что в будущем разработчики Arduino добавят поддержку Raspberry Pi Pico W в ядро. Для самых пытливых советуем использовать сторонее ядро arduino-pico с полной поддержкой платы Raspberry Pi W.
Рассмотрим несколько примеров работы программирования Pico на C++ через Arduino IDE.
Для начала подключим светодиод к 15
пину платы Raspbeery Pi Pico W и заставим его мигать.
// Даём имя встроенному светодиоду на 15 пине constexpr uint8_t LED_PIN = 15; void setup() { // Настраиваем пин со светодиодом в режим выхода pinMode(LED_PIN, OUTPUT); } void loop() { // Зажигаем светодиод digitalWrite(LED_PIN, HIGH); // Ждём 1 секунду delay(1000); // Гасим светодиод digitalWrite(LED_PIN, LOW); // Ждём 1 секунду delay(1000); }
После прошивки скетча, светодиод начнёт мигать раз в секунду.
Интересная фишка Pico W — возможность программируемого ввода-вывода через блоки PIO, на которых можно реализовать произвольный интерфейс. В следующем примере заставим Pico рулить светодиодами WS2812.
Для работы примера скачайте и установите библиотеку Adafruit NeoPixel.
// Библиотека для работы со светодиодами 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); } }
После прошивки управляющей платформы, вы увидите заполнение по очереди каждого светодиода матрицы из красного, зелёного и синего цветов.
Для работы примера скачайте и установите библиотеку TroykaTextLCD.
// Библиотека для работы с дисплеем #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
.BOOTSEL
.
Платформа Pi Pico Wi-Fi выполнена на чипе собственной разработки RP2040 от компании Raspberry Pi Foundation. Кристалл содержит двухъядерный процессор на архитектуре ARM Cortex M0+ с тактовой частотой до 133 МГц. На RP2040 также расположились часы реального времени, датчик температуры и оперативная память на 264 КБ.
За беспроводную передачу данных отвечает чип CYW43439 для обмена данными по воздуху в диапазоне 2,4 ГГц по Wi-Fi и Bluetooth. Чип CYW43439 связан с основным контроллером RP2040 по интерфейсу SPI.
Внешняя Flash-память распаяная на отдельном чипе W25Q16JVUXIQ объёмом 2 МБ.
Разъём USB Micro предназначен для прошивки и питания платформы Raspberry Pi Pico W. Для подключения к ПК понадобится кабель USB (A — Micro USB).
Пользовательский светодиод на 0
пине чипа с CYW43439. При задании значения высокого уровня светодиод включается, при низком – выключается.
Не путайте:
25
микроконтролера RP2040.0
чипа с CYW43439.На плате расположен универсальный преобразователь питания SMPS (Switch Mode Power Supply) на чипе RT6150-33GQW, который обеспечивает питание микроконтроллера RP2040 и другой логики платы.
Диапазон входного напряжения — от 1,8 до 5,5 вольт: при низком входном напряжении регулятор поднимет питание до 3,3 вольт, а при высоком — понизит до 3,3 вольт. Максимальный выходной ток 800 мА. Выходное напряжение с регулятора можно снять с пина 3V3(OUT)
.
На плате 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) |