Arduinoと戯れてみる!

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

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

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

こんにちはomoroyaです。

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

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

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

 

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

 

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

 

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

 

Arduino入門編の解説にて使用している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 スケッチ(コード、プログラム)の関数化」の解説を予定しています。

Arduino 入門 番外編 09 【スケッチ(コード、プログラム)の関数化】
本日は、スケッチ(コード、プログラム)の関数化についてです。Arduinoに複雑なことをさせようとするとスケッチ(コード、プログラム)がどんどん複雑になっていきますよね。そんなときはスケッチ(コード、プログラム)の関数化で解決です。ぜひ、ス…

 

最後に

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

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

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

 

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

 

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

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

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

 

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

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

 

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

 

 

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

 

Amazonでお得に買う方法

Amazonでお得に購入するなら、Amazonギフト券がおすすめです。

現金でチャージするたびに、チャージ額に応じたポイントが付与されます。

最大2.5%!!!(Amazonプライム会員ならさらにお得)

チャージ額(一回分)一般プライム会員
5,000円~19,999円0.5%1.0%
2,0000円~39,999円1.0%1.5%
40,000円~89,999円1.5%2.0%
90,000円~2.0%2.5%

さらに、初回チャージで2000ポイントもらえるキャンペーンも実施中!
※いつもは1000ポイント、今なら2000ポイントです!

\Amazonギフト券 2000ポイントキャンペーン/
Amazonチャージ 初回購入で2000ポイントキャンペーン

 

補足情報
コンビニ・ATM・ネットバンクが対象
購入は1円単位で可能

コメント

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