板载 LED 流水灯
🎯实验目的
- 掌握 K210
GPIO输出模式的基本用法 - 学会使用
fpioa_manager把内部 GPIO0-7 映射到物理 IO6-IO13 - 熟悉
for循环、time.sleep_ms()延时、列表索引等 MicroPython 基础
🛠️硬件准备
- CanMV / K210 开发板 × 1(已焊接 8 颗板载 LED)
- USB Type-C 数据线 × 1(必须支持数据传输)
- MaixPy 固件 ≥ v0.6.2
💡 不需要外接任何传感器或屏幕,程序运行后立刻可以从板载 LED 上看到现象。
🔌引脚分配
开发板把内部 GPIOHS0~7 通过 FPIOA 映射到板载 LED:
| 内部 GPIO | 物理引脚 | 板载 LED |
|---|---|---|
GPIO0 | IO6 | LED_A |
GPIO1 | IO7 | LED_B |
GPIO2 | IO8 | LED_C |
GPIO3 | IO9 | LED_D |
GPIO4 | IO10 | LED_E |
GPIO5 | IO11 | LED_F |
GPIO6 | IO12 | LED_G |
GPIO7 | IO13 | LED_H |
💻实验代码 2.1.Water_LED.py
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# 文件名:2.1.Water_LED.py
# 说明:板载LED流水灯实验
import time
from maix import GPIO
from fpioa_manager import fm
from board import board_info
# CanMV 开发板引脚配置
fm.register(6, fm.fpioa.GPIO0, force=True)
fm.register(7, fm.fpioa.GPIO1, force=True)
fm.register(8, fm.fpioa.GPIO2, force=True)
fm.register(9, fm.fpioa.GPIO3, force=True)
fm.register(10, fm.fpioa.GPIO4, force=True)
fm.register(11, fm.fpioa.GPIO5, force=True)
fm.register(12, fm.fpioa.GPIO6, force=True)
fm.register(13, fm.fpioa.GPIO7, force=True)
# 配置引脚为输出
leds = [GPIO(GPIO.GPIO0, GPIO.OUT), GPIO(GPIO.GPIO1, GPIO.OUT),
GPIO(GPIO.GPIO2, GPIO.OUT), GPIO(GPIO.GPIO3, GPIO.OUT),
GPIO(GPIO.GPIO4, GPIO.OUT), GPIO(GPIO.GPIO5, GPIO.OUT),
GPIO(GPIO.GPIO6, GPIO.OUT), GPIO(GPIO.GPIO7, GPIO.OUT)]
if __name__ == '__main__':
while True:
for n in range(0, 8): # 依次点亮
leds[n].value(1)
time.sleep_ms(300)
for n in range(0, 8): # 依次熄灭
leds[n].value(0)
time.sleep_ms(300)
📖代码说明
fm.register(IO, GPIO, force=True):FPIOA(Flexible Pin Multiplexing)允许把任意内部功能映射到任意物理 IO;force=True表示强制覆盖之前的映射。GPIO(pin, mode):构造一个 GPIO 句柄,GPIO.OUT表示输出模式。led.value(1 / 0):输出高 / 低电平,由于板载 LED 另一端接 3.3V,所以value(0)点亮、value(1)熄灭。time.sleep_ms(300):阻塞 300 毫秒,控制灯光切换速度。
🎬实验现象
上电运行后,开发板上 8 颗 LED 按照:
A → B → C → D → E → F → G → H → 全灭 → A → ...
循环,呈现出"水流动"的效果,每步间隔 300ms。
⚠️注意事项
- 务必使用
from board import board_info提前读取板级信息,避免在某些固件版本上因引脚未初始化而报错。 fm.register调用时建议带force=True,否则重复烧录程序后第二次运行可能因为引脚已被占用而失败。- 如果想改"流速",只需修改
time.sleep_ms(300)中的数值(建议 50 ~ 1000ms)。