自然の赴くままに・そのときの 気分次第で・なんとなく

興味を持ったことを、なんとなく気の向くまま書いています。

ESXi Arm Edition を動かす Raspberry Pi 4 を便利にする話

Raspberry Pi 4 で ESXi を動かす際に困るのが、後ろと横に飛び出すケーブル類。後ろは我慢ができるものの、横に飛び出す USB Type-C の電源ケーブルHDMIケーブルは何とかしたいところです。今回はその話を書きたいと思います。

飛び出るケーブルは場所を変えたい

Raspberry Pi 4 Tech Specs のページの図を引用していますが、背面には Ethernet と USB 2 と USB 3 のポートが並んでいて、高さ方面を高くしない限り電源やら HDMI のポートをつける場所がありません。なので、電源の USB Type-C や HDMI ポートは横に飛び出してきたんだということがわかります。

f:id:imaisato:20220207085057p:plain

Raspberry Pi 4 Tech Specs

www.raspberrypi.com

でも、これらの4ポートが横に飛び出した結果、複数台の Raspberry Pi 4 を使う環境では横に並べると場所を取る結果になっています。また、縦に置くとケーブルの太さにもよりますがコネクタに横のねじり方向の力がかかり、はんだ付けだけで止めてあるコネクタにはあまりよくありません。そして結局上に飛び出すので高さが必要になります。

Raspberry Pi 4 をケースに入れて結線するとこんな感じになると思います。

f:id:imaisato:20220207091631j:plain

Raspberry Pi 4 のデフォルトの姿(キーボード、マウス接続無し)

これだけのケーブルをごちゃごちゃ横と後ろに出すのは美しくないですよね。なので、どうにか背面だけにケーブルを集中させたいところです。

飛び出るケーブルは場所を変えちゃう

ということで。横から出ているケーブルを、以下のようにすることにします。

  1. 電源は USB Type-C ポートを使わずに、POE 給電にする。
  2. 思い切って HDMI ポートは無視する
  3. 同じくサウンドも使わないので、オーディオポートを無視する

これだけで、横のポートを使わないで済むようになります。でも、Raspberry Pi 4 へ OS をインストールしたりファームウエアを更新したりするときは、コンソール画面がないと不便です。ファームウエア更新は ACT LED だけで状態を知ることができますが、Linux や ESXi for ARM ではコンソール操作が必要です。そして、UEFI の設定などにもコンソールは必要なので、なにかしらコンソール画面を表示できるようにする必要があります。そこで、コンソール出力用にシリアルポートを使うようにします。Raspberry Pi 4 では GPIO から UART を取り出せるので、そこから UART USB 変換かければシリアルコンソールが使えるようになります。取り出すピンは隣接した 8, 9, 10 または 8, 10, 14 を使います。ピンの出力は以下のドキュメントを見ることで確認ができます。

Technical information about Raspberry Pi hardware
Raspberry Pi 4 Model B Schematics, Revision 4.0

この左真ん中の図の TXD0, RXD0, ground を使うことになります。Raspberry Pi 4 は UART を複数扱うことができるのですが、ちょっとごにょごにょやる必要があるので、素直にこのピンを使ってシリアルコンソールを使えるようにするのが無難です。Ground は 6, 9, 14, 20, 25, 30, 34, 39 と 8本ありますのでどれを使ってもよいのですが、シンプルな配線にするためにも TXD0, RXD0 近くの 6, 9, 14 を使うのをお勧めします。6 は冷却ファンに使われることがとても多いので、実際には 9, 14 を使うことになると思います。2列2ピンのピンソケットを使うのであれば 8, 9, 10 を、横並びにしたければ 8, 10, 14 を使うのが無難です。

下の写真では冷却ファンのために1, 6 を使い、シリアルポート用には横並びで 8, 10, 14 を使っています。

f:id:imaisato:20210105171318j:plain

結線

これで横のポートを使わないで、かつ、コンソールを使うこともできる環境ができました。

あとは GPIO から UART を取り出しシリアルコンソールサーバーなどに接続する場合は、RS232C ポートにそのまま取り込めばよいのですが、今の PC にはシリアルポートが装備されていないのでそのままでは PC に接続できません。そのため、USB 通信に変換して USBポート経由で接続する必要があります。それには以下のようなケーブルを使います。

f:id:imaisato:20220207094757j:plain

USB-Serial 変換ケーブル (FDTI FT232)

この写真のは全ピン結線ですが、Raspberry Pi 4 などで使える 4ピンのも売られているのでそれを使うのもありです。必要なのは GND (黒)、RX(黄または緑)、TX(橙または白)の 3本だけです。前者は 6ピンソケットの写真の製品のケーブルの色で、後者は 4ピンソケットの製品のケーブルの色です。ここから GND, RX, TX を取り出して、Raspberry Pi 4 の該当する GPIO ピンにさすだけです。気を付けなければならないのは結線で、以下のように必ずクロス結線にすることです。

Raspberry Pi 4   USB Serial 変換ケーブル
GPIO 14 TX RX または
GPIO 15 RX TX または白
Ground     Ground(

ケーブル自体は端子に圧着されてソケットにはまっていますので、ソケットから端子を外して GPIO の順番に並べ替えるだけです。6ピンのケーブルの場合は横並びで GPIO の 8, 10, 14 を使うように、4ピンのは一つ一つ別々のソケットにはまっていますので、加工せずに 8, 9, 10 に挿すだけです。はんだ付け不要!!楽ですね。

これでシリアルポートの通信を USB 経由で PC からできるようになりました。

ケースへ収納する配置を考える

GPIO からシリアルコンソールを取り出すことができましたが、オリジナルのケースの場合、今度は GPIO のある反対側から横にケーブルを出さなければなりません。

f:id:imaisato:20220207100750j:plain

USB Serial ケーブル結線後

また、上面に GPIO ピンを取り出す穴のあるケースでは上面からケーブルを出すことができますが、複数の Raspberry Pi 4 を積み上げて使いたい場合は、これも邪魔になります。なので、私の場合はケース自体を開放型のものに変えてみました。

f:id:imaisato:20220207102739j:plain

開放型ケース

これだけで横に出さずにケースの加工もせずに背面だけにケーブルを出せるようになりました。

電源はどうする

シリアルポートを背面から出せるようにできましたが、あとは電源をどうするかです。上の写真ではUSB Type-C ポートの AC アダプタが写っていませんが、相変わらず横からにょきっと顔を出すままになっています。これは POE にしてしまって Ethernet 経由で電源供給する形にします。

Raspberry Pi 4 用の POE HAT はいろいろなものがあるので選択の幅がありますが、使用するケースと高さ、GPIO に支障するかなどを考えながら選びます。私の場合は以下の製品のファン無しを選んでいます。ファン無しの理由は、購入した開放型のケースにファンがついているということだけですので、ファンのついていないケースを購入した場合はファン付きでも良いかもしれません。オフィシャルボードはデカすぎて値段も高く GPIO ピンが上に出るので重ねて使うことも難しいので選択しませんでした。また、安い POE HAT では大きなトランスがついているのもありますが、やはり高さが必要になるので注意が必要です。

UCTRONICS Raspberry Pi4用のPoEHAT、RaspberryPi用のミニパワーオーバーイーサネット拡張ボード4B 3 B +

f:id:imaisato:20220207104119j:plain

POE HAT

両サイドはシンプル!!これですべて背面からケーブルを出せるようになりました。横に並べても重ねても側面のケーブルの取り回しを気にすることがなくなりました。

USB シリアルケーブルを取り外せるようにする

ここまではシンプルな加工だけで済ませてきましたが、もうちょっと格好良くするために、USB シリアル変換アダプタを Raspberry Pi 4 に実装して、USB ケーブルを外せるようにします。これには以下のアダプタを使います。

www.switch-science.com

私の場合はこれが売り切れだったので、高いのですがこちらの古い製品を使いました。

www.switch-science.com

この製品でも全部のピンは使いません。JP2 側で結線するところは RX, TX, Ground だけです。あと、JP1 ジャンパで 5V / 3.3 V 出力を切り替えられるようになっていますが、まずは邪魔なジャンパを寝かせてみました。

f:id:imaisato:20220207105200j:plain

ジャンパ改造

このジャンパー、横に寝かせれば高さは使わないですがそれなりに横にはみ出します。あと、冷却ファンにシリアル側のソケットもぶつかるのと、シリアルコンソールでは PC 側への給電は不要なので、思い切って取り除く大改造してしまいました。そして実装。

f:id:imaisato:20220207105650j:plain

USB シリアル変換アダプタ基板実装

見ての通り GPIO から USB シリアル変換アダプタの間は直結になるので基板側は高さや奥行きが出ないように直接はんだ付け、5V / 3.3V 切り替えジャンパは 0オーム抵抗でショートしなくても大丈夫なのがわかったので外しただけ、そしてこの基板からは Micro USB で接続することができるのですっきりシンプルな構成になりました。

Good ですね!

出来上がり

これで後は複数台の Raspberry Pi 4 を重ねれば出来上がりです。こんな感じにすべてのケーブルを取り外して持ち運びできますし、Micro USB のシリアルポートも Ethernet ポートの上にきれいに収まっています。そして全部のケーブルは背面からだけ出るという所期の目的も達成できました。よかったよかった。

f:id:imaisato:20220207110401j:plain

Raspberry Pi 4 スタック