見出し画像

TWBlueScan:スキャンで見つけたBlueToothのデバイスが何者か調べる 途中

浦和レッズ勝利!、また暑くなってきたので老猫は体調を崩しています。トイレに行った後、呼吸が苦しくなったようです。何とか持ち直しましたが、試合の間はおとなしく寝ていました。

昨日からはじめたBlueToothのセンサー開発のための調査の続きです。昨日はスキャンによってデバイスのアドレスのリストを取得できるようにしました。

今日は発見したアドレスのデバイスが何者か?を調べるプログラムを作ってみました。

このサンプルプログラムを参考にして、

func discover(a bluetooth.Addresser) {
	log.Printf("connect to %s", a.String())
	to := bluetooth.NewDuration(time.Millisecond * 100)
	device, err := adapter.Connect(a, bluetooth.ConnectionParams{ConnectionTimeout: to})
	if err != nil {
		log.Printf("connect err=%v", err)
		return
	}
	log.Println("connected to ", a.String())

	// get services
	log.Println("discovering services/characteristics")
	srvcs, err := device.DiscoverServices(nil)
	if err != nil {
		log.Printf("discover err=%v", err)
		return
	}

	// buffer to retrieve characteristic data
	buf := make([]byte, 255)

	for _, srvc := range srvcs {
		log.Println("- service", srvc.UUID().String())

		chars, err := srvc.DiscoverCharacteristics(nil)
		if err != nil {
			log.Println(err)
			continue
		}
		for _, char := range chars {
			log.Println("-- characteristic", char.UUID().String())
			n, err := char.Read(buf)
			if err != nil {
				log.Println("    ", err.Error())
			} else {
				log.Println("    data bytes", strconv.Itoa(n))
				log.Println("    value =", string(buf[:n]))
			}
		}
	}
	err = device.Disconnect()
	if err != nil {
		log.Println(err)
	}
	log.Println("discover done")
}

という処理を昨日のプログラムに追加してみました。

# /tmp/bs
2021/08/26 07:22:33 scanning...
2021/08/26 07:22:34 found device: EF:6E:29:F9:8C:48 -61 Rbt false
2021/08/26 07:22:34 found device: 08:66:98:8A:1B:FE -72  false
2021/08/26 07:22:34 found device: 6E:45:78:C0:C7:EF -58  false
2021/08/26 07:22:34 found device: 4E:03:71:9B:1F:5F -50  false
2021/08/26 07:22:34 found device: 50:02:1D:6C:55:5A -64  false
2021/08/26 07:22:34 found device: 68:EB:A9:2B:B2:F0 -64  false
2021/08/26 07:22:35 found device: 63:C0:F8:12:4E:4D -71  false
2021/08/26 07:22:35 found device: 3E:05:85:45:CA:D8 -70  false
2021/08/26 07:22:44 found device: 76:20:7A:D1:92:81 -68  false
2021/08/26 07:22:48 scan end
2021/08/26 07:22:48 connect to EF:6E:29:F9:8C:48
2021/08/26 07:22:49 connected to  EF:6E:29:F9:8C:48
2021/08/26 07:22:49 discovering services/characteristics
2021/08/26 07:22:56 - service 0000fe59-0000-1000-8000-00805f9b34fb
2021/08/26 07:22:56 -- characteristic 8ec90003-f315-4f60-9fb8-838830daea50
2021/08/26 07:22:57     data bytes 0
2021/08/26 07:22:57     value =
2021/08/26 07:22:57 - service ab705400-0a3a-11e8-ba89-0ed5f89f718b
2021/08/26 07:22:57 -- characteristic ab705402-0a3a-11e8-ba89-0ed5f89f718b
2021/08/26 07:22:57     data bytes 1
2021/08/26 07:22:57     value =

何となく情報は取得できました。でも、これが何かはもう少し調べなければなりません。接続できない場合にタイムアウトしない問題もあります。
残念ながらここで時間切れ(タイムアウト)です。

明日に続く

開発のための諸経費(機材、Appleの開発者、サーバー運用)に利用します。 ソフトウェアのマニュアルをnoteの記事で提供しています。 サポートによりnoteの運営にも貢献できるのでよろしくお願います。