curious4dev

中国旅行、Arduinoなどを使った電子工作、その他色々。

*

PCとArduinoをJavaでシリアル通信

 

お疲れ様です。高橋です。

先日作ったコレ。

042901

よくよく考えると、書き込む際にいちいちArduinoに曲データを解釈させる必要性が無い事に、帰宅中ハタと気づいてしまいました。

PC上で生成したArduino用コードをいちいちArduinoに食わせるまでもなく、先日のバイナリルールに則って変換したバイト配列をシリアル通信でそのまま何か使って書き込めば良いのです。

043002

そうすると、書き込み時に毎回Arduino側でスケッチを作成する必要も無いので、純然たる書き込みスケッチと読み込みスケッチさえあれば、もっと簡単。

Javaでシリアル通信

Arduino IDEはシリアルモニターがあるのですが、バイナリデータは書き込めないような感じです。PCで動く、ArduinoのCOMポートに対してシリアルでデータを書き込むためのツールが必要です。Androidアプリ開発用のためにEclipse環境が整っていましたので、Javaで作ることにしました。

基本設計は、

  1. smf2ymzで出力したArduino用コードをどっかに保存 (e.g. d:/Arduino/sample.txt)
  2. Arduinoとのシリアル通信用COMポートを設定する (e.g. COM3)
  3. bpsを設定する (e.g. 9600)
  4. シリアル通信用の準備
  5. ファイルを1行ずつ読み込み、バイト配列に変換する
  6. 書き込む
  7. 最後に終了用バイト配列を書き込む

という感じ。

ライブラリを調達

Javaでシリアル通信をする際、ライブラリが必須です。

Windows 64bit用のライブラリはhttp://fizzed.com/oss/rxtx-for-javaからダウンロード出来ました。

mfz-rxtx-2.2-20081207-win-x64.zipを展開すると、下記のようなファイル達が解凍されます。

043003

Install.txtを読めばわかるのですが、jarを適当なパス(lib系)に配置し、dllも適当なパス(bin系)に配置します。

どこに配置すれば良いのか不明な場合は、JAVA_HOMEを確認するなり、

を動かすなりして、調べます。

Javaでの実装

下記を作りました。

実行結果

テキストから読み込んだ物は正常にバイト配列にする事が出来ました。

043004

シリアル通信も多分問題ないけど、明日は書き込みスケッチの実装です。

 

 

 

以上、よろしくお願い致します。

 - 電子工作

  関連記事

YMZシールドの作成 #2

お疲れ様です。高橋です。 先日から作っていたYMZシールドですが、本日完成しまし …

電子オルゴール 動作試験

お疲れ様です。高橋です。 前回「電子オルゴール基板実装 #2 ~ワイヤストリッパ …

iPhoneでルンバを操作してみたい

お疲れ様です。高橋です。 突然ですがiPhoneでルンバを操作したいと思います。 …

YMZ294の基板が動いた。

お疲れ様です。高橋です。 先日「ブレッドボード上のYMZ294をユニバーサル基板 …

音階に合わせてLEDを光らせてみた。

お疲れ様です。高橋です。 主旋律に合わせてLEDを光らせてみる実験を行いました。 …

【完成】PCからシリアル通信でEEPROM書き込み

お疲れ様です。高橋です。 PCからシリアル通信を介して楽曲データをEEPROMに …

bluetoothモジュールHC-06とAndroid

お疲れ様です。高橋です。 先日AliExpressで購入したbluetoothモ …

ArduinoIDE1.6.4+ATTiny13Aで赤外線リモコン

お疲れ様です。高橋です。 先日実験したArduinoで赤外線リモコンの問題点、そ …

電子オルゴール 動作試験 #2

お疲れ様です。高橋です。 Pro Mini互換機とYMZ294、EEPROMで作 …

Arduino+EEPROM+YMZ294で曲の抜き差し

お疲れ様です。高橋です。 I2Cの256KBitなEEPROMに曲データを書き込 …