対象はBluetooth内蔵のRaspberryPi 3 Model-Bと同ZeroWです。
下記全てが終わってsshでログインできるところまで完了しているとします。
$ sudo raspi-config
メニューが出たら、次の順で進んでゆく
5 Interfacing Options Configure connections to peripherals ↓ P6 Serial Enable/Disable shell and kernel messages on the serial connection ↓ Would you like a login shell to be accessible over serial? <NO> ↓ The serial login shell is disabled The serial interface is enabled <OK> ↓ Would you like the serial port hardware to be enabled? <YES> ↓ <FINISH>
これでUARTが有効になりました。
このやり方ならUARTをコンソールにせずユーザに解放する設定になるはずですが、念のため確認します。
$ sudo nano /boot/cmdline.txt
nanoエディタで開くとこんな感じになっています
wc_otg.lpm_enable=0 console=tty1 console=serial0,115200 root=PARTUUID=01b0b38f-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait quiet splash plymouth.ignore-serial-consoles
この文字列の中から、
console=serial0,115200
が存在したら削除します。
このとき、この例文をそのままコピペしないこと。
root=のところはUUIDになっているので、ここが現物と違っていると起動できなくなります。
また、末尾に
plymouth.ignore-serial-consoles
が無かったら追加します。
最終的にこんな感じになると思います。(root=のところ以外)
wc_otg.lpm_enable=0 console=tty1 console=serial0,115200 root=PARTUUID=01b0b38f-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait quiet splash plymouth.ignore-serial-consoles
Ctrl-X → Y [Enter]で、保存してnanoエディタを終了します。
$ sudo nano /boot/config.txt
一番下に
# GPIO serial enable for pi3 & pizerow dtoverlay=pi3-disable-bt
を、追加します。(uartを占有したいのでBluetoothを無効にする設定です)
同時に、次のとおりuartがコメントアウトされていないか確認しておきます。
# Enable uart(/dev/ttyAMA0) enable_uart=1
さらに、
#dtparam=i2c_arm=on
が、あったら#を外して
dtparam=i2c_arm=on
に書き換えておきます。これでI2Cも使えるようになります。
ここまででUART(とI2C)が使えるようになりますが、同時にBloetoothが無効になります。
BluetoothとUARTは同時に使えないからです。
どうしてもBluetoothを使いたい人は、USBにBluetoothドングルを挿しましょう。
何が使えるかはわかりません。
次の2つを実行します。
sudo systemctl stop serial-getty@ttyAMA0.service sudo systemctl disable serial-getty@ttyAMA0.service
これでUARTが完全に解放されました。
ここから/dev/ttyAMA0が自由に使えます。
$ grep dialout /etc/group dialout:x:20:pi
こうなればOK
パーミッションも問題ありません。
一度RaspberryPiを再起動してから、/dev/ttyAMA0を使う作業をしましょう。