XIAO-RP2350 使用教程

特性

  • 强大的 MCU 板: 配备 Raspberry Pi RP2350 芯片,具有对称双核 Arm Cortex-M33 @ 150MHz 和 FPU。
  • 增强的安全功能: 内置安全启动和加密引导加载程序,确保应用程序安全。
  • 软件支持: 兼容 C/C++ 和 MicroPython,确保项目开发和原型制作的便利性。
  • 丰富的板载资源: 集成 RGB LED、2MB 闪存、520kB SRAM 和 19 个多功能 GPIO(模拟、数字、I²C、UART、SPI、PWM)。
  • 新增 8 个 IO: 相较于之前的 XIAO MCU,在背面增加了 8 个 IO 引脚,支持更复杂的应用。
  • 高效的电源设计: 睡眠模式下功耗仅为 50μA,支持电池供电。通过内部 IO 直接测量电池电压,增强电池管理系统(BMS)。
  • 紧凑的拇指大小设计: 尺寸为 21 x 17.8mm,采用 Seeed Studio 的经典 XIAO 外形,非常适合空间受限的应用。
  • 适合量产: 表面贴装器件(SMD)设计,所有组件位于正面,两侧带有焊盘孔,便于高效量产。

规格

产品XIAO RP2040XIAO RP2350
处理器Raspberry Pi RP2040Raspberry Pi RP2350
双 Cortex-M0+ @ 133MHz双 Cortex-M33 @ 150MHz,带 FPU
RAM264kB SRAM520kB SRAM
闪存板载 2MB2MB 闪存
LED1 个用户 LED(3 色),1 个电源 LED,1 个 RGB LED1 个用户 LED,1 个充电 LED(电池充电指示灯),1 个 RGB LED
接口11 个引脚:4x 模拟,11x 数字,1x I²C,1x UART,1x SPI,全部支持 PWM19 个引脚:3x 模拟,19x 数字,2x I²C,2x UART,2x SPI,全部支持 PWM
按钮1 个 RESET 按钮,1 个 BOOT 按钮
安全性-OTP,安全启动,Arm TrustZone
低功耗-4.2V/50μA
软件兼容性Arduino,PlatformIO,MicroPython,CircuitPython,Zephyr,更多即将支持Arduino,PlatformIO,MicroPython,CircuitPython,更多即将支持
工作温度-20°C~70°C
尺寸21x17.8 mm

硬件概览

XIAO RP2350 前部引脚图

XIAO RP2350 背部引脚图

XIAO RP2350 组件

需要更多关于引脚图的详细信息?请查看下方的 资源与资产

支持的平台

XIAO RP2350 由 RP2350 提供支持,支持 MicroPython 和 Raspberry Pi 提供的 C/C++ SDK。这种灵活性使开发者能够选择自己喜欢的编程语言和环境进行原型设计和开发。


入门指南

注意

本页面主要面向 MicroPython 用户。如果您对学习 SDK 编程感兴趣或是高级用户,可以从 Raspberry Pi Pico 系列 C/C++ SDK 开始。这份指南将帮助您设置环境并通过示例代码入门。此外,您还可以访问 XIAO RP2350 的 C/C++ SDK 获取与 XIAO RP2350 相关的具体说明。

MICROPYTHON 固件问题

截至 2024 年 11 月 10 日,可从 MicroPython.org for RPI_PICO2 下载的稳定 MicroPython 固件版本 1.24.0 当前由于闪存芯片的差异 与某些设备不兼容

Seeed 团队正在与官方 MicroPython 维护者积极合作解决此问题。在此期间,您可以使用 MicroPython 固件的 预览版本 作为临时解决方案:RP2350 MicroPython 固件预览版

第一步:在 XIAO RP2350 上安装 MicroPython

要在 XIAO RP2350 上安装 MicroPython 固件,请按照以下步骤操作:

步骤 1.1 下载 MicroPython 固件:

步骤 1.2 进入 BOOTSEL 模式:

您可以通过以下两种方法之一进入 XIAO RP2350 的 BOOTSEL 模式:

  1. 按住 BOOT 按钮:
    在您的 XIAO RP2350 未连接电脑时,按住 BOOT 按钮。
  2. 连接到电脑:
    按住 BOOT 按钮的同时,使用 USB 数据线将 XIAO RP2350 连接到您的电脑。
  3. 释放 BOOT 按钮:
    板子连接到电脑后,您可以释放 BOOT 按钮。XIAO RP2350 现在应该处于 BOOTSEL 模式,您的电脑会将其识别为一个可移动存储设备。




按住 BOOT -> 插入数据线 -> 释放 BOOT

步骤 1.3 安装固件:

  • 拖放 下载的 .uf2 文件到 XIAO RP2350 的可移动存储驱动器中。
  • 文件复制完成后,板子会自动重启,完成固件安装。

第二步:安装 Thonny IDE

关于 MICROPYTHON

MicroPython 是一种类似于 Python 的解释型语言。然而,与 Python 不同的是,MicroPython 直接运行在硬件上(裸机),提供交互式提示(REPL)以立即执行命令,同时支持运行和导入内置文件系统中的脚本。

要连接到 XIAO RP2350 板并开始编写和运行您的 Python 代码,您可以使用任何支持串口连接的终端工具,例如 minicom、PuTTY、electerm、warp 等。为了获得更 用户友好的体验,您可以使用 Thonny,它具有易用性、集成功能和适合初学者的界面。这样,您可以直接在设备上编写和运行 Python 代码。

Thonny IDE 是一个适合初学者的 Python 编辑器,非常适合 MicroPython 开发。以下是安装步骤:

  1. 下载 Thonny:

    • 访问 Thonny 下载页面
    • 选择适合您操作系统(Windows、macOS 或 Linux)的安装程序并下载。
  2. 安装 Thonny:

    • 运行 下载的安装程序。
    • 按照屏幕上的说明完成安装过程。
  3. 配置 Thonny 以支持 MicroPython:

    • 打开 Thonny IDE。
    • 查看 Thonny 窗口右下角。
    • 点击 解释器 选择区域。
    • 从下拉菜单中选择 'MicroPython (RP2040)'
    • 确保选择正确的 端口——Thonny 通常会自动检测。

现在,您可以使用 Thonny IDE 在 XIAO RP2350 上编写和上传 MicroPython 代码了!


如果你的设备已经准备好运行 MicroPython,让我们从一个简单的项目开始:

让它闪烁!✨

让开发板点亮一个 LED 通常是每个人运行的第一个程序。对于 XIAO RP2350 也是如此。

NOTE

根据原理图,XIAO RP2350 上的 USER LED(黄色 LED)连接到 GPIO25/D19。 对于所有 XIAO 系列开发板,当设置为 低电平 时,USER LED 会点亮;当设置为 高电平 时,USER LED 会熄灭

from machine import Pin # 从 machine 模块导入 Pin 类
from time import sleep # 从 time 模块导入 sleep 函数

led = Pin(25, Pin.OUT)

# 初始状态关闭 LED
led.value(1) # led.on() -> 高电平 -> 灯熄灭
sleep(0.5) # 等待 0.5 秒

# 打开 LED
led.value(0) # led.off() -> 低电平 -> 灯点亮
sleep(0.5) # 等待 0.5 秒

# 进入无限循环
while True:
# 切换 LED 状态(从开到关或从关到开)
led.toggle()
# 打印当前 LED 的状态
print(f"LED {'ON' if led.value() == 0 else 'OFF'}")
sleep(0.5) # 等待 0.5 秒后再切换




将代码复制到 Thonny IDE 中,如下图所示,只需点击 运行当前脚本 按钮或按下 F5 键即可。这将执行代码片段,你会看到 XIAO RP2350 上的 LED 开始闪烁。

玩转 RGB LED

XIAO RP2350 配备了一个内置的 RGB LED,你可以使用 MicroPython 来控制它。以下是一个循环显示不同颜色的示例:

import array, time, random
from machine import Pin
import rp2

NUM_LEDS = 1
LED_PIN = 22 # PICO_DEFAULT_WS2812_PIN
POWER_PIN = 23 # PICO_DEFAULT_WS2812_POWER_PIN

# 全局亮度变量(0.0 到 1.0)
BRIGHTNESS = 0.1

@rp2.asm_pio(sideset_init=rp2.PIO.OUT_LOW, out_shiftdir=rp2.PIO.SHIFT_LEFT, autopull=True, pull_thresh=24)
def ws2812():
T1 = 2
T2 = 5
T3 = 3
wrap_target()
label("bitloop")
out(x, 1) .side(0) [T3 - 1]
jmp(not_x, "do_zero") .side(1) [T1 - 1]
jmp("bitloop") .side(1) [T2 - 1]
label("do_zero")
nop() .side(0) [T2 - 1]
wrap()

# 设置电源引脚
power_pin = Pin(POWER_PIN, Pin.OUT)
power_pin.value(1) # 打开 LED 电源

# 使用 ws2812 程序创建 StateMachine,输出到 LED_PIN
sm = rp2.StateMachine(0, ws2812, freq=8_000_000, sideset_base=Pin(LED_PIN))

# 启动 StateMachine,它将等待 FIFO 中的数据。
sm.active(1)

def set_led_color(color):
sm.put(array.array("I", [color]), 8)

def random_color():
return random.randint(0, 255) | (random.randint(0, 255) << 8) | (random.randint(0, 255) << 16)

def interpolate(color1, color2, factor):
r1, g1, b1 = color1 & 255, (color1 >> 8) & 255, (color1 >> 16) & 255
r2, g2, b2 = color2 & 255, (color2 >> 8) & 255, (color2 >> 16) & 255
r = int(r1 + factor * (r2 - r1))
g = int(g1 + factor * (g2 - g1))
b = int(b1 + factor * (b2 - b1))
return (b << 16) | (g << 8) | r

def apply_brightness(color, brightness):
r, g, b = color & 255, (color >> 8) & 255, (color >> 16) & 255
r = int(r * brightness)
g = int(g * brightness)
b = int(b * brightness)
return (b << 16) | (g << 8) | r

print("开始随机颜色过渡并调整亮度...")

# 主循环
current_color = random_color()
while True:
next_color = random_color()
for i in range(100): # 100 步实现平滑过渡
transition_color = interpolate(current_color, next_color, i / 100)
final_color = apply_brightness(transition_color, BRIGHTNESS)
set_led_color(final_color)
time.sleep_ms(20) # 调整此值以更改过渡速度
current_color = next_color

# 可选:你可以在此处更改亮度以进行演示
# BRIGHTNESS = random.random() # 每个循环设置一个随机亮度



电池与电源管理

无需额外组件就能读取电池电压?是的,使用 XIAO RP2350,这比以往更简单。在之前的 XIAO 系列成员(如 XIAO ESP32C3)中,读取电池电压需要手动通过电阻连接到 A0

但在 XIAO RP2350 中,这一过程得到了简化。你现在可以直接使用 A3/GPIO29 引脚读取电池电压水平,从而简化你的设计和开发。只需记住将 GPIO19 引脚设置为高电平,因为这是启用电池电压读取所必需的。

按照以下代码片段,通过 Pico SDK 读取电池电压:

from machine import Pin, ADC
import time

# 初始化 GPIO 引脚以启用电池电压读取的函数
def init_gpio():
enable_pin = Pin(19, Pin.OUT)
enable_pin.value(1) # 将引脚设置为高电平以启用电池电压读取

def main():
print("ADC 电池示例 - GPIO29 (A3)")

init_gpio() # 初始化启用引脚
adc = ADC(Pin(29)) # 在 GPIO29 上初始化 ADC

conversion_factor = 3.3 / (65535) # 12 位 ADC 和 3.3V 参考电压的转换因子

while True:
result = adc.read_u16() # 读取 ADC 值
voltage = result * conversion_factor * 2 # 计算电压,考虑到电压分压器(乘以 2 的因子)
print("原始值: 0x{:03x}, 电压: {:.2f} V".format(result, voltage))
time.sleep(0.5) # 延迟 500 毫秒

if __name__ == '__main__':
main()

资源与资产

XIAO RP2350 利用 Raspberry Pi RP2350 的强大功能,并借助 Raspberry Pi 社区的丰富资源。这为您在这个小型开发板上定制项目提供了无限的创造力。以下是帮助您入门的关键资源和资产。

数据手册与原理图