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

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

Android Bluetooth Low Energy

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

投稿日:2015年3月14日 更新日:

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通信で何か出来たらまた書きたいと思います。

AdSense

AdSense

-Android, Bluetooth Low Energy

執筆者:

関連記事

温度管理システム的なものを作ってみる(その2)Arduinoでの温度取得からスマホへ送信

「温度管理システム的なものを作ってみる」の2回目です。前回は全体的な内容についてでした。今回はArduinoでの温度取得とスマホへの送信についてです。Arduinoは、Arduino UNOを使ってい …

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

「温度管理システム的なものを作ってみる」の3回目です。前回はArduinoで温度データを取得する内容についてでした。今回はそのArduinoから温度データを取得するスマホ(Android)のアプリにつ …

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

AndroidでUSBシリアル通信の3回目です。前回は以下のライブラリのArduinoのスケッチの動作を確認しました。 usb-serial-for-android (※2021年1月10日追記 現時 …

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

温度管理システム的なものを作ってみるの5回目です。前回はCloud(Microsoft Azure)での処理について書きました。そのCloudの処理の温度データ登録処理に送信するためのAndroidの …

AndroidでUSBシリアル通信(その1)ハードウェア・ソフトウェア構成等

Androidスマートフォン、タブレットでUSBシリアル通信を行う方法についてです。AndroidでのUSBシリアル通信の方法は何通りかあると思いますが、今回はAndroidのUSBホスト機能とオープ …