2017-12-18 222 views
2

我尝试使用AndroidThings来测量温度与树莓裨3和BMP280。BMP280 ServiceSpecificException:I/O错误(代码5)

enter image description here

3,3V我已经选用,因为specification of BMP280

要启动板,给它相同的功率微控制器的逻辑电平

然后我要初始化传感器

mTemperatureSensorDriver = new Bmx280SensorDriver("I2C1"); 

并通过执行我收到以下豁免

Error configuring sensor 
    com.google.android.things.pio.PioException: android.os.ServiceSpecificException: I/O error (code 5) 
    at com.google.android.things.pio.I2cDeviceImpl.readRegByte(I2cDeviceImpl.java:81) 
    at com.google.android.things.contrib.driver.bmx280.Bmx280.connect(Bmx280.java:215) 
    at com.google.android.things.contrib.driver.bmx280.Bmx280.<init>(Bmx280.java:193) 
    at com.google.android.things.contrib.driver.bmx280.Bmx280.<init>(Bmx280.java:180) 
    at com.google.android.things.contrib.driver.bmx280.Bmx280SensorDriver.<init>(Bmx280SensorDriver.java:55) 

也由5V电源我收到同样的例外。

我发现this。但我不知道如何检查,如果BMP280是真的用adb连接到树莓。

通过own testing我接收device.readRegByte(0xD0)相同exeption的连通性。

这是否意味着,BMP280没有正确连接? 如果是的话,如何正确连接BMP280与树莓?

连接是否需要一些电阻?

UPDATE

通过与头部条焊接BMP280解决。

还与传感器工作是需要选用的权限,可以只在命令行授衔。 ref

adb shell pm grant app.package com.google.android.things.permission.MANAGE_SENSOR_DRIVERS

+0

尝试使用[PIO CLI工具](https://developer.android.com/things/sdk/pio/pio-cli.html#I2C)访问BMP280传感器:'pio i2c I2C1 0x12读取寄存器字节0x76“ - 或类似的东西,找到问题。另外,请看[this](https://raspberrypi.stackexchange.com/a/74598/59288)回答。 –

+0

它给了我'[警告:client_errors.cc(35)]错误5:I/O错误'。通过调用'pio list i2c'我收到'I2C1' – anatoli

回答

0

看你fritzing图你不得不SDO连接到BCM3?

从数据表的SDO引脚是什么determins你传感器的地址。

datasheet

连接SDO到GND在从属结果 地址1110110(0x76);它连接至VDDIO在从地址1110111(0x77)

最重要的结果:

不能留SDO引脚浮动;如果悬空, I²C地址将不确定。

com.google.android.things.pio.PioException: android.os.ServiceSpecificException: I/O error (code 5)

所以你的问题可能是一个未定义的I2C地址。

看着你正在使用的Bmx280SensorDriver的代码,它使用的地址0x77

https://github.com/androidthings/contrib-drivers/blob/master/bmx280/src/main/java/com/google/android/things/contrib/driver/bmx280/Bmx280.java#L48

因此,你应该确保你的SDO线连接到5V您的树莓派。这将确保您的传感器具有正确的地址。

或可替代SDO连接到地面,并使用此构造:

mTemperatureSensorDriver = new Bmx280SensorDriver("I2C1", 0x76);

如果你想了解什么传感器驱动程序是做“引擎盖下”有一个伟大的博客文章和回购看到即:

http://blog.blundellapps.co.uk/tut-android-things-temperature-sensor-i2c-on-the-rainbow-hat/

https://github.com/blundell/androidthings-i2c-input/blob/master/app/src/main/java/com/blundell/tut/MainActivity.java

;-)

+0

BMP280的图标太大了。在这里连接:VIN,GND,SCK和SDI – anatoli

+0

将它连接到地面给出的地址为0x76,您需要将其连接到5v或使用其他构造函数(写在我的答案中) – Blundell

+0

at [this](https:/ /raspberrypi.stackexchange.com/questions/74492/android-things-i2c-avc-denied/74598#74598)回答是说,3,3V是正确的工作。 – anatoli