UART

UARTはコンピューター同士で通信するための通信方法の1つです。UARTの特徴は以下の通りです。

  • 電線1本+GNDで送信できる。送受信するなら2本+GNDあればよい
  • ほとんどのマイコンで利用できる。
  • 低速からそこそこ高速な通信までが可能。obniz Board シリーズなら115.2kbpsまで
  • 主に2台での通信に使う。通信に親子関係はなくお互いに好きなタイミングで送信できる。
  • エラー訂正はない。パリティチェックはオプションで使える

最も単純にデータをやり取りするならUARTがおすすめです。特にUSB-UARTの変換ケーブルなどもあり、PCとマイコンを通信させる一番簡単な方法なので、よく使われています。

初期設定

デバイスごとに利用できるUARTの数は異なります。obniz Boardシリーズの場合はuart0とuart1の2つです。uartに対して、その出力をどのioに、入力をどのioにするのか設定して利用する形となります。uartの番号とioの番号には関係がありません。uart0をio1で利用することができます。

uart.start()を利用してuartを設定します。io0をuartの出力に、io1を入力とした場合以下のような設定になります。tx で指定したioがuartの自分からの出力となり、相手のrxと接続するioです。

var uart = obniz.getFreeUart();
uart.start({tx: 0, rx: 1, baud:9600 });

obniz.getFreeUart()とは複数あるuartのうち、使われていないuartを返します。もし確実に使っていないuartがわかっている場合は、uartを指定して利用することができます。

obniz.uart0.start({tx: 0, rx: 1, baud:9600 });

baudは通信速度を意味し大きいほど高速です。送信と受信は同じ速度となり、通信するときは相手と合わせる必要があります。好きな値を使えますが、uartではよく使われる値というのがあります。9600もその一つです。1秒に9600ビット送れるような速さという意味です。(実際はデータ以外の制御信号も少しは入るので送りたいデータを1秒に9600ビット送れるわけではありません)

また、通信する相手とはtx,rx以外にgndも接続する必要があります。gndをioを使って相手と接続する場合、io11を相手とのgndと接続する場合は以下のように設定することが可能です。

var uart = obniz.getFreeUart();
uart.start({tx: 0, rx: 1, gnd:11, baud:9600 });

また、tx,rxとして利用するioの駆動方法を変更することも可能です。

var uart = obniz.getFreeUart();
uart.start({tx: 0, rx: 1, gnd:11, baud:9600, drive:"3v", pull:null });

開始時の1byte

UARTの開始時に意図していないデータを送ったことになったり、受け取ってしまうことがあります。

これは、UARTは開始するときにあたかも信号が始まったかのような波形になることがあるため、相手や自分が誤解することで1バイトの通信をしたことになるためです。データを送るときではなく、UARTを始めるときに発生します。

パリティ

start()関数ではパリティの付与を行うことが可能です。詳しくはstart()関数の設定オプションを御覧ください。

フロー制御

RTS・CTSを利用したフロー制御が可能です。詳しくはstart()関数の設定オプションを御覧ください。flowcontrolでフロー制御のタイプが選択可能です。

var uart = obniz.getFreeUart();
uart.start({
  tx: 0,
  rx: 1,
  cts: 2,
  rts: 3,
  flowcontrol: "rts-cts",
  baud:9600});

送受信

設定したuartで送信・受信を行えます。

終了

開始したuartはuart.end()を呼ぶことで終了することができます。

obniz.uart0.start({tx:0, rx:1})
obniz.uart0.send("Hi");
obniz.uart0.end();

Articles