RP2350-Matrix 使用教程

产品概述

RP2350-Matrix 是微雪(Waveshare)设计的低成本,高性能的微控制器开发板。在较小的板型下,使用 RP2350 作为主控,板载了六轴传感器 (三轴加速度计与三轴陀螺仪)和 8×8 RGB LED 矩阵,集成 16MB 的片上 Flash,便于开发和集成到产品中。

产品特性

  • 采用 Raspberry Pi 设计的 RP2350A 微控制器芯片
  • 独特的双核、双架构,搭载了双核 ARM Cortex-M33 处理器和双核 Hazard3 RISC-V 处理器,时钟运行频率均高达 150MHz,支持用户在两种架构间灵活切换
  • 内置 520KB 的 SRAM 和 16MB 的片上 Flash
  • 采用 Type-C 接口,无需纠结正反插
  • 板载 QMI8658 六轴惯性测量单元 (3 轴加速度、3 轴陀螺仪)
  • 板载 8 × 8 RGB LED 矩阵,可显示炫酷灯光效果
  • 引出 Dout 引脚,可连接扩展的 RGB 矩阵
  • USB1.1 主机和从设备支持
  • 支持低功耗睡眠和休眠模式
  • 可通过 USB 识别为大容量存储器进行拖放式下载程序
  • 引出 25 个多功能的 GPIO 引脚
  • 1 个 HSTX,2 个 SPI,2 个 I2C,2 个 UART,4 个 12 位 ADC,以及 16 个可控 PWM 通道
  • 精确的片上时钟和定时器
  • 温度传感器
  • 片上加速浮点库
  • 12 个可编程 I/O (PIO) 状态机,用于自定义外设支持

引脚分布


尺寸图


注意事项

  • RGB LED矩阵全亮最高亮度时,电流约为900ma,建议使用1A以上的电源适配器
  • 全亮RGB LED矩阵时,避免直射眼睛,不要触摸RGB LED灯珠
  • 不建议长期全亮RGB LED矩阵,其会导致LED积热导致高温,进而导致灯珠寿命减少或者烧毁
  • 全亮RGB LED矩阵建议参考 03-TempCtrl 示例,根据核心温度智能控制亮度,可有效防止开发板温度过高

Pico快速上手

固件下载


MicroPython固件下载



C_Blink固件下载


基础介绍

Raspberry Pi Pico的基础介绍

MicroPython系列

安装Thonny IDE

为了方便在电脑上使用MicroPython开发Pico/Pico2板,建议下载Thonny IDE


  • 配置Micrpython环境及选择Pico/Pico2端口
    • 先将Pico/Pico2接入电脑,左键点击Thonny右下角的配置环境选项--》选择configture interpreter
    • 在弹出的窗口栏中选择MicroPython(Raspberry Pi Pico),同时选择对应的端口



烧录固件

  • 点击ok后返回到Thonny主界面,下载对应的固件库并烧录到设备中,然后点击停止按钮,在Shell窗口中即可显示当前使用到的环境
  • 注意:烧录Micropython官方提供的Pico2固件可能导致无法识别设备,请使用下方或程序包中的固件
  • Pico/Pico2在windows下载固件库方法: 按住BOOT键后连接电脑后,松开BOOT键,电脑会出现一个可移动磁盘,将固件库复制进去即可
  • RP2040/RP2350在windows下载固件库方法: 连接电脑后,同时按下BOOT键跟RESET键,先松开RESET键再松开BOOT键,电脑会出现一个可移动磁盘,将固件库复制进去即可(用Pico/Pico2的方式也可以)


讲解视频

【MicroPython】machine.Pin类函数详解
【MicroPython】machine.PWM类函数详解
【MicroPython】machine.ADC类函数详解
【MicroPython】machine.UART类函数详解
【MicroPython】machine.I2C类函数详解
【MicroPython】machine.SPI类函数详解
【MicroPython】rp2.StateMachine类函数详解

C/C++系列

对于 C/C++,建议使用 Pico VSCode 进行开发,这是一款 Microsoft Visual Studio Code 扩展,旨在让您在为 Raspberry Pi Pico 系列开发板创建、开发和调试项目时更加轻松。无论您是初学者还是经验丰富的专业人士,此工具都可以帮助您自信而轻松地进行 Pico 开发。下面我们介绍如何安装该扩展并使用。

安装VSCode

  1. 首先,点击下载 pico-vscode 程序包,解压并打开程序包,双击安装 VSCode

    注意:如果已安装 vscode 注意检查版本是否为 v1.87.0 或更高版本


安装扩展

  1. 点击扩展,选择从 VSIX 安装

  2. 选择 vsix 后缀的软件包,点击安装

  3. 随后 vscode 会自动安装 raspberry-pi-pico 及其依赖扩展,可以点击刷新查看安装进度

  4. 右下角显示完成安装,关闭 vscode

配置扩展

  1. 打开目录 C:\Users\用户名,将整个 .pico-sdk 拷贝至该目录

  2. 拷贝完成

  3. 打开 vscode,对 Raspberry Pi Pico 扩展中各个路径进行配置

    配置如下:
    Cmake Path:
    ${HOME}/.pico-sdk/cmake/v3.28.6/bin/cmake.exe
    
    Git Path:
    ${HOME}/.pico-sdk/git/cmd/git.exe    
    
    Ninja Path:
    ${HOME}/.pico-sdk/ninja/v1.12.1/ninja.exe
    
    Python3 Path:
    ${HOME}/.pico-sdk/python/3.12.1/python.exe             
    

新建工程

  1. 配置完成,测试新建工程,输入工程名、选择路径后点击 Creat 创建工程
    测试官方示例,可以点击工程名旁的 Example 进行选择

  2. 创建工程成功

编译工程

  1. 选择SDK版本

  2. 选择 Yes 进行高级配置

  3. 选择交叉编译链,13.2.Rel1 适用 ARM 核,RISCV.13.3 适用 RISCV 核,这里根据您的需求任意选择其中一个即可

  4. CMake 版本选择 Default(前面配置的路径)

  5. Ninja 版本选择 Default

  6. 选择开发板

  7. 点击 Complie 进行编译

  8. 成功编译出 uf2 格式文件即可

烧录固件

这里提供两种方法烧录固件

  1. 使用pico-vscode插件烧录固件
    将开发板连接到电脑上,点击Run直接烧录固件

  2. 手动烧录固件
    1.按住Boot按键
    2.将开发板连接到电脑上     
    3.然后会电脑会将开发板识别成一个U盘设备
    4.将.uf2文件复制到U盘中,设备就会自动重启,程序烧录成功
    

导入工程

  1. 选择工程目录,导入工程

  2. 导入工程的 Cmake 文件不能有中文(包括注释),否则可能导致导入失败
  3. 导入自己的工程需要在 Cmake 文件中加一行代码,才能正常切换 pico 和 pico2,否则即使选择 pico2,编译得到的固件仍是适用于 pico 的

    set(PICO_BOARD pico CACHE STRING "Board type")
    

更新扩展

  1. 离线包中的扩展版本为0.15.2,安装完成后,您也可以选择更新至最新版本

Arduino IDE 系列

安装Arduino IDE

  1. 首先到Arduino官网下载Arduino IDE的安装包。

  2. 这里选择仅下载就可以了。

  3. 下载完成后,点击安装。

    注意:安装过程中会提示你安装驱动,我们点击安装即可

Arduino IDE中文界面

  1. 第一次安装完成后,打开Arduino IDE全是英文界面,我们可以在File>Preferences切换成简体中文。

  2. 在Language里面选择简体中文,点击OK。

在Arduino IDE中安装Arduino-Pico Core

  1. 打开Arduino IDE,点击左上角的文件,选择首选项

  2. 在附加开发板管理器网址中添加如下链接,然后点击OK
    该链接已包含RP2040、RP2350等版型,最新版型文件请访问arduino-pico获取
    https://github.com/earlephilhower/arduino-pico/releases/download/4.5.2/package_rp2040_index.json


    注意:如果您已经有ESP32板URL,您可以使用逗号分隔 URL,如下所示:

    https://dl.espressif.com/dl/package_esp32_index.json,https://github.com/earlephilhower/arduino-pico/releases/download/4.5.2/package_rp2040_index.json
  3. 点击工具>开发板>开发板管理器>搜索pico,由于我的电脑已经安装过了,所以显示已安装


国内用户
  • 因为网络原因,国内用户连接github并不稳定,我们另外提供了一份安装包,可以跳过在线的过程
  • 安装包适用于RP2040、RP2350
  • 若已经成功配置了pico环境,可以直接跳过本章
  1. 下载rp2040压缩包,将解压的rp2040文件夹复制到如下路径下
    C:\Users\[username]\AppData\Local\Arduino15\packages


    注意:将里面用户名:[username]替换成自己的用户名

第一次上传程序

  1. 按住Pico板上的BOOTSET按键,将pico通过Micro USB线接到电脑的USB接口,待电脑识别出一个可移动硬盘(RPI-RP2)后,松开按键。

  2. 下载程序,打开arduino\PWM\D1-LED路径下的D1-LED.ino
  3. 点击工具>端口,记住已有的COM,不需要点击这个COM(不同电脑显示的COM不一样,记住自己电脑上已有的COM)

  4. 用USB线将驱动板和计算机连接起来,再点击工具>端口,第一次连接选择uf2 Board,上传完成后,再次连接就会多出一个COM口

  5. 点击工具>开发板>Raspberry Pi Pico>对应版型(Raspberry Pi Pico、Raspberry Pi Pico 2等)


  6. 设置完成后,点击向右箭头将上传程序

  • 如果期间遇到了问题,需要重新安装或者更换Arduino IDE版本时,卸载Arduino IDE需要卸载干净,卸载软件后需要手动删除C:\Users\[name]\AppData\Local\Arduino15这个文件夹内的所有内容(需要显示隐藏文件才能看到) 再重新安装

开源例程

MircoPython视频例程(github)
MicroPython固件/Blink例程(C)
树莓派官方C/C++示例程序 (github)
树莓派官方micropython示例程序 (github)
Arduino官方C/C++示例程序 (github)


示例程序

C/C++例程

01-Colorful

【程序说明】


  • 本示例实现了RGB LED矩阵显示渐变色效果

【代码说明】


  • 函数说明
    • WS2812_init():初始化RGB LED控制引脚,并配置相关参数
    • WS2812_show2(uint8_t r, uint8_t g, uint8_t b):根据传入的颜色,刷新所有RGB LED
  • 参数说明
    • WS2812.h文件中,有四个参数可以配置:
      • NUM_LEDS:RGB LED 数量
      • LED_BRIGHTNESS:RGB LED最大亮度
      • WIDTH:RGB LED 矩阵宽度
      • HEIGHT:RGB LED 矩阵高度
  • 逻辑流程
    • 通过设置红、绿、蓝三种颜色分量实现渐变。
      • 红->绿渐变:先将红色分量r设置为最大值,蓝色和绿色分量g、b设置为零。在循环中,让红色分量减小,绿色分量增大,即可实现红到绿的渐变
      • 绿->蓝渐变:先将绿色分量g设置为最大值,红色和蓝色分量r、b设置为零。在循环中,让绿色分量减小,蓝色分量增大,即可实现绿到蓝的渐变
      • 蓝->红渐变:先将蓝色分量b设置为最大值,绿色和红色分量g、r设置为零。在循环中,让蓝色分量减小,红色分量增大,即可实现蓝到红的渐变

02-Game

【程序说明】


  • 本示例实现了控制单个RGB LED朝板子倾斜方向移动

【坐标说明】


  • 程序设置为当 USB 端口朝上时,矩阵的左上角为 (0,0),右下角为 (7,7)。纵向为X轴,正方向与六轴传感器X轴相反。横向为Y轴,正方向与六轴传感器Y轴相同

【代码说明】


  • 函数说明
    • WS2812_init():初始化RGB LED控制引脚,并配置相关参数
    • QMI8658_init():初始化六轴传感器
    • QMI8658_read_xyz():读取六轴传感器数据
    • WS2812_clear():RGB LED数组leds清零
    • WS2812_set_pixel(uint8_t x, uint8_t y, uint8_t r, uint8_t g, uint8_t b):设置(x,y)处 LED 颜色
    • WS2812_show():根据leds数组,刷新RGB LED矩阵
  • 逻辑流程
    • 通过QMI8658_read_xyz获取六轴传感器数据,根据获取的X、Y轴加速度数据控制RGB LED移动。
      • X轴方向移动:根据X轴加速度数据acc[0]判断移动方向。当acc[0]大于移动阈值threshold时,x坐标减小,RGB LED向上移动。当acc[0]小于移动阈值-threshold时,x坐标增大,RGB LED向下移动
      • Y轴方向移动:根据Y轴加速度数据acc[1]判断移动方向。当acc[1]大于移动阈值threshold时,y坐标增大,RGB LED向右移动。当acc[1]小于移动阈值-threshold时,y坐标减小,RGB LED向左移动

03-TempCtrl

【程序说明】


  • 本示例实现了根据核心温度自动控制RGB LED亮度

【安全提示】


  • 1. 初始亮度:设备启动时亮度为 100%,避免 LED 灯直射眼睛
  • 2. 电源要求:全亮最高亮度功耗约为 900mA,请使用额定电流≥1A、输出稳定的 5V 电源
  • 3. 注意事项:LED 表面温度会持续升高至 70°C,操作期间避免身体接触,避免长时间全亮度运行导致灯珠寿命减少

【代码说明】


  • 函数说明
    • WS2812_init():初始化RGB LED控制引脚,并配置相关参数
    • WS2812_show2(uint8_t r, uint8_t g, uint8_t b):根据传入的颜色,刷新所有RGB LED
    • read_onboard_temperature():获取核心温度
  • 逻辑流程
    • 通过read_onboard_temperature()获取核心温度,并根据设定好的温度、亮度数组BRIGHTNESS_LEVELS,控制亮度变化
      • 温度升档:程序启动后初始温度档位为1档,亮度为100%。当核心温度temp大于下一档档温度时,档位升高,亮度降低。
      • 温度降档:随着温度升高,亮度会逐渐降低,亮度足够低时,核心温度temp将缓慢下降。当核心温度temp降低到上一档温度+1℃时,档位降低,亮度升高。

Micropython例程

01-Colorful

【程序说明】


  • 本示例实现了RGB LED矩阵显示渐变色效果

【代码说明】


  • 函数说明
    • LEDController():初始化RGB LED控制引脚,并配置相关参数
    • led_ctrl.show2():根据传入的颜色,刷新所有RGB LED
  • 参数说明
    • WS2812.py文件中,有四个参数可以配置:
      • NUM_LEDS:RGB LED 数量
      • LED_BRIGHTNESS:RGB LED最大亮度
      • WIDTH:RGB LED 矩阵宽度
      • HEIGHT:RGB LED 矩阵高度
  • 逻辑流程
    • 通过设置红、绿、蓝三种颜色分量实现渐变。
      • 红->绿渐变:先将红色分量r设置为最大值,蓝色和绿色分量g、b设置为零。在循环中,让红色分量减小,绿色分量增大,即可实现红到绿的渐变
      • 绿->蓝渐变:先将绿色分量g设置为最大值,红色和蓝色分量r、b设置为零。在循环中,让绿色分量减小,蓝色分量增大,即可实现绿到蓝的渐变
      • 蓝->红渐变:先将蓝色分量b设置为最大值,绿色和红色分量g、r设置为零。在循环中,让蓝色分量减小,红色分量增大,即可实现蓝到红的渐变

02-Game

【程序说明】


  • 本示例实现了控制单个RGB LED朝板子倾斜方向移动

【坐标说明】


  • 程序设置为当 USB 端口朝上时,矩阵的左上角为 (0,0),右下角为 (7,7)。纵向为X轴,正方向与六轴传感器X轴相反。横向为Y轴,正方向与六轴传感器Y轴相同

【代码说明】


  • 函数说明
    • LEDController():初始化RGB LED控制引脚,并配置相关参数
    • QMI8658_init():初始化六轴传感器
    • imu.Read_XYZ():读取六轴传感器数据
    • led_ctrl.clear()):RGB LED数组leds清零
    • led_ctrl.set_pixel():设置(x,y)处 LED 颜色
    • led_ctrl.show():根据leds数组,刷新RGB LED矩阵
  • 逻辑流程
    • 通过imu.Read_XYZ()获取六轴传感器数据,根据获取的X、Y轴加速度数据控制RGB LED移动。
      • X轴方向移动:根据X轴加速度数据xyz[0]判断移动方向。当xyz[0]大于移动阈值threshold时,x坐标减小,RGB LED向上移动。当xyz[0]小于移动阈值-threshold时,x坐标增大,RGB LED向下移动
      • Y轴方向移动:根据Y轴加速度数据xyz[1]判断移动方向。当xyz[1]大于移动阈值threshold时,y坐标增大,RGB LED向右移动。当xyz[1]小于移动阈值-threshold时,y坐标减小,RGB LED向左移动

03-TempCtrl

【程序说明】


  • 本示例实现了根据核心温度自动控制RGB LED亮度

【安全提示】


  • 1. 初始亮度:设备启动时亮度为 100%,避免 LED 灯直射眼睛
  • 2. 电源要求:全亮最高亮度功耗约为 900mA,请使用额定电流≥1A、输出稳定的 5V 电源
  • 3. 注意事项:LED 表面温度会持续升高至 70°C,操作期间避免身体接触,避免长时间全亮度运行导致灯珠寿命减少

【代码说明】


  • 函数说明
    • LEDController():初始化RGB LED控制引脚,并配置相关参数
    • led_ctrl.show2():根据传入的颜色,刷新所有RGB LED
    • read_onboard_temperature():获取核心温度
  • 逻辑流程
    • 通过read_onboard_temperature()获取核心温度,并根据设定好的温度、亮度数组BRIGHTNESS_LEVELS,控制亮度变化
      • 温度升档:程序启动后初始温度档位为1档,亮度为100%。当核心温度temp大于下一档档温度时,档位升高,亮度降低。
      • 温度降档:随着温度升高,亮度会逐渐降低,亮度足够低时,核心温度temp将缓慢下降。当核心温度temp降低到上一档温度+1℃时,档位降低,亮度升高。

资料

配套资料

示例程序

原理图

数据手册

官方资料

树莓派官方文档

树莓派开源例程

开发软件

FAQ

问题:Raspberry Pi Pico 2 GPIO配置为下拉输入,引脚悬空时,为什么读取IO为高电平?

可以参考RP2350-datasheet中RP2350-E9部分内容


技术支持

周一-周五(9:30-6:30)周六(9:30-5:30)

手机:13434470212

邮箱:services04@spotpear.cn

QQ:202004841