Raspberry Pi のBluetoothを安定化 外部ドングル

IoT

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の記録)

プチ切れが導入後にはほとんど無くなりました。\(^_^)/

Raspberry Piへのセットアップは簡単
  1. USBを刺す
  2. 認識しているか確認 OKなら
  3. オンボードを無効化し、USB側稼働確認
  4. オンボードを恒久無効化

です。
なお、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でお悩みの方、試す価値はありますよ❗

タイトルとURLをコピーしました