2012年8月5日日曜日

Arduino+USBホストシールドでBluetoothドングルを使う

Circuits@Homeで公開されているUSBホストのライブラリに、BTドングル使ってSPP通信をするためのライブラリが追加されたぜ的なことがあったので試してみました。

必要なもの

  • Arduino本体
  • USBホストシールド(Sparkfun製は要改造)
  • Arduino IDE 1.0.1
  • ライブラリ

出来上がったもの

BTの子機側はAndroidのBluetoothChatのサンプルを使いました。

Sparkfunのシールドは使えない!?

どんだけ頑張っても「OSC did not start」となってしまいUSBの初期化ができない。
なぜかと思って調べてみるとUSBホストシールド2.0からリセット信号の回路上での取り回しが変わっている(D7からRSTへ)
そのため、ライブラリ2.0はSparkfun製のシールドでは使えないとのことです。
しかし、ここでも記載がありますが、配線を変えることでSparkfun製のシールドでも使えます。
D7から伸びる信号線をカットし、RSTから信号を取り回す改造をすることで無事初期化ができることを確認しました。





DTR信号でハマる

ArduinoはUSBシリアルから受け取ったデータをBTのSPPで送信しています。
ちょっとハマったところで、Arduinoはシリアル通信のDTR信号を利用してリセットを行なっていることです。
問題になるのは以下の様なシーケンスで動作した場合です。
  1. シリアルオープン
  2. データ送信
  3. シリアルクローズ
  4. 1へ戻る

1のシリアルオープンのたびにリセットがかかってしまいBTの接続が切れてしまいます。
なので、PythonのコードではTCPのリクエストハンドラ内でシリアル接続を保持して、
TCP経由でデータを送るようなことをしてます。


Pro miniへの対応

pro mini用のUSBホストシールドでも使ってみたのですが、
こちらはシリアル経由の3.3Vでは電圧が低くてUSBドングルが動作しませんでした。
しかし、冒頭のリセットしない問題は起きていないのでもしかしたらRAWピンに5V入れて、USBに5Vまわす改造をしておけば動くかも

まとめ

むちゃくちゃ簡単にSPP通信が使えるようになりました。


#以下アフィリエイト用の広告です