UART: 送信する

UARTはコンピューター同士で通信するための通信方法の1つです。USBなどの高度なものではなくもっと単純なデータのやり取りに使います。1バイトだけ送ったり、ちょっとした文字を送ったり等。UARTの特徴は以下の通りです。

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

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

設定方法

uartはobnizのioのどこででも使えるのですが、obnizで使えるuartはuart0とuart1の2つです。それぞれ入力と出力が1つずつあります。
uartに対して、その出力をどのioに、入力をどのioにするのか設定して利用する形となります。

試しにio0をuartの出力にし、io1を入力とした場合以下のような設定になります。

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

obniz.getFreeUart()とは2つあるuartのうち、使われていないuartを下さい。という意味です。
もし確実に使っていないuartがわかっている場合は、このようにすることもできます。

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

これは、obnizのuart0を使っていなくて、これを使いたいという場合の書き方です。基本的にはこのようにせずにgetFreeUart()を使って下さい。

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

また、通信する相手がobnizと違う電源を使っている場合。お互いのgndを繋ぐ必要があります。io.output(false)としたioを相手のgndとつなぐこともできますが、uartではgndをこのように指定できます。例えばio11をgndとしたい場合

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

通信する

早速obnizのUARTを使ってみましょう。
データが送れているかを確認するためにパソコンにUSB-UART変換ケーブルをつないでおき、obnizと接続します。

変換ケーブルの受信をobnizのio0に。gndをio11につなぎました。
これでobnizの送った信号をパソコンで受け取れるようになります。

まず、パソコン側ではUARTターミナルのようなソフトを起動して、通信速度を9600にして受信したデータを表示できるようにします。

そして、obnizを使うプログラムではio0をuartの送信する場所として設定してデータを送ってみます。

var obniz = new Obniz("OBNIZ_ID_HERE");
obniz.onconnect = async function(){
  var uart = obniz.getFreeUart();
  uart.start({tx: 0, rx: 1, gnd:11, baud:9600 });

  uart.send("Hello");
}

するとパソコン側のソフトにHelloが出るかと思います。

Helloの前に余計な文字が出ることがあります。
これは、UARTは開始するときにあたかも信号が始まったかのような波形になることがあるため、パソコン側が誤解することで1バイト受信したことになるからです。
データを送るときではなく、UARTを始めるときに発生します。

もちろん文字に限らず好きなデータを送信することができます。

var obniz = new Obniz("OBNIZ_ID_HERE");
obniz.onconnect = async function(){
  var uart = obniz.getFreeUart();
  uart.start({tx: 0, rx: 1, gnd:11, baud:9600 });

  uart.send([100, 200, 0xFF]);
}

相手が3vなどの場合

通信したい相手が3.3v系など別の電圧の場合はuartで使うioのドライブ方法を切り替えることができます。driveでtxとrxのドライブ方法を、pullでプルアップを設定できます。txとrx両方に設定され、設定できるものはio.drive()io.pull()で設定できるものと同じです。

それらを設定してもgndに関しては常にpush-pull 5vのfalseが出力されます。

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

終了

uartを終了してioを開放するには

uart.end()

を呼ぶことで終了できます。

var obniz = new Obniz("OBNIZ_ID_HERE");
obniz.onconnect = async function(){
  var uart = obniz.getFreeUart();
  uart.start({tx: 0, rx: 1, gnd:11, baud:9600 });

  uart.send([100, 200, 0xFF]);

  uart.end();
}


Next : UART: receive

You will Get in Few Days

Circuit for Starter “obniz Board” is available on Amazon and other online stores.
You can get it at below

Our products and resellers

Forum

Visit our developer’s forum to discuss and discover technologies.

Forum

Contact

Feel free to contact out support and technical team.

Contact us