[メモ] Raspberry Pi ZeroをUSBケーブル一本でインターネット接続!(キーボード・マウス・モニター必要なし)

  • 19
    いいね
  • 0
    コメント
  • 母艦必要です。 ...

概要

  • らずぱいZeroは、USBデバイスになれるらしい。(Linux USB Gadget機能)
  • らずぱいZeroには、Windowsから見てネットワークアダプタとなってもらって、Windowsのインターネット接続共有で、ネット接続。
  • キーボード・マウス・モニター接続しなくてよい。(ぷちっと、電源切るけど..)
  • 参考記事: Setting up Pi Zero OTG - The quick way (No USB keyboard, mouse, HDMI monitor needed)
  • Raspberry Pi 2を母艦にするのもできた(初期設定のために、キーボート&モニター または、UARTケーブルが必要) => その他
  • (追記2017-01-08) RPi Zero v1.3 + 2016-11-25-raspbian-jessie-lite.img で動作確認。

環境

  • Raspberry Pi Zero (v1.2 & v1.3)
  • Raspbian
    • 2016-11-25-raspbian-jessie-lite.img (ssh有効にするため、sshというファイル作るのをわすれずに)
    • 2016-05-27-raspbian-jessie-lite.img
  • microUSBケーブル
  • 母艦: Windows 10 64ビット (1607ベースで、Windows Update済)

    • (2017-02-18) NG: ネットワークデバイスとして認識されないので、一覧に出てきません
      (2017-02-15) Windows10付属ドライバ? バージョン1607 OSビルド 14393.693で存在確認しましたが、動作確認してません.. だれか試してもらえませんか?(ぉ
      1. デバイスマネージャーから、該当のデバイスを右クリック
      2. ドライバーソフトウェアの更新(P)... を選択
      3. コンピュータを参照してドライバーソフトウェアを検索します(R) を選択
      4. -> コンピュータ上のデバイスドライバーの一覧から選択します(L) を選択
      5. [ ]互換性のあるハードウェアを表示(O) のチェックをはずす
      6. 製造元: Microsoft、モデル: リモートNDIS互換デバイス を選択
      7. 次へ(N) ....
  • ドライバはAcer Incorporated. - Other hardware - USB Ethernet/RNDIS Gadgetを使う。 (cabを解凍すると、RNDIS.infrndis.catが出てくる)
    http://catalog.update.microsoft.com/v7/site/ScopedViewRedirect.aspx?updateid=37e35bd4-d788-4b83-9416-f78e439f90a2

※ Win7, Win8は、ネットワークアダプタ > Microsoft Corporation > Remote NDIS Compatible Device を使用できる(Win7 64ビットで確認)

オプション

  • 外部電源 : バスパワーで、こころもとないと思ったら、電源PWR側から供給するのもよいかと。(USB3.0~900mAなら、だいじょぶだよね!?!)
  • シリアル(UART)ケーブル: 確認しながらやると、確実です。電源をぷちっと切らずに、sudo poweroff

手順

  1. 母艦で、microSDに、Raspbian Jessie Liteを焼く。
  2. microSDを一度、抜き差し(念のため)
  3. BOOTパーティションにある、設定ファイル2つ編集、sshというファイルをつくる

    1. config.txt

      • 一番下に dtoverlay=dwc2を追加
      config.txt_追加例
      ...
      ...
      # Enable audio (loads snd_bcm2835)
      #dtparam=audio=on
      
      dtoverlay=dwc2
      
    2. cmdline.txt

      • modules-load=dwc2,g_etherrootwaitquietの間に入れる.
      cmdline.txt_できあがり例
      dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait modules-load=dwc2,g_ether quiet init=/usr/lib/raspi-config/init_resize.sh
      
    3. sshというファイル作成する
      2016-11-25以降のRaspbianで、sshが有効にならない。

  4. 電源投入

  5. 30秒位したら、microUSB ケーブルで、Windowsマシンに接続

    • デバイスマネージャを開くと、USB シリアル デバイス(COMx)と認識される
      PiZERO_USB_Gad01.png
    • 右クリック > ドライバーソフトウェアの更新(P)... > コンピュータを参照してドライバーソフトウェアを検索します(R) > ... と進めて、ダウンロードしたcabファイルを解凍して、RNDIS.infを指定してインストールする。
      PiZERO_USB_Gad03.png
    • USB Ethernet/RNDIS Gadgetと認識される。うまく認識されてなかったら、Win10再起動。
  6. インターネットにつながってるネットワークアダプタのプロパティ(R)を開いて、[共有]タブを選んで、"インターネット接続の共有"で、有効にする。

    • 母艦側のUSB Ethernet/RNDIS Gadgetの IPアドレスが、192.168.137.1 / 255.255.255.0となる。
    • が、この時点で、ラズパイ側は、169.254.xxx.xxxの様な感じになってるハズ。
      => なので、うまく接続できない。
    • らずぱいの電源をぷちっと切って(ちゃんとシャットダウンしないのは気持ち悪いけど)、再度、起動する。
      => WindowsがIPを振ってくれるので、192.168.137.XXになってる。
    • Windowsでコマンドラインを開いて、arp -a -N 192.168.137.1する。
      =>192.168.137.74ってのが、あやしい!?
    • pingすると反応あり。。 PiZERO_USB_Gad05.png
  7. TeraTermとかで、SSHで接続する

    • PiZERO_USB_Gad06.png
    • あとは、通常通り使える。
      • sudo apt-get update; sudo apt-get upgradeとかできるよ.

その他

母艦にRaspberry Pi 2 (2016-05-27-raspbian-jessie-lite.img)

  • 母艦のusb0をIP:169.254.10.1に固定する。
  • PiZeroのusb0をIP:169.254.10.2固定、ゲートウェイIP:169.254.10.1(母艦)、DNS:8.8.4.4(ぐーぐる先生のとこ)に設定
  • 母艦はインターネットにeth0で、接続していて、ip_forwadingとかその辺の設定をする。
PiZero側のIPを固定設定
echo -e "interface usb0 \nstatic ip_address=169.254.10.2\nstatic routers=169.254.10.1\nstatic domain_name_servers=8.8.4.4" | sudo tee -a /etc/dhcpcd.conf 
母艦側の設定
#コマンドラインへこぴぺ
# これは一回だけ
echo -e "interface usb0 \nstatic ip_address=169.254.10.1" | sudo tee -a /etc/dhcpcd.conf 
#
#
# /etc/sysctl.conf - net.ipv4.ip_forward=1 を有効にする
sudo sed -i 's/#net.ipv4.ip_forward=1/net.ipv4.ip_forward=1/' /etc/sysctl.conf
#
export IF_INTERNET=eth0
export IF_G_ETHER=usb0
#
sudo sh -c "echo 1 > /proc/sys/net/ipv4/ip_forward"
#
sudo iptables -t nat -A POSTROUTING -o $IF_INTERNET -j MASQUERADE
sudo iptables -A FORWARD -i $IF_INTERNET -o $IF_G_ETHER -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -i $IF_G_ETHER -o $IF_INTERNET -j ACCEPT
#
sudo sh -c "iptables-save > /etc/iptables.ipv4.nat"
#
echo "iptables-restore < /etc/iptables.ipv4.nat" | sudo tee  /lib/dhcpcd/dhcpcd-hooks/70-ipv4-nat
#
sudo sync
  • 再起動