Arduino 入門
番外編 08
【UART通信 とは】
こんにちはomoroyaです。
今回は、Arduino 入門 番外編 08 UART通信 とはです。
arduino 入門 番外編はarduinoの基本的なことを書いていく方向性にしたいと考えています。
本日は、arduinoのUART通信(ユアート通信)についてです。
※ Universal Asynchronous Receiver Transmitter の略
その前に、arduinoの外観とピン配置を確認することをおすすめします。
arduino自身のことを少しづつ理解して行きましょう。
いやいや、arduinoを早速始めたいんだ!というかたは下記の入門編からお読みください。
Arduino入門編の解説にて使用しているArduinoは互換品です。
互換品とは言え、Arduinoはオープンソースであり複製して販売するのもライセンス的に問題なし。
そのため互換品の品質も悪くなく、それでいて値段は安いです。
正規品本体の値段程度で豊富な部品が多数ついています。
正規品(Arduino UNO R3)の本体単品がほしい方はこちらとなります。
Arduino入門編2では「Arduino UNO R4 Minima」「Arduino UNO R4 WIFI」にて遊ぶため今のところは正規品を使用。(まだ互換品が・・・ほぼない)
UART通信について
UART通信とは、ICなどの電子部品との通信だけでなく、コンピュータ同士やコンピュータ周辺機器との通信のための通信方式です。
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」。
通信速度について
UART通信の通信速度は、一般的に115.2kbpsとなっています。
ただたしデバイスによってはMbpsでの通信が可能なデバイスもあります。
UARTで通信する場合のライブラリは標準ライブラリを使用します。
設定はSerial.begin()を使用します。
通信速度は「9600bps」、「115200bps」などを指定します。
※9600bpsとは1秒間に9600bitデータを受け渡すことができるということ。
接続するデバイスによって通信速度は異なります。
推奨の通信速度は電子部品のデータシートによって確認することができます。
UART通信方法
UART通信で使用する2本の信号線の接続方法は以下となります。
UARTは番外編06などで説明したI2Cと異なり1対1通信となります。
通信フォーマット
UARTは調歩同期式と呼ばれる方式で送受信を行います。
これは、同期クロック線を不要にしたフォーマットで、3選のみで通信を行うことができます。
通信フォーマットは以下となります。
スタートビット ~ ストップビットまでが1バイト分の転送となります。
スタートビット:一定期間Lowとなることで受信側に開始を知らせる。
データビット:8bit
ストップビット:1bit
Arduinoの場合、5Vを使用します。
そのため、Highレベルは5V、Lowレベルは0Vとなります。
データの転送がないときは、Highレベルとなっています。
データを転送する時にはデータを送る側(TxD)がスタートビットにて一定期間Lowレベルのパルスを出します。
受信側はこのLowレベルを認識することでデータの受信を開始します。
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対応の電子部品を使った実践の解説を記事にする予定です。
次回の番外編 09は「Arduino 入門 番外編 09 スケッチ(コード、プログラム)の関数化」の解説を予定しています。
最後に
疑問点、質問などありましたら気軽にコメントください。
この電子部品の解説をしてほしい!などなどなんでもOKです。
リンク切れ、間違いなどあればコメントいただけると助かります。
Arduino入門編、番外編、お役立ち情報などなどサイトマップで記事一覧をぜひご確認ください。
Arduino入門編、Arduino入門編2で使用しているUNOはAmazonにて購入可能です。
Arduino入門編では互換品を使用。
Arduinoはオープンソース。
複製して販売するのもライセンス的に問題なし。
そのため互換品の品質も悪くなく、それでいて値段は安いです。
正規品本体の値段程度で豊富な部品が多数ついています。
学習用、遊び用、お試し用には安価な互換品がおすすめです。
ELEGOO UNO キット レベルアップ チュートリアル付 uno mega2560 r3 nanoと互換 Arduino用
上記のものでも十分に多数の部品が入っていますが、最初からもっと多数の部品が入っているこちらもお勧めです。
Arduino入門編2では「Arduino UNO R4 Minima」「Arduino UNO R4 WIFI」にて遊ぶため今のところは正規品を使用。(まだ互換品が・・・ほぼない)
Amazonでお得に買う方法
Amazonでお得に購入するならAmazon Mastercard、Amazonギフト券がおすすめです。
時期により異なりますが、様々なキャンペーンを実施しています。
\Amazonギフト券/
Amazonギフトカード キャンペーン
\Amazon Mastercard お申込み/
Amazon Mastercard 申し込み
いずれの場合もプライム会員である方がお得!!
\Amazon Prime 30日間の無料会員を試す/
無料会員登録
コメント