2017-12-06 10 views
0

안드로이드 것들의 친애하는 선구자!안드로이드 것들 I2C 드라이버 PioException : I/O 오류

Adafruit SI7021 Themperature 및 습도 센서 용 안드로이드 드라이버를 만들기 위해 지난 두 달 동안 삼중 해왔으므로 저는 여러분의 도움을 요청합니다. 프로젝트를 호스팅하는 Here is the link to the github repository readRegByte으로 칩 ID를 연결하고 가져 오는 것이 좋습니다. 그러나 readRegBuffer을 사용하여 온도 또는 습도 데이터를 검색하는 동안 PioException: I/O error이 표시됩니다.

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

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

내가 그래서 어떤 질문을 주저하지 말고 문제의 명확한 아이디어를 얻을 당신을 줄 수있는 다른 어떤 단서도 모른다.

당신에게 너무 모자의 일종 감사)

나를 다시 한번 아두 이노를 구입하고 시작하지 마십시오!

추 신 : 간단한 단어 사용 IoT 및 Android의 초보자입니다.

+1

Welcome to StackOveerflow. [둘러보기] (https://stackoverfow.com/tour) ...를 방문하십시오. * 디버깅 도움말을 찾는 질문 ("이 코드가 작동하지 않는 이유는 무엇입니까?")에는 원하는 동작, 특정 문제 또는 오류 ** 및 그 자체로 질문을 재현하는 데 필요한 가장 짧은 코드 *** - 다른 경우에는 주제가 아닙니다. – Selvin

+0

그래, 코드의 도청 부분을 추가했습니다. 보다 나은? – 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)의 exaple을 사용했기 때문에 원래 3 번 시도했습니다. 그런 다음 체크섬을 얻는 것이 유용 할 거라고 생각했습니다 (어떤 도움이된다면 몰라요). 그래서 3은 버그가 아니지만 가짜 데이터를 가져옵니다. 나는 2를 시도했다. 일관된 습도 데이터를 얻는다. 온도에 관해서는 나는 잠깐 동안 센서에 불이났다. 그리고 그것은 mutch를 움직이지 않고 있었다. .. 당신이 이제까지 그것을 시험해보고 싶어하면 나는 어떻게해서든지 github에 새로운 버전을 밀었다. 매우 다오 같은 고마워요 – Birdybix

+0

주변 기기의 각 유형이 다릅니다. 둘 다 I2C를 지원하더라도 바이트 수와 레지스터 주소는 달라집니다. 데이터 시트를 읽으면 지원하는 장치의 엣지 케이스를 식별하는 데 도움이됩니다. –