BMP280 ServiceSpecificException:I/O 错误(代码 5)

BMP280 ServiceSpecificException: I/O error (code 5)

我尝试使用 AndroidThings 通过 Raspberry Pi 3 和 BMP280 测量温度。

3,3V 我选择是因为 specification of BMP280:

To power the board, give it the same power as the logic level of your microcontroller

然后我要初始化传感器

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 连接到 Raspberry。

通过 own testing 我收到的连接通过 device.readRegByte(0xD0) 相同的异常。

是不是说BMP280连接不正确? 如果是,如何正确连接BMP280和Raspberry?

连接需要一些电阻吗?

更新

通过将 BMP280 与排针焊接解决。

与传感器一起工作还需要权限,只能在命令行中授予权限。 ref

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

看看你的 fritzing 图你有 SDO 连接到 BCM3 吗?

根据数据表,SDO 引脚决定了传感器的地址。

Connecting SDO to GND results in slave address 1110110 (0x76); connection it to VDDIO results in slave address 1110111 (0x77)

最重要的是:

The SDO pin cannot be left floating; if left floating, the I²C address will be undefined.

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 线连接到 raspberry pi 上的 5V。这将确保您的传感器具有正确的地址。

或者将 SDO 接地并使用此构造函数:

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

如果您想了解传感器驱动程序在做什么 "under the hood" 有一个很棒的博客 post 和 repo 可以看到:

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

;-)

感谢信息,正确连接

bmx280 = new Bmx280("I2C1",0x76); 和 SDO 到 gnd。

但是读取值很奇怪。

我的气象站D/statie:temp: 186.83298 pres: -296.47287

有没有可能是传感器损坏了?

TNX

克里斯

要从物联网设备读取数据,必须固定触点,不要松动。

这只能通过焊接 BMP280 和头条来实现

才能建立连接