You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

树莓派Pico W使用MicroPython读取GPIO引脚23/25时出现OSError -1

解决树莓派Pico W读取GPIO23/25引发OSError -1的问题

问题根源

GPIO23和25是Pico W板载WiFi模块的专用硬件引脚,被WiFi固件直接占用(GPIO23对应SDIO_D3,GPIO25对应SDIO_CMD,用于WiFi模块的SDIO通信)。用户代码强行初始化这两个引脚为普通输入,会和WiFi模块的硬件操作冲突,触发OSError: -1(表示硬件资源访问失败)。

解决方案

1. 明确跳过系统占用引脚

保留现有跳过23、25号引脚的逻辑,添加注释说明原因,避免后续维护遗忘:

gpio_html = ""
for pin_number in range(0, 29):
    # Pico W的GPIO23/25被WiFi模块占用,禁止用户操作
    if pin_number in (23, 25):
        continue
    pin = Pin(pin_number, Pin.IN)
    state = pin.value()
    gpio_html += f"""
{space}<tr>
    {space}<td>{pin_number}</td>
    {space}<td>{state}</td>
{space}</tr>"""

2. 提前定义可用引脚范围

如果不想遍历所有引脚再跳过,可以直接定义用户可访问的GPIO列表,减少不必要的循环:

# Pico W用户可用GPIO(排除WiFi专用的23、25)
available_pins = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,24,26,27,28]
gpio_html = ""
for pin_number in available_pins:
    pin = Pin(pin_number, Pin.IN)
    state = pin.value()
    gpio_html += f"""
{space}<tr>
    {space}<td>{pin_number}</td>
    {space}<td>{state}</td>
{space}</tr>"""

3. 修正响应生成逻辑

注意你发送响应的代码中,response = webpage(random_value, state)里的state仅为最后一个引脚的状态,若网页需要展示所有引脚状态,需确保webpage函数正确接收gpio_html参数,避免因变量引用错误间接引发异常。

内容的提问来源于stack exchange,提问作者Unix

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 19:30:06