Edited at

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

More than 1 year has passed since last update.



  • 母艦必要です。 ...


概要


  • らずぱい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)と認識される


    • 右クリック > ドライバーソフトウェアの更新(P)... > コンピュータを参照してドライバーソフトウェアを検索します(R) > ... と進めて、ダウンロードしたcabファイルを解凍して、RNDIS.infを指定してインストールする。



    • 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すると反応あり。。





  7. TeraTermとかで、SSHで接続する



    • あとは、通常通り使える。



      • 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


  • 再起動