この記事は高知工科大 Advent Calendar 2017の5日目の記事です。
はじめまして。 高知工科大学 情報学群2年のsattonです。初投稿です。
##はじめに
マイコンで処理したデータをserial通信でPCに表示しようとした場合、だいたいの方はTeraTermに代表されるようなターミナルソフトを使用して表示させると思います。
しかし、自分はLinuxPCを日頃使用しており、serial通信をしようとすると少し工夫する必要がありました。
そこで、LinuxPCのTerminalを使用してserial通信をするための方法についてn番煎じでしょうが話したいと思います。
##やったこと
マイコンで気圧センサと加速度センサの値を読み取り、取った値をPC上に表示させました。
##使用環境
- Linux mint ver17.2+Thinkpad-X200(PC)
- Nucleo-F303k8 (マイコン)
- MPU9250 (加速度センサ)
- LPS22HB (気圧センサ)
- ジャンパー線等その他必要なもの
##マイコン側の前準備
配線やマイコン側のプログラムを事前にしておきます。今回はさほど重要ではないのですっ飛ばします。
ブレッドボードはこんな感じ。
中央上が気圧センサで下が加速度センサです。マイコンとはI2Cで接続しています。少し汚いですね…
##パソコン側の準備
linuxでserial通信を行うためのソフトにはいくつか種類がありますが、自分は今回、 **「cu」**というコマンドを使用しました。
Linux mint はubuntuとDebianをベースとしたディストリビューションなので、
$sudo apt-get install cu
と打ち込むとコマンドが使用できるようになります。
##接続方法
- まず、USBケーブルでマイコンとPCを繋ぎます。
ここでPCがマイコンを無事に認識しなければ、スタートラインに立てません(´・ω・`) -
$ls -l /dev/serial/by-id/
と打ち込み、マイコンにシリアルポートが振られているかを確認します。
Linuxはwindowsと違い、COMポートというものが無く、代わりに「/dev/ttyUSB0」など、最後に数字が付いて認識されます。詳しいことはこの記事に載っています。
実行結果はこんな感じです。今回はポートに「ttyACM0」が振られました。 - このままではマイコンを弄る権限が無くて接続できないので、
$sudo chmod 666 /dev/ttyACM0
で「ttyACM0」の権限を変更します。
chmodコマンドアクセス権限を変更し、こちら側でデータを見られるようにします。今回はマイコン側への実行権限までは必要ないので、「666」で設定しました。 -
cu -s 9600 -l /dev/ttyACM0
で通信を開始します。
このコマンドでserial通信を始めます。使い方は$cu -s <boud reat> -l <device name>
と入力するだけです。<boud reat>
は通信速度、<device name>
は使用したいポート名です。今回は通信速度(ポーレート)を9600で設定していたので、このコマンドになりました。終了する時は**「~.」**と打ち込みます。
##実践
実際にやってみた結果です。
このようなログになりました。chmodコマンドを叩かずにcuすると、Permission deniedエラーが出ることが分かります。権限を変更して、再度cuすると、今度は無事に接続されていることが分かります。データの内容は左から気圧、加速度XYZ、ジャイロXYZとなります。加速度ジャイロが整数型なのは間違って出してしまっただけなので深く考えないでください。
少し見辛いので改めて
ジャイロの値を消して代わりに内容を追加しました。
とまあ、こんな感じで
Linuxでも問題なくserial通信ができました!!
#まとめ
今回紹介した方法はあくまで一例です。シェルスクリプトで簡略化したり、ログを取ったり、まだまだ方法はいくらでもあるかと思います。
もしLinuxPCでserial通信をやりたいという方がいれば、この記事が少しでも役立ってくれると嬉しいです。
###参考
LinuxでRS232Cのシリアル通信
LinuxでUSBシリアルケーブルを使う
##補足
- 今回はCOMポートの設定を何もせずに行いましたが、もし設定を行うならばsetserialコマンドが便利だと思います。マニュアルもあるので、設定を行う場合の参考になると思います。
- シリアルポートに対応したターミナルコマンドは他にも
minicam
やscreen
があります。簡単にまとめているページがあったのでこちらも宜しければぜひ。