104
85

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

LinuxPCでserial通信をしようとした話

Last updated at Posted at 2017-12-04

この記事は高知工科大 Advent Calendar 2017の5日目の記事です。
はじめまして。 高知工科大学 情報学群2年のsattonです。初投稿です。
##はじめに
マイコンで処理したデータをserial通信でPCに表示しようとした場合、だいたいの方はTeraTermに代表されるようなターミナルソフトを使用して表示させると思います。
しかし、自分はLinuxPCを日頃使用しており、serial通信をしようとすると少し工夫する必要がありました。
そこで、LinuxPCのTerminalを使用してserial通信をするための方法についてn番煎じでしょうが話したいと思います。
##やったこと
マイコンで気圧センサと加速度センサの値を読み取り、取った値をPC上に表示させました。
##使用環境

##マイコン側の前準備
配線やマイコン側のプログラムを事前にしておきます。今回はさほど重要ではないのですっ飛ばします。
sc_20171201220123.jpg  
ブレッドボードはこんな感じ。
中央上が気圧センサで下が加速度センサです。マイコンとはI2Cで接続しています。少し汚いですね…
##パソコン側の準備
linuxでserial通信を行うためのソフトにはいくつか種類がありますが、自分は今回、 **「cu」**というコマンドを使用しました。
Linux mint はubuntuとDebianをベースとしたディストリビューションなので、

$sudo apt-get install cu

と打ち込むとコマンドが使用できるようになります。
##接続方法

  1. まず、USBケーブルでマイコンとPCを繋ぎます。
    ここでPCがマイコンを無事に認識しなければ、スタートラインに立てません(´・ω・`)
  2. $ls -l /dev/serial/by-id/ と打ち込み、マイコンにシリアルポートが振られているかを確認します。
    Linuxはwindowsと違い、COMポートというものが無く、代わりに「/dev/ttyUSB0」など、最後に数字が付いて認識されます。詳しいことはこの記事に載っています。
    jCGcwI7xbDPt7kE1512412037_1512412081.png
    実行結果はこんな感じです。今回はポートに「ttyACM0」が振られました。
  3. このままではマイコンを弄る権限が無くて接続できないので、$sudo chmod 666 /dev/ttyACM0で「ttyACM0」の権限を変更します。
    chmodコマンドアクセス権限を変更し、こちら側でデータを見られるようにします。今回はマイコン側への実行権限までは必要ないので、「666」で設定しました。
  4. cu -s 9600 -l /dev/ttyACM0 で通信を開始します。
    このコマンドでserial通信を始めます。使い方は$cu -s <boud reat> -l <device name>と入力するだけです。<boud reat>通信速度<device name>は使用したいポート名です。今回は通信速度(ポーレート)を9600で設定していたので、このコマンドになりました。終了する時は**「~.」**と打ち込みます。

##実践
実際にやってみた結果です。

3st1HANoW5JwnBE1512415127_1512415195.png
このようなログになりました。chmodコマンドを叩かずにcuすると、Permission deniedエラーが出ることが分かります。権限を変更して、再度cuすると、今度は無事に接続されていることが分かります。データの内容は左から気圧、加速度XYZ、ジャイロXYZとなります。加速度ジャイロが整数型なのは間違って出してしまっただけなので深く考えないでください。

少し見辛いので改めて
YvYRcVNTmJelhHx1512415951_1512415969.png
ジャイロの値を消して代わりに内容を追加しました。

とまあ、こんな感じで
Linuxでも問題なくserial通信ができました!!
#まとめ
今回紹介した方法はあくまで一例です。シェルスクリプトで簡略化したり、ログを取ったり、まだまだ方法はいくらでもあるかと思います。

もしLinuxPCでserial通信をやりたいという方がいれば、この記事が少しでも役立ってくれると嬉しいです。

###参考
LinuxでRS232Cのシリアル通信
LinuxでUSBシリアルケーブルを使う
##補足

  • 今回はCOMポートの設定を何もせずに行いましたが、もし設定を行うならばsetserialコマンドが便利だと思います。マニュアルもあるので、設定を行う場合の参考になると思います。
  • シリアルポートに対応したターミナルコマンドは他にもminicamscreenがあります。簡単にまとめているページがあったのでこちらも宜しければぜひ。
104
85
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
104
85

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?