🐧 Linux 総合学習プラットフォーム
実機制御 GPIO/I2C/SPI・RT ・ 中級〜上級

UART/シリアル通信

UARTは、たった2本の線で文字をやり取りする、いちばん素朴で頼れる通信です。組込みでは画面もネットワークも無い状態が普通にあり、そんなとき基板の様子を映し出す「最後の命綱」になります。ここではTX/RXを交差でつなぐ配線の考え方、双方の速度(ボーレート)を合わせる約束、Linux側で /dev/ttyUSB0 などとして見える仕組み、そして minicom や picocom でつないで中を覗く手順を学びます。

組込みの現場では、画面もネットワークも無い基板と向き合う場面がしょっちゅうある。そんなとき、たった2本の線で基板の声を聞ける通信がある。それが UART(eio-uart)だ。

UART は Universal Asynchronous Receiver/Transmitter の略で、要は「非同期で文字を送受信する仕組み」だ。仕組みが単純なぶん壊れにくく、どんなに込み入った基板でもたいてい最後まで生きている。

🔗
たとえUART は2本の糸電話だ。片方の糸で自分の声を送り(TX)、もう片方で相手の声を受ける(RX)。速く喋りすぎると聞き取れないので、あらかじめ「喋る速さ」を約束しておく——それがボーレートだ。

🔀 TX/RX は交差、GND は共通

UART の配線には、初心者が必ず一度は引っかかる約束がある。送信(TX)と受信(RX)は、まっすぐ同じ名前どうしでなく、交差してつなぐのだ。

理屈は単純で、自分が「送る(TX)」線は、相手の「受ける(RX)」につながないと届かない。だから A の TX を B の RX へ、A の RX を B の TX へと、たすき掛けにする。

もう1本、両者の GND(グランド、電圧の基準)を必ず共通でつなぐ。これが無いと、そもそも電圧の高い低いを比べる土台が揃わず、通信が成立しない。信号2本+GND1本で最小3本だ。

機器ATXRXGND機器BRXTXGNDTX→RX(交差)GND は共通
つまずき「つないだのに沈黙」の原因で最も多いのが、TX/RX を交差せずまっすぐつないだミスだ。うまくいかないときは、まずこの2本を入れ替えて試すと直ることが多い。

📻 ボーレートを合わせる(115200 8N1)

UART には共通のクロック線が無い。だから送る側と受ける側が、あらかじめ「1秒間に何ビット送るか」を同じ数字に合わせておかないと、区切りがずれて意味をなさない。この速度がボーレート(eio-baudrate)だ。

組込みで圧倒的に多い値が 115200 だ。ほかに 9600 なども使われる。この数字が両者で1つでも違うと、画面には壊れた記号がだらだら流れるだけになる。

設定はよく 115200 8N1 と表記される。これは「速度 115200・データ8ビット・パリティなし(N)・ストップ1ビット」の略で、組込みの事実上の標準形だ。まずこの形で合わせれば、多くの基板とつながる。

💡
ポイント文字化けの犯人はほぼボーレート違いだ。基板の資料に速度が書いてあればそれに、無ければまず 115200 8N1 で合わせる。記号の羅列が出たら、速度を疑うのが鉄則。

🔌 /dev/ttyUSB0 と /dev/ttyAMA0

Linux では、UART も1つのファイルとして見える。パソコンに USB-シリアル変換アダプタを挿すと、多くの場合 /dev/ttyUSB0 という名前で現れる。2本目を挿せば ttyUSB1 だ。

一方、Raspberry Pi のようなボード自身が持つ内蔵UARTは、/dev/ttyAMA0 や /dev/serial0 といった名前で見える。「外付け変換なら ttyUSB 系、ボード内蔵なら ttyAMA/serial 系」とおおまかに覚えておく。

USB-シリアル変換外付けアダプタ/dev/ttyUSB0ボード内蔵UARTRaspberry Pi など/dev/ttyAMA0どちらも「文字が流れるファイル」

💬 minicom・picocom でつなぐ

デバイス名と速度が分かれば、あとは端末ソフトでつなぐだけだ。定番は2つ。多機能でメニュー設定もできる minicom と、起動が速く後腐れのない picocom だ。ちょっと覗くだけなら picocom が気軽でよい。

$ picocom -b 115200 /dev/ttyUSB0 Terminal ready (つながると基板の出力が流れ始める。抜けるときは Ctrl-a のあと Ctrl-x)

minicom は minicom -s で設定メニューを開き、ポートや速度をあらかじめ登録して使うことが多い。長く使うならこちら、使い捨てなら picocom、と好みで選べばよい。

コツpicocom を抜けられなくなったら、Ctrl-a を押してから Ctrl-x だ。UART の端末ソフトは終了キーが独特なので、つなぐ前に「抜け方」を確認しておくと慌てずに済む。

🛟 組込みの「最後の命綱」

ネットワーク設定を間違えて ssh で入れなくなった。起動の途中でカーネルが止まった。そんな「手も足も出ない」状況でも、UART だけは生きていることが多い。だから最後の命綱と呼ばれる。

ssh がネット越しの会話だとすれば、UART は基板に直接ケーブルを差し込んで耳を当てる行為だ。ネットワークやOSがまだ立ち上がる前の、いちばん早い段階からの声も聞こえる。

💡
ポイント何をしても反応しない基板でも、まず UART をつなぐ。起動メッセージが1行でも流れれば「生きている」と分かり、そこから原因を追える。UART は組込みデバッグの出発点だ。

🔑 dialout グループの権限

いざ picocom を叩くと Permission denied で弾かれることがある。/dev/ttyUSB0 のようなシリアルデバイスは、普通のユーザーがそのままでは開けないよう保護されているためだ。

多くのディストリでは、これらのデバイスは dialout(eio-dialout)というグループの持ち物になっている。自分のユーザーをこのグループに入れれば、sudo なしでアクセスできるようになる。

$ sudo usermod -aG dialout $USER (自分を dialout グループに追加。反映には再ログインが必要)
つまずきグループ追加は、いま開いているセッションには即座に効かない。usermod のあとは一度ログアウトして入り直す(あるいは再起動する)。ここを知らないと「設定したのに直らない」と悩みがちだ。

TX/RX を交差し、GND を共通にし、115200 8N1 で速度を合わせ、picocom でつなぐ。UART のこの型を身につければ、画面の無い基板はもう「話しかけられない相手」ではなくなる。

この項目に出てくる用語

UARTゆーあーと
2本の信号線で文字を非同期にやり取りする、最も基本的なシリアル通信。
ボーレートぼーれーと
シリアル通信で1秒あたりに送る信号の速さ。両端で一致が必須。
dialoutグループだいあるあうとぐるーぷ
シリアルポート等の通信デバイスへのアクセスを許すユーザーグループ。

関連コマンド

picocom

▶ 学習アプリでこの続きを学ぶ・演習する