2017-12-18 224 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