2017年4月30日日曜日

ロボットのコンソールを作ろう = Bluetoothの出力をlinux(ラズパイ)で取得 =

今回はUART-Bluetooth変換モジュールの出力をlinuxで取得する方法について書きます。

やりたいこと


前回の記事で、いくつかのUART-Bluetooth変換モジュールを紹介しました。

今回はlinux(ラズパイ)での通信手順について説明します。

どうすればいいか


モジュールが変わっても基本的な使い方は同じで
 1. ペアリングをする
 2. デバイスファイルを割り当て
 3.デバイスファイルにアクセス
の三つです。ちなみに、Windowの場合ペアリングをした後に、仮想ComポートでBluetooth機器にアクセスできることが多いです。

1.ペアリングをする
必要なパッケージのインストール
sudo apt-get install bluetooth bluez-utils

Bluetooth機器の検索
hcitool scan
繋ぎたい機器のマックアドレスを探す


Bluetooth機器との接続のための対話モードに入る
bluetoothctl
(忘れてしまって申し訳ないのだが、Bluetoothをデーモン起動みたいなステップがあったかも)

 対話モード
 > pair MACアドレス
 > trust MACアドレス
 > connect MACアドレス
 > exit


2.デバイスファイルの割り当て
sudo rfcomm bind /dev/rfcomm1  繋ぎたい機器のMACアドレス
上記のコマンドで/dev/rfcomm1がBluetoothの入出力をするためのデバイスファイルとなります。

3.デバイスファイルにアクセス
通信にはPythonのpyserial等を使うのがよいと思います。pyserialで先ほど割り当てたデバイスファイルにアクセスするとマイコンとのデータの送受信が可能です。
注) うまく通信ができなかったら/dev/rfcomm1の読み書きの権限に注意してください。

そのうちサンプルコードを追加します。





ロボットのコンソールを作ろう = マイコン(UART) - Bluetooth間の通信 =

マイコンのインターフェースとしてUARTは基本的だと思います。PCとマイコンを接続する際には次のようなシリアルUSB変換モジュールを使用することが多いでしょう。
秋月電子で600円で買えますし、基板サイズが小さく使いやすいです。

超小型USBシリアル変換モジュール
http://akizukidenshi.com/catalog/g/gM-08461/

さて、UARTの信号を無線化する選択肢の中で手軽なのはBluetoothへの変換です。
(他の選択肢としてはZigbee等がありますね。)

UARTとBluetoothの変換ができるモジュールをざっとあげてみます。

マイクロチップ(秋月で手に入るRNシリーズ)
   マイクロチップ Bluetooth RN4020-V/RM123
     RN4020
     http://akizukidenshi.com/catalog/g/gM-10066/    
     大きさは小さいがBLEなので通信速度が出ない  

     マイクロチップ Bluetoothモジュール RN42-I/RM
     RN42
     http://akizukidenshi.com/catalog/g/gM-07612/
     扱い易いが大きさが少し大きい
     通信速度が230400bpsまでしか出ない

ランニングエレクトロニクス
     SBDBT5Vです
      SBDBT
    http://www.runele.com/ca1/8/p-r-s/
      Bluetoothドングルが必要
      かさばって、でかい
      ルネサス製のマイコンの書き込みを無線化できる(flash programmerで書き込めた)
      通信速度が230400bpsまでしか出ない
      PCとの通信は仮想COMポート

STマイクロ
  SPBT2632C2A.AT2 STMicroelectronics | 497-13189-ND DigiKey Electronics
      SPBT2632C2A
      小さい
      通信速度が560kbpsまで出る
      マイコンと2Mbpsで通信可能
      PCとの通信は仮想COMポート
      digikeyで2000円くらい


この中だと断然、SPBT2632C2Aがおすすめです。配線もUARTのRX、TX、GND、電源、
どこかのピンのプルアップくらいしかないので楽です。ただ、ちょっとデータシートがわかりにくいです。



次回は、UART-Bluetooth変換モジュールを介してやりとりされる信号をPCで取得する方法について書きたいと思います。


2017年4月29日土曜日

ロボットのコンソールを作ろう -概要編-

書く内容が多いので何本かの記事にわけて書きたいと思います。
今回は連載一回目の概要編です。

作ったもの

こんなの作ってみました。マイクロマウスの調整用コンソールです。
以下が可能です。
 ・ロボットの各種パラメータを常に表示
 ・ロボットからのデバッグメッセージ(printfの内容)を表示
 ・迷路の情報リアルタイムに表示
 ・gamepadの入力をロボットに送信





コンセプト

何を作りたいのか?

「自分で作ったロボットの調整および、開発の補助ツールとしてロボットのデータを表示するターミナルのようなものを作りたい」

こんなことを数年前からずっと考えていました。そして、これがある程度形になってきたので苦労したところや勘所になりそうなところをブログにまとめてみることにしました。


私が、作っているのはマイクロマウスと呼ばれるロボットですが、開発時間の大多数はプログラムのデバッグ及び、走行パラメータの調整です。そのため、少ない開発時間で効率的にロボットを開発するためには開発環境の整備はクリティカルに効いてきます。(私はツールを作るのが好きなので、開発環境を作ることが目的になってる気がしないでもない。)

多くのロボットを作っている人はこのような自分用ツールを作っていると思います。
そこで、私も作ってみようと作り始めてみたのです。

要件としては、こんなところを設定してみました。

 ・printfの結果を出力
 ・ロボットの内部パラメータをリアルタイムに表示
 ・ロボットとの接続は無線接続
 ・無線部分のハードウェアはできるだけ小型にする
 ・アプリを明示的に立ち上げるのは面倒なので、勝手につながる
 ・接続が切れても勝手に再接続
 ・Webアプリで実現
 ・ロボットが複数あっても対応可能

htmlやjavascript、サーバーやlinuxの知識が作ろうと思い立ったときにあまりなかったので、習作の意味もあります。


使った技術

恥ずかしながら、組み込みのC言語以外はあまり得意ではないので正しい使い方をしていないものもあると思います。
 ・Node             Webサーバを立てるのに使用
  (最近mosquittoがWebsocketに対応していることに気づく、Webサーバいらないな)
 ・MQTT           ラズパイ同士の通信に使用 
 ・Websocket   ブラウザで表示しているアプリとサーバー間の通信に使用
 ・Bluetooth     マイコンのUARTとBluetoothの変換
   ・html5           Webアプリの見た目部分
 ・javascript     Webサーバーの記述、html内での通信ロジックの記述
 ・python          Bluetoothへの入出力、gamepadへの入力を取得



システム図

システムはラズパイ2匹が裏方で、人が見る画面はWebアプリとして実現しています。



連載予定

 ・マイコン(UART) - Bluetooth間の通信
 ・Bluetoothの出力をlinux(ラズパイ)で取得 (pythonを利用)
 ・gamepadの出力をlinux(ラズパイ)で取得  (pythonを利用)
 ・MQTTで遊ぼう 
 ・Webserverを立てよう
 ・Webアプリを作ってみよう (そんな大げさではない... )
   ・printfの結果を出力するコンソールをWebアプリで実現
 ・スクリプトのデーモン化 (nodeのforeverを利用 )
 ・ノンブロッキングな通信を実現するには 
 ・three.jsで迷路を作ったよ




書きたいと思ったことをつらつらと並べてみました。私はこんなにたぶん書かないと思います。