2015年9月22日火曜日

arduinoとRaspberry PiをbluetoothのSPPプロファイルで通信させたい



きっかけ

転がっていた古いUSB用のbluetoothドングル(EDR2系)を
USBホストシールドにつないで使おうとしたら,arduinoのusbホストシールドのライブラリがでかすぎて,作ったプログラムがUNOに入れられなかったので,別の手段を使おうとした.


USBホストシールドを使わない場合の手段は以下の2つ

  • BLEのシールドを使う
  • bluetoothシリアル変換のボードを使う


BLEの場合


RaspbianをインストールしたRaspberry PiのUSBポートにBLEドングルを指して,BLEシールドを載せたArduinoと通信させようとしていろいろハマった.とりあえず,低レイヤでの接続はできたが,アプリレベルでの通信には成功していない.

なお,これ以上の対応は面倒なので当面は放置することにした.

Bluezのバージョン


現在のバージョン(2015-05-05版のDebian Wheezy相当)のRaspbian付属のBluezはBLEがまともに動作しないため,なるべく新しい版を自分でコンパイルしないといけない.


LinuxのBLE対応のレベル

とりあえず,接続はできるが,低レベルの機能しか提供されていないため,プロトコルスタックをアプリが実装しないといけない.

スクリプト言語からgatttoolを叩いて,その出力をスクリプト言語で加工すればできなくもないが,非常に面倒.

結論


あまりに面倒なのでとりあえず,ここまでで中断して他の手段を試すことにした.iOSやandroidだとプロトコルスタックが提供されているのに,非常に残念.


bluetoothシリアル変換を使う

レガシーのbluetoothのプロトコルを使うと,linux側ではrfcommでシリアルポートから送受信できる.BLEじゃないので,消費電力が大きくなるが,Linux側の実装が楽になるので,とりあえず,これを試す(予定).

0 件のコメント: