catやechoでファイルに読み書きするみたいにシリアルポートを扱えると、簡単なシェルスクリプトからシリアル通信を行えるセンサ, 測定器, Arduinoでつくった自作のハードウェアなど通信ができて便利そうなので、やり方を検証してみました。
用意したもの
- Mac: MacBook Pro (13-inch, 2016, Two Thunderbolt 3 ports), macOS Sierra
- USBシリアル変換: スイッチサイエンスのFTDI USBシリアル変換アダプター Rev.2
- Amazonなどでゴミのような値段のも出回ってますが、やはり素性がはっきりしてるものを使うのが安心です
- 小さいArduinoに似てますが、これ自体はArduinoではありません(ArduinoUnoのATMega328がパソコンとUSBで通信する部分だけを抜き出したようなもの)
デバイスの準備
実験用に通信相手を用意するのがめんどくさかったので、写真のようにTxとRxを直結して信号をループバックさせます。
こうすると、Macから送信した通信内容がそのままMacで受信できます。
通信してみる
macOSではシリアルポートが/dev/tty.usbserial-DN0123RB
と/dev/cu.usbserial-DN0123RB
のように2つのデバイスとして認識されますが、今回はcu
がついているほうを使います。
受信側
$ sudo stty -f /dev/cu.usbserial-DN0123RB raw 9600 # シリアルポートの設定を行います
$ cat /dev/cu.usbserial-DN0123RB
送信側
$ echo 'Hello, World!' | sudo tee /dev/cu.usbserial-DN0123RB
Hello, World!
受信側に、
Hello, World!
と出てきたら成功です。
余談
以前、メディア芸術をやっている人を意識してArduinoとProcessingの通信方法の記事を書いたら少し反響があったのですが、複数個のArduinoをMacからの指示で動かすみたいな作品を作りたくなったとき、現状だとMaxとかを使うんでしょうか、とにかく高価なソフトなので、シェルスクリプトでちょいちょいっとできたら安上がりだし便利そうかなと思いました。
シェルスクリプトだと展示するときはMacを安価なRaspberryPiなんかに置き換えることもできますね。
そのうちそういう感じの記事も書いてみようと思います。