2017-12-06 1 views
0

Hallo liebe Pioniere von Android-Dinger!Android Dinge I2C-Treiber PioException: I/O-Fehler

Ich rufe zu Ihrer Hilfe, da ich in den letzten paar Monaten einen Android-Treiber für den Adafruit SI7021 Temperatur- und Feuchtigkeitssensor gebaut habe. Here is the link to the github repository Hosting des Projekts. Verbinden und Abrufen der Chip-ID mit readRegByte funktioniert gut. Aber ich bekomme eine PioException: I/O error beim Versuch, Temperatur oder Luftfeuchtigkeit Daten mit readRegBuffer abrufen.

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

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

Ich weiß nicht, was andere Ahnung, die ich Ihnen geben kann eine klare Vorstellung von dem Problem zu erhalten, so zögern Sie nicht, Fragen zu stellen.

Bitte machen Sie mir ein Arduino nicht kaufen und wieder von vorne beginnen;)

Danke so mutch!

PS: Verwenden Sie einfache Wörter Ich bin ein Anfänger in IoT und Android.

+1

Willkommen bei StackOveerflow. Bitte besuchen Sie [tour] (https://stackoverfow.com/tour) ... * Fragen, die Debugging-Hilfe suchen ("Warum funktioniert dieser Code nicht?") Müssen das gewünschte Verhalten, ein spezifisches Problem oder einen Fehler ** und beinhalten der kürzeste Code, der notwendig ist, um ihn in der Frage selbst zu reproduzieren. *** - In anderen Fällen sind sie nicht Thema. – Selvin

+0

Ok, ich habe den Bug-Teil des Codes hinzugefügt. Besser? – Birdybix

+0

haben Sie versucht, ohne Haltemodus (0xF5) zu lesen? – Selvin

Antwort

0

Die readRegBuffer tut nicht, was ich glaube, dass Sie erwarten. Von [der API-Dokumentation] (https://developer.android.com/things/reference/com/google/android/things/pio/I2cDevice.html#readRegBuffer(int, byte [], int)):

Lesen mehrerer Bytes aus einem bestimmten Register.

Diese Methode würde verwendet, wenn das Register, das Sie lesen wollten, 3 Byte lang war (24 Bit). Betrachtet man the part's datasheet (p21), scheint das Register 0xE5 für die relative Feuchtigkeit ein 2-Bit-Wort zu sein.

Das Erwarten von 3 Bytes wird ein Problem verursachen, da Ihr Gerät erwartet, dass 3 Bytes zurückgegeben werden. Wenn jedoch nur zwei Bytes zurückkommen, tritt eine Inkonsistenz im tatsächlichen Ergebnis auf.

+0

Sie haben auch recht. Ursprünglich versuchte ich 3, weil ich das Beispiel von [dem BPM280-Sensor] (https://github.com/androidthings/weatherstation) verwendete. Dann dachte ich, es wäre nützlich, die Prüfsumme zu bekommen (weiß ich nicht, ob es hilfreich ist). Also 3 nicht Bug, sondern bringt falsche Daten zurück. Ich habe versucht 2 Ich bekomme eine kohärente Luftfeuchtigkeit Daten. Was die Temperatur anbetrifft, blies ich den Sensor für gut eine Minute und es bewegte sich nicht mutch ... Jedenfalls habe ich die neue Version auf Github geschoben, wenn du es jemals ausprobieren wolltest. Vielen Dank Mutch – Birdybix

+0

Jede Art von Peripheriegeräten ist anders. Selbst wenn beide I2C unterstützen, wird die Anzahl der Bytes und Registeradressen unterschiedlich sein. Stellen Sie sicher, dass Sie das Datenblatt lesen, um Randfälle für das Gerät, das Sie unterstützen, zu identifizieren. –

Verwandte Themen