RT-Thread论坛
直播中

djfldsthtr

9年用户 1021经验值
擅长:光电显示
私信 关注
[问答]

请问Vison Board 怎么用micropython操作外设,比如GPIO?


我构造的Pin对象用不了,不知道还要配置哪些东西?



回帖(1)

刘秀英

2025-9-12 18:19:37

要在Vision Board上使用MicroPython操作GPIO外设,需遵循以下步骤和注意事项。Vision Board的MicroPython固件通常预装了针对该开发板的专用库,操作方式可能与标准MicroPython略有不同。




1. 确认硬件和固件



  • 硬件连接:确认外设正确连接到Vision Board的GPIO引脚(查看引脚图)。

  • 固件版本:确保使用最新版Vision Board专属MicroPython固件(星瞳科技官网下载)。




2. 使用正确的库和方法


Vision Board推荐使用 machine 或预置的 board 模块操作GPIO。


方法一:使用 machine.Pin(标准方法)


import machine
import time

# 初始化GPIO(例如:控制GPIO13上的LED)
led = machine.Pin(13, machine.Pin.OUT)  # 13为引脚号,根据实际连接修改

while True:
    led.value(1)  # 高电平点亮LED
    time.sleep(1)
    led.value(0)  # 低电平熄灭LED
    time.sleep(1)

方法二:使用预置board库(推荐)


Vision Board提供 board 库,直接使用预定义引脚名(无需记忆引脚号):


from board import LED1  # 导入预定义的LED1引脚
import machine
import time

led = machine.Pin(LED1, machine.Pin.OUT)  # 使用预定义引脚名

while True:
    led.toggle()  # 电平翻转
    time.sleep(1)

常用外设操作示例




  • 读取按键输入


    from board import SW
    import machine

    btn = machine.Pin(SW, machine.Pin.IN, machine.Pin.PULL_UP)  # 上拉输入
    if btn.value() == 0:  # 按键按下
      print("Button pressed")



  • PWM控制LED亮度


    from machine import Pin, PWM
    from board import LED2

    pwm = PWM(Pin(LED2), freq=1000)  # 1kHz PWM
    pwm.duty(512)  # 50%占空比(0~1023范围)





3. 常见问题排查


Q1:Pin对象无法操作(报错/无反应)




  • 错误引脚号

    确认物理引脚对应的MicroPython逻辑编号。例如:



    • 电路板丝印引脚 D13 → MicroPython中使用数字 13

    • 或使用预定义常量(如 LED1SW)。




  • 引脚复用冲突

    某些引脚默认用于其他功能(如串口、I2C)。检查是否已禁用复用功能:


    # 禁用串口1(释放TX/RX引脚)
    from machine import UART
    uart = UART(1, baudrate=112500)
    uart.deinit()  # 释放引脚



  • 驱动能力不足

    大功率外设(如电机)需外接驱动电路,GPIO不能直接驱动。




Q2:外设响应不稳定




  • 配置上拉/下拉电阻


    # 按键输入启用内部上拉
    button = Pin(SW, Pin.IN, Pin.PULL_UP)



  • 消抖处理(按键类外设):


    import time

    if btn.value() == 0:
      time.sleep_ms(20)  # 延时消抖
      if btn.value() == 0:
          print("Valid press")





4. 进阶功能




  • 中断处理


    def btn_callback(pin):
      print("Interrupt triggered!")

    btn.irq(trigger=Pin.IRQ_FALLING, handler=btn_callback)  # 下降沿触发



  • 多线程控制
    使用 _thread 模块管理外设并发操作。






5. 官方资源





总结步骤:  



  1. 使用 board 库的预定义引脚名(如 LED1)。  

  2. 检查外设是否冲突复用。  

  3. 若仍失败,尝试重新烧录专用固件。  

  4. 复杂外设(如摄像头、屏幕)需调用专用库(如 sensorlcd)。


通过以上方法,90%的GPIO操作问题可被解决。若问题持续,建议提供具体代码和硬件连接方式进一步诊断!

举报

更多回帖

发帖
×
20
完善资料,
赚取积分