Mbed(9)-シリアル通信

前回は、ソフトウェア割り込みを使用した機能を構築しました。ソフトウェアトリガ割り込みを、Timerの割り込みのタイミングで発生させて、ソフトウェアトリガ割り込みの割り込み関数で、LEDの点灯消灯を行い、LEDを点滅さました。前回の内容は下記のサイトを参考にしてください。

Mbed(8)-ソフトウェア割り込み処理

今回は、シリアル通信を行いたいと思います。シリアル通信は、NUCLEO-F44REのUSB端子とPCのUSB端子を接続して行います。PC側から送信された文字をNUCLEO-F446REはエコーバックします。

また、NUCLEO-F446は文字を受信するたびに、LEDのON、OFFをきりかえるようにします。開発環境は下記のとおりです。

・Visual Studio Code
・GNU Arm Embedded Toolchain
・opneOCD

それでは、機能を構築していきたいと思います。まずは、新規プロジェクトの作成です。新規プロジェクトの作成方法は、下記のサイトを参考にしてください。

Mbed(5)-GNU Arm Embedded Toolchain + opneOCDを使用してMbed対応ボード動作確認

GR-COTTON(2)-電圧測定装置

各種センサーの値(電圧)をPCに取り組むために、各社からさまざまな装置が販売されています。 装置は複数センサー値が読み込めるものが多く、複数のセンサーになれば、そのぶん金額も高くなります。今回、読み込むセンサーの値は1つでよかったので、自作することにしました。何か良い基板はないかなと探したところ、小型な基板であることもあり、GR-COTTONを使って作成することにしました。

GR-COTTONは以前下記のページで紹介しています。この時は、LEDを点滅する
機能を作成したと思います。開発環境に関しても紹介していますので、参考に
していただければと思います。

GR-COTTON(1)-動作確認

今回、下記のような機能を構築しようと思います。

  1. 電源を投入したらLEDを点滅させる。
  2. 電圧の値を読む。
  3. READコマンドが受信したら、読み込んだ電圧値を返信する。

下記のように電圧を変化させてみると、下記のような出力を取得できました。

  • 3.3V → 1023
  • 1.65V → 512
  • 0.33V → 100

GR-COTTONはDTRの設定があるようなので、TeraTermで接続するとGR-COTTONが停止してしまいます。KurumiWriterで書き込む際に「Run after COM open(FTDI setting)」にチェックを入れて書き込む方法やTeraTermにもDTRの設定をするなどの対策方法もありますが、今回は、以前C#で作成したシリアル通信のアプリケーションで動作確認をしました。

C#言語(2)-RS232C通信(シリアル通信)

電圧を読み込むピンはA2ピンを使用しました。ちょうどGNDも隣にあるので使いやすいです。シリアル通信は、USBコネクタで行います。

それでは、プログラミンをしていきます。

C#言語(8)-XMODEMプロトコルによるデータ受信

前回は、XMODEMプロトコルを使用してデータを送信するアプリケーションを作成しました。今回は、XMODEMプロトコルを使用してデータを受信するアプリケーションを作成しようと思います。XMODEMプロトコルを使用してデータを送信するアプリケーションは下記のページを参照してください。

C#言語(7)-XMODEMプロトコルによる送信

XMODEMプロトコルに関しては、下記のページが参考になると思います。

https://ja.wikipedia.org/wiki/XMODEM

下記のようなダイアログを作成しました。

wincs_006.PNG

XMODEMプロトコルを使用してデータを送信するアプリケーションとほぼ見た目は変わりません。

ダイアログの作成方法は、下記のページを参照してください。

C#言語(1)-アプリケーションを作成してみる

シリアル通信に関しては、下記のページを参照してください。

C#言語(2)-RS232C通信(シリアル通信)

ファイルの参照方法に関しては、下記のページを参照してください。

C#言語(6)-CSVファイルの読み込みと書き込み

参照ボタンを押すと、受信したデータを書き込むファイルを選択するダイアログを表示、受信したデータを書き込むファイルを選択した後に、実行ボタンを押すとファイルの受信を開始します。

それでは、ソースコードを見ていきます。

PIC(3)-RS232C通信

本日は、PICを使用したシリアル通信機能を構築しようと思います。

PICの周辺機器はUARTを使用します。UARTは、Universal Asynchronous Receiver Transmittionの略で、いわゆる汎用のシリアル通信の機能をもった周辺回路モジュールです。名前の通り、全二重の非同期式通信であり、調歩同期式通信とも呼ばれます。

RS232Cは、OSI参照モデルの物理層に位置づけされます。ネットワークの物理的な接続・伝送方式を定めたものです。PIC側とPC側の電圧レベルを合わせるために、中間に変換するデバイスが必要となります。中間デバイスとしては、MAX232やFT232などがあります。今回使用するボードには、FT232が使用されていました。

下記のコードは、RS232C通信規格で、UARTを使用した通信機能のコードになります。クライアント側から文字列を送信すると、PIC側から同じ文字列を返信する機能になります。

C#言語(5)-Arduinoシリアル通信

下記のページで、RS232通信(シリアル通信)を紹介させて頂きました。

C#言語(2)-RS232C通信(シリアル通信)

その相手側となる装置をArduinoを使用して作成しようと思います。使用したArduinoArduino LEONARDOです。

[商品価格に関しましては、リンクが作成された時点と現時点で情報が変更されている場合がございます。]

Arduino Leonardo マイクロコントローラ (ヘッダ)
価格:3117円(税込、送料別) (2019/2/17時点)


PC側に文字を送信したい場合のコードは下記のようになります。

// the setup routine runs once when you press reset:
void setup() {
  // initialize serial communication at 9600 bits per second:
  Serial.begin(9600);
  Serial.setTimeout(3000); 
}
// the loop routine runs over and over again forever:
void loop() {
  Serial.println("OK");  
}

PC側から文字を受信したい場合のコードは下記のようになります。

// the setup routine runs once when you press reset:
void setup() {
  // initialize serial communication at 9600 bits per second:
  Serial.begin(9600);
  Serial.setTimeout(3000);
}
// the loop routine runs over and over again forever:
void loop() {
  String strRev = "";
  if(Serial.available() > 0){
    strRev = Serial.readStringUntil('¥r');
    if(strRev == "Send"){
      digitalWrite(13, HIGH);
    }
  }
}

C#言語(2)-RS232C通信(シリアル通信)

組み込みソフトウェアの開発の際には、シリアル通信機能を使用することが多いです。シリアル通信を外部機器とのやり取るをする上で大切な機能です。
デバック作業をする際にもとても役立ちます。PC側はOSI参照モデルの物理層に位置づけられるRS232C通信を使用します。

それでは、早速、アプリケーションを作成しましょう。ボタンやテキストボックスの作成方法は、下記のページを参考にして下さい。

C#言語(2)-アプリケーションを作成してみる

下記のようなアプリケーションを作成します。

プロパティのテキスト欄を編集して、ボタンやグループボックスの表示を編集できます。

プロパティのNameを編集して、ボタンやテキストボックスに識別子を定義します。

下記にボタンやテキストボックスの識別子を記載しておきますので、参考にして下さい。

続きを読む