Arduinoと戯れてみる!

Arduino 入門 番外編 08 UART通信 とは

arduino-extra-edition-08-00 Arduino番外編
スポンサーリンク

「Arduino 入門 番外編 08 UART通信 とは」

こんにちはomoroyaです。

今回は、Arduino 入門 番外編 08 UART通信 とはです。

arduino 入門 番外編はarduinoの基本的なことを書いていく方向性にしたいと考えています。

本日は、arduinoのUART通信(ユアート通信)についてです。
※ Universal Asynchronous Receiver Transmitter の略

 

その前に、arduinoの外観とピン配置を確認することをおすすめします。

 

arduino自身のことを少しづつ理解して行きましょう。

 

いやいや、arduinoを早速始めたいんだ!というかたは下記の入門編からお読みください。

 

Lessonの入門編で使用しているArduinoは互換品です。

互換品とは言え、Arduinoはオープンソースであり複製して販売するのもライセンス的に問題なし。

そのため互換品の品質も悪くなく、それでいて値段は安いです。

正規品本体の値段で豊富な部品が多数ついています。

 

スポンサーリンク

UART通信について

UART通信とは、ICなどの電子部品との通信だけでなく、コンピュータ同士やコンピュータ周辺機器との通信のための通信方式です。

 

UARTとは?

wikipedia UART

UART (Universal Asynchronous Receiver/Transmitter, ユーアート) は、調歩同期方式によるシリアル信号をパラレル信号に変換したり、その逆方向の変換を行うための集積回路である。本機能のみがパッケージングされたICで供給されるものと、マイクロプロセッサのペリフェラルの一部として内蔵されるものとがある。マキシムのMAX232のような、RS-232C規格に準拠する信号レベルに変換するICと組み合わせて、外部機器とのインタフェースとして利用されるのが一般的である。UARTに、同期方式のシリアル信号を変換するための回路を追加したものを、USART (Universal Synchronous Asynchronous Receiver/Transmitter) と呼ぶ。

 

UART通信の特徴は、同期をとるためのクロック信号が不要ということです。

スタートビット、ストップビットを伝送することにより送信側と受信側のタイミングの同期をとることによって実現している通信方式です。

 

また、送受信を行うために、送信と受信の1本ずつで計2本の信号線を使用します。
※電源も必要です。

データ送信用のTxDとデータ受信用のRxDの2本を接続して使います。

 

I2CやSPIのように同期用の信号は必要なく、送信側と受信側で通信速度を合わせておくことでタイミングを合わせ、データのやり取りをします。

UART通信の信号線

UARTは2本の信号線で制御します。

 

信号名用途
TxDデータ送信用信号。
RxDデータ受信用信号。

上記に加えて、デバイス間の電圧のレベルを合わせるためにGNDを接続します。

 

Arduino UARTに使う端子

番外編02のおさらいです。

Arduino UNO R3の外観図を下記に示します。

UART通信に使用する端子はデジタル入出力と同じ端子を利用します。

外観図右下にあるデジタル0,1の端子です。

デジタル1が「TxD」。

デジタル0が「RxD」。

 

arduino_uno_R3-appearance

 

Arduinoのシリアル通信端子は、USBのシリアル通信と共用です。
PCからArduinoへのプログラムの転送はデジタル0、デジタル1を使用しています。
シリアルモニタ使用時も同様です。
そのため、UART通信とシリアルモニタを同時に使うことはできません。

 

通信速度について

UART通信の通信速度は、一般的に115.2kbpsとなっています。

ただたしデバイスによってはMbpsでの通信が可能なデバイスもあります。

 

UARTで通信する場合のライブラリは標準ライブラリを使用します。

設定はSerial.begin()を使用します。

通信速度は「9600bps」、「115200bps」などを指定します。
※9600bpsとは1秒間に9600bitデータを受け渡すことができるということ。

 

接続するデバイスによって通信速度は異なります。

推奨の通信速度は電子部品のデータシートによって確認することができます。

 

UART通信方法

UART通信で使用する2本の信号線の接続方法は以下となります。

UARTは番外編06などで説明したI2Cと異なり1対1通信となります。

 

arduino-extra-edition-08-01

 

通信フォーマット

UARTは調歩同期式と呼ばれる方式で送受信を行います。

これは、同期クロック線を不要にしたフォーマットで、3選のみで通信を行うことができます。

通信フォーマットは以下となります。

スタートビット ~ ストップビットまでが1バイト分の転送となります。

 

スタートビット:一定期間Lowとなることで受信側に開始を知らせる。

データビット:8bit

ストップビット:1bit

 

Arduinoの場合、5Vを使用します。

そのため、Highレベルは5V、Lowレベルは0Vとなります。

 

データの転送がないときは、Highレベルとなっています。

データを転送する時にはデータを送る側(TxD)がスタートビットにて一定期間Lowレベルのパルスを出します。

受信側はこのLowレベルを認識することでデータの受信を開始します。

 

Arduinoを利用する場合は、関数を利用するためスタートビット、ストップビットを意識することは特にありません。

 

UARTを使うためのライブラリ

UART通信をする場合のライブラリは標準で組み込まれています。

そのため、特に何もすることなく使用することが可能です。

 

以下、通信に必要な関数について簡単に列挙します。

コマンド内容
Serial.begin()シリアル通信のデータ転送レートをbpsで指定。
※bpsはビット/秒
speed:転送レート(int)
戻り値:なし
Serial.write()シリアルポートにバイナリデータを出力する。
1バイトずつ、複数バイトの送信が可能。
戻り値:送信したバイト数
Serial.read()受信データの読み込み。
戻り値:
読み込み可能なデータの最初の1バイト
データがない場合は、「-1」

 

UART通信 使用例

ここからは、UART通信の使用例を示します。

 

UART通信 初期処理

UART通信の初期化のために通信速度を設定します。

setup()関数内で下記を記述します。

void setup(){
   Serial.begin(通信速度); //通信速度の設定
}

 

void setup(){
   Serial.begin(9600); //通信速度は9600bpsに設定
}

 

デバイスへのデータ送信

デバイスにデータを送るためには、Serial.write()関数を使用します。

Serial.write( 送信する値 ); //デバイスにデータを送信する

 

Serial.write( 0xb2 ); //デバイスに0xb2を送信する

※0xは16進表記の接頭語です。b2が16進であることを示しています。

 

デバイスのからのデータ受信

UART通信で受信したデータはArduinoのバッファに保存されます。

そのバッファに保存されたデータを取り出すことで利用できるようになっています。

 

下記にて1バイトのデータを取り出すことが可能です。

受信データが何もない場合は「-1」がvalueに格納されます。

value = Serial.read( ); //valueにデバイスから受信したデータを取得し格納する

 

例 2バイトのデータを取り出す。

value1 = Serial.read( ); //value1にデバイスから受信したデータを取得し格納する
value2 = Serial.read( ); //value2にデバイスから受信したデータを取得し格納する

複数のデータを取り出したい場合は、上記のようにSerial.read()を必要なだけ繰り返すことになります。

 

ソフトウェアシリアル通信について

ArduinoはUART通信できるハードウェア機能が実装されています。

それが、「UARTに使う端子」のところで解説したデジタル0、デジタル1の端子となります。

この2つの端子しかないということです。

 

これでは、複数のデバイスをUART通信したり、PCとシリアル通信しながらデバイスとUART通信をするといったことができません。

そこで、複数の通信をUARTで行いたい場合は「ソフトウェアシリアル通信」を利用します。

ハードウェアの機能をプログラムによって実現した方法となります。

これを利用することにより、デジタル0、デジタル1以外のデジタル入出力端子を利用することが可能です。

 

ソフトウェアシリアル通信」に関しては別の機会で解説したいと考えます。

 

まとめ

今回は、UART通信について概略を説明しました。

 

Arduino 入門のLesson編にてUART対応の電子部品を使った実践の解説を記事にする予定です。

Lesson編の記事を更新しだい、ここにもリンクを貼りますのでしばらくお待ちください。

 

次回の番外編 09は「Arduino 入門 番外編 09 スケッチ(コード、プログラム)の関数化」の解説を予定しています。

 

最後に

疑問点、質問などありましたら気軽にコメントください。

この電子部品の解説をしてほしい!などなどなんでもOKです。

リンク切れなどあればコメントいただけると助かります。

 

Arduino入門編、番外編、お役立ち情報などなどサイトマップで記事の一覧をぜひご確認ください。

 

Arduino入門編で使用しているUNOはAmazonにて購入可能です。

互換品とは言え、Arduinoはオープンソース。

複製して販売するのもライセンス的に問題なし。

 

そのため互換品の品質も悪くなく、それでいて値段は安いです。

正規品本体の値段程度で豊富な部品が多数ついています。

 

学習用、遊び用、お試し用には安価な互換品がおすすめです。

 

Amazon ベストセラーNo.1
ELEGOO UNO キット レベルアップ  チュートリアル付 uno mega2560 r3 nanoと互換 Arduino用

 

上記のものでも十分に多数の部品が入っていますが、最初からもっと多数の部品が入っているこちらもお勧めです。

コメント

タイトルとURLをコピーしました