ラズベリーパイを個人で2台持ってます。 うち一台(Raspberry Pi 2)は常用、というか常に自宅のネットワークに繋げて電源も入っています。SSH や VNC で常にアクセスできる環境が整っています。そういう意味でも「常用」です。
もう一台(Raspberry Pi B+)は、元々はこっちを常用機として使っていましたが、2を買ったらさすがに常用機としてはスペックの高い方にしたくなったため交換しました。結果として、こいつは電源を入れればいつでも動く状態ではありつつも余っていました。 そういうこともあり、新しいことにチャレンジする際の実験機的な位置付けになりました。ぶっちゃけ「壊れてもいいや」的な。
今回挑戦したのは「シリアル接続」です。ラズベリーパイ(以下「ラズパイ」)はネットワークに繋がった状態で起動していて、かつその IP アドレスが分かっていれば SSH や VNC でログインして使うことができて非常に便利なコンパクト Linux 環境です。でもネットワークに繋がっていても DHCP 環境などで IP アドレスが分からない場合にどうやって調べるかというと、(PiFinder など外部から IP アドレスを調べる専用のツールもあったりしますが)USB キーボードと HDMI ディスプレイを繋いで、キーボードからログインして ifconfig コマンドなどで IP アドレスを調べて・・・という手順が必要になります。が、そもそもキーボードを用意するとか、HDMI ケーブルを用意するとか、そのケーブルが届く範囲に外部ディスプレイを用意するとか、準備のハードルがかなり上がってしまいます。また(ネットワークの設定前の段階や、普段と異なるネットワーク環境に持ちだした場合などで)そもそもネットワークが繋がっていない状態では PiFinder も使えないので、結局設定のための最初の1回のためだけにこれらのキーボードやディスプレイの準備も必要になってしまいます。
それをどうにかするための方法の1つが「シリアル接続」です。要するにラズパイと手元の PC をシリアルに直結した上で、シリアル接続をサポートするターミナルアプリからラズパイに接続してログインする、という方法です。特に目新しい方法ではなく、PC に TCP/IP 環境がなかった昔はむしろこっちの方法が主流でした。オッサンの出番です(笑)!
用意するのはラズパイに加えてこの3つです:
(1) ラズパイで使える USB シリアルケーブル
(2) (1) のデバイスドライバ
(3) シリアル接続をサポートするターミナルアプリ
自分のメイン PC は Windows7 ということもあって、(1) にはこの変換ケーブルを使うことにしました:
https://strawberry-linux.com/catalog/items?code=15076
ラズパイの GPIO を使ってシリアル接続し、かつ USB ポートに変換して PC とつなげる、というケーブルです。Windows8 以降だとデバイスドライバが正しく動作しない、と書かれてます。Windows8 以降や他の環境をお使いのみなさん、ごめんなさい。
(2) のデバイスドライバですが、上記ケーブルの場合であればリンク先ページの「Windowsドライバ」と書かれたリンク先からダウンロードできます。
また (3) のターミナルアプリですが、自分は TeraTerm を使いました:
では実際にシリアル接続するまでを紹介します。まずはデバイスドライバのインストールです。ラズパイの電源を切って、ケーブル接続も何もしない状態で、(2) のデバイスドライバをダウンロード&展開し、実行ファイルをダブルクリックしてインストールします:
次に USB シリアルケーブルでラズパイと PC とを接続します。ラズパイ側の GPIO の 6(GND), 8(TXD), 10(RXD) 番のピンに、ケーブルの赤、緑、青のケーブルをそれぞれ差し込みます:
そしてケーブルのもう一方の端を PC の USB ポートに接続します(ラズパイにはまだ電源の USB ケーブルはつなぎません)。するとプラグアンドプレイでデバイスドライバが導入されます。この画面だと COM6 として認識されたことになっていますが、ここは環境によって異なります:
この段階でデバイスマネージャーを起動して COM のポートを確認すると、上記で "USB-to-Serial" のデバイスが、COM6 として認識されていることが分かります。つまりシリアル接続では(この例では)COM6 ポートを指定して接続すればよい、ということになります:
では実際に接続してみます。シリアル接続をサポートするアプリ(この例では TeraTerm)を起動して、認識された COM ポートを指定してシリアル接続します:
接続後に COM 接続の設定を変更します。TeraTerm の場合、デフォルトではシリアルポートのボーレートが低いので上げておきます。メニューの 設定→シリアルポート を選択します:
指定 COM ポートのボーレートを 9600 から 115200 に変更して OK をクリックします:
で、この状態に戻ります。これでラズパイにシリアル接続して待ち受け状態になりました:
ここではじめてラズパイに電源ケーブルをつなぎます。するとブートプロセスの画面がシリアルターミナル画面に次々と表示され、ログインを待つ状態のプロンプトが表示されます:
※途中で "Welcome to rescue login" というメッセージが表示されて画面が止まりますが、そこでは何もせずにしばらく待つと通常のブートプロセスが開始され、ログインプロンプトが表示されます。
ログインすると普通に操作できます。ちなみに ifconfig でネットワーク接続がないことを確認してみました:
lo はループバックなので、本体から見た自分自身です。そして eth0 (有線LAN)と wlan0 (無線LAN)はハードウェアの認識こそされていますが、IP アドレスは割り振られていません(でも接続してこの画面が見れている、ということです)。
ネットワークがなくてもラズパイが使えることが確認できました!
もう一台(Raspberry Pi B+)は、元々はこっちを常用機として使っていましたが、2を買ったらさすがに常用機としてはスペックの高い方にしたくなったため交換しました。結果として、こいつは電源を入れればいつでも動く状態ではありつつも余っていました。 そういうこともあり、新しいことにチャレンジする際の実験機的な位置付けになりました。ぶっちゃけ「壊れてもいいや」的な。
今回挑戦したのは「シリアル接続」です。ラズベリーパイ(以下「ラズパイ」)はネットワークに繋がった状態で起動していて、かつその IP アドレスが分かっていれば SSH や VNC でログインして使うことができて非常に便利なコンパクト Linux 環境です。でもネットワークに繋がっていても DHCP 環境などで IP アドレスが分からない場合にどうやって調べるかというと、(PiFinder など外部から IP アドレスを調べる専用のツールもあったりしますが)USB キーボードと HDMI ディスプレイを繋いで、キーボードからログインして ifconfig コマンドなどで IP アドレスを調べて・・・という手順が必要になります。が、そもそもキーボードを用意するとか、HDMI ケーブルを用意するとか、そのケーブルが届く範囲に外部ディスプレイを用意するとか、準備のハードルがかなり上がってしまいます。また(ネットワークの設定前の段階や、普段と異なるネットワーク環境に持ちだした場合などで)そもそもネットワークが繋がっていない状態では PiFinder も使えないので、結局設定のための最初の1回のためだけにこれらのキーボードやディスプレイの準備も必要になってしまいます。
それをどうにかするための方法の1つが「シリアル接続」です。要するにラズパイと手元の PC をシリアルに直結した上で、シリアル接続をサポートするターミナルアプリからラズパイに接続してログインする、という方法です。特に目新しい方法ではなく、PC に TCP/IP 環境がなかった昔はむしろこっちの方法が主流でした。オッサンの出番です(笑)!
用意するのはラズパイに加えてこの3つです:
(1) ラズパイで使える USB シリアルケーブル
(2) (1) のデバイスドライバ
(3) シリアル接続をサポートするターミナルアプリ
自分のメイン PC は Windows7 ということもあって、(1) にはこの変換ケーブルを使うことにしました:
https://strawberry-linux.com/catalog/items?code=15076
ラズパイの GPIO を使ってシリアル接続し、かつ USB ポートに変換して PC とつなげる、というケーブルです。Windows8 以降だとデバイスドライバが正しく動作しない、と書かれてます。Windows8 以降や他の環境をお使いのみなさん、ごめんなさい。
(2) のデバイスドライバですが、上記ケーブルの場合であればリンク先ページの「Windowsドライバ」と書かれたリンク先からダウンロードできます。
また (3) のターミナルアプリですが、自分は TeraTerm を使いました:
では実際にシリアル接続するまでを紹介します。まずはデバイスドライバのインストールです。ラズパイの電源を切って、ケーブル接続も何もしない状態で、(2) のデバイスドライバをダウンロード&展開し、実行ファイルをダブルクリックしてインストールします:
次に USB シリアルケーブルでラズパイと PC とを接続します。ラズパイ側の GPIO の 6(GND), 8(TXD), 10(RXD) 番のピンに、ケーブルの赤、緑、青のケーブルをそれぞれ差し込みます:
そしてケーブルのもう一方の端を PC の USB ポートに接続します(ラズパイにはまだ電源の USB ケーブルはつなぎません)。するとプラグアンドプレイでデバイスドライバが導入されます。この画面だと COM6 として認識されたことになっていますが、ここは環境によって異なります:
この段階でデバイスマネージャーを起動して COM のポートを確認すると、上記で "USB-to-Serial" のデバイスが、COM6 として認識されていることが分かります。つまりシリアル接続では(この例では)COM6 ポートを指定して接続すればよい、ということになります:
では実際に接続してみます。シリアル接続をサポートするアプリ(この例では TeraTerm)を起動して、認識された COM ポートを指定してシリアル接続します:
接続後に COM 接続の設定を変更します。TeraTerm の場合、デフォルトではシリアルポートのボーレートが低いので上げておきます。メニューの 設定→シリアルポート を選択します:
指定 COM ポートのボーレートを 9600 から 115200 に変更して OK をクリックします:
で、この状態に戻ります。これでラズパイにシリアル接続して待ち受け状態になりました:
ここではじめてラズパイに電源ケーブルをつなぎます。するとブートプロセスの画面がシリアルターミナル画面に次々と表示され、ログインを待つ状態のプロンプトが表示されます:
※途中で "Welcome to rescue login" というメッセージが表示されて画面が止まりますが、そこでは何もせずにしばらく待つと通常のブートプロセスが開始され、ログインプロンプトが表示されます。
ログインすると普通に操作できます。ちなみに ifconfig でネットワーク接続がないことを確認してみました:
lo はループバックなので、本体から見た自分自身です。そして eth0 (有線LAN)と wlan0 (無線LAN)はハードウェアの認識こそされていますが、IP アドレスは割り振られていません(でも接続してこの画面が見れている、ということです)。
ネットワークがなくてもラズパイが使えることが確認できました!