キノコの自省録

日々適当クリエイト

RaspberryPi ZeroをMacとUSB OTGで繋いで制御するまで

RaspberryPi Zeroが手に入りやすくなっていたので、購入してみました。購入はKSYから。料金はZero本体が600円、送料・支払い手数料が700円、消費税104円で合計1404円でした。本体より手数料の方が高いですね。ちなみにWiFiなしモデルです。

接続に必要なケーブルなど

色んな方が書いていますが、基本はUSBAオス-microBオスケーブル1本で繋ぐことができます。

そんな事情も知らずに衝動買いしたため、どういう風に外と繋ぐか頭になく、届いてから慌てました。何しろ3BとZeroではデフォルトのインタフェースが結構異なります。同じなのは電源(microB)、microSD、PiCameraの口くらいだと思います。

  • HDMI・・・3Bは通常のHDMI, Zeroはmini
  • GPIO・・・ピン数は一緒だが、ピンヘッダがない
  • LAN・・・ZeroにはLANソケットがない
  • 2.5φイヤホン端子・・・Zeroにはない
  • USB端子・・・3BはAが4つ、ZeroはmicroBが1つ。
  • WiFi・・・ない(WiFi付きモデルも販売されているが、より入手困難)

LANもWiFiもないため、SSHで入れません。それにUSB端子もmicroBなので、microB->Aメスに変換して、Aメスからハブ繋いでマウスとキーボードを繋ぐ、みたいなことをしないと、直接叩くこともできません。

しかし、上述の通り、Zeroは普通のUSBAオス-microBオスケーブルだけで開発が可能になっています。設定を少し弄ると、USBをEtherDeviceとして動作させることができます。ということで、必要なのは以下の3つ。

  • USBケーブル(Aオス-microBオス)
  • microSD
  • ピンヘッダ2x22 (for GPIO)

ピンヘッダは半田付けしておきましょう。

USB IPを利用するための設定

USBからEtherDeviceとして接続するために、ちょっとだけ作業が必要です。下記リンク先の説明が一番シンプルでわかりやすいと思います。

Simple guide for setting up OTG modes on the Raspberry Pi Zero, the fast way! · GitHub

  1. SDCardにRaspbianを書き込む(これは従来のRaspberryPiと変わりません)
  2. 書き込んだSDの/boot直下にあるconfig.txtの末尾にdtoverlay=dwc2を追加
  3. 書き込んだSDの/boot直下にsshという空ファイルを生成する(例えばMacなら$ touch /Volumes/boot/ssh)
  4. 書き込んだSDの/boot直下にあるcmdline.txtを開き、modules-load=dwc2,g_etherをrootwaitの後ろに追加する
  5. ZeroとMacをUSBで繋いで起動し、90秒ほど待ってから、ssh pi@raspberrypi.localでインしてみる(初期パスはraspberry)

起動は結構遅いので、気長に待ちましょう。4をミスると最悪起動しなくなるので注意。リンク先にコピペ用テキストが載っているので、それを使った方が安全かもしれません。

ちなみに、このモードをRaspberryPi Zero USB OTG(On the go)と呼んでいるようです。PWR INという従来と同じmicroBの給電の口がありますが、OTGで使用する場合、ここから給電しなくても動作します。電流が足らない場合に差すといいと思います。

USB OTG?

USBは、PCとMouseの関係のように、通常はホストとデバイスがはっきり決まりますが、デバイスがホストになることもできるのがOTGです。オンザゴーと読みます。Androidが一番わかりやすいですかね。AndroidはPCと繋ぐとデバイスとして機能しますが、microBからデバイスを繋ぐと、ホストとして動作させることができます。例えば、USB Serial(FTDIなど)を繋ぐと、/dev以下にデバイスが出現して、openすることでデバイスをコントロールすることができたりします。

ということで、USB OTG=USB Etherではありません。上記設定をすると、USB Deviceモードの場合はEtherとして起動するようにしているだけです。Zeroで使用されているOTG Controllerはこれではないかと思います。dwc=DesignWare Coresです。

www.synopsys.com

従来のRaspberryPiでは、残念ながらこの技は使えません。USBポートはAメスしかないためで、Aメスの場合はOTGが使えず、常にホストとして動作します。ここのページが詳しいですが、micro(およびmini)Bはピンが5個出ていますが、Aは4本(5V,D+,D-,GND)しかありません。

http://ktsite.ddo.jp/kikaku/usb/index.html

microBのIDピンを開放状態で使用した場合はデバイス、GNDへ短絡した場合はホストとして動作します。IDをGNDへ短絡させたケーブルをOTGケーブル、もしくはUSBホストケーブルと言います。USBホストケーブルの方が実情に即している気がしますね。

なお、規格としてのOTGは、どちらがホストとなるかデバイスとなるかをその場その場で切り替えるデュアルロールを目指しているため、ホストとデバイスが一意に決まってしまうUSBホストケーブルは邪道なんじゃないの?と思ったりしますが、詳しくは以下のページのOTG補足を参照してみると良いと思います。

USB On-the-Go(OTG)| 3分でわかるシリーズ | [技術コラム集]組込みの門 | ユークエスト株式会社

インターネットへの接続

話をZeroに戻します。SSHでつながったとは言え、WiFiもLANも繋がっていないので、インターネットに接続できません。つまりapt-getもできません。ただ、Macならインターネット共有から、実に簡単にネットワーク機能を提供することができます。

f:id:kinokorori:20170624162236p:plain

このRNDIS/Ethernet GadgetがZeroです。ここにチェックを入れてInternet共有をすると、特に苦も無くZero上でインターネットが利用できるようになります。

ZeroでYMZ294を制御してみる

YMZ294の回路をそのままにしてあったので、3Bと差し替えてみました。ごくごく普通に動作しました。起動がおそいなーという程度。写真見ておわかりのように、ミニブレッドボードの幅1.5倍くらいしかありません。非常に小さい。

f:id:kinokorori:20170625003423p:plain

動画はこちら。ただ単純に再生できたよ、という確認だけにすぎませんが・・・。曲はAve Mariaです。

youtu.be