我想知道我应该如何为MCP23017(I/O扩展器微芯片(的引脚声明构建代码,以及我是否应该将其放入函数中。
因此,目前我得到了下面的脚本,其中包含MCP的pin声明和许多使用它们的函数。这些函数是由另一个文件调用的,这一切都在树莓派上。
import board
import busio
from digitalio import Direction
from adafruit_mcp230xx.mcp23017 import MCP23017
import time
i2c = busio.I2C(board.SCL, board.SDA)
mcp0 = MCP23017(i2c, address=0x27)
pin00 = mcp0.get_pin(0)
pin00.direction = Direction.OUTPUT
pin01 = mcp0.get_pin(1)
pin01.direction = Direction.OUTPUT
etc
pins = (pin00, pin01, etc)
def relays_off():
i = 0
while i < len(pins):
if not pins[i].value:
pins[i].value = True
i += 1
def other_function():
etc
整个项目是关于控制继电器,由这些引脚控制。问题是,每次我给它通电时,都会出现错误,继电器会被随机激活/停用。错误为[Errno 121] Remote I/O error
。我必须执行一堆relays_off()
来让它平静下来,直到我不再出现错误,然后它就可以正常工作了。
所以我首先想知道我是否正确地编码了它,或者pin声明是否应该在其他函数调用的函数中?
为简洁起见,省略了导入。。。
把所有的别针都列在一个清单里怎么样?例如
NPINS = 5 # or whatever
def initpin(mcp, n):
pin = mcp.get_pin(n)
pin.direction = Direction.OUTPUT
pin.value = True
return pin
mcp0 = MCP23017(i2c, address=0x27)
pinlist = [initpin(mcp0, i) for i in range(NPINS)]
随后,您可以通过管脚列表中的相应索引来访问管脚。
不确定这是否有助于