Raspberry Pi Zeroについて
Simple Wiki Based Contents Management System
Home Projects Memo Misc Topics Software
関心分野 >> 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
CPU1GHz Low Power ARM1176JZ-F(Single core)
GPUBroadcom Video Core IV
Memory(SDRAM)512MB
SrorageMicro SD Card
Video OupputMini-HDMI
USB1 Micro USB OTG
GPIO40 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でセットアップするために、必要なファイルをダウンロードしておきます。
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対応くらいはやります)