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
相关产品推荐
相关产品推荐

