はじめに
NervesJP #28 夏休みにNervesでこんなんやってみましたLT回!!でのLTを目標に取り組んだ活動をまとめます。技術力はありません。ただ楽しんでいます。
組み込み開発の基本中の基本(多分)のUARTシリアルコンソール接続をまだやったことがなかったので、挑戦しました。
Nervesマシンに接続する方法は複数ありますが、僕は基本的に今までずっとUSBもしくはWiFiでホストマシンからRaspberry Pi Zero Wに接続して通信するパターンのみでやってきました。
USBでの接続は一見簡単で便利そうなのですが、トラブルも起こりがちです。
例えば、USBケーブルが充電専用の場合はデータ通信ができないのですが、見た目で区別するのが困難です。
また、ブート時に問題がある場合に何も見ることができません。
ベテランのNervesアルケミストや組込エンジニアの話を聞いていると、どうもUARTシリアルコンソール接続がよく使用されるらしいです。
ネットワークやブートプロセスのデバグ、および高度な開発ワークフローに役立つそうです。
USB-to-TTLシリアルケーブルを入手する
バラ線がRaspberry PiのUARTピンにつながり、USBコネクタが開発ホストマシンにつながります。
おそらく初めての場合は開発ホストマシンにケーブルを使用するためのドライバーをインストールする必要があります。
以下の記事の序盤に詳しく説明されています。
Nervesが各ターゲットに対してどのような機能をサポートしているか確認
各ターゲットでデフォルトの機能が異なります。
言い換えると、Raspberry Pi Zero W (rpi0
)とRaspberry Pi 3 (rpi3
)とでは初期設定が異なります。
nerves_system_<ターゲット名>
プロジェクトのドキュメントを参照してください。
例えば、ターゲットがRaspberry Pi Zero(rpi0
)の場合、https://hexdocs.pm/nerves_system_rpi0 にアクセスしてみてください。
そしてそのNerveシステムがIExターミナル機能をどのようにサポートしているかを調べます。
本記事を書いている時点で、nerves_system_rpi0 (Raspberry Pi Zero用のNervesシステム)のドキュメントには、(初期設定で)ttyAMA0
という名称のUARTポートがIExターミナルに使用できると書かれています。
ちなみにこれはnerves_system_rpi0
のソースコードのここで設定されています。
ソフトウエア(Linux)の/dev/ttyAMA0
というデバイスファイルは、ハードウエア(Raspberry Pi Zero)上ではUART0
という名称になっており、それがGPIOの8番ピンと10番ピンに対応するそうです。
Image credit: https://pinout.xyz
ターゲットによっては初期設定がHDMIディスプレイをUSBキーボードを使用する前提となっています。
そのようなターゲット上でUARTシリアルコンソールをメインで使用したい場合は、初期設定を上書きすることができます。
Nerves公式ドキュメントをご覧ください。
配線
Raspberry Pi | USB-to-TTL Serial Cable |
---|---|
TX0 (pin 8 / GPIO 14) |
RX |
RX0 (pin 10 / GPIO 15) |
TX |
GND |
GND |
4本バラ線が出ていると思いますが、ここでの目的はシリアルデータ通信であるため、電力線は必要ありません。
端末エミュレータをインストール
USB-to-TTLシリアル ケーブルは、テキスト出力を標準のシリアルUSBポートに変換します。
シリアルコンソールをサポートするオープンソースの端末エミュレータプログラムがいくつかあります。
他にもおすすめのものがありましたら、お便りください。
端末エミュレータを実行
picocom /dev/tty.usb* -b 115200
usb*
は自動的にホストマシン上のUSBポート名に展開されます。
iex(1)>
プロンプトが表示されると思います。そうでない場合は、Enterを数回押してみてください。
さいごに
せっかく新しいことを学んだので、世界の初心者Nervesアルケミストたちと共有したく思い、ついでにautoracexでモクモクとNerves公式ドキュメントのアップデートに取り組みました。
@MickeyOohさんが立ち上げ中のログにログを表示させる方法についてまとめてくださってます。
Elixirを楽しみましょう!
Elixirコミュニティに初めて接する方は下記がオススメです
Elixirコミュニティ の歩き方 -国内オンライン編-
https://speakerdeck.com/elijo/elixirkomiyunitei-falsebu-kifang-guo-nei-onrainbian
日程からイベントを探すならElixirイベントカレンダー