遠い昔、UNIX、いやSun MicrosystemsのSolarisというOSがサーバールームの王者だったころ、いざという時のために必ず「シリアルコンソール」の設定をしたものでした。
今のレンタルサーバーを使っている方ならご存知のとおり、普段はTCP/IP前提で仕事をしていますよね。でも、なんらかのトラブル、例えばネットワークカードが壊れたなどが起きた時、便りになるのはシリアルケーブルでパソコンのTeraTermなんかに接続すること。
ここにRaspberry PI Zeroというシリーズがあります。アイキャッチ画像にも掲載していますが、このワンボードマイコンは想像以上に小さいんです。7cm x 3 cmくらいの大きさ。これでLinuxがきちんと動くのですからね。もちろん無線で使うこともできます(Wがついた機種はWiFiとBluetoothをもっている)。
しかしWindowsやMacに繋いでなにかやらせるという使い方をしたいこともあります。今のパソコンはUSB以外は簡単には繋がらないです。
でも、この小さいRaspberry PIにLEDくっつけたらパソコンからの制御で点滅させたりもできるじゃないですか。センサーからのデータを得ることもできますよね。
幸いRaspberry PI Zeroシリーズは電源消費も少ないので、USBケーブル一本で電源と通信線を兼ねたシンプルな構成が可能です。
こういうマイナーな設定は以外に曲者で面倒だったので設定方法をメモしておきます。インターネット上では古いRaspi OSのものばかりで新しいBookwarmに対応したものがほとんど見つかりませんでしたし。
ハードウェア
この図でいうと左下にマイクロUSBコネクターがふたつあります。下のコネクターは電源用で信号はとおっていません。最終的には下から2番目のUSBコネクターを使うことになります。
セットアップ
いつものようにRaspberry Pi Imagerでデバイスを選んで、マイクロSDカードにシステムを書き込みます。16GB以上の容量があったほうがいいと思います。
普通にブート
カスタマイズするためには、最初は普通に起動しなくてはいけません。電源繋いで、HDMIディスプレイを繋いで、USBキーボードを繋ぎます。
立ち上がったら、おまじないの sudo apt update とsudo apt upgrade と sudo apt autoremove とsudo apt clean をやりましょう。
USBシリアルコンソールのための設定
ここからが本番です。
/boot/firmware/config.txtを編集します。次の項目の先頭に#をつけてコメントアウトします。
これらはRaspiのUSBに外部機器を接続するために、本体をホストにする設定です。
#otg_mode=1 #dtoverlay=dwc2.dv_mode=host
以下を追記します。(一番下の[all]以下)
dtoverlay=dwc2 dtparam=uart0 dtparam=uart0_console enable_uart=1
/boot/firmware/cmdline.txtに以下を追記します。このファイルは改行してはいけません。
modules-load=dwc2,g_serial
raspi-configの設定
sudo raspi-configでコンフィグレーションを立ち上げ、Serialでコンソールを使用するにします。
Serial console gettyのサービス起動
サービスにserial-getty@ttyGS0というものがあります。ttyに接続が来たら、コンソールを立ち上げるサービスです。
状態を確認して動いていないならば、起動します。
sudo systemctl status seria-getty@ttyGS0 sudo systemctl start serial-getty@ttyGS0 sudo systemctl enable serial-getty@ttyGS0
これで再起動します。
確認
(Macの場合)ls /dev/tty.* をコンソールから打つと、私の場合は
/dev/tty.Bluetooth-Incoming-Port
/dev/tty.usbmodem21101
/dev/tty.debug-console
なんてものが出てきます。このusbmodem21101が目的のRaspberry Pi zeroです。
接続
(macの場合)screen tty.usbmodem21101 115200
115200はボーレート
でlogin: と出てきたら成功です。
screenコマンドを終了するためにはCtrl+Aを押し、STRL+Kを押し、yesで終了できます。