RaspberryPiの超小型バージョンのPi Zeroを5GHz無線LAN対応にしてみました。
<ご参考>Pi Zero rev1.3を手に入れて専用ケースを作った話はコチラ↓
<ご参考>RaspberryPi3をモニター・キーボードレスセットアップしてみた話はコチラ↓
先日手に入れたPi Zero rev1.3ですが、Pi Cameraのコネクタも付いたことですし、ここらでミニマムなカメラシステムを作ってみたいところ。
今回は手始めに無線LAN USBアダプタを使ってネット接続可能にするまでです。
最近、RASPBIANのカーネルが3.xから4.xへUpしたせいか、昨年作った無線LAN対応のイメージファイルが使えませんでしたので、また一から作り直してみました。
必要なモノの準備
Raspberry Pi Zero rev1.3
Pi Cameraの必要が無ければ、rev1.3ではない旧verなPi Zeroでも問題無いでしょう。
私と一緒にPi Cameraで遊んで下さる方は、rev1.3を用意して下さい。
microSDカード
8GB以上あればOK。 というより、4GBで試したことないんですよね。カーネルビルドするので4GBだと足りるのかは不明。
microSD対応USBカードリーダー・ライター
PCからRASPBIAN JESSIE LITEのイメージファイルをmicroSDカードへ書き込むのに使用します。
microUSB ホスト変換ケーブル
Pi ZeroへUSBアダプタ機器を繋ぐのに必要です。
通常のホスト変換ケーブルも良いのですが、超小型のホスト変換アダプタだと、よりPi Zeroの小ささを活かせます。
但し、超小型のホスト変換アダプタは、USBアダプタの形状によっては電源用のmicroUSBケーブルと干渉してしまいます。
通常のホスト変換ケーブル(白い方)だと、電源用microUSBと干渉しません。
超小型ホスト変換アダプタだと、赤丸部分が当たってGW-450D2が微妙に傾いてます。
なので、この様に干渉する場合は、後述するL型ケーブルを使うと良いです。
USBハブ付き有線LAN USBアダプタ
最初は無線LANに繋ぐことは出来ないので、有線LANベースで作業を行います。
Pi Zeroで遊ぶなら持っておいても損はないと思います。
USB HUBタイプなら、作業途中で無線LAN USBアダプタが正しく動いているかを差し替えずに一緒に確認出来るので、オススメです。
私が使ってるのはコレ。USB3.0対応な上コンパクトなのでノートPCのお供にも使えるので便利です。(USB3.0対応ですが、Piで認識してくれました )
尚、有線LAN USBアダプタは、お使いのルーター上でMACアドレスからIP指定されたモノが望ましいです。
事前に手元のPCに繋いで、ルータに割り当てておきましょう。
IP指定しない場合は、Pi ZeroへHDMIモニタを繋いでコマンドラインでIP取得する必要が出ますので、とても面倒です。※本記事上では、IPアドレスが事前に分かっている物としています。
有線LANケーブル
説明不要ですかね。
無線LAN USBアダプタ
今回の目玉。2.4GHz帯と5GHz帯両対応の無線LAN USBアダプタです。
RASPBIANレディな5GHz対応無線LAN USBアダプタは皆無なので、使える様にする為にはドライバ構築の手間が必要です。
PlanexのGW-450Dシリーズは、Planexが公式にRaspberryPi対応を謳ってますので、5GHz 帯のWiFi使いたい方には結構人気だったり。
ちなみに、USBハウジング無しの初代GW-450Dではなく、ハウジングの有るGW-450D2がオススメ。
理由は、USBハウジングが無いと超小型USBホスト変換アダプタを付けることが出来ない為で、こんな感じで初代GW-450Dには付けようがありません・・・(笑)
コチラ↓はUSBハウジングがあるGW-450D2です。オススメ。
尚、有線LAN USBアダプタ同様に、お使いのルーター上でMACアドレスからIP指定しておきましょう。※本記事上では、IPアドレスが事前に分かっている物としています。
USB電源&給電用microUSBケーブル
特に指定は有りませんが、Pi Zeroの給電用microUSBコネクタは、隣のmicroUSBコネクタを非常に近い為、USBアダプタ類を繋ぐと当たってしまうという問題があります。(なんでこんなに近く作ったんだろ?w)
なので、私はL型コネクタのケーブルを使っております。(L型の向きに注意です!逆向きだと余計に干渉しますw)
私が使ってるのはコチラ↓です。
30cm、91cm、1.8mと幾つかのケーブル長が選べますので、お好みに合わせてチョイスしましょう。
作業概要
内容はほぼコチラのサイトの情報を参考にさせて頂きました。有難うございます。m(__)m
尚、上記サイトではPi2・3(ARMv7コア)を前提(変更点の補足有り)にされてましたので、本記事ではPi Zero(ARMv6コア)を前提に構成させて頂きました。重ねて感謝します!!
大雑把な流れになりますが、こんな感じです。
- microSDカードへRASPBIAN JESSIE LITEを書き込み
- 有線LANでSSH接続して初期設定
- Lunixソースのダウンロードとビルド
- ドライバソースコードの修正とビルド&インストール
- ネットワーク設定修正
- 無線LAN接続確認
3.のLinuxのビルドに凄く時間掛かります。14~16時間くらい掛かったような?
Pi ZeroのCPUが非力な為ですが、クロス環境が作れる人は工夫するのもアリでしょう。
では作業を進めましょう。
microSDカードへRASPBIAN JESSIE LITEを書き込み
公式よりイメージファイルをダウンロードする
Pi Zeroは非力ですので、デスクトップ環境は不要と割り切り、ミニマムなJESSIE LITEを採用します。
公式のダウンロードはコチラ。
2016/10/26時点の最新イメージは、「2016-09-23-raspbian-jessie-lite.img」でした。
用意したmicroSDカードへイメージファイルを書き込む
私は、microSDカードへの書き込みに「Win32DiskImager」を使っています。
使い方が分からない方はコチラ↓を参考に。
有線LANでSSH接続して初期設定
もろもろ接続して起動し、SSH接続する
Pi Zeroへ先程イメージ書き込みしたmicroSDカードをセットし、有線LAN USBアダプタを接続。LANケーブルも繋ぎましょう。
USB電源に繋いで、Pi Zeroを起動させます。
事前に判明している有線LAN USBアダプタのIPアドレスに対し、Tera Term等のターミナルソフトでSSH接続します。
ターミナルソフトが分からない方はコチラ↓を参考に。
初期設定を行う
SSH接続で初期ユーザー「pi」でログインします。
下記コマンドで初期設定を行います。
$ sudo raspi-config
下記の項目を修正してください。
[Expand Filesystem]
SDカードの容量全体を使える様になります。
後でカーネルコンパイルするのに容量必要なので、設定必須。
[Internationalisation]
localeにて「en_us.UTF-8」「ja_jp.UTF8」「ja_jp.EUC-JP」を追加して、
default system localを「ja_ja.UTF8」に変更します。
[Timezone]
Asia→Tokyoを選択。
以上の項目を修正したら、Finishを選んで再起動しましょう。
一通りアップデートを掛ける
下記コマンドで、一通りアップデートをしておきます。
$ sudo apt-get update $ sudo apt-get -y dist-upgrade
続いて、下記コマンドで必要なプログラムをインストールします。
$ sudo apt-get install gcc make bc screen ncurses-dev git
ここで一度再起動しておきましょう。
$ sudo reboot
Lunixソースのダウンロードとビルド
カーネルバージョンを確認する
下記コマンドでカーネルのバージョンを確認します。
$ uname -r
2016/10/22時点では、「4.4.21+」と返ってきました。
カーネルソースを入手する
下記コマンドでカーネルソースを入手します。もし先に確認したカーネルバージョンが4.4系列じゃなければ、3行目の赤字部分をバージョンに合う様に修正しましょう。
$ cd /usr/src
$ sudo su
# git clone --depth 1 https://github.com/raspberrypi/linux.git -b rpi-4.4.y
# git clone --depth 1 https://github.com/raspberrypi/firmware.git
# cd linux
# modprobe configs
# zcat /proc/config.gz > .config
# cp ../firmware/extra/Module.symvers Module.symvers
先程も書きましたが、Pi ZeroのCPUコアは旧Model B+やModel A+と同じARMv6コアですので、このコマンド群のままだとPi2・Pi3では動きません。(Pi2はARMv7コア、Pi3はARMv8コアですがv7相当で動いています)
カーネルをビルドする
下記コマンドでカーネルのビルドを行います。
# make oldconfig # make -j 4 zImage modules dtbs # make modules_install # cp arch/arm/boot/dts/*.dtb /boot/ # cp arch/arm/boot/dts/overlays/*.dtb* /boot/overlays/ # cp arch/arm/boot/dts/overlays/README /boot/overlays/ # cp /boot/kernel.img /boot/kernel.img.old # scripts/mkknlimg arch/arm/boot/zImage /boot/kernel.img # reboot
もし最初のmake oldconfigで新しい設定項目を聞かれたら、yかmで進めましょう。
ちなみに、2行目の[make -j 4 zImage modules dtbs]は凄く時間掛かりますので、1日待つつもりで気長に待ちましょう。(私がやった時は14~15時間くらい?掛かりました・・・)
念の為、ここまで出来たら、シャットダウンさせてmicroSDカードを抜いてイメージバックアップして置きましょう。
イメージバックアップがあれば、もし後で失敗して最初からやり直す際にもまた1日待つ必要が無くなります。
ちなみに、イメージバックアップは「Win32DiskImager」でWriteではなくReadすればOKです。(間違えてWriteしない様にw)
ドライバソースコードの修正とビルド&インストール
Planexのドライバソースをダウンロードする
ドライバダウンロードは、Planexサイトのコチラから行えます。
ダウンロードした「gw-450d_driver_linux_v3002.zip」をPi Zeroへscpコマンドなどでコピーします。
Tera Termの場合は、対象のzipファイルをターミナルウィンドウへドラッグアンドドロップすると下記の様なダイアログが出ますので、SCPボタンをクリックすればファイルが転送されます。
デフォルトだと、Pi Zero上の/home/pi/に転送されますので、下記コマンドで/usr/srcに移動して圧縮ファイルを展開します。
$ sudo mv gw-450d_driver_linux_v3002.zip /usr/src/ $ cd /usr/src $ sudo su # unzip gw-450d_driver_linux_v3002.zip # cd gw-450d_driver_linux_v3002 # tar xf mt7610u_wifi_sta_v3002_dpo_20130916.tar.bz2 # cd mt7610u_wifi_sta_v3002_dpo_20130916
ドライバソースコードへパッチ当てる
ドライバソースを修正するパッチを作って下さってる方が居るので活用します。(有り難や~)
# wget https://raw.githubusercontent.com/neuralassembly/raspi/master/gw-450d/gw-450d-rpi-kernel41.patch # patch -p0 < gw-450d-rpi-kernel41.patch
ドライバをビルドする
っと、ここで念のためカーネルのバージョンを再確認しておきます。
# uname -r
ちなみに、2016/10/23時点では「4.4.26+」と返ってきました。
下記コマンドでビルドします。
# make
ビルドしたドライバをインストールする
下記コマンドを実行します。
# cp -p os/linux/mt7650u_sta.ko /lib/modules/4.4.26+/kernel/drivers/net/wireless
# depmod -a
※先程確認したカーネルバージョンと赤字部分が違っていれば合わせましょう。
設定ファイルをコピーする
下記コマンドを実行します。
# mkdir -p /etc/Wireless/RT2870STA # cp RT2870STA.dat /etc/Wireless/RT2870STA/RT2870STA.dat
ドライバのインストール完了です。
ネットワーク設定修正
続いて、ネットワーク設定を行います。
ネットワーク設定を行う
ネットワーク設定ファイルに繋ぎたい無線LANネットワークの記述を追記します。
ご使用のルータの設定に合わせて赤字を読み替えて実行してください。
# vi /etc/network/interfaces
末尾にra0(無線LAN)の項目を追記します。 eth0の項目をdhcpにするのはお好みで。
auto lo iface lo inet loopback #auto eth0 #allow-hotplug eth0 iface eth0 inet dhcp auto ra0 allow-hotplug ra0 iface ra0 inet dhcp wpa-ssid "SSID" wpa-psk "PASSWORD" iface default inet dhcp
※”PASSWORD”の部分は、「wpa_passphrase」コマンドで取得した暗号文にした方が安全です。
「wpa_passphrase」コマンドの使い方が分からない方はコチラ↓を参考に。
尚、上記記事では /etc/wpa_supplicant/ra0.conf にSSIDとパスフレーズを記載する様になっていますが、本記事では /etc/network/interfaces に直接記載する方式にしていますので、ご注意ください。
シャットダウンして再起動する
# shutdown -h now
シャットダウンしたら、無線LAN USBアダプタをUSB HUBに接続して再起動させます。
もう一度有線LANでSSH接続し、下記コマンドでra0が正しく認識出来ていることを確認しましょう。
$ ifconfig
もし、ra0が無ければ、上記までの作業で何かミスが無いか確認しましょう。
無線LAN接続確認
無線LANで接続する
ようやく最終フェーズです。
USBアダプタの接続を変更するので、もう一度シャットダウンします。
# shutdown -h now
スッキリしました♪
再度起動させて、無線LAN USBアダプタのIPアドレスでSSH接続します。
上手くいってれば、正常に接続できるはずです。
上手く接続出来た場合は、ここでまたイメージバックアップして置きましょう。保険は大事です。(笑)
スピードテストしてみる
この作業は必須では無いので、興味のある方のみどうぞ。
ネットワーク回線のスピードテストをする方法は色々ある様ですが、今回は「www.speedtest.net/」を活用するコチラ↓の情報を参考にさせて頂きました。
下記コマンドを実行して、speedtestプログラムをインストールします。
$ sudo apt-get install speedtest-cli
下記コマンドで、スピードテストが出来ます。
$ speedtest
対象となるサーバーを固定させた方が比較としてはより良さそうなので、下記コマンドでTokyoサーバーの番号を調べます。
$ speedtest --list | grep Tokyo
7510) ASEINet (Tokyo, Japan) [19.55 km]
と返ってきました。
という事で、サーバー番号指定してスピードしてみます。
$ speedtest --server 7510
我が家のネット環境だと、Pi Zero&GW-450D2はこんな数値でした。(IEEE802.11ac接続)
Download: 57.67 Mbits/s
Upload: 39.05 Mbits/s
ちなみに、2.4GHz WiFi接続したRaspberry Pi3だとこんな数値でした。(IEEE802.11n接続)
Download: 14.07 Mbits/s
Upload: 27.90 Mbits/s
ご参考まで。
今回はここまでです。
ミニマムなカメラシステムの為のPi Cameraとの接続については、また改めてご紹介します。
謝辞
参考にさせて頂いた諸々のサイトリンクです。
昨年GW-450DをPi2で使える様にした際に、参考にさせて頂きました。
今回のKernel4.x対応で躓いて、参考にさせて頂きました。
GW-450Dが上手く繋がらない時の対処を参考にさせて頂きました。
ネット回線速度を調べる方法について参考にさせて頂きました。
同じくネット回線速度を調べる方法について参考にさせて頂きました。
有難うございました。m(__)m
USBハブ付有線LAN USBアダプタ
2.4GHz/5GHz WiFi対応 無線LAN USBアダプタ GW-450D2
L型micro USBケーブル 91cm
超小型microUSBホスト(OTG)変換アダプタ
残念ながら、Pi Zeroは日本では正式な流通ルートがありません。
海外通販に抵抗が無い方は、Pimoroniとかで購入した方がかなり安く手に入ります。
海外通販サイトに抵抗ある方はコチラ↓で。
新型Pi Zero(ver1.3)のセット(microUSBホスト変換ケーブルやら諸々一式付いてます)
コメント