はじめに
RaspberryPi(ラズパイ)で「UART」を有効化する方法と、関連のコマンドについて解説します。
UARTより「RS232Cのシリアル通信」の方が馴染みある人も多いかもしれません。
そんなUART(シリアル通信)ですが、RaspberryPi OS (Bullseyes)では、初期状態で無効化されており、プログラムで使う前に有効化する必要があります。
今回はUARTの有効化の方法と、関連コマンドについて解説したいと思います。
~ この記事の内容 / Contents ~
環境
この記事は以下の環境で作成しています。
環境 | バージョンなど | 備考 |
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での注意点
UARTの有効化と確認方法
UARTの有効化と確認を以下の手順で行います。
- OS設定の有効化
- デバイス名の確認
- 通信設定の確認
- データの送信テスト
- データの受信テスト
① 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でも使える汎用的(古典的?)な方法を解説してみました。参考になればうれしいです。
おすすめ書籍
MicroPythonのプログラミングガイドブックがついに登場!
「MicroPython」の専門書がついに発売になりました!
この一冊で、MicroPythonの言語仕様から、プログラミングの仕方までが、”ガッツリ”学べます!
別言語を使っている人や、これからマイコンを始める(工学系の)学生を対象としているので「初心者向け」ではありません。しかし、「自前のライブラリの作成」が目標なので、これ一冊で「ガッツリ」とMicroPythonを学びたい人におすすめの内容となっています。
全ての内容はここでは紹介しきれないので、詳細は以下からご覧ください。目次だけでも”ガッツリ”なのが確認できると思います。
質問・要望 大歓迎です
「こんな解説記事作って」「こんなことがしたいけど、〇〇で困ってる」など、コメント欄で教えてください。 質問・要望に、中の人ができる限り対応します。
使えたよ・設定できたよの一言コメントも大歓迎。気軽に足跡を残してみてください。記事を紹介したい方はブログ、SNSにバシバシ貼ってもらってOKです。
232C通信のデーター長等を変更する事は出来ますか。
相手方のプロトコルが、7data,even parity,1stop bitになってます。
T.KAZUさん
こんにちは、えすです。
コメントありがとうございます。
データ長などもsttyコマンドで設定できたと思います。
具体的なオプション名や、指定の仕方は、調べてからまたコメントしますね。
T.KAZUさん
お待たせしてすみません。
ご質問の設定であれば、以下のコマンド&オプションで設定できると思います。
sudo stty -F /dev/ttyAMA0 parenb -parodd -cstopb cs7
※ -(マイナス)の有り無しで意味が変わるので、注意してください。