Bluetoothを試してみる_ちょっと止める
#bluetooth
新規作成 2021-8-8
中断するためのメモ
Fire Chatなるアプリのように、データをノード間でバトンしていって、e2eで届けたい。
通信プロトコルはbluetooth。その実装もしたい。できればGoよりRustの方がいいのかも?
でも果てしない感が強くなってきた。で、モチベーションを下げるための考えを整理する。
なぜ、データをバトンして渡したいのか?bluetoothで
圏外で通信できるのは凄いと思ったし、TCP/IPではない方法でe2eで通信できるのも凄い。あと通信プロトコルの実装になにか惹かれるものがある。
bluetoothでノード間を繋いでデータを送れるんだなとわかった。あとはbluetoothのとこの実装ができればなんとかなりそうな気がする。では実装できて満足して、その後になにがあるか?
考えてたのが、ラズパイみたいなノードを複数ばらまいて、e2eでデータが送れるか?を試したい。
かなりの時間をかければ出来るかもしれないけど、他に時間使った方がいいのでは?fire chatがあるんだし、送れることは明白。
概要
https://github.com/currantlabs/ble/tree/master/examples/blesh#readme の「Start a GATT server on the Linux platform (with a usb ble dongle) for 1 hour. (We’ll leave it sit there for the rest of tutoruial)」のプログラムをRaspberry Pi 4で起動し、Windows PCからBluetoothデバイス(表示名:Gopher)として検知できたことを確認した。また、両端末ともwifiは切った状態。
やったことメモ
2021/8/8
Windows側
上記プログラムに必要なパッケージをgo get(GO111MODULE=off)
https://github.com/currantlabs/ble/blob/master/examples/blesh/main.go と https://github.com/currantlabs/ble/blob/master/examples/blesh/flg.go を以下に編集(そのままではビルド出来なかった。urfave/cli側の更新が原因かも。)
以下割愛
ラズパイ用にビルド
code:sh
/mnt/c/DEV/workspace/GO/src/github.com/currantlabs/ble
17:06:14 > GO111MODULE=off GOOS=linux GOARCH=arm GOARM=7 go build -o examples/blesh/blesh_pi examples/blesh/*.go
バイナリをWinSCPでラズパイに転送
Raspberry Pi側
sudo ./blesh_pi sv -tmo 1h を実行し、Windows側でBluetoothデバイスとして認識されていることを確認
2021/8/9
https://github.com/currantlabs/ble/blob/master/linux/hci/hci.go#L254 にfmt.Printf("Debug: <br>c: %v<br>b: %v<br><br>", c, b) を追加してラズパイで実行し、何をしているか確認
割愛
2021/8/14
小構成でアドバタイズ成功
上記で度々参考にしているGoのライブラリとexampleのbleshの実行結果を確認して、アドバタイズに必要なコードを構成して、ラズパイで実行した。結果、Windows側でBluetoothデバイスとして検知することが出来た。
https://github.com/ddddddO/work/blob/6dce7fc6bf9b61e48a82ddeff196c05b3e6a7163/bluetooth/advertise/main.go#L1 がそのコードで、次にやりたいことが、2点ある。
ソケットにバイト列を書き込むまでのソケットの準備(ioctlとか)が全く分かってないので、知りたい。
ソケットへアドバタイズに必要そうなバイト列を書き込んでいるが、各バイト列が何のためにあるのかわかってないので知りたい。
参考にしているhci.goのsendメソッド/cmd_gen.goとそのコメントに記載されているドキュメント参照先を確認する。
2021/10/2
http://www.silex.jp/blog/wireless/2012/12/bluetooth4.html