Raspberry Pi 3をシリアルコンソールだけで初回起動するまで
Raspberry Pi 3のシリアルコンソールだけで初回起動するまで
Raspberry Pi 3はBluetoothとRS232-Cのピンが共用になったことで、USB-シリアル変換ケーブルをつないだだけではコンソール操作ができなくなりました。
Raspberry Pi 3の初期設定をどうやる問題
Raspberry Pi 3はWi-Fi標準搭載なので、設定さえしてしまえばディスプレイやキーボードなしでも無線で操作ができます。そのときに問題となるのが「初期設定をどうやってやるのか」です。
この解決方法はいくつかあります。
- 通常操作(ディスプレイやキーボードを接続)
- LANケーブル経由操作
- シリアルコンソール
1は一般的なやり方で、ディスプレイやキーボードをつないでRaspberry Piを普通に設定するやり方です。
それに対して、ディスプレイ、キーボードなしの場合は2または3の選択肢です。特に、ノートPCの環境だと個別のディスプレイがないので、どちらかの方法が候補になってきます。
2のやり方はDHCP内のネットワークにLANケーブルで接続して、SSHでアクセスする方法です。ツールなどを利用してRaspberry PiのIPアドレスを見つけてSSHで接続します。
3は今回の記事の内容で、Raspberry Pi 3にUSB-シリアル変換ケーブルを利用してコンソール接続して設定する方法です。Raspberry Pi用のUSB-シリアル変換ケーブルがAmazonで400円くらいで売っているので、ぼくのようなノートPCユーザーは1つ手元にあってもいいかもしれないですね。
Raspberry Pi 3よりも前のモデルは変換ケーブルとPCをつなぐだけで簡単にシリアル通信ができました。やり方は次の記事でも紹介しています。
ところが、Raspberry Pi 3は、シリアル通信のボーレートが可変してしまって正しい通信ができません。今回の記事はこの問題を解決し、Raspberry Pi 3でシリアルコンソールだけで初回起動するまでをまとめたものになります。
用意するもの
- Raspberry Pi 3
- USB-シリアル変換ケーブル
- PC
Raspberry Pi 3にはSDカードや電源(できれば2Aクラス)も必要です。また、USB-シリアル変換ケーブルはRaspberry Pi側が3.3Vなので、3.3Vで動作する変換ケーブルが必要です(上で紹介したAmazonの商品など)。それに操作用のPCです。
このやり方のメリットは、Raspberry Pi用にディスプレイやキーボードを用意しなくてもいいところです。ノートPCだと個別のディスプレイやキーボードがないので、今回のこのやり方がおすすめですね。
手順
手順は次のようになります。
- Raspberry PiのOSイメージをSDカードに書き込む
- 初期OSイメージの設定ファイルを書き換え
- PCとRaspberry Piを変換ケーブルで接続 & 起動
今回のポイントは2つめです。初期OSイメージの設定ファイルを修正して、Bluetoothを止めてRS232C(シリアル通信)に変更します。この手順を踏むことで、それ以降はRaspberry Pi 3とPCでシリアル通信ができるようになります。
Raspberry PiのOSイメージをSDカードに書き込む
Raspberry Piの公式ページからOSイメージをダウンロードしてきます。このやり方はOSがRaspbian限定となります。今回はX windowなどのGUIが不要なので、Raspbian Liteバージョン(下のリンク)を利用することにしました。
フルバージョンだと1GB以上のサイズですが、Liteバージョンは300MBくらいになります。
次に、ダウンロードしてきたOSイメージをSDカードに書き込みます。ぼくはWindowsなのでWin32DiskImagerというツールを使いました。
OSイメージの書き込みが完了すると、SDカードを開いたらいろいろなファイルが見えます。もし、この時にファイルが見えなければ、1度SDカードを取り出して、もう一度読み込み直してください。
初期OSイメージの設定ファイルを書き換え
Windows上からSDカードの初期OSイメージの設定ファイルを書き換えます。修正は次の2つのファイルです。
- /boot/config.txt
- /boot/cmdline.txt
どちらのファイルも改行コードがUNIX系なので、それを扱えるエディタで編集します。ぼくはTeraPadを使いました。
/boot/config.txtは次の記述を最後の行に追加します。これでBluetoothが停止して、RS232Cに切り替わります。
dtoverlay=pi3-miniuart-bt
/boot/cmdline.txtを次のように書き換えます。万が一に備えて、元のファイルもバックアップしておくのがおすすめです。
dwc_otg.lpm_enable=0 console=tty1 console=serial0,115200 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
以上、2つのファイルに変更を加えたらここの作業は終了です。
PCとRaspberry Piを変換ケーブルで接続 & 起動
上の写真のようにRaspberry Pi 3とPCをUSB-シリアル変換ケーブルで接続します。
ぼくはシリアル通信にPuttyを使いました。TeraTermなども使いやすいので、使い慣れたターミナルソフトを使ってみてください。
シリアル通信の設定に関しては次のとおりです。
項目 | 設定値 |
---|---|
通信速度 | 115200 |
データ長 | 8 |
ストップビット | 1 |
パリティ | なし |
Raspberry Piのピン配置は次のようになります。
Raspberry Pi側 | ケーブル側 |
---|---|
6pin:GND | 黒:GND |
8pin:UART_TXD | 黄:UART_RXD |
10pin:UART_RXD | 橙:UART_TXD |
※ ケーブルの色はぼくの手持ちのものです(上の画像)。各自、お手持ちのケーブルの色やピン配置と読み替えてください。
ターミナルの設定とケーブルの接続ができれば、Raspberry Pi 3の電源を入れます。ターミナル画面に文字が出てきたらOKです。
ログインを求められるところまできたら、お約束のログインIDとパスワードPWを入力します。
- ID : pi
- PW : raspberry
これでログインできればシリアル通信の設定が完了です。
おつかれさまでした。
注意
実は手順2をやらなくても(昔のやり方)、ターミナル画面に文字が出力されます。ところが、いざログインの段階で文字入力しようとすると文字化けしたり、入力を受け付けなかったりします。この理由はRaspberry Pi 3からBluetoothとRS232Cのピンが共用となったことに原因があります。
BluetoothとRS232Cが共用されているとボーレートが変動してしまい、先ほどのログイン画面の段階から通信がうまくできなくなってしまいます。この解決のために手順2が必要になってきます。
おまけ Wi-Fi設定もしておく
完全なディスプレイ無し、ケーブル無しのためにWi-Fi設定をします。シリアルケーブルはあくまで初期設定と万が一のデバッグ用で、通常はWi-Fiを利用して無線化します。
Raspbian WheezyからJessieに新しくなったときに、ネットワークの設定のやり方が変更になりました。Wheezyでは/etc/network/interfacesで設定していましたが、Jessieでは/etc/dhcpcd.confに設定を記述します。
最初にWi-Fi環境のSSIDとパスワード設定です。
$ sudo sh -c 'wpa_passphrase SSID PASSPHRASE >> /etc/wpa_supplicant/wpa_supplicant.conf'
$ sudo vi/etc/wpa_supplicant/wpa_supplicant.conf
wpa_supplicant.confには生パスワードが記載されているので、その記載行は削除します(#pskの行)。
country=GB
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
ssid="SSID"
#psk="PASSPHRASE" #削除
psk=xxx...xxx
}
次に/etc/dhcpcd.confに固定IPを追記します。DHCPでIPを取得するときはこの修正は不要です。
$ sudo vi /etc/dhcpcd.conf
Raspberry PiのWi-Fiを固定IP化するときの例です。ご自宅のネットワークに合わせて設定します。
...
interface wlan0
static ip_address=192.168.0.100/24
static routers=192.168.0.1
static domain_name_servers=192.168.0.1
routersというのは/etc/network/interfacesのgatewayに相当します。
ここまで設定して、ip aコマンドでwlan0が設定した固定IPになっていれば設定完了です。
$ ip a
...
wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether aa:bb:cc:dd:ee:ff brd ff:ff:ff:ff:ff:ff
inet 192.168.0.100/24 brd 192.168.0.255 scope global wlan0
valid_lft forever preferred_lft forever
inet6 abcd::abcd:abcd:abcd:abcd/64 scope link
valid_lft forever preferred_lft forever
ターミナルソフトからSSHでRaspberry Pi 3へ接続してログインできればOKです。これでRaspberry Pi 3の無線化が完了しました。
参考
- Raspberry Pi 3 Model Bでシリアル通信で接続してコンソールにログインする方法
- Raspberry Pi 3 Serial Port Usage
- Raspberry Pi 3 (Raspbian Jessie)の無線LANに固定IPアドレスを設定する
おわりに
Raspberry Pi 3は2台目の設定になります。実は1台目が窓際に置いていたら雨で濡れて壊れてしまい、新しく買い直しました。
あらためて初期設定をしようとしたら、今回の記事内容をさっぱり忘れていたので、自分のためにまとめた次第です。
Paspberry Pi 3はWi-Fiが最初から搭載されていてとてもおすすめです。ただ、Wi-Fiモジュール標準搭載ということもあって、消費電流がかなり大きいのがネックですね。電源にはできれば2Aくらい供給できるUSB電源が欲しいところです。
Raspberry Pi 3は通販ならAmazonがおすすめです。秋月電子やマルツなどは6,200円するのですが、Amazonなら4,700円の送料無料で購入できます。
2017年に入って流通量が増えたこともあり、Amazonと秋月やマルツの値段差はあまりなくなりました。
手元に昔のRaspberry Pi B+の予備機があったのですが、1度Raspberry Pi 3の高性能を知ってしまったので、あらためて新しいものを買い直ししました。さらに、今回は前回の雨で壊れたことを反省して、アクリルケースも購入しました。
個人的にはかなりいい感じに見えるのですが、いかがでしょうか。