C/C++プログラマの管理者が, Androidプログラムにチャレンジ. AndroidプログラミングのTipsをメモっていく予定です.

Android Things

UARTでデータを読むには, UartDeviceクラスを利用する.

データリード

  • UartActivity.java
    • PeripheralManagerServiceクラスのインスタンスを生成する.
    • PeripheralManagerService#openUartDeviceメソッドで, ポートを指定してUartDeviceクラスのオブジェクトを取得する.
    • UartDevice#registerUartDeviceCallbackメソッドで, コールバック関数を登録する.
    • コールバック関数にて, onUartDeviceDataAvailableメソッドをオーバーライドする.
    • UartDevice#readメソッドで, データを受信する.
    • UartDevice#unregisterUartDeviceCallbackメソッドで, 登録を解除する.
    • UartDevice#closeメソッドで, デバイスを解放する.
package com.moonlight_aska.androidthings.uart;

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

public class UartActivity extends Activity {
  private final static String TAG = "UartActivity";
  private final static String UART_NAME = "UART0";
  private UartDevice mUart;

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

    PeripheralManagerService manager = new PeripheralManagerService();
    try {
      // UARTデバイスオープン
      mUart = manager.openUartDevice(UART_NAME);
      // UARTのパラメータ設定
      setUartParam();
      // コールバック関数登録
      mUart.registerUartDeviceCallback(mUartCallback);
    } catch (IOException e) {
      Log.e(TAG, "Error on PeripheralIO API", e);
    }
  }

  // UARTのパラメータ設定
  private void setUartParam() throws IOException {
    // ボーレート
    mUart.setBaudrate(115200);
    // データサイズ
    mUart.setDataSize(8);
    // パリティ
    mUart.setParity(UartDevice.PARITY_NONE);
    // ストップビット
    mUart.setStopBits(1);
    // フロー制御
    mUart.setHardwareFlowControl(UartDevice.HW_FLOW_CONTROL_NONE);
  }

  // データの読み込み
  private void readUartBuffer(UartDevice uart) throws IOException {
    byte[] buffer = new byte[32];
    int count;
    while ((count = uart.read(buffer, buffer.length)) > 0) {
      Log.d(TAG, "> " + convByteToString(buffer, count));
    }
  }

  private String convByteToString(byte[] data, int length) {
    // byte -> String変換
    char[] str = new char[length];
    for (int i=0; i<length; i++) {
      str[i] = (char)data[i];
    }
    return new String(str);
  }

  // コールバック関数
  private UartDeviceCallback mUartCallback = new UartDeviceCallback() {
    @Override
    public boolean onUartDeviceDataAvailable(UartDevice uart) {
      try {
        readUartBuffer(mUart);
      } catch (IOException e) {
        Log.e(TAG, "Error on PeripheralIO API", e);
      }
      return true;
    }
  };

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

    if (mUart != null) {
      try {
        // 登録の解除
        mUart.unregisterUartDeviceCallback(mUartCallback);
        // UARTデバイスクローズ
        mUart.close();
      } catch (IOException e) {
        Log.e(TAG, "Error on PeripheralIO API", e);
      } finally {
        mUart = null;
      }
    }
  }
}
  • 動作例
ボード:Raspberry Pi 3




コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Menu


逆引き(基礎編)

画面表示/操作(49)

フラグメント(1)

逆引き(応用編)

Firebase(2)

AD



管理人/副管理人のみ編集できます