micro:bit シリアル通信のやり方(1)

2020年12月28日

この記事で説明すること

micro:bit のシリアル通信の方法について説明していきます。

シリアル通信が何かを知っている人には「なぜシリアル通信?」という疑問が生まれますし、シリアル通信が何かを知らない人には「シリアル通信って何?」という疑問が生まれていると思います。

最初にシリアル通信の使い方から始めるのは、「シリアル通信が出来れば micro:bit の内部のステータス(状態)が容易に取得できるようになるから」です。 

まずはシリアル通信とは何か…という話を知りたいという人もいるかもしれませんが、最初は実際に動かしてもらい、その動きを見てもらえると良いと思います。

その際、teretermというTerminal アプリケーションを使用します。

teraterm のインストール

https://forest.watch.impress.co.jp/library/software/utf8teraterm/

使い方に関しては数多の説明サイトがありますので、特にこの記事で深堀りすつもりはありませんが、何か詳しく知りたいというリクエストがありましたら記事作成したいと思います。

特に詳しい使い方を知らなくても、この記事が読み進められるようには作っています。

とりあえず、インストールのみ実施しておいてください。

teraterm は決して怪しいツールはなく、エンジニアの方であれば、人生で必ず一度は使うであろうある意味で世界で一番有名なツールなのでは…?というアプリケーションです。

micro:bit のプログラムを作成しましょう

teratermのインストールが完了したら、まずは micro:bit の Makecode を開いて新しいプロジェクトを作成してください。

https://makecode.microbit.org/

プロジェクトを作成したら「高度なブロック」欄にある「シリアル通信」のパーツリストから、一番上にある「シリアル通信 1行書きだす」を選択してください。

このパーツを予め用意されている「ずっと」のパーツにはめて、" " の箇所に「Hello World」と書きましょう。私が古い人間なのかもしれませんが、プログラムの世界はいつも「Hello World」から始まるものです。

ここまで出来たら早速、前回同様、プロジェクト名を付けて、バイナリファイルをmicro:bitにダウンロードしましょう!

Teratermを起動する

バイナリファイルを micro:bit に書き込んだら LED は消えてしまいます。なぜなら上記のプログラムには LED を制御するプログラムが含まれていないからです。ですが、心配はありません。Teratermを立ち上げて動作を見てみましょう。

Teratermアプリケーションを起動すると、以下のようなウィンドウが立ち上がります。ここで、2つ目のCOM xxのポートを指定して下さい。

※ご使用の環境によって、少しずつこの表示は異なります。もしここでトラブルがあるようであれば、メールかコメントにてお問合せ頂ければ、アドバイスできるかと思います。お気軽にどうぞ!

ここまで実施すると謎の黒いウィンドウが表示された状態になったかと思います。

次に今実施しようとしているシリアル通信のスピード設定を行います。teratermでは9600 baud rateが設定されているのに対し、micro:bitのシリアル通信のスピードは初期値が 115200 baud rateとなっています。

Teraterm側での設定変更はまず、設定のタブからシリアルポートを選択します。

シリアルポートの設定画面が開いたら、スピード欄を9600から115200に変更し、

「現在の接続を再設定(N)」のボタンを押してください。



するとどうでしょう?

Teratermの画面上に大量の「Hello World」が出現していると思います。

少し見辛いので、micor:bit 側のプログラムを見直してみました。

「一時停止(ミリ秒)」のパーツは「基本」のパーツリストにあります。

こうすると LED も付きますし、Tereterm上に現れる文字の表示も約1秒間に1回になっているかと思います。

さて、ここで温度計を作ってみましょう。

micro:bitで作る温度計

ここまでで micro:bit から好きな文字を パソコンに送れることがわかったと思います。

「シリアル通信が出来れば micro:bit の内部のステータス(状態)が容易に取得できるようになるから」を利用して温度計を作りたいと思います。

この記事を真剣に読んで下さる皆さんにはこれを講義と考えて頂き、温度計についてもご自身でどのように作れば良いかを考えてもらうのが一番です。

とは言え、もったいぶらずに回答は以下のようなものになります。

「え?これだけ?」と思われるかもしれません。これが micro:bit の凄いところです。

実際に、Tetermの画面をみると温度情報らしいデータが送られてきていることが確認出来ると思います。

このように、micro:bit で持っている温度、加速度のようなセンサ情報は teraterm を用いて簡単に取得することが出来る、これがこの記事でお伝えしたかった内容となります。

注意点は2つ挙げておきます。

・このmicro:bit で取得される温度の値は、必ずしも市販の温度計ほど正確ではないということ。

・Teratermを使わずとも、micro:bit の LEDに温度を表示する、ということももちろんできます。ただし、パソコン上で状態の確認が出来た方がずっと簡単ですし、今後のプログラムでも役に立ちます。

シリアル通信とは何か?

最後にシリアル通信とは何かについて簡単ではありますが、説明しておきます。こちらも説明しているサイトがたくさんありますので、深堀はしませんが、簡単にまとめておきます。

シリアル通信とは、シリアル(一本)の信号線でデータを送信する、データをやり取りする方法のことを言います。使っている信号線は以下の3本であり、今、パソコンとmicro:bit を繋ぐmicroUSB-USBのケーブルにはこの3線に相当するものが含まれているとお考え下さい。(厳密には少し異なりです。)

・TX(データの送信)

・RX(データの受信)

・GND(グラウンド)

TX 及び RX については記載の通りです。補足すると、Teraterm上で確認された文字列は ASCIIコードで送られています。例えば 'A’ という文字列を micro:bit から送信した時、TXとRX の信号線上では、0x41を送信しています。

この辺りは「ASCIIコード表」「シリアル通信」で検索頂ければもっと詳しい記事がありますので、そちらをご参照下さい。

GNDについては馴染みのない方も多いかもしれませんが、中学か高校で電圧と言う概念を学んだ時に、電圧は電位の差という考え方を教えてもらっていると思います。今回のGNDはパソコンと micro:bitの基準となる電位 を決めるためのものとなります。

今回、パソコンと micro:bit 間はそれぞれTXとRXという信号線でデータのやり取りを行いますが、その信号は 電圧(電位差) を使って送信されています。そのため、もしこのGND線が接続されていなければ、TXとRXの信号がそれぞれ意図した電圧でデータの送信が行わない、結果的に正しくデータの通信が行えない、ということになるのです。

今回の記事は以上です。

どんな些細なことでもご質問頂ければお答え致します。お気軽にどうぞ。