使用Python从MCP23017获取信息

2024-09-28 23:23:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我买了一个MCP2317作为我的覆盆子Pi来增加GPIO引脚。在

enter image description here

我目前已经安装了它,我正试图得到额外的引脚,我有;GPB0-GPB7在左边,GPA0-GPA7在右边做我的出价。在

我需要将它们设置为输入引脚,以读取高和低状态,并将上拉电阻加到它们上,但这是我得到的:

import smbus
import time

bus = smbus.SMBus(1) # As I'm using an newer RPi.

DEVICE = 0x20 # this is what it shows when I check it.
IODIRA = 0x00
GPIOA  = 0x12

bus.write_byte_data(DEVICE,IODIRA,0xFF)
bus.write_byte_data(DEVICE,0x0C,0xff)

value = bus.read_byte_data(DEVICE,GPIOA)

当我试着读这个值时,它给了我奇怪的数字,我几乎找不到任何关于六边形和二进制数的解释,它让我无法接受。数据表在我看来像中国人。。在

任何帮助都将不胜感激!在


Tags: importdata覆盆子gpiodevicepiitbyte
1条回答
网友
1楼 · 发布于 2024-09-28 23:23:11

这个脚本将打开GPIOA和GPIOB的内部上拉电阻。然后它将每秒打印一次所有寄存器的值。您可以使用输出来观察寄存器值在更改输入时的变化。在

import smbus
import time

DEVICE = 0x20

address_map = {
    0x00: 'IODIRA',   0x01: 'IODIRB',   0x02: 'IPOLA',   0x03: 'IPOLB',
    0x04: 'GPINTENA', 0x05: 'GPINTENB', 0x06: 'DEFVALA', 0x07: 'DEVFALB',
    0x08: 'INTCONA',  0x09: 'INTCONB',  0x0a: 'IOCON',   0x0b: 'IOCON',
    0x0c: 'GPPUA',    0x0d: 'GPPUB',    0x0e: 'INTFA',   0x0f: 'INTFB',
    0x10: 'INTCAPA',  0x11: 'INTCAPB',  0x12: 'GPIOA',   0x13: 'GPIOB',
    0x14: 'OLATA',    0x15: 'OLATB'
}
register_map = {value: key for key, value in address_map.iteritems()}
max_len = max(len(key) for key in register_map)

def print_values(bus):
    print "-" * 20
    for addr in address_map:
        value = bus.read_byte_data(DEVICE, addr)
        print "%-*s = 0x%02X" % (max_len, address_map[addr], value)

bus = smbus.SMBus(1)
bus.write_byte_data(DEVICE, register_map['GPPUA'], 0xFF)
bus.write_byte_data(DEVICE, register_map['GPPUB'], 0xFF)

counter = 0
try:
    while True:
        print_values(bus)
        counter += 1
        print "counter = %s" % counter
        time.sleep(1.0)
except KeyboardInterrupt:
    print "Keyboard interrupt"

示例输出

^{pr2}$

我在一个Adafruit LCD Keypad Kit上使用MCP23017,所以一些引脚被电路板拉低了。在

了解端口值

每个端口有8个GPIO引脚。如果一个端口的所有引脚都被拉高,该端口的十六进制值将为0xFF。如果一个引脚被拉低,该引脚的位将为零。例如,如果GPA0被拉低,GPIOA寄存器的值将为0xFE:

1111 1110 = 0xFE

相关问题 更多 >