シリアル通信の基本その1 ~PCにデータを送ろう
micro:bitを扱っていると、扱っているデータをもっと表示させたりしたくなりますよね。またプログラム開発中に変数の値の変化をチェックし、デバッグに役立ててみたくなります。
そんなときにも便利なのが、シリアル通信を使ってPCの画面にデータを表示する方法です。大きな画面を持っていないArduinoなどでも応用できる方法なので、知っておくと便利なテクニックです。
シリアル通信の基本を学び、
micro:bitからPCにデータを送ろう
※micro:bitでのシリアル通信に関しては、マイクロビット財団サイト内ページ「シリアル通信」もご参照ください。
(本ページ作成 2021.05.02)
シリアル通信とは?
シリアル通信の「serial」というのは「連続的」という意味の形容詞ですが、コンピューター通信では、1ビットずつデータを伝送する方式のことで、LANなどのネットワークからセンサー接続など広く使われています。古くからパソコンを使っている方は「RS232C」といった規格もご存知かと思います。
一方、対義語は「パラレル通信」で、8ビットなど複数ビットを一度に伝送する方法です。以前は、パラレルが高速伝送に適しているとされ、コンピューターとプリンター間の接続に使われていました。しかし最近はシリアル通信も高速になり、また電線数が少なく低コスト化できるため、ほとんどの通信がシリアル通信となっています。
USBはシリアル通信の代表格
作成したプログラムをパソコンからmicro:bitに転送するときはUSBケーブルを使いますが、この「USB」は「Universal Serial Bus(汎用シリアルバス)」の略語で、シリアル通信の代表例です。
今回は、USBを使ったシリアル通信を行います。
COMポート
プログラムを書き込む時micro:bitは「USBストレージ」として認識されましたが、シリアル通信のときは「COMポート」としての接続を用います。
Windows10PCの場合、micro:bitをUSBケーブルで接続した状態で、デバイスマネージャーを開くと、「ポート(COMとLPT)」のところに「USBシリアルデバイス(COMXX)」という表示があらわれます(XXは接続されたマイコンの数などで決まります)。
他のバージョンでは、デバイスドライバーの組み込みが必要です。詳細はこちらをご覧ください。
Windowsの場合、ArduinoやESP-32などのマイコンをあれもこれも接続すると、COMポートの番号が大きくなってしまい、アプリケーションソフトで不具合も起きることがあります。不要なCOMポートを削除する方法はこちらです。
通信ソフト(ターミナルソフト)
パソコンでシリアル通信を行う場合、「通信ソフト」「ターミナルソフト」等が必要になります。
OS付属のもの、フリーソフト、製品版などさまざまなものがあります。変わったところでは、ArduinoIDEの「シリアルモニター」なども使用できます。ご利用のPC環境に応じて適切な通信ソフトを準備することが必要です。
Windowsでは、シリアル通信に対応した「通信ソフト」との定番として、「TeraTerm」というフリーソフトが有名です。以下、Windowsパソコンを前提に、「TeraTerm」を使ったシリアル通信を説明します。
通信ソフト「TeraTerm」
「TeraTerm」は、1990年代寺西高氏によって開発されたMS-Windows用に開発された通信ソフトです。さまざまなプロトコルをサポートしており、さまざまな場面で使われており、定番ソフトになっています。
現在は、「TeraTermProject」によりサポートが続けられています。
TeraTermをインストールする
お使いのWindowsPCにTeraTermをインストールする手順を説明します。
ダウンロード
TeraTermプロジェクトのダウンロードページは下記のとおりです。2021年5月時点で最新版は「4.105」となっています。
https://ja.osdn.net/projects/ttssh2/
ダウンロードファイルから、インストーラー版「teraterm-4.105.exe」をダウンロードします。
インストール
「概要」ページの「プロジェクトの説明>インストール」を参照しながら、インストール作業を行ってください。
TeraTermの起動
インストールが完了し、スタートメニューまたはデスクトップアイコンから、TeraTearmを起動します。次のようなウィンドウが立ち上がれば、インストール成功です。
シリアル通信用デバイスドライバー
PCに外部機器を接続するためには「デバイスドライバー」と呼ばれるソフトウェアを組み込むことが必要で、micro:bitを接続しシリアル通信する場合もドライバーが必要です。
Windows10では、あらかじめmicro:bitにも対応したデバイスドライバーが用意されていますが、以前のWindowsではデバイスドライバーのダウンロードとインストールが必要です。
以前のバージョンのドライバーについて
Windows7などのPCでmicro:bitを使ったシリアル通信を行うために、下記のmbedのページを参照してください(英文)。
https://os.mbed.com/docs/mbed-os/v6.10/program-setup/windows-serial-driver.html
必要なファイルをダウンロードおよびインストールしますが、micro:bitを「USBドライブ」としてアクセスしているエクスプローラーなどのソフトをすべて閉じてから行ってください。
micro:bitテストプログラム
パソコン側の準備ができたら、micro:bitのテストプログラムを用意します。
5秒ごとに1つ増加した数を「kazu:XX」とPCに送信することを行います。パソコン上のTeraTermでこのように表示されたら、micro:bitとパソコン間のシリアル通信成功です。
プログラム例
このようなサンプルプログラムつくってみました。
このプログラムのリンク先です(タイトル横の「Edit Code」でエディターが起動します。)
https://makecode.microbit.org/_djk55vK8JJV8
【最初だけ】
変数「kazu」の初期化とあわせて、シリアル通信の初期化をおこないます。
USB経由でシリアル通信を行う場合、プログラム例のように設定します。
○送信端子・・「USB_TX」 ○受信端子・・「USB_RX」 ○通信速度「115200(bps)」
実はこの設定でUSBを使用するのが「規定値」なので、この初期化ブロックは省略可能ですが、シリアル通信に必要な設定値ということでプログラムに記載しました。
【ずっと】
「ずっと」ブロックの中では、最初に変数「kazu」を一つ増します。
その変数「kazu」を、シリアル通信でPC側に送り出します。その後5秒プログラムの実行を休止します。
この「ずっと」ブロック内の処理が繰り返されると、5秒おきに1つずつ増えた値をPCに送信することを続けます。
プログラムを入力したら、micro:bitに書き込んでおきます。
通信実験
では、実際にmicro:bit-PC間のシリアル通信を試して見ましょう。
micro:bitとPCの接続
micro:bitとPCをUSBケーブルで接続します。普段PCからプログラムを書き込むために使用しているものと同じです。長めのものを購入する場合は「通信(通信・充電)」対応となっている「USB(Aオス)-マイクロUSB」ケーブルを選んでください。
先のプログラムでは、USBケーブルで接続した後、micro:bitにはハートマークが表示されます。
COMポート番号の確認
接続が済んだら、デバイスマネージャーを起動し、micro:bitのポート番号を確認します。「ポート(COMとLPT)」の項目にある「USBシリアルデバイス(COMX)」がmicro:bitのポート番号になります。
※OSによっては名称が変わる場合があります(旧Windowsでは「mbed serial port」と表示されます)
TeraTerm起動
スタートメニューまたはデスクトップアイコンを使って、TeraTermを起動します。
「新しい接続」でシリアルを選択
起動すると、接続対象の通信を聞いてきますので、「シリアル」を選択し、「ポート」のリストから、先ほど確認したポート番号を選び、「OK」をクリックします。
シリアル通信スピード等の設定
上部のメニューから「設定>シリアルポート」を選択すると、「シリアルポート 設定と接続」が開きます。
「スピード」をプログラム内で指定している値(ここでは115200)に変更し、「OK」を押します。
他の項目は規定値のままです。
通信開始
通信が始まると、「kazu:xx」と5秒おきに表示されます。これでシリアル通信の成功です。改めて「kazu:1」からはじめたい時は、micro:bit背面のリセットボタンを押してください。
まとめ
無事、micro:bit-PC間の通信は成功しましたか?
サンプルプログラムは、5秒おきに数を送るだけでしたが、センサーで計測した値を送信するといったようにmicro:bitの活用の幅が広がります。
またプログラム開発時でも、変数が想定した値となっているかなどのチェックに使えるので、デバッグを効率よくすることができます。
オマケ
WindowsPCにmicro:bitやESP-32などのマイコンをいろいろ接続して実験を行うと、そのたびにCOMポートが新しく設けられ、COMポート番号が増えてしまいます。あまり番号が増えてしまうと、アプリケーションソフトが対応できないなどの問題も生じています。
増えすぎたCOMポートを削除する方法が、SwitchScienceさんのwikiページに紹介されていました。
○「Windows7で使わないCOMポートを削除する」
https://trac.switch-science.com/wiki/Delete_device_driver
「Windows7」となっていますが、Windwos10でも同様の方法で、COMポート番号の削除(アンインストール)ができます。※筆者の環境では、「mbedシリアル」をインストールしていたので、同名のポートが多数作られていました。