前提
今回は訳あって Raspberry Pi3 B を使用。
4でもないし、3Aでもなければ3B+でもない。
OSは Ubuntu 22.04 LTS
目的
外部からの通信を受けて、RPi3をあれこれと動かしたい。
最終的にはRS-485で制御コマンドを発行する「とある機械」からの通信を受けて、RPi3の中であれこれしたあとに、別の端末に制御コマンドを投げたり、データの蓄積、RPi3にnginxやapacheでも立てて「とある機械」のヘルスチェックなんかに使いたい。
用意したモノ
RPi3はTTLレベルのUARTでシリアル通信を行うので、下記のようなアダプタを用意。
PCのUSBに接続して、アダプタのTXDとRXD、GNDをRPi3のピンヘッダに接続すればシリアル通信が行えるようになる。
PCとRPi3が近いのならともかく、USBの延長ケーブルもあった方が便利かも知れない。
接続用の信号用ケーブルが付属はしているけれど、25cmほどなので。
ピンアサインの確認
RPi3のGPIOピンアサインは下記の通りで、UARTによるシリアル通信に使うのは
6番:GND
8番:GPIO14(TXD)
10番:GPIO15(RXD)
の3つ。
GPIOに振られた番号とピン番号が一致しているわけではない。
ちょっと面倒な構成になっているUART
RPi4はもっと複雑、というかUARTの数が増えたんだけど、RPi3は2つ。
名称 | タイプ | Number | 接続先 | デバイス | GPIO |
---|---|---|---|---|---|
UART0 | PL011 | Secondary | Bluetooth | /dev/serial1 -> /dev/ttyAMA0 | なし |
UART1 | miniUART | Primary | シリアル(コンソール) | /dev/serial0 -> /dev/ttyS0 | 8番、10番ピン |
こんな感じで、しかもUbuntuの22.04ではSecondaryのUARTもデフォルトで有効化されていた。
そのため、USB-UARTアダプタをPCとRPi3の間に接続してやれば、すぐにPC側のターミナルソフトでRPi3のコンソールにアクセス出来る。
PC用のターミナルソフトと言えばTeraTermが定番だけど、やっぱりシリアルで繋げて起動時からのメッセージをログとして簡単に取れるってのは便利だね。
コンソール出力を切断して、シリアル通信を使う
使用するUARTがminiUARTのままで問題ない場合
今回は特に高速である必要もなく、それこそ9600bpsで問題ないし、FIFOバッファも要らないくらいなのでminiUARTのままで問題ない。
/boot/firmware/cmdline.txt を編集し、console=serial0,115200 という部分を削除して下記のように。
dwc_otg.lpm_enable=0 console=tty1 root=LABEL=writable rootfstype=ext4 rootwait fixrtc quiet splash
これだけでrebootすれば、目的とするシリアル通信が可能になる。
Bluetoothもそのまま使える。
でも、せっかくなら普通のUART使いたいし、Bluetoothも使いたい。という場合
/boot/firmware/cmdline.txt を編集し、console=serial0,115200 という部分を削除。というのは同じ。
その他、/boot/firmware/config.txt を少し編集して下記を追加する。
dtoverlay=pi3-miniuart-bt
core_freq = 250
尚、この場合、core_freq=250 とあることからもわかるように、RPi3のGPUコアクロックを低めに固定しちゃうので、パフォーマンスは落ちます。が、GPU使う目的じゃなければ問題ない。
(miniUARTのボーレートがGPUクロックに依存しているため)
そして、
UART0に繋がっていたBluetoothがUart1のminiUARTに、
UART1に繋がっていたGPIOがUART0に
繋がるので、ターミナルソフトで確認する際などは、デバイスの指定を間違えないよう。
名称 | タイプ | Number | 接続先 | デバイス | GPIO |
---|---|---|---|---|---|
UART0 | PL011 | Secondary | シリアル | /dev/serial0 -> /dev/ttyAMA0 | 8番、10番ピン |
UART1 | miniUART | Primary | Bluetooth | /dev/serial1 -> /dev/ttyS0 |
接続確認
といっても、コンソールを切断しちゃってるので、PC側から例えばTeraTermなどで接続しに行っても、何かが表示されるわけではない。
PC側、ラズパイ側、両方で何らかの送受信プログラムを動かしてあげないとね
この記事にコメントしてみる