沟槽振动传感器与Raspberry pi之间的通信

时间:2017-12-06 13:01:02

标签: raspberry-pi groove

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

$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"

在此之后我重新启动了我的覆盆子pi,然后当我进入文件夹时:

$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"

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

1 个答案:

答案 0 :(得分: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

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