Raspberry PiでUART(シリアル)通信:コンソールと汎用通信の設定
この記事の内容はRaspberry Pi 4と3の両方で動作確認済みです
ブログ管理者のP.Hです!
今回は、UART(シリアル通信)について紹介します。使い方は以下の2つです。
- コンソールとして使用する
- 汎用通信ポートとして使用する
コンソールとして使えば、ネット環境がない場合でもRaspbery Piをコマンドで操作できます。汎用通信として使えば、シリアル通信に対応しているデバイスを制御できるようになります。通信制御としては基本ですので、覚えておいて損はありません。
UARTを使う時は、コンソール or 汎用通信のどちらで使うかを設定する必要があります。下記の手順で設定を行ってください。
コンソールとして使用する場合
コンソールとして使用する場合は、sudo raspi-config
コマンドを実行して、下記写真の通りに設定してください。
以上でコンソールとして使う場合の設定は終了です。
汎用通信ポートとして使用する場合
コンソールとして使用する場合は、sudo raspi-config
コマンドを実行して、下記写真の通りに設定してください。
以上で汎用通信ポートとして使う場合の設定は終了です。
Raspberry Pi 4でuart2~5を使用する方法
Raspberry Pi 4ではuartを複数使うことができます。GPIOピンの割り当ては以下のようになっています
- UART1 Tx(GPIO14) Rx(GPIO15)
- UART2 Tx(GPIO0) Rx(GPIO1)
- UART3 Rx(GPIO5)
- UART4 Tx(GPIO8) Rx(GPIO9)
- UART5 Tx(GPIO12) Rx(GPIO13)
UART2~5を使いたいときは、sudo nano /boot/config.txt
でconfig.txtを開いて、下記のように記載します。
... [all] ... dtoverlay=uart2 # これを追記
もし、uart4を使いたいときは、uart2をuart4に置き換えてください。再起動すると設定が反映されます。
config.txtに追記をする前と後で/dev/ttyAMA*がどうなるか確認します。ls /dev | grep ttyAMA
コマンドを入力すると、存在しているttyAMAデバイスの一覧が表示されます。
- dtoverlay=uart2追記前
- ttyAMA0のみ
- dtoverlay=uart2追記後
- ttyAMA0
- ttyAMA1(これが増えている)
config.txtでuar2を追加すると、ttyAMA1が増えているのがわかります。これがuart2です。pythonプログラムでUART2を使いたい場合は、port="/dev/ttyAMA1"を指定しましょう。
注意事項
- フォーラムでuart3(Txがない)とuart5はうまく動かないと記載ありましたので、複数uartを使いたい場合は、uart2もしくはuart4を使いましょう。
以上でUARTの設定の解説は終了です。
下記記事で実際にコンソールとして使ったり、汎用通信をする方法を紹介しています。こちらもご覧ください。
Raspberry Pi 3のUARTのハードウェア仕様(おまけ)
※この内容は少し前のRaspbery Piの情報です。現在は上記のraspi-configで設定を行うだけで動作します。
Raspberry Pi 3には2つのビルトインUARTがあります。PL011とmini UARTです。PL011はデフォルトでBluetoothに割り当てられています。mini UARTはVC4 GPUのVPUのコア周波数にリンクしているため、コア周波数が変わってしまうと、mini UARTのボーレートも変わってしまい、このままだとまともに通信できません。
- PL011(/dev/ttyAMA0) -> Bluetooth
- mini UART(/dev/ttyS0) -> GPIO14,15 serial port
対応策としては主に下記のふたつがあります。
①コア周波数を固定する方法
/boot/config.txt に core_freq=250
を追記します。
sudo bash -c "echo core_freq=250 >> /boot/config.txt"
これでコア周波数が固定されます。ttyS0が使えるようになります。
②Bluetoothをあきらめて、ttyAMA0とttyS0の割り当てを入れ替える
/boot/config.txtにdtoverlay=pi3-miniuart-bt
を追記します。
sudo bash -c "echo dtoverlay=pi3-miniuart-bt >> /boot/config.txt"
これでBluetoothは使えなくなりますが、ttyAMA0が使えるようになります。
以上でUARTの設定の説明を終わります。