使用USB Ethernet Gadget連接Raspberry Pi Zero W 2

rpi-zero

前言


之前使用樹莓派的時候,都是透過HDMI接上螢幕,再透過鍵盤滑鼠操作。
但是萬一手邊沒有螢幕跟鍵盤滑鼠,要怎麼操作呢?

準備開始

首先,我們需要準備以下材料:

  • 1 x Raspberry Pi 4 or Zero / Zero W / Zero 2 W 或是更新
  • 1 x MicroSD 卡
  • 1 x 能夠讀取 MicroSD 卡的裝置
  • 1 x 筆電或是桌機
  • 1 x MicroUSB to USB 連接線

筆電或是桌機必須是Windows,因為Linux設定太坑了,所以我沒成功過,然後MacOS可能可以,但我沒試過

安裝步驟

  1. 我們要先下載 Raspberry Pi OS 的映像檔並安裝,這邊建議直接使用 Raspberry Pi Imager

    這邊注意!建議選64-bit Full的版本,其他版本我沒有試過,不確定是否有支援
    select-os

  2. 設定安裝的主機名稱(hostname)以及使用者帳密(username/password)
    customize-settings

  3. 等待安裝完成,並重新插入 MicroSD 卡到電腦中

  4. 找到 MicroSD 卡的 bootfs 磁碟中的 config.txt 檔案

    1. 新增一行在特定位置

      位置一定要對!網路上很多教學都只說新增一行,但沒說要新增在哪裡🥹

      1
      2
      3
      4
      5
      6
      7
      ...
      # Enable audio (loads snd_bcm2835)
      dtparam=audio=on
      dtoverlay=dwc2

      # Automatically load overlays for detected cameras
      ...

      結果如下:
      add-dtoverlay

    2. 接著,將otg_mode=1給註解掉

      1
      2
      3
      4
      5
      6
      7
      8
      9
      ...
      [cm4]
      # Enable host mode on the 2711 built-in XHCI USB controller.
      # This line should be removed if the legacy DWC2 controller is required
      # (e.g. for USB device mode) or if USB support is not required.
      # otg_mode=1 <---- 就是這行

      [all]
      ...
  5. 找到 MicroSD 卡的 bootfs 磁碟中的 cmdline.txt 檔案

    1. rootwait後面加上modules-load=dwc2,g_ether

      因為cmdline只有一行,要注意不要加錯位置

      1
      ... rootwait modules-load=dwc2,g_ether quiet splash ...

      會變成這樣:
      add-modules-load

  6. 將 MicroSD 卡退出,插入到 Raspberry Pi Zero W 2 中,並連接 MicroUSB to USB 連接線到電腦上。我是用Raspberry Pi USB Dongle Expansion Board Kit,所以可以直接插上去
    insert-pi

  7. 如果你的電腦是Windows,會需要安裝RNDIS驅動程式,可以參考這篇

    安裝完成後,可以在裝置管理員中看到RNDIS的裝置
    device

    網路介面卡也會多出一個裝置,這就是直接把 Raspberry Pi Zero W 2 當成網路介面卡
    RNDIS

  8. 接著,等待一下,Raspberry Pi Zero W 2 會自動開啟並連接到你的電腦上,這時候我們可以先ping一下看看有沒有連上

    Pi 有可能會重新連接你的電腦,所以馬上ping可能會失敗,可以看一下網路介面有沒有連上,等一下再試試看
    interface

    如果網路介面沒有問題,我們可以ping一下看看有沒有連上:

    1
    ping pi.local

    成功的話,你會看到類似以下的結果:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Ping pi.local [fe80::f4da:bc9b:9cc1:2daf%26] (使用 32 位元組的資料):
    回覆自 fe80::f4da:bc9b:9cc1:2daf%26: 時間<1ms
    回覆自 fe80::f4da:bc9b:9cc1:2daf%26: 時間<1ms
    回覆自 fe80::f4da:bc9b:9cc1:2daf%26: 時間<1ms
    回覆自 fe80::f4da:bc9b:9cc1:2daf%26: 時間<1ms

    fe80::f4da:bc9b:9cc1:2daf%26 的 Ping 統計資料:
    封包: 已傳送 = 4,已收到 = 4, 已遺失 = 0 (0% 遺失),
    大約的來回時間 (毫秒):
    最小值 = 0ms,最大值 = 0ms,平均 = 0ms
  9. 最後,我們可以透過ssh連接到 Raspberry Pi Zero W 2 上

    1
    ssh pi.local

    connect

結論


我們從沒有外部螢幕和鍵盤的情況下,利用USB連線設定和訪問Raspberry Pi Zero W 2

但可惜的是,我這邊沒有測試成功Linux和MacOS,如果有人成功了,歡迎留言告訴我,我再補充上去🥲

Linux的坑滿多的,連上去還有可能會遇到找不到裝置的問題,所以我就放棄了😂

參考資料


  • How to Connect a Raspberry Pi to a PC or Laptop Using USB
  • Turning your Raspberry Pi Zero into a USB Gadget > Ethernet Gadget
  • Windows/Install RNDIS driver
  • Raspberry Pi Zero W Headless setup – Windows 10 RNDIS Driver issue resolved

這篇文章同步發表於 Medium ,歡迎留言討論!

Medium 文章連結