シリアル通信でセンサー値をPCのモニターに出力しよう!:マイクロマウスで始める組み込み開発入門(11)(1/3 ページ)
市販の組み立てキットを用い、小さくて賢いロボット「マイクロマウス」の開発に取り掛かった北上くんとえみちゃんは、サンプルのソースコードに頼らない、オリジナルプログラムを作成中。今回は、前回取得したセンサーの値を「シリアル通信」でPCのモニターに表示させる。
前回のあらすじ
組み込み技術者に要求される要素が“ギュッ”と詰まった「マイクロマウス」。北上くんと新入社員のえみちゃんは、スキルアップを兼ねてマイクロマウスの開発を始めることにしました。サンプルのソースコードに頼らない、オリジナルプログラムの作成に挑戦中のえみちゃんは、前回、壁の有無や壁までの距離を検知する「センサー」の値を、A/D変換して取得する方法を学びました(前回の記事へ)。
シリアル通信とは?
――モグモグ、モグモグ(おやつの豆大福を食べながら……)。
センパイ! この豆大福、本当にオイシイですねぇ〜。ほんのり塩味がきいて、餡の甘さをイ〜感じに引き立ててますよね!!
えみちゃん、分かってるね〜。これはボクの一押しスイーツなんだよ。
(ゴックン)
ところで、センパイ! 「取得したセンサー値をシリアル通信でPCのモニターに出力する」って言ってましたけど……。ワタシ、そういうことはPCが勝手にやってくれるんだと思ってましたぁ〜。
えっ? 「PCが勝手にやってくれる」ってどういう意味??
え〜と、それはつまり……(汗)。
USBケーブルでマイクロマウスとPCを接続したら、パッと表示してくれるかなぁ〜って(てへっ)。
う〜ん。PC側のアプリケーションは、フリーソフトの「Tera Term(テラターム)」があるからそれを使えばいいけど……。でも、マイコン側のデータを送る部分は、自分で作らないとダメなんだよ!
そ、そりゃ、そうですよね(涙)。何だか、PCって何でもやってくれるような気がしちゃって……。
まぁ、気持ちは分からないでもないけどね。PCや電化製品を使っていて「この機能、便利だなぁ〜」と感じることがあるけど、実際はその機能を実現するために一生懸命プログラムを組んでいる人がいるんだよ。
なるほど。いつかワタシもそういう人になれますかね!?
どうかなー。頑張ればなれるかもしれないよ!!
それじゃあ、始めようか!
はい!!
前回、赤外線センサーで取得した値を「A/D変換」しました。マイクロマウスでは、センサーの調整や走行中の壁の認識状態をチェックするために、センサー値を確認しなければなりません。そのためには、マイコン内に取り込んだセンサー値を“PCに転送して、モニターへ出力する仕組み”が必要になります。今回は、それを「シリアル通信」を使って実現します。
マイクロマウスの市販組み立てキット「Pi:Co Classic」に搭載されているマイコン「SH7125」は、3チャンネルの独立したSCI(Serial Communication Interface)を備えています。SCIは、調歩同期式とクロック同期式の2方式のシリアル通信が可能です。
シリアル通信というのは、1本(シリアル)の信号線を使って、データを1ビットずつ逐次的に送る方式です。通常、1文字のデータを送るのに8ビットを1単位として扱います(画像1)。
シリアル通信でデータを正しく送受信するためには、マイコン側とPC側とでタイミングを合わせる必要があります。このタイミングの合わせ方によって、調歩同期式とクロック同期式に分かれます。ちなみに本稿では、調歩同期式を使います。
さらに、タイミングだけでなく、マイコン側とPC側とで幾つかの設定も合わせておく必要があります。今回は、連載第4回で紹介したものと同じ設定を使用します。ダウンロードした「Tera Term」のシリアルポート設定画面を見ながら、各設定項目を確認していきましょう(画像2)。
ボー・レートは通信速度のことで、“1秒間に送受信するビット数”を意味します。通信速度を上げ過ぎると、エラーが発生しやすくなるので、ボー・レートは「38400」にしておきます。
データは、「7bit」と「8bit」から選択できます。「7bit」では片仮名を扱えないため「8bit」を選びます。
パリティは「none」を選択します。このパリティというのは、「パリティ・チェック」というエラー制御方式のことです。今回は使用しません。
ストップでは、ストップビットの長さを設定します。今回は「1bit」を使用します。なお、スタートビットは、デフォルトで1ビットの「0」なので設定の必要はありません。調歩同期式では、1文字分の文字情報を送るたびに、データの先頭にこのスタートビットと、データ末尾にストップビットを付加して送受信を行っています。
フロー制御は、データ通信時に受信側の処理が追い付かず、データを取りこぼしてしまうことを防ぐための機能です。通信状況に応じて、送信停止や速度制限などの調整を行います。今回は使用しないので「none」を選択しています。
シリアル通信の設定項目を確認したところで、プログラムの開発に取り掛かりましょう!
参考記事: | |
---|---|
⇒ | SHマイコンでシリアル通信をしよう!! |
シリアル通信プログラミング
USBケーブルでマイクロマウスとPCを接続してますけど……。これもシリアル通信なんですか?
そうだよ。USBはシリアル通信の一種なんだよ。
1ビットずつデータを送信するシリアル通信に対して、複数の信号線で一度に複数ビットを送信する「パラレル通信」という方式もあるんだ。
なるほど〜。なら、パラレル通信で一度にパ〜っとデータを送った方が効率良さそうですね!
そうだね。でも、信号線の数が増えるし、各ビットを送受信するタイミングを同期させる手間も掛かるんだよ。それに、昔と違って今は、シリアル通信のスピードも速くなってきたから、シリアル通信の方が主流といえるんだ。
へぇ〜。そうなんですか!?
以前、パラレル通信を使っていたプリンタや外付けHDDも、今はそのほとんどがUSB接続になってるでしょ。通信精度も向上しているから、このくらいのデータ通信ならパリティ・チェックも“なし”でいいしね。
ふむふむ。マイコン制御を勉強すると、いろんな技術の進歩にも触れられて面白いですね!
そうだね。じゃあ、ぼちぼちシリアル通信のプログラミングに取り掛かろうか。
はいっ!!
Copyright © ITmedia, Inc. All Rights Reserved.