2017-01-21 8 views
6

周辺センサーが私のラズベリーパイ3に接続されていないときを検出できるようにしたい。周辺機器がGPIOに接続されているかどうかを確認するにはどうすればよいですか?

たとえば、GPIOパッシブ赤外線センサーがある場合。

私はこのようなすべてのGPIOポート得ることができます。ピンが空の場合でも、私はまだに接続することができますしかし

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

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); 
} 

それから私はこのようなポートに接続することができますがそれは技術的に意味をなさないです。これはgpioがバイナリのオンまたはオフであるためです)。どのAPIも存在しないようで、周辺センサーが接続されているピンと空のピンを区別する方法を理論的には正当に考えることはできません。

したがって、現時点では、センサーと回路が正しくセットアップされていることをプログラムでアサートする方法はありません。

いずれかのアイデアはありますか?それはエレクトロニクスの観点からも可能ですか?

リファレンスドキュメント:

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

答えて

6

電気的に「存在検出」が、あなたはSoCの中で本質的に見つける何を行うには方法はたくさんあります。何かが接続されている場合、GPIOピンには通常は尋ねません。それはあなたにそれを伝える方法がありません。

余分なGPIOピンは、周辺機器がコネクタに接続されているかどうかを検出するためによく使用されます。いくつかのセンサー用のプラグには、地面に短絡された "検出"ラインが含まれていて、センサーが接続されているときなどにGPIOが低くなる場合があります。 USBとSDIOはインタフェースの専用回路と同様の動作をします。

また、電流検出のようなものを使用して、より精巧な検出回路を構築することができ、彼らは必然的に専用のGPIOを通じて取り込むバイナリ信号を出す必要があります。

あなたは通常、基本的なコマンドを送信し、応答を取得することを確認することができますので、これは、シリアルペリフェラル用に達成することは簡単です。

2

入力ラインのみを使用した検出は難しい場合があります。まず、問題の範囲を絞りたいと思う。治療として、存在しないしない、接続されたセンサが接続されているが応答しない、またはセンサが特徴的でない方法で応答されたセンサの状態。

それがデジタルセンサであれば、その後、センサーと通信する(チェックサム又はパリティビットが含まれている場合は特に)、それが存在するかどう伝えるのに十分であってもよいです。 いくつかのアナログセンサは、トリガされたときに、それがどのように動作するかの具体的なスペックを持っています。これらの仕様からの逸脱を利用して、センサーが存在しないかどうかを判断することができます。

出力がエラーであるかどうかをチェックしていないデジタルセンサーがある場合、データをクロックアウトする場所(0または1がすべて有効)または出力のバイナリ1または0だけの場合は、外部の助けが必要です。ほとんどのアナログセンサーと同じです。

この外部ヘルプは、システムを既知の制御状態にし、ボタンを押してから、センサーが特定の範囲内の出力をチェックするものです。確実にするには、少なくとも2つの異なる状態が必要で、デジタル入力またはアナログ入力がテストの正しい状態で停止しないようにする必要があります。

これ以外の方法は、システムの外部にあることになります。追加のIOを使用してセンサを検出すると、センサがそこにあることの確信を高めることができますが、あなたが学んだのは、何かが存在するということです。

関連する問題