0

[code][1]我有一个grovepi来连接树莓派上的grove pi振动传感器。我已经使用以下命令在我的树莓派上下载了 Groove 软件:

$cd /home/pi/Desktop
$ sudo git clone https://github.com/DexterInd/GrovePi
$ cd /home/pi/Desktop/GrovePi/Script
$ sudo chmod +x install.sh
$ sudo ./install.sh
$ sudo pip install grovepi"

在此之后,我重新启动了我的树莓派,然后当我进入文件夹时:

$cd/home/pi/Desktop/GrovePi/Software/Python
$sudo python grove_piezo_vibration_sensor.py

我收到以下错误:

Trceback (most recent call last):

File "grove_piezo_vibration_sensor.py", line 49, in <module>
    print(grovepi.analogRead(piezo))
File "/home/pi/Desktop/GrovePi/Software/Python/grovepi.py", line 227, in analogRead
    return number[1] * 256 +number[2]
TypeError: 'int' object has no attribute '__getitem__'

我使用的代码是:

import time
import grovepi
# Connect the Grove Piezo Vibration Sensor to analog port A0
# OUT,NC,VCC,GND
piezo = 0

grovepi.pinMode(piezo,"INPUT")

while True:
    try:
        # When vibration is detected, the sensor outputs a logic high signal
        print grovepi.analogRead(piezo)
        time.sleep(.5)

    except IOError:
        print "Error"

你能告诉我我做错了什么吗?谢谢!

4

1 回答 1

2

如果您查看 grovepi 代码,该analogRead函数如下所示:

def analogRead(pin):
    write_i2c_block(address, aRead_cmd + [pin, unused, unused])
    read_i2c_byte(address)
    number = read_i2c_block(address)
    return number[1] * 256 + number[2]

您在最后一行看到了一个异常,它期望从那里返回某种序列,read_i2c_block但得到了一个整数。查看代码的其他地方,我们看到read_i2c_block如下所示:

def read_i2c_block(address):
    for i in range(retries):
        try:
            return bus.read_i2c_block_data(address, 1)
        except IOError:
            if debug:
                print ("IOError")
    return -1

现在,看起来read_i2c_block_data(来自smbus模块)总是会返回一个列表。这意味着您从上述函数返回单个整数的唯一方法是遇到IOError异常。这将被exception IOError块屏蔽,然后函数将返回-1

模块中的此代码存在许多问题grovepi。首先,任何调用read_i2c_block(如analogRead函数)都应该检查-1返回值。其次,像这样屏蔽异常并不是特别有用,因为异常可能包含指向问题根源的信息。考虑将上面的代码替换为:

    for i in range(retries):
        try:
            return bus.read_i2c_block_data(address, 1)
        except IOError:
            if debug:
                raise

然后启用调试模式。那应该是这样的:

import grovepi
grovepi.debug = 1

现在,运行您的代码,您应该会看到异常。查看它是否包含有关错误的更多详细信息。

于 2017-12-06T14:38:36.827 回答