2017-01-21 3 views
6

주변 장치 센서가 내 라즈베리 파이 3에 연결되어 있지 않을 때를 감지 할 수 있기를 원합니다.주변 장치가 GPIO에 연결되어 있는지 어떻게 알 수 있습니까?

예를 들어, GPIO 수동 적외선 센서가있는 경우.

나는이 같은 모든 GPIO 포트를 얻을 수 있습니다 :

PeripheralManagerService manager = new PeripheralManagerService(); 
List<String> portList = manager.getGpioList(); 
if (portList.isEmpty()) { 
    Log.i(TAG, "No GPIO port available on this device."); 
} else { 
    Log.i(TAG, "List of available ports: " + portList); 
} 

그런 다음 나는이 같은 포트에 연결 할 수 있습니다 :

try { 
    Gpio pir = new PeripheralManagerService().openGpio("BCM4") 
    } catch (IOException e) { 
     // not thrown in the case of an empty pin 
    } 

핀은 아직도 연결할 수 있습니다 비어 그러나 경우에도 그것 (은 기술적으로 의미가 있습니다. gpio는 단지 바이너리입니다.). 어떤 API도없는 것 같아요. 논리적으로 주변 센서가 연결된 핀과 "비어있는"핀을 구별 할 수있는 방법을 합리적으로 생각할 수 없습니다.

따라서 지금은 센서와 회로가 올바르게 설정되었음을 프로그래밍 방식으로 지정할 방법이 없습니다.

어떤 아이디어가 있습니까? 전자 제품의 관점에서도 가능합니까?

참조 문서 :

https://developer.android.com/things/sdk/pio/gpio.html

답변

6

전기적으로 "존재 감지"할 수있는 방법이 많이 있지만, 당신은의 SoC에 본질적으로 찾을 수 아무것도 있습니다. 무언가가 붙어있는 경우 GPIO 핀을 묻지는 않을 것입니다. 말할 것도 없습니다.

여분의 GPIO 핀은 주변 장치가 커넥터에 연결되어 있는지 감지하는 데 자주 사용됩니다. 일부 센서의 플러그에는 접지에 단락 된 "감지"라인이 포함될 수 있으며, 예를 들어 센서가 연결될 때 GPIO가 낮아질 수 있습니다. USB 및 SDIO는 인터페이스의 일부 전용 회로와 비슷한 기능을 수행합니다.

또한 전류 감지와 같은 것들을 사용하여보다 정교한 감지 회로를 구축 할 수도 있지만 필연적으로 전용 GPIO를 통해 캡처하는 바이너리 신호를 출력해야합니다.

일반적으로 기본 명령을 보내고 응답을받을 수 있기 때문에 직렬 주변 장치의 경우 더 쉽게 구현할 수 있습니다.

2

입력 라인을 사용하여 탐지하는 것은 어려울 수 있습니다. 먼저 문제의 범위를 좁히고 싶습니다. 센서가 연결되지 않았거나 센서가 연결되었지만 응답이 없거나 센서가 비정상적인 방식으로 반응하는 상태를 나타내지 않는 것으로 간주합니다.

디지털 센서 인 경우 센서와 통신하면 센서가 있는지 여부를 알 수 있습니다 (특히 체크섬 또는 패리티 비트가 포함 된 경우). 일부 아날로그 센서에는 트리거되었을 때의 동작 방식에 대한 특정 사양이 있습니다. 이러한 사양의 편차를 활용하여 센서가 없는지 확인할 수 있습니다.

디지털 센서가 있거나 출력에 오류가 없거나 데이터를 클럭 아웃 (0 또는 1 모두 유효)하거나 출력용으로 바이너리 1 또는 0 만있는 경우 외부 도움이 필요합니다. 대부분의 아날로그 센서와 동일합니다.

이 외부 도움말은 시스템을 알려진 제어 상태에 놓고 버튼을 누른 다음 센서가 특정 범위 내에서 출력을 확인하는 것입니다. 절대적으로 확신하기 위해 디지털 또는 아날로그 입력이 테스트를 위해 올바른 상태로 고정되지 않도록하기 위해 최소한 두 가지 상태가 필요합니다.

다른 어떤 방법도 시스템 외부에있을 수 있습니다. 추가 IO를 사용하여 센서를 "감지"하면 센서의 신뢰도를 높일 수 있지만, "무언가"가 있다는 것을 배웠을 때 오탐 (false positive)이 발생할 수 있습니다.