Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
10th gunosy.go @ 2014.09.11 
ド素人がGo言語でBluetoothデバイス 
に接続して環境データを取得してみた話 
@data_sciesotist 
1
1 まずは、自己紹介 
 社会人5年目の研修講師(Linux、仮想化、ストレージ、 
クラウド、ビッグデータ・データサイエンスなど担当) です 
 その前は長々と大学にいました(心理学、教育工学、障害者 
支援などを研究) が、学位もポストも・...
2 今日のお題 
 Go言語にはじめて触れるド素人が 
 Bluetooth接続でデータを取得できる 
電力、気温、湿度、照度センサー 
(F-PLUG) を操作して 
 リアルタイムデータを取得してみた 
話をします 
3
3 F-PLUGとは 
 富士通ビー・エス・シーが 
販売するコンセント型 
電力・温度・湿度・照度 
測定センサー 
 パソコンとBluetoothで 
リンクし、専用ソフトで 
電力使用量などを表示 
 実はデータはSQLite 
形式で保...
4 これをGo言語と絡められないか 
 Go言語にrfcomm (シリアル) 接続できるよう 
なパッケージがあればいいんじゃね? 
 流行りの言語だし、きっとあるんじゃないの? 
5
4 これをGo言語と絡められないか 
 Go言語にrfcomm (シリアル) 接続できるよう 
なパッケージがあればいいんじゃね? 
 流行りの言語だし、きっとあるんじゃないの? 
https://github.com/tarm/goseria...
5 とはいえ... 
 そもそもGoなんて使ったことがない 
 まずはGoのコンパイラを入手しなければ 
 Go 1.3.1 (64bit版)をインストールしてみた 
 パッケージのインストールはgo get XXX で 
いいんですよね? 
...
6 とりあえず、コードを書いてみる 
package main 
import ( github.com/tarm/goserial log) 
func main() { 
c := serial.Config{Name: COM3} 
s,...
7 デモ 
動くかな? 
9
8 苦労したところ 
 goserialのコマンド送受信は10進数で、いっぽう 
F-PLUGは16進数でコマンドを受け付けるので、 
その変換にだいぶハマった 
 そもそも普段プログラムを書かないので、16進数とか 
ビットシフトとかよくわか...
9 まとめ 
 富士通ビー・エス・シーの 
F-PLUGを使ってみた 
 ド素人がGo言語を 
はじめて使ってみた 
 goserialパッケージを 
使って、通信できた 
 16進数で返ってくる 
データを変換して、 
気温が算出できた 
 ...
Upcoming SlideShare
Loading in …5
×

10th gunosy.go ド素人がGo言語でBluetoothデバイスに接続して環境データを取得してみた話

4,419 views

Published on

第10回gunosy.goで発表した資料です。

Published in: Software

10th gunosy.go ド素人がGo言語でBluetoothデバイスに接続して環境データを取得してみた話

  1. 1. 10th gunosy.go @ 2014.09.11 ド素人がGo言語でBluetoothデバイス に接続して環境データを取得してみた話 @data_sciesotist 1
  2. 2. 1 まずは、自己紹介 社会人5年目の研修講師(Linux、仮想化、ストレージ、 クラウド、ビッグデータ・データサイエンスなど担当) です その前は長々と大学にいました(心理学、教育工学、障害者 支援などを研究) が、学位もポストも・・・だったので就職 2002年にLinuxにはじめて触れて以来、細々とOSS関係 の活動をしています 主に組版ソフトTEXの周りでIDEの日本語化、ドキュメン トの翻訳、解説サイトの運営などをしています 最近はR関係でもボチボチ活動しています 2
  3. 3. 2 今日のお題 Go言語にはじめて触れるド素人が Bluetooth接続でデータを取得できる 電力、気温、湿度、照度センサー (F-PLUG) を操作して リアルタイムデータを取得してみた 話をします 3
  4. 4. 3 F-PLUGとは 富士通ビー・エス・シーが 販売するコンセント型 電力・温度・湿度・照度 測定センサー パソコンとBluetoothで リンクし、専用ソフトで 電力使用量などを表示 実はデータはSQLite 形式で保存されている 実はrfcommデバイスと してアクセス可能 4
  5. 5. 4 これをGo言語と絡められないか Go言語にrfcomm (シリアル) 接続できるよう なパッケージがあればいいんじゃね? 流行りの言語だし、きっとあるんじゃないの? 5
  6. 6. 4 これをGo言語と絡められないか Go言語にrfcomm (シリアル) 接続できるよう なパッケージがあればいいんじゃね? 流行りの言語だし、きっとあるんじゃないの? https://github.com/tarm/goserial あった6
  7. 7. 5 とはいえ... そもそもGoなんて使ったことがない まずはGoのコンパイラを入手しなければ Go 1.3.1 (64bit版)をインストールしてみた パッケージのインストールはgo get XXX で いいんですよね? と思ったら、GOPATH設定だのgitインストー ルだの、いろいろやることがあった 7
  8. 8. 6 とりあえず、コードを書いてみる package main import ( github.com/tarm/goserial log) func main() { c := serial.Config{Name: COM3} s, err := serial.OpenPort(c) // コマンドを送信(富士通ビー・エス・シーのサイトで公開) n, err := s.Write([]byte(x10x81x00x00x0exf0x00x00 x11x00x62x01xe0x00)) buf := make([]byte, 256) n, err = s.Read(buf) x := int(buf[:n][14]) y := int(buf[:n][15]) log.Print(元のバイト列: ,buf[:n]) log.Print(現在の室温は,(x+y8)/10,度です。) } https://gist.github.com/datasciesotist/d79163c88cef65eb658f 8
  9. 9. 7 デモ 動くかな? 9
  10. 10. 8 苦労したところ goserialのコマンド送受信は10進数で、いっぽう F-PLUGは16進数でコマンドを受け付けるので、 その変換にだいぶハマった そもそも普段プログラムを書かないので、16進数とか ビットシフトとかよくわからない(Hello, world すら書けない) Linux + Cによる実装を参考に、同じような換算をして 同じような結果だからできたんじゃね? というあやふやさ そんな人が計8時間くらいでできたので、 Go言語っていいですね! (今後使う機会はなさそうですが) 10
  11. 11. 9 まとめ 富士通ビー・エス・シーの F-PLUGを使ってみた ド素人がGo言語を はじめて使ってみた goserialパッケージを 使って、通信できた 16進数で返ってくる データを変換して、 気温が算出できた 場所貸しにならず コミットできた...? 11

×