Upload
egupyon
View
708
Download
3
Embed Size (px)
DESCRIPTION
ワイヤレスジャパン2014で講演した『BLEを使ってスマホアクセサリを作ろう!』の資料です。
Citation preview
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 いますぐアクセス!