Excelからシリアル通信を実現してみようという連載の2回目です。前回の記事はこちらになります。
さて、Excelでシリアル通信を実現していこうと言う訳ですが、その開発には通信がちゃんと動いているか確認する必要があります。通信先が必要と言う訳ですね。専門の開発や保守にはラインモニターなる専用の装置があるのですが、なかなか個人でそろえるのはハードルが高いですね。
そこで今回はマイコンボードArduinoを使って、簡単なシリアル通信モニターを作っていこうと思います。Arduinoの開発環境自体がシリアル通信を使っているので簡単に開発できるでしょう。また、この連載でのシリアル通信の設定はArduinoの初期設定(通信速度 9600bps、ビット長 8bit、パリティ なし、ストップビット 1)で行います。
使用するハードウェア
今回使用するハードウェアですがArduino(UNOまたはUNO互換機)と一緒に、表示用としてGROVE液晶モジュールを使用します。受信した内容を表示せるためのものです。
GROVE - RGBバックライト液晶モジュールwww.switch-science.com
GROVE液晶モジュールの使用方法は以下の記事を参考にしてください。
https://github.com/Seeed-Studio/Grove_LCD_RGB_Backlight/archive/master.zip
GROVEケーブルを使用して、I2Cのコネクター経由で接続します。GROVEベースシールドを使用するか、GROVEコネクターを装備しているUNO互換機を使いましょう。
UNO互換機はこちらがお勧めです。
Seeeduino v4.2www.switch-science.com
今回ご紹介するスケッチは、以下からダウンロードできます。
また、Grove Beginner Kit for Arduino用のスケッチも用意しましたのでご利用ください。
Grove Beginner Kit for Arduinowww.switch-science.com
シリアル通信モニターのスケッチ
それではシリアル通信モニターのスケッチです。
//シリアル通信モニター(GROVE液晶モジュール版) #include <Wire.h> #include "rgb_lcd.h" rgb_lcd lcd; String line_1 = ""; String line_2 = ""; int count = 0; void setup() { //シリアル通信初期設定 Serial.begin(9600); Serial.setTimeout(100); //LCD設定 lcd.begin(16, 2); lcd.clear(); lcd.setCursor(0, 0); lcd.print("Ready!"); } void loop() { if (Serial.available()) { String str = Serial.readString(); Serial.println(str); int n = str.length(); for (int i = 0; i < n; i++) { count++; int code = (int)str.charAt(i); if (code == 13) { //改行コード(CR)処理 line_1 = line_2; line_2 = ""; count = 0; } else if (code < 32 || 122 < code) { //文字コード以外は非対応 break; } else if (count < 16) { //表示データ追加 line_2 = line_2 + str.charAt(i); } else { //スクロール処理 line_1 = line_2 + str.charAt(i); line_2 = ""; count = 0; } //表示処理 lcd.clear(); lcd.setCursor(0, 0); lcd.print(line_1); lcd.setCursor(0, 1); lcd.print(line_2); } } }
シリアル通信モニターの概要
シリアル通信モニターの概要です。と言っても動作内容は、シリアル通信で受信した内容をモニターに表示した後に、受信内容をそのまま返信するだけとなります。表示対象文字はキャラクターコード32(スペース)~122(z)までとなります。改行コードは13(CR)です。PCに接続した状態でArduinoIDEのシリアルモニターからデータを送信していただくと、色々確認して頂けると思います。
次回は通信
いかがでしょうか?これで準備は万端ですね!!次回はいよいよPCから送信してみたいと思います。お楽しみに!!