Raspberry Pi

RaspberryPiでシリアル通信を有効化する方法 シリアル関連の設定方法【UART・stty・echo・cat】

はじめに

RaspberryPiで「UART」を有効化する方法と、関連のコマンドについて解説します。

UARTより「RS232Cのシリアル通信」の方が馴染みある人も多いかもしれません。

そんなUART(シリアル通信)ですが、RaspberryPi OS (Bullseyes)では、初期状態で無効化されており、プログラムで使う前に有効化する必要があります。

今回はUARTの有効化の方法と、関連コマンドについて解説したいと思います。

環境

この記事は以下の環境で作成しています。

環境 バージョンなど 備考
RaspberryPi 2 Model B
OS RaspberryPi OS (bullseye) 32bit版です

UARTの種類とPi3,4での注意点

UARTの種類

RaspberryPiのUARTには以下2種類が存在します。この記事では制約の少ない「PL011」を使う方法を解説します。

UART 概要
PL011 制約なく使える、一般的なUARTです。
Mini UART バッファ(FIFO)サイズが小さいなどの制限があります。

Pi3・4での注意点

RaspberryPi 3・4では、Bluetoothで「PL011」を使う設定となっています。UARTで「PL011」を使う場合は、別途以下の設定を行ってください。

  • 「デバイスツリーオーバーレイ」(デバイスを選択するOSの設定)で、Bluetoothを無効化する(disable-bt)
  • モデムを初期化するシステムサービスを無効化する
sudo systemctl disable hciuart.

詳細な方法は、公式ページ(英語)か、こちらのページ(日本語)が分かりやすいです。

ピンアサイン

RaspberryPi 公式のGitHubより引用

使用する機器・部品

【後継品】RaspberryPi 4 (4GBモデル)

UARTの有効化と確認方法

UARTの有効化と確認を以下の手順で行います。

① OS設定の有効化

OS(RaspberryPi OS) のUARTの設定を行います。GUI・CUI(コマンド)の2つのやり方がありますが、今回はCUI(コマンド)を使う方法を解説します。

RaspberryPiにログイン後、以下のコマンドを実行してください。

sudo raspi-config

実行すると、以下が表示されるので「3 Inerface Options」を選択して、Enterキーを押します。

入出力の設定場所を説明する画像

表示された画面で「I6 Serial Port」を選択します、

シリアルポートの設定場所を説明する画像

「Would you like login shell …」の画面で「いいえ」を選択してEnterキーを押します。

シリアル設定の確認表示を説明する画像

「Would you like serial port hardware …」の画面で「はい」を選択してEnterキーを押します。

シリアル有効化の確認表示を説明する画像

設定の状態が表示されるので「了解」を選択して、Enterキーを押します。

設定内容一覧を説明する画像

最初の画面に戻るので、「→」キーで「Finish」を選択して、Enterキーを押します。

設定の終了方法を説明する画像

再起動を求められるので<はい>を選択して、Enterキーを押します。

※ Enterを押すと設定画面が終了して、自動的に再起動が始まります。

再起動の確認画面を説明する画像

再起動が完了したらUARTの有効化は完了です。

② デバイス名の確認

通信設定やデータの送受信に使用する「UARTのデバイス名」を確認します。

UL011を使用する場合、基本的には「/dev/AMA0」「/dev/serial0」を指定すれば使用できますが、チップなどのH/Wの情報から調べたい場合、以下の手順で確認できます。

デバイス名の確認手順

下記のコマンドで、OS起動時の「PL011」に対する設定内容を表示します。

dmesg | grep PL011

表示結果の2行目に「ttyAMA0… is a PL011」と表記されているため、デバイス名は「ttyAMA0らしい」ということが分かります。

上記は、OS起動時のログを表示する「dmesg」の内、PL011の内容のみを抽出するコマンドです。「dmesg」だけにすると全てのログが見れます。普段見えることのない様々な情報が満載なので興味のある方はぜひ覗いてみてください。

次に、デバイスのディレクトリ(/dev)を表示すると「/dev/ttyAMA0」が存在しています。これで「PL011」のデバイス名は「/dev/ttyAMA01」であることが分かります。

esu@raspberrypi:~ $ dmesg | grep PL011
[    0.071928] Serial: AMBA PL011 UART driver
[    3.007897] 3f201000.serial: ttyAMA0 at MMIO 0x3f201000 (irq = 114, base_baud = 0) is a PL011 rev2
esu@raspberrypi:~ $
esu@raspberrypi:~ $ ls -al /dev/ttyAMA0
crw-rw---- 1 root dialout 204, 64 11月 29 21:17 /dev/ttyAMA0

なお、「ttyAMA0」は「serial0」の名前でエイリアス(≒ショートカット)が登録されています。このだめ、「/dev/serial0」のデバイス名でも「PL011」を使うことができます。

esu@raspberrypi:~ $ ls -al /dev/serial0
lrwxrwxrwx 1 root root 7 11月 29 21:17 /dev/serial0 -> ttyAMA0

③ ボーレートの確認

UARTで通信では、送信側と受信側でボーレートの値を同じにする必要があります。RaspberryPiのボーレートは以下のコマンドで確認できます。

esu@raspberrypi:~ $ stty -F /dev/ttyAMA0
speed 9600 baud; line = 0;
-brkint -imaxbel

上記の結果からボーレートは「9600」ということが分かります。RaspberryPiの相手側のボーレートについては取説や設定ソフト等で確認・変更してください。

④ データの送信方法

前述した内容の設定・確認できたら、以下のコマンドでデータの送信を行います。下記コマンドで「test」の文字列をUARTの接続先に送信します。

echo "test" > /dev/ttyAMA0

上記は、端末に文字列等を表示する「echo」コマンドですが、出力先をUARTデバイスにすると、文字列をUART(につながる相手先)に送ることができます。

⑤ データの受信方法

以下のコマンドでデータの受信ができます。コマンド実行後、接続先のデバイスからデータを送信してください。

cat /dev/ttyAMA0
hello
test 123

まとめ

RaspberryPiでUARTを有効化する方法と、確認方法について解説しました。

UARTの確認には「Screen」などのソフトを使う方法もありますが、他のLinux・Unix・組み込ま機器用など、RaspberryaPi “以外”のOSでも使える汎用的(古典的?)な方法を解説してみました。参考になればうれしいです。

【後継品】RaspberryPi 4 (4GBモデル)

質問・要望 大歓迎です

「こんな解説記事作って」「こんなことがしたいけど、〇〇で困ってる」など、コメント欄で教えてください。 質問・要望に、中の人ができる限り対応します。

使えたよ・設定できたよの一言コメントも大歓迎。気軽に足跡を残してみてください。記事を紹介したい方はブログ、SNSにバシバシ貼ってもらってOKです。

ABOUT ME
えす
現役のソフトウェアエンジニアです。 C++ C# Python を使ってます。10年ちょい設計/開発部門にいましたが、今はQAエンジニアっぽいことをしています。

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

Index