SlideShare ist ein Scribd-Unternehmen logo
1 von 46
Downloaden Sie, um offline zu lesen
食関連産業IT化(機械化)講座 応用編 
Bluetooth Low Energy入門講座 
モノとアプリをつなげる基本技術 
第二部 実習 
北海道ソフトウェア技術開発機構 
2013年11月12日~13日
2日目の内容 
• 午前 
– コードによるデータの取得 
– 各方法の説明 
• 午後 
– インターネットへのアップロード
コードによる制御
コード制御の実装方法 
• 自動化やデータ処理を行ないたい 
• プログラムによる制御をする必要がある 
• 3案 
– gatttool+python 
– libbluetooth+socket(C言語) 
– btle.js (BLEのnode.js実装: JavaScript)
TI社のサンプル 
• TI社提供のサンプルコード 
– iOS用 
– Android用 
– http://www.ti.com/tool/sensortag-sw
実装方法 
• python+gatttool 
– gatttoolコマンドを使用、簡便 
• libbluetooth+socket 
– C言語 
– 正統派だが面倒 
• btle.js 
– BLEのnode.js実装: JavaScript 
– Webとの連携に良いかも
gatttool+スクリプト 
• gatttoolを利用してデバイスを制御 
• スクリプト言語としてpythonを利用 
– 前述のgatttoolをサブプロセスとしてstdio経由 
で使用する 
• サンプル 
– ble-python ディレクトリ 
– IR Temperatureの取得 
– これを実際に動作させてみる
python超入門 
• ブロック 
– Cでいう { ... } 
– コロン“:”で始まりインデントを下げる 
– インデントにはタブを使わない(ほうが良い) 
• 関数呼び出しには括弧が必須 
– エラーにならないので注意 
• 関数定義はdef文
ble-python(0) 
• 準備 
– BDアドレスを調べておく 
$ sudo hcitool lescan 
LE Scan ... 
90:59:AF:0A:A8:A4 (unknown) 
90:59:AF:0A:A8:A4 SensorTag
ble-python(1) 
• ソース: sensortag-temp.py 
• BDアドレスを修正 
def main(bdaddr='90:59:AF:0A:A8:A4'): 
tool = connect(bdaddr) 
while True: 
try: 
tmpr = read_data(tool) 
print tmpr 
except: 
print "Error:", sys.exc_info() 
time.sleep(5)
ble-python(2) 
• 実行手順 
– 必要に応じてボタンを押す 
$ sudo python sensortag-temp.py 
Preparing to connect. You might need to press the 
side button... 
15.3 
15.6 
15.3
ble-python(3) 
• データをどうやって取っているか 
– コマンドを送って、反応を受け取る 
tool.sendline('char-read-hnd 0x25') 
tool.expect('descriptor: .*') 
rval = tool.after.split() 
#print rval 
objT = floatfromhex(rval[2] + rval[1]) 
ambT = floatfromhex(rval[4] + rval[3]) 
tmpr = calcTmpTarget(objT, ambT) 
– どんな応答を受け取っているかprintで確認
ble-python(4) 
• 他のセンサを使用するよう修正 
– UUIDを変更して別のセンサ値を取得してみる 
– 参考: http://processors.wiki.ti.com/index.php/SensorTag_User_Guide 
• 初期化部分 
– イネーブルして一度取得 
tool.sendline('char-write-cmd 0x29 01') 
tool.expect('¥[LE¥]>') 
tool.sendline('char-read-hnd 0x25') 
tool.expect('descriptor: .*')
ble-python(5) 
• 初期化部分 
– イネーブル対象を変更 
tool.sendline('char-write-cmd 0x29 01') 
tool.expect('¥[LE¥]>') 
tool.sendline('char-read-hnd 0x25') 
tool.expect('descriptor: .*') 
• データ取得部分 
tool.sendline('char-read-hnd 0x25') 
tool.expect('descriptor: .*') 
rval = tool.after.split() 
#print rval
ble-python(6) 
• 温度 
• 加速度 
• 方位(地磁気) 
• ボタン 
• 気圧 
• ジャイロ
socket+C言語 
• 別実装の方法として参考提示 
• サンプル 
– ble-cディレクトリ
socket+C言語: コンパイル 
• ライブラリのインストール(済) 
$ sudo apt-get install libbluetooth-dev 
• コード中のアドレスを修正 
– test.c line:186 
str2ba("90:59:AF:0A:A8:A4", &opts.dst); 
• コンパイル 
$ make
socket+C言語: 実行 
• コマンド入力後、センサーのボタンを押す 
• その後Enterを入力 
$ ./test 
push side button 
bt_io_connect: 3 
write WRITE_CMDwrite: 4 
write READ_REQwrite: 3 
read responseread: 5 
opcode: 11 
ad fe c8 0a 
temperature: 17.554379
socket+C言語: 解説 
• 講習の範囲を超えるので簡単に 
• ユーティリティとしてbtio.c/hを使用 
– 後述のbtle.jsの一部、bluz由来 
• ソケットを作成 
– PF_BLUETOOTH 
– PROTO_L2CAP 
• ATTのデータフォーマットで入出力 
• root権限でなくても動作する
btle.js 
• Node.js向けBLEモジュール 
– beetle juiceと発音するそうです 
– bluezのコードをベースに、glib等ライブラリ依 
存を削除 
– githubで公開 
• https://github.com/jacklund/btle.js 
– npmでインストール可能
Node.jsとは 
• 趣旨から外れるので一言だけ説明 
– サーバサイドJavaScript 
– イベントドリブン 
– 高負荷にも耐えるWebアプリケーションサーバ 
として知られる
btle.js(0) 
• インストール(済) 
– node.jsの最新版をインストール 
– npmでbtle.jsをインストール 
$ sudo apt-get install libbluetooth-dev 
$ sudo apt-get install python-software-properties python 
$ sudo apt-get install g++ make 
$ sudo add-apt-repository ppa:chris-lea/node.js 
$ sudo apt-get update 
$ sudo apt-get install nodejs npm 
$ npm install -g node-gyp 
$ npm install btle.js
btle.js(1) 
• アドレスの修正 
// Connect 
btle.connect('90:59:AF:0A:A8:A4', function(err, device) { 
• 実行 
$ node btle-test.js 
Temperature, 65230, 2944 
Temperature, 65220, 2944 
– Notificationを受信して生データを表示
btle.js(2) 
• アトリビュートの読み出し版 
$ node btle-read2.js 
connecting SensorTag... 
connected 
Temperature: 17.475821408366528 
Got close 
– 温度への変換を実装 
– 少し遅延を入れている
btle.js(3) 
• HTTPサーバ版 
$ node btle-http2.js 
connecting SensorTag... 
connected 
– ブラウザから参照する http://localhost:1337/
noble 
• noble: もうひとつのnode.js ble実装 
– というか決定版 
– https://github.com/sandeepmistry/noble 
– 各種デバイス対応やペリフェラルも存在
noble+sensortag 
• インストールはこれだけ 
$ sudo npm install sensortag 
$ sudo npm install async 
• 実行 
$ cd node_modules/sensortag 
$ sudo node test.js
インターネット連携
インターネット連携 
• やること:センサーから取得したデータをサ 
ーバにアップロードする 
• クラウドサービスを利用する
xively.com 
• 「Public Cloud for the Internet of Things」 
• モノのインターネットのためのクラウド 
• データの蓄積 
• グラフ化 
• WebAPI (REST) 
• 各種プラットフォーム用ライブラリあり 
• Developer Accountは無料で取得可能
xively.com
Bluetooth Low Energy入門講座 -part2
実例:室温記録
xivelyのはじめ方 
1. アカウントを作成 
2. フィードを作成 
3. APIキーを取得 
4. データをアップロード
xively: アカウント作成 
• (作成済みのアカウントを共有します)
xively:手順 
• ログイン 
• デバイス(フィード)作成 
• Feed IDとAPI Keyを取得 
• スクリプトに設定 
• 実行
xively:デバイス追加
xively:Feed IDとAPI Key
xively:スクリプト 
• Feed IDとAPIキーを転記 
XIVELY_API_KEY = 
"eIpXlvKHd9CdtdD5SK9TgzaiZ9osxOX2a05MK18epQdAb0iy" 
XIVELY_FEED_ID = 813879821 
• Bluetoothアドレスを転記 
def main(bdaddr='90:59:AF:0A:A8:A4'): 
• インターバルを調整
xively:実行 
• 実行すると、データ取得&アップロードを 
継続 
$ python ./sensortag2xively.py 
Preparing to connect. You might need to press the side 
button... 
(datetime.datetime(2013, 11, 9, 14, 11, 29, 172604, 
tzinfo=<DstTzInfo 'Asia/Tokyo' JST+9:00:00 STD>), 20.7) 
(datetime.datetime(2013, 11, 9, 14, 11, 30, 828813, 
tzinfo=<DstTzInfo 'Asia/Tokyo' JST+9:00:00 STD>), 21.1) 
....
xively:コンソール
xively:フィード表示 
• Xivelyのサイトでグラフ表示 
– https://xively.com/feeds/813879821
xively:データ取得 
• REST APIにより蓄積データを参照可能 
– https://xively.com/dev/docs/api/quick_reference/historical_data/ 
– JSON, XML, CSV 
• CSVで一日分のデータを取得する例 
$ wget --header "X-ApiKey: 
eIpXlvKHd9CdtdD5SK9TgzaiZ9osxOX2a05MK18epQdAb0iy" 
'https://api.xively.com/v2/feeds/813879821/datastreams/tmpr. 
csv?start=2013-11-09T00:00:00Z&duration=24hours' -O tmpr.csv
xively:グラフイメージ取得 
• グラフイメージの取得 
– see https://xively.com/dev/docs/api/data/read/single_datastream/ 
https://api.xively.com/v2/feeds/{feed id}/datastreams/{stream id}.png
xively:JSによるグラフ作成 
• インタラクティブなグラフを含むページ作成 
– http://xively.github.io/channel-viz/
まとめ 
• BLEの仕組みの理解 
• Linuxからの利用 
• Xivelyへのアップロード

Más contenido relacionado

Was ist angesagt?

Lagopusで試すFirewall
Lagopusで試すFirewallLagopusで試すFirewall
Lagopusで試すFirewallTomoya Hibi
 
Running lagopus on Xeon D
Running lagopus on Xeon DRunning lagopus on Xeon D
Running lagopus on Xeon DMasaru Oki
 
WAN SDN 実践入門! ~ OpenDayLightのPCEP/BGPに触れてみる ~
WAN SDN 実践入門! ~ OpenDayLightのPCEP/BGPに触れてみる ~WAN SDN 実践入門! ~ OpenDayLightのPCEP/BGPに触れてみる ~
WAN SDN 実践入門! ~ OpenDayLightのPCEP/BGPに触れてみる ~npsg
 
OpenFlowで覚えるネットワーク
OpenFlowで覚えるネットワークOpenFlowで覚えるネットワーク
OpenFlowで覚えるネットワークM Hagiwara
 
自宅実験環境 Aug 2014
自宅実験環境 Aug 2014自宅実験環境 Aug 2014
自宅実験環境 Aug 2014Masaru Oki
 
【Interop tokyo 2014】 Internet of Everything / SDN と シスコ技術者認定
【Interop tokyo 2014】 Internet of Everything / SDN と シスコ技術者認定【Interop tokyo 2014】 Internet of Everything / SDN と シスコ技術者認定
【Interop tokyo 2014】 Internet of Everything / SDN と シスコ技術者認定シスコシステムズ合同会社
 
Getting Started with Jetson Nano
Getting Started with Jetson NanoGetting Started with Jetson Nano
Getting Started with Jetson NanoNVIDIA Japan
 
Lagopusで試すL3ルーティング + α (Lagopusの設定方法いろいろ)
Lagopusで試すL3ルーティング + α (Lagopusの設定方法いろいろ)Lagopusで試すL3ルーティング + α (Lagopusの設定方法いろいろ)
Lagopusで試すL3ルーティング + α (Lagopusの設定方法いろいろ)Tomoya Hibi
 
Lagopus + DockerのDPDK接続
Lagopus + DockerのDPDK接続Lagopus + DockerのDPDK接続
Lagopus + DockerのDPDK接続Tomoya Hibi
 
VPP事始め
VPP事始めVPP事始め
VPP事始めnpsg
 
Linux packet-forwarding
Linux packet-forwardingLinux packet-forwarding
Linux packet-forwardingMasakazu Asama
 
Rps・rfs等最新linux kernel事例
Rps・rfs等最新linux kernel事例Rps・rfs等最新linux kernel事例
Rps・rfs等最新linux kernel事例Takuya ASADA
 
自作仮想化基盤 「n0stack」の紹介
自作仮想化基盤 「n0stack」の紹介自作仮想化基盤 「n0stack」の紹介
自作仮想化基盤 「n0stack」の紹介Takeshi Take
 
CPU製品出荷状況と消費電力の見える化
CPU製品出荷状況と消費電力の見える化CPU製品出荷状況と消費電力の見える化
CPU製品出荷状況と消費電力の見える化Naoto MATSUMOTO
 
Interrupt Affinityについて
Interrupt AffinityについてInterrupt Affinityについて
Interrupt AffinityについてTakuya ASADA
 

Was ist angesagt? (20)

Lagopusで試すFirewall
Lagopusで試すFirewallLagopusで試すFirewall
Lagopusで試すFirewall
 
Running lagopus on Xeon D
Running lagopus on Xeon DRunning lagopus on Xeon D
Running lagopus on Xeon D
 
WAN SDN 実践入門! ~ OpenDayLightのPCEP/BGPに触れてみる ~
WAN SDN 実践入門! ~ OpenDayLightのPCEP/BGPに触れてみる ~WAN SDN 実践入門! ~ OpenDayLightのPCEP/BGPに触れてみる ~
WAN SDN 実践入門! ~ OpenDayLightのPCEP/BGPに触れてみる ~
 
OpenFlowで覚えるネットワーク
OpenFlowで覚えるネットワークOpenFlowで覚えるネットワーク
OpenFlowで覚えるネットワーク
 
Lagos running on small factor machine
Lagos running on small factor machineLagos running on small factor machine
Lagos running on small factor machine
 
自宅実験環境 Aug 2014
自宅実験環境 Aug 2014自宅実験環境 Aug 2014
自宅実験環境 Aug 2014
 
【Interop tokyo 2014】 Internet of Everything / SDN と シスコ技術者認定
【Interop tokyo 2014】 Internet of Everything / SDN と シスコ技術者認定【Interop tokyo 2014】 Internet of Everything / SDN と シスコ技術者認定
【Interop tokyo 2014】 Internet of Everything / SDN と シスコ技術者認定
 
Dpdk pmd
Dpdk pmdDpdk pmd
Dpdk pmd
 
Getting Started with Jetson Nano
Getting Started with Jetson NanoGetting Started with Jetson Nano
Getting Started with Jetson Nano
 
DPDK QoS
DPDK QoSDPDK QoS
DPDK QoS
 
Lagopusで試すL3ルーティング + α (Lagopusの設定方法いろいろ)
Lagopusで試すL3ルーティング + α (Lagopusの設定方法いろいろ)Lagopusで試すL3ルーティング + α (Lagopusの設定方法いろいろ)
Lagopusで試すL3ルーティング + α (Lagopusの設定方法いろいろ)
 
Xeon d
Xeon dXeon d
Xeon d
 
Kernel vm-2014-05-25
Kernel vm-2014-05-25Kernel vm-2014-05-25
Kernel vm-2014-05-25
 
Lagopus + DockerのDPDK接続
Lagopus + DockerのDPDK接続Lagopus + DockerのDPDK接続
Lagopus + DockerのDPDK接続
 
VPP事始め
VPP事始めVPP事始め
VPP事始め
 
Linux packet-forwarding
Linux packet-forwardingLinux packet-forwarding
Linux packet-forwarding
 
Rps・rfs等最新linux kernel事例
Rps・rfs等最新linux kernel事例Rps・rfs等最新linux kernel事例
Rps・rfs等最新linux kernel事例
 
自作仮想化基盤 「n0stack」の紹介
自作仮想化基盤 「n0stack」の紹介自作仮想化基盤 「n0stack」の紹介
自作仮想化基盤 「n0stack」の紹介
 
CPU製品出荷状況と消費電力の見える化
CPU製品出荷状況と消費電力の見える化CPU製品出荷状況と消費電力の見える化
CPU製品出荷状況と消費電力の見える化
 
Interrupt Affinityについて
Interrupt AffinityについてInterrupt Affinityについて
Interrupt Affinityについて
 

Ähnlich wie Bluetooth Low Energy入門講座 -part2

170622 02
170622 02170622 02
170622 02openrtm
 
Cloudstack user group meeting in osaka
Cloudstack user group meeting in osakaCloudstack user group meeting in osaka
Cloudstack user group meeting in osakaNaotaka Jay HOTTA
 
ネットワークコマンド入力に対応したツール事例
ネットワークコマンド入力に対応したツール事例ネットワークコマンド入力に対応したツール事例
ネットワークコマンド入力に対応したツール事例fumoto kazuhiro
 
20191120 beyondstudy#21 kitaoka
20191120 beyondstudy#21 kitaoka20191120 beyondstudy#21 kitaoka
20191120 beyondstudy#21 kitaokabeyond Co., Ltd.
 
LEGO MINDSTORMS EV3 API
LEGO MINDSTORMS EV3 APILEGO MINDSTORMS EV3 API
LEGO MINDSTORMS EV3 APIAkira Hatsune
 
Sohu邮箱的python经验
Sohu邮箱的python经验Sohu邮箱的python经验
Sohu邮箱的python经验Ryan Poy
 
DXライブラリでMMO作ったよ!
DXライブラリでMMO作ったよ!DXライブラリでMMO作ったよ!
DXライブラリでMMO作ったよ!h2so5
 
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...Naoya Ito
 
Kubernetes meetup-tokyo-13-customizing-kubernetes-for-ml-cluster
Kubernetes meetup-tokyo-13-customizing-kubernetes-for-ml-clusterKubernetes meetup-tokyo-13-customizing-kubernetes-for-ml-cluster
Kubernetes meetup-tokyo-13-customizing-kubernetes-for-ml-clusterPreferred Networks
 
PL/CUDA - Fusion of HPC Grade Power with In-Database Analytics
PL/CUDA - Fusion of HPC Grade Power with In-Database AnalyticsPL/CUDA - Fusion of HPC Grade Power with In-Database Analytics
PL/CUDA - Fusion of HPC Grade Power with In-Database AnalyticsKohei KaiGai
 
自宅サーバーを立てる話
自宅サーバーを立てる話自宅サーバーを立てる話
自宅サーバーを立てる話naba0123
 
継続的インテグレーション3分クッキング
継続的インテグレーション3分クッキング継続的インテグレーション3分クッキング
継続的インテグレーション3分クッキングTakayuki Kondou
 
NGS解析を始めた時にぶつかりがちな小さい壁あれこれ
NGS解析を始めた時にぶつかりがちな小さい壁あれこれNGS解析を始めた時にぶつかりがちな小さい壁あれこれ
NGS解析を始めた時にぶつかりがちな小さい壁あれこれDNA Data Bank of Japan center
 
Node予備校 vol.1 名古屋
Node予備校 vol.1 名古屋Node予備校 vol.1 名古屋
Node予備校 vol.1 名古屋Mori Shingo
 
AWSとGCPを使用したインフラ環境
AWSとGCPを使用したインフラ環境AWSとGCPを使用したインフラ環境
AWSとGCPを使用したインフラ環境Katsutoshi Nagaoka
 
Node-redでプロトタイピング
Node-redでプロトタイピングNode-redでプロトタイピング
Node-redでプロトタイピングMakoto SAKAI
 
node-gypを使ったネイティブモジュールの作成
node-gypを使ったネイティブモジュールの作成node-gypを使ったネイティブモジュールの作成
node-gypを使ったネイティブモジュールの作成shigeki_ohtsu
 
Gmo media.inc 第9回西日本ossの普及を考える会
Gmo media.inc 第9回西日本ossの普及を考える会Gmo media.inc 第9回西日本ossの普及を考える会
Gmo media.inc 第9回西日本ossの普及を考える会Dai Utsui
 
Azure Batch Renderingではじめるクラウドレンダリング
Azure Batch RenderingではじめるクラウドレンダリングAzure Batch Renderingではじめるクラウドレンダリング
Azure Batch RenderingではじめるクラウドレンダリングHiroshi Tanaka
 

Ähnlich wie Bluetooth Low Energy入門講座 -part2 (20)

170622 02
170622 02170622 02
170622 02
 
Cloudstack user group meeting in osaka
Cloudstack user group meeting in osakaCloudstack user group meeting in osaka
Cloudstack user group meeting in osaka
 
ネットワークコマンド入力に対応したツール事例
ネットワークコマンド入力に対応したツール事例ネットワークコマンド入力に対応したツール事例
ネットワークコマンド入力に対応したツール事例
 
20191120 beyondstudy#21 kitaoka
20191120 beyondstudy#21 kitaoka20191120 beyondstudy#21 kitaoka
20191120 beyondstudy#21 kitaoka
 
LEGO MINDSTORMS EV3 API
LEGO MINDSTORMS EV3 APILEGO MINDSTORMS EV3 API
LEGO MINDSTORMS EV3 API
 
Sohu邮箱的python经验
Sohu邮箱的python经验Sohu邮箱的python经验
Sohu邮箱的python经验
 
DXライブラリでMMO作ったよ!
DXライブラリでMMO作ったよ!DXライブラリでMMO作ったよ!
DXライブラリでMMO作ったよ!
 
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
 
Kubernetes meetup-tokyo-13-customizing-kubernetes-for-ml-cluster
Kubernetes meetup-tokyo-13-customizing-kubernetes-for-ml-clusterKubernetes meetup-tokyo-13-customizing-kubernetes-for-ml-cluster
Kubernetes meetup-tokyo-13-customizing-kubernetes-for-ml-cluster
 
20201127 .NET 5
20201127 .NET 520201127 .NET 5
20201127 .NET 5
 
PL/CUDA - Fusion of HPC Grade Power with In-Database Analytics
PL/CUDA - Fusion of HPC Grade Power with In-Database AnalyticsPL/CUDA - Fusion of HPC Grade Power with In-Database Analytics
PL/CUDA - Fusion of HPC Grade Power with In-Database Analytics
 
自宅サーバーを立てる話
自宅サーバーを立てる話自宅サーバーを立てる話
自宅サーバーを立てる話
 
継続的インテグレーション3分クッキング
継続的インテグレーション3分クッキング継続的インテグレーション3分クッキング
継続的インテグレーション3分クッキング
 
NGS解析を始めた時にぶつかりがちな小さい壁あれこれ
NGS解析を始めた時にぶつかりがちな小さい壁あれこれNGS解析を始めた時にぶつかりがちな小さい壁あれこれ
NGS解析を始めた時にぶつかりがちな小さい壁あれこれ
 
Node予備校 vol.1 名古屋
Node予備校 vol.1 名古屋Node予備校 vol.1 名古屋
Node予備校 vol.1 名古屋
 
AWSとGCPを使用したインフラ環境
AWSとGCPを使用したインフラ環境AWSとGCPを使用したインフラ環境
AWSとGCPを使用したインフラ環境
 
Node-redでプロトタイピング
Node-redでプロトタイピングNode-redでプロトタイピング
Node-redでプロトタイピング
 
node-gypを使ったネイティブモジュールの作成
node-gypを使ったネイティブモジュールの作成node-gypを使ったネイティブモジュールの作成
node-gypを使ったネイティブモジュールの作成
 
Gmo media.inc 第9回西日本ossの普及を考える会
Gmo media.inc 第9回西日本ossの普及を考える会Gmo media.inc 第9回西日本ossの普及を考える会
Gmo media.inc 第9回西日本ossの普及を考える会
 
Azure Batch Renderingではじめるクラウドレンダリング
Azure Batch RenderingではじめるクラウドレンダリングAzure Batch Renderingではじめるクラウドレンダリング
Azure Batch Renderingではじめるクラウドレンダリング
 

Bluetooth Low Energy入門講座 -part2