こんばんは、Reveです。技術のほうです。
最近、ArduinoでミニマトリックスLEDをいじくってたのですが、シリアル通信で少しはまったことがあったので、今日はそれをネタに書こうかと。
【シリアル通信(RS 232C)とは】
詳しくはこの記事を参照。中身など大して無いがな
簡単に言うと、データを1ビットずつ順番に送る通信方法です。
RS 232Cというのは、昔から使われているシリアル通信規格の一種で、Arduinoのシリアル通信というとこの規格を利用したものを意味します。
PCや他のArduinoと連携(センサーで測定したデータを送るなど)をするにも、一番手軽な手段としてよく利用されるのですが、あること(そのうち記事にする予定)をしようとして通信が上手くいかないときがありました。
普段はあまり陥ることが無いような問題ですが…
【何が問題だったのか】
その問題とは、今回のタイトルにもある通信バッファの上限を超えてしまうことでした。
Arduinoのシリアル通信は、デフォルトで(送受信ともに)64バイトまでしか一度に処理できないため、サイズの大きなデータを送ろうとしても、上限を超えた分は無視されてしまいます。
しかし、そんな問題をすぐに解決できる魔法のような手段があるのです。
そう、Arduinoのシリアル通信のバッファ上限を変えてしまえばいい!
【バッファサイズの上限を上げる】
とはいっても、何も新しい回路は必要ないですし、複雑なプログラムもありません。
必要なデバイスはArduinoのみ。少し手順を踏むだけで、簡単にバッファ上限をアップグレードできるのです。
1. Arduinoのシステムフォルダ(インストールされたフォルダ)内にある hardware >> arduino >> avr >> cores にある「arduino」というフォルダをコピーして、新しいフォルダ「arduino_256_serialbuf」として同じ場所に貼り付けます(大抵、CドライブのProgram Files(x86)にあります)。
2. 1.でコピーしたフォルダ内にある、「HardwareSerial.h」の中でバッファサイズの上限を定義した定数(SERIAL_TX_BUFFER_SIZE, SERIAL_RX_BUFFER_SIZE)の数字を64から256に変更します。
3. hardware >> arduino >> avr にある「boards.txt」にある、pro.build.coreの右側をコピーしたフォルダ「arduino_256_serialbuf」に書き換えます(不安な方は、元ファイルをコピーして別の場所にバックアップとして保存したほうが良いでしょう)。
なお、Arduinoソフトウェアが入ったフォルダ内の各ファイルは直に書き換えができないため、編集したファイルを別の場所に保存しておき、後で元のファイルと置き換える必要があります。
ちなみに、手順1.で「arduino」フォルダをコピーせずにそのまま中を編集した場合、手順3.は不要です。
後は普段通りプログラムを作ってください。
これで256バイトまでのデータをシリアル通信でやり取りできます。
そんなわけで、バッファ4倍のシリアル通信ライフを楽しんでください。ではノシ
【参考】
こちらのページを参考にしました(2015/11/10加筆)。
Arduino電子工作教室 https://www.facebook.com/ArduinoUNO1/posts/877606578958580
しかし、バッファ上限を超えて大きなデータを通信するとかあるのかって?
センサーを何十個もつけて同時に測定データを送る(ArduinoのAD変換は10ビットの精度なので、最大で32個分のデータを送れます。そんなにAD変換出来ないけど)とか、複雑な計算処理の結果をいっぺんに送るとか(float型の数値だと4バイトなので8個分送れる)したい方には少し物足りないのです。
(え、そんな奴いるのかって?いるんです、ここに)
何故こんなことをしたのかも、近々ブログに書こうかと。
コメント