Studuino (Arduino互換) を Raspberry Pi とBluetooth (SPP: Serial Port Profile)でつなぐ


アーテックさんの[Robotist](http://www.artec-kk.co.jp/archive/category/robotist "Robotist")はブロックでロボットやらクルマのクイックプロトタイピングができる優れものです。むしろロボット用途に特化しているため、モーターやサーボ、センサーをどうつなぐか(電源をどう供給するか)に悩む必要はありません。モーター、サーボ、センサーのすべてがブロック化されています。ごく簡単に言えば純国産のArduinoベースのレゴ マインドストームです。

頭脳の部分はArduino互換の[Studuino](http://www.artec-kk.co.jp/archives/201457814)を使って、従来のArduino IDEやScratchベースの[Robotist BLOCKプログラミング環境](http://artec-kk.co.jp/studuino/Studuino_dl.html)でプログラミングが可能です。

さて、センサーデータを収集しながら、自動運転っぽく走るクルマを作ろうとする段になり、RobotistにはBluetoothモジュールはあるものの、WiFiモジュールはないので、Bluetoothを使ってRaspberry Piとつないでみることにしました(いったんつないでしまえば、Raspberry Pi側でロジック組むなり、クラウドとつなぐなり、IoTっぽい実装はできるので)。

## 環境
* [153115 ロボット用光センサー](http://www.artec-kk.co.jp/archives/201457886)-何でもいいのですがサンプルとして
* [153125 センサー接続コード ３芯15cm](http://www.artec-kk.co.jp/archives/201457908)
* 153129 スタディーノ ロボティストカバー台座付
* 086876 ロボット用ブルートゥースモジュール(HC-05) + 086883 ロボット用ブルートゥースモジュール接続コード(4芯 15cm)
* または 086873 ブルートゥースモジュールRBT-001 + 086884 RBT-001用ブルートゥースモジュール接続コード(4芯 15cm)
* [153101 USBケーブルminiB(80cm)](http://www.artec-kk.co.jp/archives/201457847)
* [153102 電池ボックス](http://www.artec-kk.co.jp/archives/201457839)
* Raspberry Pi + USB Bluetoothドングル

以下のサンプルではMacベースで説明していますが、Windowsでも同様に可能です。
なお、アーテックさんの商材に関しては、通販だと[ヨドバシドットコム](http://www.yodobashi.com/ec/category/index.html?word=%E3%82%A2%E3%83%BC%E3%83%86%E3%83%83%E3%82%AF%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF)や楽天市場の[美工社](http://item.rakuten.co.jp/bicosya/c/0000001340/)なんかは品揃えが良く、また配送も速いです。

## 組み立て
### Studuino側ハード
Studuino側は、Bluetoothモジュール(HC-05)を接続コードを使ってセンサ端子A3に取り付けます。灰色と白の２ピンはまだ0RX, 1TXに接続しなくて結構です(下の写真では参考のため、すでに接続されています)。

また動作確認用に光センサーを接続コードを使ってセンサ端子A0に取り付けます。それぞれA0, A3は必須要件ではありません(センサーによっては接続端子が規定されている場合もあるのでご注意を)。

USBケーブルはPCなりMacとStuduinoを接続しておきます。あとでプログラムを転送する際に使います。

また電池ボックスを別途用意し(単３電池３本を入れた上で)POWER端子に取り付けます。モーターやサーボをつなぐのでなければ、接続先PC/MacのUSBからの給電で足りるのですが、今回はBluetooth Serialを使用する関係で、USB(Serial)とバッティングしてしまうため、別途、電池から給電するようにします。

![screenshot03.png](https://qiita-image-store.s3.amazonaws.com/0/19248/8c06bdb7-9d54-4fa9-01be-e626c937f9ca.png "screenshot03.png")


### Studuino側ソフト
Studuinoの開発ソフトをアーテックさんの[サイト](http://artec-kk.co.jp/studuino/Studuino_dl.html)からダウンロードし、インストールしておきます。Studuinoソフトウェアのver. 2.x.x [オプションパーツ対応]をインストールするようにしてください(ver.1はBluetoothに対応していないため)。

また、Arduino IDEも別途インストールしておいてください。先ほどのURLにArduino IDEをStuduinoに対応させるための追加ライブラリや設定が用意されています。

Studuinoソフトウェアを起動し、編集→入出力設定から先ほど接続した光センサーとBluetoothモジュールの設定をしておきます。
![screenshot01.png](https://qiita-image-store.s3.amazonaws.com/0/19248/b64a0625-8c5e-aeb2-249c-5754f9001b3f.png "screenshot01.png")

プログラミングもScratchベースでささっと描いてしまいます。
![screenshot02.png](https://qiita-image-store.s3.amazonaws.com/0/19248/9d08412e-0eca-9d62-6a89-5200328743de.png "screenshot02.png")

実行→プログラム作成・転送を実行後、エラーが特になければ、電池ボックスの電源を入れ、USBケーブルを取り外し、Bluetoothモジュールの灰色・白色コードのピンを正しく刺しておきます。

なお、Studuinoソフトウェアの旧バージョンでは、下のような「接続されていないブロックが存在します。」エラーが出力されていましたが、Version 2.0.3.1で解消されましたので、必要に応じて最新版にアップデートしてみてください。

![screenshot04.png](https://qiita-image-store.s3.amazonaws.com/0/19248/e7fcb7ac-b84a-a67d-c381-3ec9ce9d2e12.png "screenshot04.png")

### Raspberry Pi側ハード

さて、Raspberry Pi側でBluetoothドングルを認識させ、SPP(Serial Port Profile)でStuduino側のBluetooth(HC-05)とつなぎます。

```bash
$ sudo apt-getinstall bluetooth bluez-utils blueman
```
でBluetooth関係のパッケージを追加した後、GUI経由でやるのが一番速くて確実かと思います(コマンドラインから操作するのは結構面倒くさいので)。

### Raspberry Pi側ソフト

こんな感じでPythonでスクリプト書いて、実行してやります。Studuino側で光センサを覆ったり、暗くしたり明るくしたりすることで画面に出力される数字が変わります。

```bluetooth-test.py
bd_addr = "XX:XX:XX:XX:XX:XX"
port = 1

sock=bluetooth.BluetoothSocket(bluetooth.RFCOMM)
sock.connect((bd_addr, port))
print "connected"

time.sleep(1)

print("Entering main loop now")

while 1:
	data = sock.recv(1)
	if data == '':
		print "Socket broken"
	else:
		value = ord(data[0])
		print "Received data:%d." % value

sock.close()
sock=None
del sock
```

あとはループの中で受け取ったデータをデータベースに格納するなり、[myThings](http://mythings.yahoo.co.jp)みたいなクラウドに送信してやるとか、ここでは結果の受け取りは行っていませんが、同様にBluetoothを経由してRaspberry PiからStuduino側にデータ(=指示)を送ることも可能です。

これでアーテックブロックで作ったあなたのロボットなりクルマが遠くに行ってしまっても(Bluetoothが届く範囲であれば)ちゃんと制御可能になりました！

![IMG_0115.jpg](https://qiita-image-store.s3.amazonaws.com/0/19248/48827456-4300-92fd-65c2-21829bb6bcb7.jpeg)

![IMG_0116.jpg](https://qiita-image-store.s3.amazonaws.com/0/19248/c3d91cb9-08eb-9ae1-f90a-9f97d993f5c3.jpeg)

## さいごに
お客様とデザイン思考ワークショップを開催する中で、単なるアイデア出し大会にしてしまうのではなく、プロトタイプをクイックに作り、そのプロトタイプを使った体験を評価し、気づきを得る、よりよいカタチにする、というのが私のお仕事(Design Thinker & Experience Prototypist)なのですが、アーテックさんのRobotistは(プログラミングがScratchベースでできることもあり)なかなかの優れモノです。半田ごていらないし、スペルミスでコンパイルエラーに悩むこともないですからね！

* [プロトタイプを作り使ってみて体感することがデザイン思考では重要だ](http://www.sapjp.com/blog/archives/11854)

こういった教材で育つイマドキの子供たちはなかなか侮れないと思う一方で、大人も積極的にこういったツールを活用するのがおすすめです。特にIoT, M2M, Industrie 4.0, 自動運転, Smart Factory, モノからコトへ, といった議論をする上では会議室での概念ベースの議論よりも、集合知をクイックに見える・触れられる化して感じることが、実現への、成功への近道かと思います。