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

Python3使用Adafruit MCP23017库控制扩展IO时如何选择指定引脚激活

打印属性含义

你输出的是引脚对象的内部属性字典,两个字段的含义分别是:

  • _pin:当前对象对应MCP23017芯片上的物理引脚编号,取值范围015,依次对应芯片的GPA0GPA7、GPB0~GPB7共16个IO口
  • _mcp:指向该引脚所属的MCP23017芯片实例,不同的内存地址代表属于不同的物理芯片

指定引脚操作方法

首先需要先修正你初始化代码中的笔误:标注#mcp1的代码段中,你往one_port_pins列表里添加的是mcp3的引脚,导致mcp1(地址0x20)全程未被使用,如果你需要三个列表分别对应三块芯片,需要把对应行改为one_port_pins.append(mcp1.get_pin(pin))。

操作指定引脚有三种常用方式:

1. 直接通过预生成的引脚列表索引

你初始化时是按0~15的顺序往三个引脚列表里添加的引脚,列表下标和_pin编号完全对应,直接按索引取值即可操作:

# 示例:操作mcp2对应的two_port_pins列表的第5号引脚,输出高电平
two_port_pins[5].value = True
# 输出低电平
two_port_pins[5].value = False

2. 直接通过MCP芯片实例获取引脚

不需要依赖预生成的列表,适合临时调用场景:

# 示例:获取mcp1(地址0x20)的第7号引脚,设置为高电平
target_pin = mcp1.get_pin(7)
target_pin.value = True

3. 封装统一调用接口(适合对接业务脚本)

可以提前建立芯片地址和实例的映射,封装成通用函数,业务侧只需要传芯片地址、引脚号、状态即可操作:

# 建立芯片地址与实例的映射关系
mcp_mapping = {
    0x20: mcp1,
    0x24: mcp2,
    0x22: mcp3
}

def control_mcp_pin(mcp_address: int, pin_number: int, output_status: bool):
    # 校验参数合法性
    if mcp_address not in mcp_mapping or pin_number < 0 or pin_number > 15:
        # 可根据需求添加参数错误抛出逻辑
        return
    target_pin = mcp_mapping[mcp_address].get_pin(pin_number)
    target_pin.value = output_status

# 业务调用示例:将地址为0x22的芯片3号引脚设为高电平
control_mcp_pin(0x22, 3, True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 01:00:02