2014-05-28 ワイヤレスジャパン 講演資料

Post on 22-Jun-2015

712 Views

Category:

Technology

3 Downloads

Preview:

Click to see full reader

DESCRIPTION

ワイヤレスジャパン2014で講演した『BLEを使ってスマホアクセサリを作ろう!』の資料です。

TRANSCRIPT

BLEを使って スマホアクセサリ作ろう!

日本Androidの会 秋葉原支部 アクセサリ部 江口 和幸

自己紹介 ■名前 江口 和幸(えぐち かずゆき) ■年齢 37歳   ■職業 ものづくりを大事にするシステムエンジニアです! ■趣味  ドライブ=旅行、 電子工作 、マラソン、スキューバーダイビング ■主に活動している場 ・日本Androidの会 秋葉原支部 アクセサリ部 ・日本Androidの会 秋葉原支部 コスプレ理系女子普及部 ・さくらボードユーザー会 ■Twitter

@KazuyukiEguchi

突然!質問です

� Twitter , Facebookなどのソーシャルサービスを利用している人?は挙手してください。

近い将来

� ソーシャルサービスで、会話している相手は、人間だけではなく、マシンとも会話しているかもしれない。

バッテリ残量をつぶやいています

歩数や距離をつぶやいていたり

既にマシン(スマホ)が 情報を発信し始めています

アクセサリを自作して もっとつぶやかせましょう!

今、何故BLEなのか?

やっと!

国内のキャリアから発売される

夏モデルのAndroid端末の バージョンが4.4で、

BLE搭載機種が出てきたから!

BLE(Bluetooth Low Energy) �  近距離無線通信技術Bluetoothの拡張の1つで、極低電

力で通信可能なもの。2010年7月に発表されたBluetooth 4.0規格の一部として策定された。

�  免許なく使える2.4GHz(ISMバンド)の電波を使い、最大1Mbpsの通信が可能。対応チップは従来の1/3程度の電力で動作することができ、ボタン電池1つで数年稼働することができるとされている。各種センサーや体に身につける小型の装置などでの利用が見込まれている。

引用:e-Words http://e-words.jp/w/BLE.html

よく使われるBLEモジュール

Laird Technologies Wireless M2M

BL600

Bluegiga Technologies BLE112-A

人気な理由

・技適マークを取得済み ・入手しやすい(通販で買える) ・価格も安い(1個1500円程度) ・UART以外にも、I2C、SPIなどもI/Oがある ・マイコンを内蔵していて、BASIC言語で開発できる

FRISKケースに入る BL600搭載基板

ランニングエレクトロニクス製 REBL600FR

4096円(税込み)

REBL600FRのいいところ!

BASICのプログラム書き換えは、 汎用FTDIのアダプタでできる!

※ファームウェアを書き換えるには、専用のツールが必要

開発環境

プログラムは Notepad++

を使って記述します。

コンパイル転送は UwTerminal で行います。

開発にあると便利なアプリ

iOS用 LightBlue Android用 B-BLE

BLEデバイス開発の 大まかな流れ

◯アドバタイズの設定   (デバイス名などをつぶやく) ◯サービスとキャラクタリステックの設定   (Generic Attribute Profile) ◯書き込みされた際の動作   (センサー類への出力動作) ◯読み出された際の動作   (センサー類からの入力動作)

接続したセンサー類 その1

秋月電子通商 ML8511

DIPモジュールキット

これからの季節!紫外線(UV)が気になりますよね?

接続したセンサー類 その2

秋月電子通商 AE-AQM0802 I2C接続小型

LCDモジュールピッチ 変換キット

Adafruit Mini 8x8 LED Matrix

w/I2C Backpack

試作したアクセサリの仕様 �  サービスUUID

9EF2BB2C-9ADB-448D-A628-D456425CDB58

�  キャラクタリステックUUID 00003000-0000-1000-8000-00805F9B34FB Matrix LED(0x70) WRITE 00003001-0000-1000-8000-00805F9B34FB Matrix LED(0x71) WRITE 00003002-0000-1000-8000-00805F9B34FB Matrix LED(0x72) WRITE 00003003-0000-1000-8000-00805F9B34FB Matrix LED(0x73) WRITE 00003004-0000-1000-8000-00805F9B34FB UVセンサーの値 READ,NOTIFY

とりあえずつぶやかせる

DIM rc DIM addr$ : addr$="" rc = BleAdvertStart(0,addr$,800,0,0) WAITEVENT

アクセスしてみると

オリジナルデバイス名にする

#define MANF_NAME "eguchi Technologies" #define MODELSTR "EGUCHI 600" #define SERIALNUM "1234" #define HWREV "1.00" #define SWREV "1.00" DIM rc DIM addr$ : addr$="" DIM dvcNme$ : dvcNme$= MODELSTR DIM MinConnInt : MinConnInt = 500000 DIM MaxConnInt : MaxConnInt = 1000000 DIM ConnSupTO : ConnSupTO = 4000000 rc = BleGapSvcInit(dvcNme$,0,0,MinConnInt,MaxConnInt,ConnSupTO,0) rc = BleSvcRegDevInfo(MANF_NAME,MODELSTR,SERIALNUM,HWREV,SWREV,"","","") rc = BleAdvertStart(0,addr$,800,0,0) WAITEVENT

動作させると

一度接続すると デバイスが見えなくなるので!

FUNCTION HndlrBleMsg(BYVAL nMsgId AS INTEGER, BYVAL nCtx AS INTEGER)

SELECT nMsgId CASE 0 CASE 1 rc = BleAdvertStart(0,addr$,800,0,0) CASE ELSE ENDSELECT

ENDFUNC 1 ONEVENT EVBLEMSG CALL HndlrBleMsg rc = BleGapSvcInit(dvcNme$,0,0,MinConnInt,MaxConnInt,ConnSupTO,0) rc = BleSvcRegDevInfo(MANF_NAME,MODELSTR,SERIALNUM,HWREV,SWREV,"","","") rc = BleAdvertStart(0,addr$,800,0,0) WAITEVENT

オリジナルサービスを作る Sub OriginalSvc()   dim rc

dim uuid$ : uuid$ = "9EF2BB2C9ADB448DA628D456425CDB58”   uuid$ = StrDehexize$(uuid$)   dim svc_uuid : svc_uuid = BleHandleUuid128(uuid$)

  rc = BleSvcCommit(1,svc_uuid,hSvc) endsub ONEVENT EVBLEMSG CALL HndlrBleMsg rc = BleGapSvcInit(dvcNme$,0,0,MinConnInt,MaxConnInt,ConnSupTO,0) rc = BleSvcRegDevInfo(MANF_NAME,MODELSTR,SERIALNUM,HWREV,SWREV,"","","") OriginalSvc() rc = BleAdvertStart(0,addr$,800,0,0) WAITEVENT

オリジナルサービスが増えた!

キャラクタを作る Sub OriginalSvc()   dim rc

  〜略〜

dim uuid$ : uuid$ = "9EF2BB2C9ADB448DA628D456425CDB58”   uuid$ = StrDehexize$(uuid$)   dim svc_uuid : svc_uuid = BleHandleUuid128(uuid$)

  rc = BleSvcCommit(1,svc_uuid,hSvc)

  mdAttr = BleAttrMetadata(BLE_ATTR_ACCESS_NONE,BLE_ATTR_ACCESS_OPEN,8,0,rc)   mdCccd = BLE_CHAR_METADATA_ATTR_NOT_PRESENT   mdSccd = BLE_CHAR_METADATA_ATTR_NOT_PRESENT   chProp = BLE_CHAR_PROPERTIES_WRITE

  rc = BleCharNew(chProp, BleHandleUuid16(0x3000),mdAttr,mdCccd,mdSccd)   attr$="\00\00\00\00\00\00\00\00”   rc = BleCharCommit(hSvc,attr$,hChar1) endsub

キャラクタができた!

キャラクタに書き込まれた 値を取得する

function HandlerCharVal(BYVAL charHandle, BYVAL offset, BYVAL len) as integer

dim at$ dim rc

if charHandle == hChar1 then rc = BleCharValueRead(charHandle,at$) PRINT at$ endif

endfunc 1 ONEVENT EVCHARVAL CALL HandlerCharVal ONEVENT EVBLEMSG CALL HndlrBleMsg

入力した値が取得できた

Matrix LEDの制御 その1 function setMatrix(BYVAL nSlaveAddr,BYVAL data$ as string) as integer

dim rc dim handle dim stWrite$, stRead$, nReadLen stRead$ = "" nReadLen = 0 rc = I2cOpen(100000,0,handle) if rc!= 0 then print "\nFailed to open I2C interface with error code ";rc;"\n" exitfunc rc else endif

stWrite$ = "\21" rc = I2cWriteRead(nSlaveAddr,stWrite$,stRead$,nReadLen) stWrite$ = "\81" rc = I2cWriteRead(nSlaveAddr,stWrite$,stRead$,nReadLen) stWrite$ = "\e8" rc = I2cWriteRead(nSlaveAddr,stWrite$,stRead$,nReadLen) rc = I2cWriteRead(nSlaveAddr,data$,stRead$,nReadLen) I2cClose(handle)

endfunc rc

Matrix LEDの制御 その2 function HandlerCharVal(BYVAL charHandle, BYVAL offset, BYVAL len) as integer

dim at$ dim rc dim value$

if charHandle == hChar1 then value$ = "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" rc = BleCharValueRead(charHandle,at$)

rc = strsetblock(value$,STRGETCHR(at$,0),1,1) rc = strsetblock(value$,STRGETCHR(at$,1),3,1) rc = strsetblock(value$,STRGETCHR(at$,2),5,1) rc = strsetblock(value$,STRGETCHR(at$,3),7,1) rc = strsetblock(value$,STRGETCHR(at$,4),9,1) rc = strsetblock(value$,STRGETCHR(at$,5),11,1) rc = strsetblock(value$,STRGETCHR(at$,6),13,1) rc = strsetblock(value$,STRGETCHR(at$,7),15,1) rc = setMatrix(0x70,value$) endif

endfunc 1

デモ 1

使用しているAndroid端末は、Galaxy S5

デモ 2

使用しているAndroid端末は、Galaxy S5

まとめ

Android 4.4搭載の端末が、国内キャリアから多数発売される。 BLEデバイスを作れば、Androidだけではなく、iOSも対応できる。 BLEデバイスはマイコンを搭載しているので、センサーなどを付けて、BASIC言語で、オリジナルBLEデバイスを開発できます。

告知 日本Androidの会 秋葉原支部

第20回 アクセサリ部の定例会を開催します

�  日時:2014年6月21日(土) 15:00−17:00 この後、懇親会あり

�  場所:若松通商 6F(アキバNET館)

�  詳細は

http://goo.gl/ibF2Hw いますぐアクセス!

top related