看看你的测试图,你有 SDO 连接到 BCM3 吗?
根据数据表,SDO 引脚决定传感器的地址。
将 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 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 连接到 Ground 并使用此构造函数:
mTemperatureSensorDriver = new Bmx280SensorDriver("I2C1", 0x76);
如果您想了解传感器驱动程序“在引擎盖下”正在做什么,可以查看一篇很棒的博客文章和存储库:
http://blog.blundellapps.co.uk/tut-android-things-Temperature-sensor-i2c-on-the-rainbow-hat/ 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 https://github.com/blundell/androidthings-i2c-input/blob/master/app/src/main/java/com/blundell/tut/MainActivity.java
;-)