関心分野 >> Raspberry Pi Zeroについて
Raspberry Pi Zeroについて
アールティさんのご厚意で、Raspberry Pi Zeroを借りることができましたので、作業記録を書いていきたいと思います。
Raspberry Pi Zeroとは?
RaspberryPi Zeroは、RaspberryPiの半分ほどの大きさで1GHzのシングルコアCPU、512MBのRAMをもつシングルボードコンピュータです。CPUは、ARM系のCPU(Broadcom BCM2835)のようです。CPUは、メモリの下実装されているそうですので、直接見ることができません。
RaspberryPiと同じOS(Raspbian)が動作します。
ハードウェアについて
RaspberryPi Zeroのハードウェアは、下図のようになっています。
RaspberryPiシリーズのハードウェアの詳細は、eLinuxのページにまとめられていますが、RaspberryPi Zeroの主な仕様は、
System-on-a-chip(SoC) | Broadcom BCM2835 |
CPU | 1GHz Low Power ARM1176JZ-F(Single core) |
GPU | Broadcom Video Core IV |
Memory(SDRAM) | 512MB |
Srorage | Micro SD Card |
Video Oupput | Mini-HDMI |
USB | 1 Micro USB OTG |
GPIO | 40 General Purpose Input/Output pins |
です。
この表からもわかると思いますが、RaspberryPi Zeroを他のRaspberry Piと同様に、Raspbianをインストールするには、Mini HDMIのコネクタをもつケーブルまたはアダプタとUSBキーボードが必要になります。(グラフィックモードを使いたい場合には、USBハブも必要になります)
ただし、シリアルコンソールを使う場合には、UARTレベルのシリアルUSBケーブルがあれば、導入することができると思います。シリアルコンソールを使う場合には、GPIOのUARTのピンに接続してください。
GPIOについて
RaspberryPi ZeroのGPIOのピン配列は、RaspberryPi 2などと同じピン配列になっています。(上図を参照)
詳細は、公式ページを参照していただければわかると思います。
ただし、RaspberryPi ZeroのGPIOを使う場合には、モータ等を動かすと、電源容量不足になり、システムダウン等が起きる可能性がありますので、OTGモードでなく通常モードで起動した方が良いと思います。
また、RaspberryPi ZeroのSoCは、Model A,B,A+,B+と同じBCM2935ですので、GPIOの仕様もほぼ同じだと思われます。そのため、他のサイトでも説明がありますが、GPIOピンの電気的仕様も同じと考えられ
- GPIOピン1本あたりの最大電流は16mA
- 複数本のGPIOピンを使用する場合、同時に流せる電流の合計は50mAまで
という制限も同じだと思います。GPIOの詳細な説明については、外部のサイト(ツール・ラボ)に記載されていましたので、参照してください。
Raspberry Pi ZeroをOTGモードで初期設定
Raspberry Pi Zeroは、USBのクライアントとして動作させることができます。この機能を使うと、USBの周辺機器はつなぐことができませんが、出先でUSBケーブルのみでプログラム開発ができるので、まずは、この機能を有効にしてセットアップしていきます。オリジナルの手順は、こちら(HowToOTGFast.md)を参照してください。
用意するもの
最初のセットアップでは、microSDカードにOSを入れていきますので、ホストとなるPCが必要です。Windows10の場合には、別途ドライバをダウンロードする必要があります。
私が用意したものは下記の通りです。
- Raspberry Pi Zero
- micro SDカード
- 通常のUSBケーブル(microUSB-USB)
- ホストPC(Windows10)(SDカードIF内蔵)
OTG機能を使う場合には、通常のUSBケーブルでなければいけないようです。
準備
RaspberryPi ZeroをOTGでセットアップするために、必要なファイルをダウンロードしておきます。
- RASPBIAN JESSIE LITE (オフィシャルサイトより)
- Win32DiskImager(Windows用のイメージライター)
- RNDISドライバー(RPI Driver OTG このページの中ほど少し下あたりにリンクがあります)
Windows10の場合には、RaspberryPi ZeroをOTGモードで起動すると、COMデバイスとして認識されます。ここでは、SSHでログインしたいと思いますので、RNDISのドライバが別途必要になります。Windows7で確認してみましたが、こちらもCOMデバイスとして認識されます。ドライバもないのでOTGモードで使えませんでした。
RasbianのSDカードを作成
準備ができたら、RaspberryPi用の起動用SDカードを作成します。ダウンロードしたRASPBIAN JESSIE LITE(2017-04-10-raspbian-jessie-lite.zip)を解凍し、2017-04-10-raspbian-jessie-lite.imgを適当なディレクトリに保存します。
次に、microSDカードをカードリーダーに挿入し、Win32DiskImagerを起動します。
先程解凍した、raspbian のイメージファイル(2017-04-10-raspbian-jessie-lite.img)を選択し、書き込みたいSDカードを挿入したドライブを選択し、''Write''で書き込みを開始します。
Wid32DiskImagerが正常終了すれば、起動用SDカードの完成です。一旦、SDカードを取り出しましょう。
OTGモードの設定
前述したところまででできたSDカードをRaspberryPi Zeroに挿入して起動させれば、キーボードとディスプレイがあれば操作可能になりますが、RasbperryPi Zeroは、Mini-HDMIのインターフェースしか持っていませんので、別途用意する必要があります。
そのため、最初に起動する前に、OGTモードで起動できるように設定していきます。
まずは、完成した起動用SDカードをSDカードリーダーにさしてみます。WindowsPCであれば、bootとという名前のフォルダが見えると思います。このフォルダは、Raspbianの起動用のカーネルや設定ファイルが格納されているところです。
OTGモードで起動させるには、このフォルダ内のconfig.txt と cmdline.txtを編集し、さらに、sshサーバーを起動させるような設定が必要になります。
config.txtの編集
config.txtは、カーネル起動時に読み込むモジュールやデバイスに関する設定を記載したものです。OTGモードでの起動には、
dtoverlay=dwc2
の一行をファイル末に追記すればOKです。このファイルをコメントアウトまたは削除すれば通常モード(USBのホスト機能がONの状態)で起動します。
cmdline.txtの編集
次にOTGモード時に、RasberryPiをネットワーククライアントとして動作するように、モジュールのロードの設定を行います。このファイルは、1行のみのファイルですが、"rootwait" の記述のすぐ後に改行を入れずに
modules-load=dwc2,g_ether
を挿入します。
初期状態では、
dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=PARTUUID=6acaa775-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait modules-load=dwc2,g_ether quiet init=/usr/lib/raspi-config/init_resize.sh
となっていると思います。一度、作成したSDカードでRaspberryPiを起動した後であれば、"rootwait"は行末にあると思います。
一度も起動していない場合の、"rootwait"はの後に記載されている
quiet init=/usr/lib/raspi-config/init_resize.sh
という部分は、Raspbianで使うファイルシステムのリサイズ用のスクリプトですので、最初の起動時に削除されます。
sshサーバーの有効化
上記の編集作業が終われば、RaspberryPi Zeroは、OTGモードで起動しますが、JESSIE LITEでは、sshサーバーがデフォルトでは有効になっていません。通常は、OSの起動後のsystemctlコマンドで有効化するのですが、最初からOTGモードで起動させたいので、ここでは、sshというファイルを作成することで、sshサーバーを有効化することができます。
sshというファイルは、中身は空で問題ありませんが、拡張子は付けないように気を付けてください。以上でRaspberryPi ZeroのOTGモードの設定は終わりです。RasberryPi ZeroにSDカードを挿入して、ホストPCと接続してみてください。ボード上の緑色のLEDが点滅して、Raspbianが起動します。
以上でRaspberryPi Zeroの設定は終了です。
次にホストPC側の設定を行います。
ホストPC側の設定(Windows10)
RaspberryPi Zero上の緑色のLEDが点灯状態になれば、Raspbianが起動している状態ですので、ホストPCからアクセスしてみます。
MacやLinuxでは、RaspberryPi Zeroと接続したUSBがネット―クデバイスとして認識されていると思いますが、Windowsの場合には、シリアルデバイス(COM3など)として認識されているはずです。この状態では、RaspberryPi Zeroにsshでアクセスできませんので、デイバイマネージャーを起動して、ネットワークデバイスとして認識させなおします。
ドライバの設定とsshでのアクセスに関しては、こちらの記事が図もあり、わかりやすいと思いますので、参照してください。
ホストPC側の設定(Linux: Ubuntu)
RaspberryPiZeroをOTGモードで利用する場合には、Bonjourと互換性のあるAvahiが必要となります。まずは、
# sudo apt-get install avahi-daemonでAvahiをインストール&有効化しておきます。
ほとんどの場合、Avahiが動作していれば、 raspberrypi.local というホスト名でアクセス可能なはずですが、最近のUbuntuでは、USB接続の有線ネットワーク接続がIPv6のみとなっているようですので、
設定 >ネットワーク >有線 > オプション
で ''IPv4設定'' のタブを選択して、''方式(M)'' を ''ローカルへのリンク専用'' に変更してください。
より詳細な情報としてこちら(Qiita)の記事も参照してください。
RaspberryPi Zeroからインターネットへ接続する
RaspberryPi ZeroをOTGモードで起動すると無線LANをもっていない RaspberryPi Zeroでは、インターネットの接続ができずソフトウェアのアップデートやツールのインストールもできません。
そのため、ホストPCのネットワークを共有する設定を行い、RaspberryPi Zeroからインターネットへの接続を行います。
Windowsの場合
Windowsの場合には、ネットワークの共有設定を使います。
まず、コントロールパネルを開き、''「ネットワークとインターネット」''を開き、''「状態」''のところで、インターネットに接続しているアダプターのオプションを変更します。
''「アダプターのオプションを変更する」''を選択すると、別のウィンドウが開き、PCに接続されているネットワークアダプタの一覧が表示されます。
次に、インターネットにつながっているアダプター(共有するネットワークアダプタ)を右クリックでメニューを表示させ、''プロパティ''を選択します。
プロパティの設定ダイアログが表示されたら、''共有''のタブを選択し、''ネットワークのほかのユーザーに、このコンピューターのインターネット接続をとおしての接続を許可する(N)''にチェックし、ネットワークアダプタの共有を行います。
ネットワークアダプタの共有を行うと、ローカル側(RaspberryPi Zero側)のIPアドレスを変更する必要がありますので、RaspberryPi Zeroを再起動させてください。
再起動後は、ホストPCをとおしてインターネットに接続することができます。
Linuxの場合
Linuxの場合は、RaspberryPi ZeroがホストPCを介したローカルネットワークに接続された状態と同じですので、ホストPCがGatewayになるようにルーティング設定を行います。
Linuxの場合には、ほぼ通常のGatewayの設定で問題ありません。ただし、RaspberryPi Zero側のネットワーク(usb0になど)のIPアドレスを固定してしまった方がよいと思います。あとは、ip_forwardingなどの設定をすればよいと思います。
RaspberryPi Zeroの活用
サーボモータを回してみる
OTGモードでは、USBデバイスを利用できませんので、GPIOにサーボモータをつないで動作させてみます。
NFCを使う
OTGモードでは、USBデバイスを使えませんが、通常モードでNFCを使ってみたいと思います。
Amazon Alexaをつくる
ネット上では、RaspberryPiを使ってAmazon Alexaのようなものを作っているものを見かけましたので、ここでも作ってみたいと思います。将来的には、ロボットコミュニケーションインターフェースにする予定です。(多分OpenRTM対応くらいはやります)