株式会社インデペンデンスシステムズ横浜

システム開発エンジニアの西田五郎が運営しております。新規開発案件のご依頼をお待ちしております。

*

SHARP製スマホSHL23でBLE通信を試してみた

      2015/05/08

SHARP製のスマホSHL23でBLE(Bluetooth Low Energy)通信のプログラミングを試してみました。わざわざSHARP製のスマホSHL23と書かないで普通にAndroidのスマホと書きたかったのですが、私のスマホのSHL23はBLEのAPIが独自の実装になっている点があるためにSHARP製のスマホSHL23と書きました。分かりにくくなるかもしれないですが一般的なAndroidでのBLE通信のプログラミングについてとSHL23の独自の部分は独自の部分として書きます。

まずは現時点でのAndroidでのBLE通信APIの状況は以下です。
Android4.3 からBLEを扱うAPIが提供された。ただしセントラルのみ対応。
Android5.0 からAndroidデバイスをペリフェラルとしても動作可能。

この条件では以下の記事で書いたようにセントラル、ペリフェラルとして両方実装(以下の記事はiOSです。)するにはAndroid5.0以上でハードウェアも対応していることが必要になってきます。
Core BluetoothでBLE通信(その2)ペリフェラル
Core BluetoothでBLE通信(その3)セントラル

そこで私が現在使っているSHL23ですが、これはAndroid4.2.2です。つまり4.3以下なのでBLE通信は使えないということになります。但し、SHARPがバックポートという形で対応(以下参照)しているとのことなのでその方法でセントラルだけでも試そうということでやってみました。(そのうち新しいAndroidタブレットが買えればとは思いますが。)
SH Developers Square Android 4.2搭載端末での Bluetooth Low Energy API 利用方法

以上を踏まえて今回の開発環境です。
開発用PC Windows8.1 Pro
開発ソフト Android Studio(Java SE Development Kit 8)
ターゲットAPI Android SDK 4.3(API18)

実行環境はもちろん、SHARP製 SHL23で、Android4.2.2です。

これで以下の記事でも使ったTI(テキサスインスツルメンツ社)のSensorTagを使ってみます。このデバイスには様々なセンサーが搭載されていてその値が取得出来るのですが、分かりやすいと思うデバイスに付いているボタンのON/OFFを検知します。
Core BluetoothでBLE通信(その1)BLEの仕様概要

以下の画像がSHL23とSensorTagを並べた状態です。画像では分かりにくいと思いますが、SensorTagの正面の上部からボタンが左右2つ押すことが出来ます。今回はこれを使って動作確認します。
IMG_0336-2

実際のプログラムですが、ここでは以下のフェンリル株式会社さんのページのプログラムを利用させて頂きました。ありがとうございます。
【連載】Bluetooth LE (5) Android 4.3 で Bluetooth LE 機器を使う

あと、メーカ提供のサンプルプログラムもあるようです。以下を参照して下さい。現時点では以下のページの概要の英文にリンクがあってそのリンク先にソースがあります。
CC2541 SensorTag ソフトウェア

ここではフェンリルさんのプログラムを元に、SHARP製スマホSHL23で動かすために以下の点を考慮しました。

マニュフェストの記述
SHARPのサイトからの引用で以下のように書かれています。
(ここから引用)
・Android SDKのバージョンがAndroid4.3(API 18)以上であること。
・Manifestに指定する”Min SDK version”が17以下、
もしくは未指定であること。
・Manifestの”Uses Feature”で、
“jp.gr.java_conf.ble_profile.api.gatt”を指定すること。
“android.hardware.bluetooth_le”を指定しないこと。
(引用ここまで)

ここでは以下のように書きました。


    ※applicationの記述は省略します。

    <uses-sdk
        android:minSdkVersion="17"
        android:targetSdkVersion="18" />

    <uses-feature android:name="jp.gr.java_conf.ble_profile.api.gatt"/>
    <uses-permission android:name="android.permission.BLUETOOTH"/>
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>

次に、起動時のBLEサポートのチェックです。以下のように書きました。

Context context = this.getApplicationContext();
if (!context.getPackageManager().hasSystemFeature("jp.gr.java_conf.ble_profile.api.gatt")) {
    Toast.makeText(this, R.string.ble_not_supported, Toast.LENGTH_SHORT).show();
    finish();
}

普通にAndroid4.3以上では以下のように書くと思います。

Context context = this.getApplicationContext();
if (!context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE)) {
    Toast.makeText(this, R.string.ble_not_supported, Toast.LENGTH_SHORT).show();
    finish();
}

その他は上記のフェンリル株式会社さんのページのプログラムをそのままです。実際のAPIの使い方等で必要な場合はそちらを参照して下さい。

あと、SHARP共通 ADB USBドライバは以下のページからダウンロードしました。
SH Developers Square ドライバ

これで以下のスクリーンショットのように動作しました。

起動時です。Statusがdisconnectedです。
screenshotshare_20150314_180856

Connectボタンでスキャンが実行されSensorTagを検知して、StatusがNOTIFICATION_REGISTEREDになりました。
screenshotshare_20150314_180046

SensorTagの正面の左右のボタンに反応します。
screenshotshare_20150314_180237

screenshotshare_20150314_180126

以上のように動作確認出来ました。

今回はここまでです。まずは私のスマホでもBLE通信が出来たということなので実際にSensorTagでセンサーの値を取得するとか、その他BLE通信で何か出来たらまた書きたいと思います。

 - Android, Bluetooth Low Energy

AdSense

AdSense

  関連記事

AndroidでUSBシリアル通信(その3)ライブラリサンプルの通信確認

AndroidでUSBシリアル通信の3回目です。前回は以下のライブラリのArdu …

Core BluetoothでBLE通信(その2)ペリフェラル

Core BluetoothでBLE通信の2回目です。前回はBLE通信の仕様につ …

Core BluetoothでBLE通信(その3)セントラル

Core BluetoothでBLE通信(Bluetooth Low Energ …

温度管理システム的なものを作ってみる(その3)Androidでの温度取得

「温度管理システム的なものを作ってみる」の3回目です。前回はArduinoで温度 …

Core BluetoothでBLE通信(その1)BLEの仕様概要

iOSでCore Bluetoothを使ってBLE(Bluetooth Low …

AndroidでUSBシリアル通信(その4)ライブラリサンプルの内容

AndroidでUSBシリアル通信の4回目です。今回は、前回動作確認をしたライブ …

AndroidでUSBシリアル通信(その2)ライブラリサンプルのArduinoスケッチ

AndroidでUSBシリアル通信の2回目です。前回はハードウェア構成、ソフトウ …

温度管理システム的なものを作ってみる(その1)システム概要

「温度管理システム的なものを作ってみる」の1回目です。AndroidでUSBシリ …

温度管理システム的なものを作ってみる(その5)AndroidからCloudへの送信

温度管理システム的なものを作ってみるの5回目です。前回はCloud(Micros …

無線マイコン ToCoStick(トコスティック)をAndroidで使ってみた

無線マイコンの ToCoStick(トコスティック)をAndroidスマホで使っ …