Skip to main content

Seeed Studio XIAO RP2350 与 MicroPython

Seeed Studio XIAO RP2350


XIAO RP2350 将 Raspberry Pi RP2350(双 Cortex-M33 内核,150MHz 主频,带 FPU,增强的安全性和加密功能)的强大性能封装进经典的 XIAO 外形中。其尺寸仅为 21x17.8mm,具备 19 个多功能 GPIO、一个 RGB LED,以及带有超低 50μA 功耗、电池供电和电池电压直测功能的电池管理系统。得益于 XIAO 生态,XIAO RP2350 兼容多种扩展,包括显示屏、LED 点阵、Grove 模块、CAN Bus、视觉 AI 传感器和毫米波传感器。凭借对 MicroPython、C 和 C++ 的原生支持,XIAO RP2350 非常适合各个水平的开发者,用于构建用于智能控制、可穿戴设备、DIY 键盘等的紧凑型电池供电应用。

支持的平台

由 RP2350 驱动的 XIAO RP2350 支持 Raspberry Pi 提供的 MicroPython 和 C/C++ SDK。这种灵活性使开发者可以根据自己的喜好选择编程语言和开发环境,用于原型设计和开发。

C/C++ SDKMicroPython
c-cpp logoMicroPython

入门指南▶️

attention

本页面主要面向 MicroPython 用户。对于有兴趣学习 SDK 编程或进阶用户,建议从 Raspberry Pi Pico-series C/C++ SDK 开始。该指南将帮助你完成环境搭建并通过示例代码入门。此外,你也可以访问 XIAO RP2350 with C/C++ SDK 获取与 XIAO RP2350 相关的更具体说明。

步骤 1:在 XIAO RP2350 上安装 MicroPython

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

步骤 1.1 下载 MicroPython 固件:

tip
  1. 默认固件适用于 ARM 架构,如果你想使用 RISC-V,请在链接中使用对应的固件版本。

  2. 请确保你使用的是最新固件版本,旧版本固件可能存在各种软件漏洞。

步骤 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 的可移动存储盘中。
  • 文件复制完成后,开发板会自动重启,即完成固件安装。

步骤 2:安装 Thonny IDE

about MicroPython

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

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

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

  1. 下载 Thonny:

    • 访问 Thonny Download Page
    • 根据你的操作系统(Windows、macOS 或 Linux)选择合适的安装包并下载。
  2. 安装 Thonny:

    • 运行 下载好的安装程序。
    • 按照 屏幕上的提示完成安装过程。
  3. 为 MicroPython 配置 Thonny:

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

现在,你已经可以使用 Thonny IDE 向 XIAO RP2350 编写并上传 MicroPython 代码了!

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

让它闪起来!✨

让开发板点亮并闪烁一个 LED 通常是大家运行的第一个程序,XIAO RP2350 也不例外。

note

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

from machine import Pin # Import the Pin class from the machine module
from time import sleep # Import the sleep function from the time module

# Initialize GPIO25 as an output pin, which controls the USER LED
led = Pin(25, Pin.OUT)

# Turn off the LED initially
led.value(1) # led.on() -> high level -> light off
sleep(0.5) # Wait for 0.5 seconds

# Turn on the LED
led.value(0) # led.off() -> low level -> light on
sleep(0.5) # Wait for 0.5 seconds

# Enter an infinite loop
while True:
# Toggle the LED state (on to off or off to on)
led.toggle()
# Print the current state of the LED
print(f"LED {'ON' if led.value() == 0 else 'OFF'}")
sleep(0.5) # Wait for 0.5 seconds before the next toggle

当你已经将代码复制到 Thonny IDE 中后,如下图所示,只需点击 Run current script 按钮或按下 F5。这将执行代码片段,你会看到 XIAO RP2350 上的 LED 开始闪烁。

玩转 RGB LED

XIAO RP2350 自带一个可通过 MicroPython 控制的 RGB LED。下面是一个循环显示不同颜色的示例:

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

# Global brightness variable (0.0 to 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()

# Set up the power pin
power_pin = Pin(POWER_PIN, Pin.OUT)
power_pin.value(1) # Turn on power to the LED

# Create the StateMachine with the ws2812 program, outputting on LED_PIN
sm = rp2.StateMachine(0, ws2812, freq=8_000_000, sideset_base=Pin(LED_PIN))

# Start the StateMachine, it will wait for data on its 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("Starting random color transitions with adjustable brightness...")

# Main loop
current_color = random_color()
while True:
next_color = random_color()
for i in range(100): # 100 steps for smooth transition
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) # Adjust this value to change transition speed
current_color = next_color

# Optionally, you can change the brightness here for demo purposes
# BRIGHTNESS = random.random() # This will set a random brightness each cycle

电池与电源管理

是否可以在没有额外元件的情况下读取电池电压?可以,在 XIAO RP2350 上,这比以往更简单。在之前的 XIAO 家族成员中,例如 XIAO ESP32C3,读取电池电压需要通过电阻手动连接到 A0

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

按照下面的代码片段操作,使用 Pico SDK 读取电池电压:

from machine import Pin, ADC
import time

# Function to initialize the GPIO pin for enabling battery voltage reading
def init_gpio():
enable_pin = Pin(19, Pin.OUT)
enable_pin.value(1) # Set the pin to high to enable battery voltage reading

def main():
print("ADC Battery Example - GPIO29 (A3)")

init_gpio() # Initialize the enable pin
adc = ADC(Pin(29)) # Initialize the ADC on GPIO29

conversion_factor = 3.3 / (65535) # Conversion factor for 12-bit ADC and 3.3V reference

while True:
result = adc.read_u16() # Read the ADC value
voltage = result * conversion_factor * 2 # Calculate the voltage, considering the voltage divider (factor of 2)
print("Raw value: 0x{:03x}, voltage: {:.2f} V".format(result, voltage))
time.sleep(0.5) # Delay for 500 milliseconds

if __name__ == '__main__':
main()

扩展与应用

XIAO 系列 拥有非常丰富的外设和外设配件供你学习和使用,无论你是想要一个可以完美交互的彩色屏幕,还是一个集成了明亮简洁 RGB 灯的板子等等,都在等你来探索。

作为 XIAO 家族的一员,XIAO RP2350 也同样如此。当然,为了更好地利用引出的额外引脚,新的 外设和扩展板 将会不断推出,充分发挥其诞生之初所追求的性能。

  • 🌟 通过配件扩展
    了解与 XIAO 家族兼容的各种扩展件和模块,从显示屏、LED 点阵到 Grove 模块和传感器,并学习它们如何增强你的项目。

社区与学习

此外,深入活跃的 Raspberry Pi 社区,拓展你的知识并发现新的项目灵感。利用社区共享的资源、论坛和教程,提升你使用 XIAO RP2350 的体验。除了 Seeed Studio Wiki 之外,这里还有一些推荐的学习平台:

此外,也非常欢迎你在我们的 Seeed Studio DiscordSeeed Studio Forum 上分享你的项目。这些平台为你提供了与其他创客交流、获取反馈和寻找灵感的绝佳机会。无论你是需要帮助排查问题、想展示你的最新作品,还是只是希望成为一个互相支持的社区的一员,Seeed Studio 的 Discord 和论坛 都是参与和协作的理想之地。

技术支持与产品讨论

感谢你选择我们的产品!我们将为你提供多种支持,确保你在使用我们产品的过程中尽可能顺利。我们提供多种沟通渠道,以满足不同的偏好和需求。

Loading Comments...