はじめに
RasberryPi 4BのGPIOでシリアル通信をするメモです。
センサの情報をシリアル通信で取得したかったのですが、同梱されているはずのUSB変換がなくなっていたので、ラズパイのGPIOポートを使いたいと考えました。
環境
- RasberryPi 4B(Ubuntu 20.04.4 LTS)
項目 | バージョン |
---|---|
Ubuntu | 20.04 |
ROS | Noetic |
参考
-
Raspberry Piのシリアルポート設定(UART)を理解する - Toki Blog(トキブログ) (toki-blog.com)
-
RaspberryPi(ラズパイ)でシリアル通信を有効化する方法 シリアル関連の設定方法【UART・stty・echo・cat】 (tech-and-investment.com)
-
Raspberry PiのTTLシリアルポートをアクティブにし、機能していることを確認します。 (raspberrypi-japan.com)
やったこと
RasberryPiのシリアルポート設定
シリアルポートはデフォルトでは無効になっています。そのため、設定で有効にする必要があります。
raspi-configで設定します。
$ sudo raspi-config
raspi-configが起動したら、以下のような画面になるので、
「いいえ」
ハードウェアポートをアクティブ化するかどうかの質問に「はい」
「了解」
デバイスの確認
$ dmesg | grep PL011
[ 0.038572] Serial: AMBA PL011 UART driver
[ 1.431030] fe201000.serial: ttyAMA0 at MMIO 0xfe201000 (irq = 14, base_baud = 0) is a PL011 rev2
$ ls -al /dev/ttyAMA0
crw--w---- 1 root tty 204, 64 12月 28 19:44 /dev/ttyAMA0
表示結果の2行目に「ttyAMA0… is a PL011」と表記されているため、デバイス名は「ttyAMA0らしい」ということが分かります。
ボーレート確認しようと思ったら、許可がないとのことなので、権限を付与します。
$ stty -F /dev/ttyAMA0
stty: /dev/ttyAMA0: 許可がありません
$ sudo chmod a+rw /dev/ttyAMA0
ubuntu@TB3:~$ ls -al /dev/ttyAMA0
crw-rw-rw- 1 root tty 204, 64 12月 28 19:44 /dev/ttyAMA0
ボーレートを確認すると、115200であることがわかりました。
$ stty -F /dev/ttyAMA0
speed 115200 baud; line = 0;
min = 1; time = 0;
-brkint -icrnl -imaxbel iutf8
-isig -icanon -iexten -echo -echoe -echok -echoctl -echoke
データ送受信テスト
シリアル通信には、GPIO14(TXD)、GPIO15(TXD)を使います。ブレッドボードを使って、シリアル通信を対向させます(自分と通信)。抵抗は適当なものを使いました。(手元にあった27Ω)
参考:Raspberry PiのTTLシリアルポートをアクティブにし、機能していることを確認します。 (raspberrypi-japan.com)
ターミナルで受信します。待ち構えている状態です。
(先ほど権限付与したので、sudo必要なかったかも)
$ sudo cat /dev/ttyAMA0
別のターミナルで送信します。
$ echo "Hello" > /dev/ttyAMA0
受信側のターミナル
$ sudo cat /dev/ttyAMA0
ello
H
なにか通信できている…模様。
まとめ
本記事ではRasberryPi 4Bのシリアル通信を有効にしたメモを記載しました。