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

如何通过JSON获取的数据为Adafruit MCP23017引脚对象设置属性?

问题核心原因

  • 你JSON中存储的pin字段值是字符串标识或数字编号,并非实际的MCP23017引脚实例对象,直接对dataJSON['pin']操作属性本质是修改字符串/数字的属性,自然不会生效。
  • setattr方法调用语法错误,完整语法为setattr(实例对象, 属性名, 要设置的属性值),你漏写了第三个参数的属性值,所以没有生效。

解决方案

步骤1:预创建引脚实例映射

先将所有需要用到的MCP23017引脚生成实例,存入映射字典,方便后续通过编号/标识快速取到实际引脚对象:

import time
import board
import busio
import digitalio
from adafruit_mcp230xx.mcp23017 import MCP23017

i2c = busio.I2C(board.SCL, board.SDA)
mcp = MCP23017(i2c)

# 生成引脚映射字典,key为引脚编号,value为实际引脚实例
pin_map = {}
for pin_num in range(16): # MCP23017共16个引脚,可根据实际使用范围调整
    pin = mcp.get_pin(pin_num)
    # 可在这里统一初始化引脚模式,也可以后续从JSON读配置再设置
    pin.switch_to_output(value=False)
    pin_map[pin_num] = pin

如果你的JSON中pin字段存的是类似"pin0"的字符串标识,可调整映射的key格式:

pin_map[f"pin{pin_num}"] = pin

步骤2:从JSON读配置操作引脚

假设JSON中pin字段存储的是引脚数字编号,按如下方式操作即可:

# 从JSON取目标引脚编号
target_pin_num = dataJSON['pin']
# 从映射字典取实际引脚实例
target_pin = pin_map[target_pin_num]

# 两种设置属性的方式都可以正常生效
# 方式1:直接赋值
target_pin.value = True
# 方式2:setattr(适合动态指定属性名的场景)
setattr(target_pin, 'value', True)

如果需要同时从JSON读取引脚模式、上拉下拉等其他配置,也可以按照同样的逻辑,从JSON取对应配置值后调用对应方法/设置对应属性即可。


内容的提问来源于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 16:39:00