這是我在 Medium 上的第一篇文章,希望可以用來記錄我在軟體開發上的筆記跟心得~
前陣子剛入手一片 Raspberry Pi 3 Model B+,也就正式踏入開發樹莓派的行列啦。因為不想接額外的螢幕、滑鼠、鍵盤,於是就開始研究如何安裝成 headless 的模式,只需要讓 Raspberry Pi 跟電腦連上同一個網段,就能夠從電腦 SSH 連上 Raspberry Pi 進行開發。
本篇就是紀錄透過 Mac,將 Raspberry Pi 設置成 headless 的完整步驟。
Before We Begin
在開始之前,要先準備好這些硬體設備:
- Raspberry Pi (需要有內建 WiFi chip 的版本)
- Raspberry Pi 的電源轉換器 (5V/2.5A)
- microSD card 及 adapter (SD card requirement)
- PC or Laptop (本篇是用 Macbook 實作)
- Router
都準備好之後,就開始吧!
STEP 1: Download the image
首先,要先下載 Raspberry Pi 的作業系統,可以到官方網站(https://www.raspberrypi.org/downloads/),找到 official 或是 Third party 的 image。
我是下載 Raspbian Stretch with desktop and recommended software 這個 image。
Raspbian 是官方版的作業系統,內建許多軟體,包括: Python, Scratch, Sonic Pi, Java 等等。
STEP 2: Writing an image to the SD card
下載好 image 之後,就可以製作開機碟。
可以用 Linux command dd
來寫入,但使用這個 command 一定要特別小心路徑不要 key 錯了。
或者,也可以用 Etcher 這個 SD card writing tool 來製作,方法如下:
- 下載並安裝 Etcher: https://www.balena.io/etcher/
- 執行 Etcher 並插入 SD card
- 選擇下載好的 image (.img or .zip 都可以)
- 選擇 SD card
- Flash !
完成之後,桌面就會出現一個名為 boot 的 device。
STEP 3: Enable SSH
因為安全性的考量,SSH 在 default 狀態下是關閉的。要完成 headless 的設置,需要先啟用 SSH 功能。方法是在 SD card(剛剛製作好的開機碟)裡放一個 ssh
的檔案,Pi 在開機的過程中,會檢查 SD card 裡有沒有 ssh
這個檔案,若這個檔案存在,就會啟用 SSH,同時把這個檔案刪除。( ssh
檔案的內容不重要,基本上讓他是空的就行了)
開啟 terminal 並輸入以下指令:
touch /Volumes/boot/ssh
/Volumes/boot
是 SD card 在 Mac 上的路徑。
STEP 4: Setting up WiFi config
因為是要用 SSH 的方式連上 Pi,所以一定要先設定好 WiFi config,讓 Pi 在開好機之後,能夠自動連上設定的這組 WiFi。
首先,先在 SD card 裡建立一個 wpa_supplicant.conf
的檔案:
touch /Volumes/boot/wpa_supplicant.conf
接著,把以下內容貼上:
country=TW
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1network={
ssid="WIRELESS_NETWORK_NAME"
psk="WIRELESS_NETWORK_PASSWORD"
}
這邊需要修改的是 country
,可以參考 ISO 3166–1 country code 裡面的二位代碼。另外在 network 項目裡面的 ssid
跟 psk
就輸入自己的 WiFi SSID & password。
完成後,再確認 ssh
& wpa_supplicant.conf
這兩個檔案有放在 boot 裡:
STEP 5: Boot up Raspberry Pi
接著,先把 SD card 插入 Pi (SD card 插槽在板子下方):
再接上 power (micro USB),Pi 就會自動開機,並且 enable SSH, 以及設定 WiFi 了,大約需要一分多鐘的時間完成。
我們可以觀察 LED 燈來看 Pi 目前的狀態:
Red PWR LED
- 恆亮表示 power 正常
- 閃爍或熄滅表示 power 低於 4.63V (正常需要 5V)
Green ACT LED
- 不規則閃爍表示正在存取 SD card
- 微弱的恆亮表示沒有 boot code 被執行
- 如果是有規律的閃爍代表發生一些錯誤了 (可參考 https://elinux.org/R-Pi_Troubleshooting)
完成之後,記得不能把 SD card 移除,因為 Raspberry Pi 並沒有儲存設備,作業系統及使用者資料都是存在這張 SD card 。
STEP 6: Connect to Raspberry Pi via SSH
再來,就可以 SSH 連上 Pi 了。打開 terminal 並輸入以下指令來產生 SSH key,並且連線:
ssh-keygen -R raspberrypi.local
ssh pi@raspberrypi.local
- 出現提示 Are you sure you want to continue connecting (yes/no)? 就輸入 yes。
- 輸入 Pi 的預設密碼: raspberry
- 若 ssh 沒有反應,可以按 Ctrl-C 離開,然後再試一次。若是一直連不上就要檢查是不是哪個步驟有錯。
看到下面這個畫面就代表已經成功的連上 Pi 囉!
After
後續可以透過指令,開啟設定頁面做設定:
sudo raspi-config
也可以透過以下指令來 update:
sudo apt-get update -y
sudo apt-get upgrade -y
VNC (Graphical Desktop-Sharing System)
如果想試試以圖形介面登入,可以使用 VNC 這套畫面分享及遠端操作軟體。方法如下:
- 在 Pi 上安裝 VNC server:
sudo apt-get install realvnc-vnc-server realvnc-vnc-viewer
- 在 Mac 上 download VNC: https://www.realvnc.com/en/connect/download/viewer/
- 在 Pi 上啟動 VNC server (第一次連線會要輸入幾個問題):
vncserver
server 啟動成功會顯示 Pi 的 IP & port。
- 在 Mac 上開啟 VNC,並且輸入 Pi 的 IP & port。就可以開啟圖形介面了!
REFERENCE
- SD card: http://life-of-raspberrypi.blogspot.com/2013/01/raspberry-pi-510-sd.html
- Enable SSH: https://www.raspberrypi.org/documentation/remote-access/ssh/README.md
- WiFi config for headless pi: https://raspberrypi.stackexchange.com/questions/10251/prepare-sd-card-for-wifi-on-headless-pi
- LED behavior: https://elinux.org/R-Pi_Troubleshooting
- VNC: https://www.raspberrypi.com.tw/586/setting-up-vnc/