今回はBluetoothを利用してArduinoとProcessingの無線通信を行いたいと思います。
▼試した環境はこちら▼
・OS windows10 ・Bluetoothドングル(Logitec LBT-UAN04C1) ・Arduino/Genuino 101(IDE:1.6.8)x 自作Bluetoothモジュール ・Processing 3.1
Arduino101/ Genuino101の内蔵BluetoothLE(BLE)を利用せずに、とりあえず自作のBluetoothモジュールをつないでProcessingとの通信確認をしてみました。
▼ArduinoとBluetoothモジュール▼
写真はArduinoUNOですが、実際は101を使用してます。BluetoothモジュールにはPIC24FJ64GB002を使用。ランニングエレクトロニクスさんにて公開されているSBDBTのSPPサーバー用ソースを少しいじって書き込んであります。
Arduino101/Genuino101側スケッチ
スケッチの内容を簡単に解説します。内容としてはArduino/Genuino側でSIN/COSカーブを計算。その値をBluetooth通信でPC側へ送信します。SPPを使用してますので普通のシリアル通信の要領で情報を送信します。
SoftwareSerial Bluetooth(2, 3); //RX:2 TX:3
▲ハードでも問題ないかと思いますが、今回はソフトウェアシリアルを使用してます。ここで指定したピンとBluetoothモジュールのRX/TXピンを接続します。
if (Bluetooth.available()) { BTPacket = Bluetooth.read(); if (BTPacket == 's') { Bluetooth.print(sin(radians(i))); Bluetooth.print(','); Bluetooth.println(cos(radians(i))); i++; } } if (i > 360) { i = 0; }
▲void loop()内でデータ送信を繰り返してます。Processing側から「s」を受信したら、SIN/COSの値をカンマ区切りでProcessing側へ送信してます。
Processing側スケッチ
Processing側ではArduino側から受信した値を順次グラフ化していくスケッチとなります。
まずWindowsでPCとArduino(Bluetoothモジュール))のペアリングを済ませておきます。その際、BluetoothSPPのCOMポートを調べておきます。Windows10の標準ドライバでも可能でした▼
ペアリングを完了後に、「Bluetoothデバイスの管理」⇒「その他のBluetooth・・・」でCOMポートの確認ができます。いろいろ弄ったせいなのか「24」まで進んでました。
COMポートを使用するため、Processing側のスケッチも基本的には有線シリアル通信と同様のスケッチでO.Kでした。
myPort.write("s"); packet = myPort.readStringUntil('\n'); // read from port until '\n' if (packet != null) { data = split(packet, ","); sinVal[499] = float(data[0]); cosVal[499] = float(data[1]); } angleGraph.graphDraw(sinVal, cosVal, cosVal);
最初に「s」を送信してArduino側へデータ送信を要求します。その後、受信した文字列をカンマ区切りで配列に格納して、リアルタイムでグラフ化していきます。「angleGraph.graph・・・」は自作のグラフ化クラスです。
▼実際に通信してみました▼
画面右下のほうでドングルがピコピコ青く光って通信してます。BluetoothのSPP通信であれば有線シリアル通信とほとんど同じ処理で実装可能でした。ただボーレートの調整?オーバーフロー気味?よく通信が切断されました。調整が必要なようです。
Arduino/Genuino101にはBluetoothLEが内蔵されているため、難しそうですがせっかくなのBLEの使用方法も覚えていきたいと思います。
▼⊿1:Arduino101/Genuino101のBLE機能を使ってみました▼
・BLE(Bluetooth LE)で文字列通信(Arduino101/Genuino101)
・Bluetooth LEを使ってみる(LED点滅)
・Bluetooth LEでLEDの明るさ制御
コメント