SEM-ITでは自作IoTキットとして、遠隔で育苗棟の温度を計測しAmbient.ioやGoogleスプレッドシートに書き出すとともに、異常をLINEに通知する仕組みを構築したSASTというキットを一部農家様向けに提供しています。
が、思った以上にBluetooth温度計のデータ取得が不安定だなーと感じていたため、BluetoothをUSBドングルに置き換えてみました。
と、この効果が思った以上に大きいので作業内容をブログ化します。
購入したBluetoothドングル ELECOM LBT-UAN05C2
CSR社製のチップが載った物だと、すでにカーネルに組み込まれているとの情報からです。
Bluetooth 4.0なので”ふた昔?”前の製品ですが、BLEに対応しているのでBluetooth型温度計のアドバタイズも問題なく拾うことが出来るようです。
そのため、RaspberryPiのボード内蔵のBluetoothとプログラムコードも問題なく互換があるようです。(Python3のbluepyを利用しています)
導入前と後の差(Ambientoの記録)
プチ切れが導入後にはほとんど無くなりました。\(^_^)/
- USBを刺す
- 認識しているか確認 OKなら
- オンボードを無効化し、USB側稼働確認
- オンボードを恒久無効化
です。
なお、Raspberry Pi OSは、Relase 10 buster と Release 11 bluseyeで確認済です。
作業手順
1.USBを刺す
そのままの行為です。
Raspberry Pi 4とかはUSBポートにそのまま刺す。
速度的にUSB 2.0で問題ありません。
USBの延長ケーブルを使って引っ張り出すことも出来ますね。
Raspberry Pi Zeroはそのままでは接続出来ません。OTGケーブル必須です。(下図参照)
100円ショップでも売っているので購入ですね。
2.認識しているか確認
SAST-01:~ $ hciconfig
hci1: Type: Primary Bus: UART
BD Address: B8:27:EB:4F:76:A0 ACL MTU: 1021:8 SCO MTU: 64:1
UP RUNNING
RX bytes:1464 acl:0 sco:0 events:86 errors:0
TX bytes:2939 acl:0 sco:0 commands:86 errors:0
hci0: Type: Primary Bus: USB
BD Address: 00:1B:DC:F1:4B:2F ACL MTU: 310:10 SCO MTU: 64:8
UP RUNNING
RX bytes:144663 acl:0 sco:0 events:5950 errors:0
TX bytes:4805 acl:0 sco:0 commands:291 errors:0
hciconfigコマンドをタイプします。
正常に認識しているとhciデバイスが2つ表示されます。違いはBusです。
UARTが本体内蔵、USBが今回取り付けた物です。
なので、USBを刺しただけで問題なく認識しています。
3.オンボードのUARTを無効化
UART側のBluetoothをOFFにしてみます。
pi@SAST-01:~ $ sudo hciconfig hci1 down
pi@SAST-01:~ $ hciconfig
hci1: Type: Primary Bus: UART
BD Address: B8:27:EB:4F:76:A0 ACL MTU: 1021:8 SCO MTU: 64:1
DOWN
RX bytes:1751 acl:0 sco:0 events:90 errors:0
TX bytes:2955 acl:0 sco:0 commands:90 errors:0
hci0: Type: Primary Bus: USB
BD Address: 00:1B:DC:F1:4B:2F ACL MTU: 310:10 SCO MTU: 64:8
UP RUNNING
RX bytes:164341 acl:0 sco:0 events:6750 errors:0
TX bytes:4988 acl:0 sco:0 commands:318 errors:0
hciconfig hci1 down でCloseしてもらいます。
その後、システムを稼働してみて問題なく動いていればOKですね。
上記の状況では、すでにデータ送受信はhci0側(USB)にて動いていて問題なかったみたいです。
4.本体側のBluetoothを停止(恒久)
/boot/config.txt に dtoverlay=disable-bt を追加する。
再起動後、hciconfig コマンドでUARTのモジュールが出ていなければOK。Wi-Fiは問題なく稼働するので大丈夫です。
SAST-01:~ $ hciconfig
hci0: Type: Primary Bus: USB
BD Address: 00:1B:DC:F1:4B:2F ACL MTU: 310:10 SCO MTU: 64:8
UP RUNNING
RX bytes:7952 acl:0 sco:0 events:352 errors:0
TX bytes:2854 acl:0 sco:0 commands:83 errors:0
再起動後、無事にhci0一つだけになっています。
先に書いたとおり、ドングル化によるアンテナ効果は凄く高いです。
遠隔でBluetooth温度計を使っている自分としてはこんなに効果高いんだったら、最初にしたかったーと思うほどです。(今まで雨とか霧とかが問題なのかなーとも思っていました)
RaspberryPiとBluetoothでお悩みの方、試す価値はありますよ❗