2017-12-06 11 views
0

こんにちは親愛なるAndroidの先駆者!Android関連I2CドライバPioException:I/Oエラー

Adafruit SI7021 Themperature and humidity sensorのアンドロイドのドライバを作成するために、ここ数ヶ月間triylyingしているので、私はあなたの助けを求めています。プロジェクトをホストしている Here is the link to the github repository チップIDをreadRegByteと接続して取得するとうまく動作します。 しかしreadRegBufferを使って温度や湿度のデータを取得しようとしているときにPioException: I/O errorが表示されます。

int address = 0xE5; // from datasheet 
byte[] buffer = new byte[3]; 

device.readRegBuffer(address, buffer, 3); // throws PioException 

私は私がどんな質問をすることを躊躇しないで、問題の明確なアイデアを得るためにあなたを与えることができ、他のどのような手掛かりを知りません。

私はarduinoのを購入し、もう一度起動しないでください。)

はそうmutchありがとうございます!

PS:簡単な言葉を使う私はIoTとAndroidの初心者です。

+1

ようこそStackOveerflow。 [ツアー](https://stackoverfow.com/tour)にアクセスしてください。*デバッグのヘルプを探す質問(「なぜこのコードは動作しませんか?」)には、目的の動作、特定の問題またはエラー**、および質問自体の中でそれを再現するのに必要な最短のコード*** - それ以外の場合、それらは話題にはなりません。 – Selvin

+0

[OK]を、私はコードのバグの部分を追加しました。より良い? – Birdybix

+0

ホールドモード(0xF5)なしで読み込もうとしましたか? – Selvin

答えて

0

readRegBuffer私はあなたが期待しているとは思わない。 [APIドキュメント]から(https://developer.android.com/things/reference/com/google/android/things/pio/I2cDevice.html#readRegBuffer(int、byte []、int)):

指定されたレジスタから複数のバイトを読み込みます。

このメソッドは、読み込みたいレジスタが3バイト長(24ビット)だった場合に使用されます。 the part's datasheet(p21)を参照すると、0xE5の相対湿度のレジスタは2ビットワードであるように見えます。

デバイスが3バイトを返すと予想されるため、3バイトが必要になると問題が発生します。しかし、2バイトしか戻らなければ、実際の結果に矛盾が生じます。

+0

あなたも正しいです。もともと私は[BPM280センサー](https://github.com/androidthings/weatherstation)からの慣用句を使用したので私は3を試しました。それからチェックサムを得るのが便利だと思った。したがって、3はバグではなく、偽のデータを戻します。私は2を試しましたが、一貫した湿度データが得られました。温度に関しては、私はセンサーを1分以上吹き飛ばしましたが、それは動いていませんでした...とにかくあなたがそれを試してみたいと思ったら、私はgithubで新しいバージョンを押しました。大変ありがとうございます – Birdybix

+0

周辺機器の種類はそれぞれ異なります。両方ともI2Cをサポートしていても、バイト数とレジスタアドレスは異なります。データシートを必ず確認して、サポートしているデバイスのエッジケースを特定するのに役立ちます。 –

関連する問題