1. sttn

    Posted

    sttn
Changes in title
+linuxPCでserial通信をしようとした話
Changes in tags
Changes in body
Source | HTML | Preview
@@ -0,0 +1,68 @@
+この記事は高知工科大 [Advent Calendar 2017](https://adventar.org/calendars/2305)の5日目の記事です。
+はじめまして。 高知工科大学 情報学群2年のsattonです。初投稿です。
+##はじめに
+マイコンで処理したデータをserial通信でPCに表示しようとした場合、だいたいの方はTeraTermに代表されるようなターミナルソフトを使用して表示させると思います。
+しかし、自分はLinuxPCを日頃使用しており、serial通信をしようとすると少し工夫する必要がありました。
+そこで、LinuxPCのTerminalを使用してserial通信をするための方法について~~n番煎じでしょうが~~話したいと思います。
+##やったこと
+マイコンで気圧センサと加速度センサの値を読み取り、読み取った値をPCに表示しました。
+##使用環境
+
+* [Linux mint](https://linuxmint.com) ver17.2+Thinkpad-X200(PC)
+* [Nucleo-F303k8](http://akizukidenshi.com/catalog/g/gM-10172/) (マイコン)
+* [MPU9250](http://strawberry-linux.com/catalog/items?code=12250) (加速度センサ)
+* [lps22hb](http://strawberry-linux.com/catalog/items?code=12122) (気圧センサ)
+* その他必要なもの
+
+##マイコン側の前準備
+配線やマイコン側のプログラムを事前にしておきます。今回はさほど重要ではないのですっ飛ばします。
+![sc_20171201220123.jpg](https://qiita-image-store.s3.amazonaws.com/0/221124/0d759297-b6f6-1535-1c16-2c160e6e8700.jpeg)
+ブレッドボードはこんな感じ。
+中央上が気圧センサで下が加速度センサです。マイコンとはI2Cで接続しています。~~少し汚いですね…~~
+##パソコン側の準備
+linuxでserial通信を行うためのソフトにはいくつか種類がありますが、自分は今回、 「
+cu」というコマンドを使用しました。
+Linux mint はubuntuとDebianをベースとしたディストリビューションなので、
+
+```
+$sudo apt-get install cu
+```
+
+と打ち込むと無事に使うことができるようになります。
+##接続方法
+続いて、接続方法についてです。
+
+1. まず、USBケーブルでマイコンとPCを繋ぎます。
+ここでPCがマイコンを無事に認識しなければ、スタートラインに立てません(´・ω・`)
+1. ```$ls -l /dev/serial/by-id/``` と打ち込み、マイコンにシリアルポートが振られているかを確認します。
+Linuxはwindowsと違い、COMポートというものが無く、代わりに「/dev/ttyUSB0」など、最後に数字が付いて認識されます。詳しいことは[この記事](http://tclip.blog.fc2.com/blog-entry-86.html)に載っています。
+![jCGcwI7xbDPt7kE1512412037_1512412081.png](https://qiita-image-store.s3.amazonaws.com/0/221124/fe6ee2f9-7f8a-860d-d5fc-e798472693d5.png)
+実行結果はこんな感じです。今回はポートに「ttyACM0」が振られました。
+1. このままではマイコンを弄る権限が無くて接続できないので、```$sudo chmod 666 /dev/ttyACM0```で「ttyACM0」の権限を変更します。
+chmodコマンドアクセス権限を変更し、こちら側でデータを見られるようにします。今回はマイコン側への実行権限までは必要ないので、「666」で設定しました。
+1. ```cu -s 9600 -l /dev/ttyACM0``` で通信を開始します。
+このコマンドでserial通信を始めます。使い方は```$cu -s <boud reat> -l <device name>```と入力するだけです。```<boud reat>```は**通信速度**、```<device name>```は使用したい**ポート名**です。今回は通信速度(ポーレート)を9600で設定していたので、このコマンドになりました。終了する時は**「~.」**と打ち込みます。
+
+##実践
+では実際にやってみた結果です。
+
+![3st1HANoW5JwnBE1512415127_1512415195.png](https://qiita-image-store.s3.amazonaws.com/0/221124/1fea227c-1574-f034-5c5e-d5e7327f2c2c.png)
+このようなログになりました。chmodコマンドを叩かずにcuすると、Permission deniedエラーが出ることが分かります。コマンドを叩いて再度cuすると、無事に接続されていることが分かります。左から気圧、加速度XYZ、ジャイロXYZのデータです。~~加速度ジャイロが整数型なのは間違って出しただけで別に深い意味は無いです。~~
+
+少し見辛いので改めて
+![YvYRcVNTmJelhHx1512415951_1512415969.png](https://qiita-image-store.s3.amazonaws.com/0/221124/026226a2-23da-e0c5-b36b-3d6de21fbdaa.png)
+ジャイロの値を消して代わりに内容を追加しました。
+
+とまあ、こんな感じで
+**Linuxでも問題なくserial通信ができました!!**
+#まとめ
+今回紹介した方法はあくまで一例です。シェルスクリプトで簡略化したり、ログを取ったり、まだまだ方法はいくらでもあるかと思います。
+
+もしLinuxPCでserial通信をやりたいという方がいれば、この記事が少しでも役立ってくれると嬉しいです。
+
+###参考
+[LinuxでRS232Cのシリアル通信](http://enotyama.hatenablog.com/entry/2014/03/03/232305)
+[LinuxでUSBシリアルケーブルを使う ](https://netwiz.jp/?p=556)
+##補足
+* 今回はCOMポートの設定を何もせずに行いましたが、もし設定を行うならば**setserial**コマンドが便利だと思います。[マニュアル](http://www.linux-cmd.com/setserial.html)もあるので、設定を行う場合の参考になると思います。
+* シリアルポートに対応したターミナルコマンドは他にも```minicam```や```screen```があります。[簡単にまとめているサイト](https://qiita.com/yuiseki/items/bfa9ad984f7333377870)もありますのでこちらも宜しければぜひ。