Androidプログラマへの道 〜 Moonlight 明日香 〜 - GPIOの入力値を読む
GPIOピンからデータを読むには, Gpioクラスを利用する.

データのリード

  • GpioActivity.java
    • PeripheralManagerServiceクラスのインスタンスを生成する.
    • PeripheralManagerService#openGpioメソッドで, PIN名を指定してオブジェクトを取得する.
    • Gpio#setDirectionメソッドで, 入力ビンに設定する.
    • Gpio#setActiveTypeメソッドで, "Low"または"High"のいずれをアクティブに設定する.
    • Gpio#getValueメソッドで, 入力ピンの状態(true:active, false:not active)を読み出す.
    • onDestroyメソッド内において, Gpio#closeメソッドでピンを解放する.
package com.moonlight_aska.androidthings.gpio;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import com.google.android.things.pio.Gpio;
import com.google.android.things.pio.PeripheralManagerService;
import java.io.IOException;

public class GpioActivity extends Activity {
  private static final String TAG = "GpioActivity";
  private static final String PIN_NAME = "BCM21";
  private Gpio mGpio;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    PeripheralManagerService manager = new PeripheralManagerService();
    try {
      // GPIOピン指定
      mGpio = manager.openGpio(PIN_NAME);
      // 入力ピンに設定
      mGpio.setDirection(Gpio.DIRECTION_IN);
      // HighをACTIVEに設定
      mGpio.setActiveType(Gpio.ACTIVE_HIGH)
      // 現在の状態リード
      Log.d(TAG, "Input : " + mGpio.getValue());
    } catch (IOException e) {
      Log.e(TAG, "Error on PeripheralIO API", e);
    }
  }

  @Override
  protected void onDestroy() {
    super.onDestroy();

    // Close the GPIO pin.
    try {
      if (mGpio != null)
        mGpio.close();
    } catch (IOException e) {
      Log.e(TAG, "Error on PeripheralIO API", e);
    } finally {
      mGpio = null;
    }
  }
}
  • 動作例:
ボード:Raspberry Pi 3
(1) GPIO21:Low


(2) GPIO21:High