Android Things 學習筆記: Raspberry Pi 3 安裝 OS

Android Things 學習筆記: 介紹 一文我們介紹了 Android Things ,在我們正式開始開發我們的程式之前,我們先將手邊的 Raspberry Pi 3 Model B 裝上可以用 Android Things 的映像檔案吧。

Android Things 的網頁有針對 Raspberry Pi 3 Model BGetting Started 頁面,就讓我們從這一頁開始我們的 Android Things 旅程吧。

下載映像檔

首先到 System Image Downloads 去下載 Raspberry Pi 3 Model B 的映像檔案,接著將其解壓縮

coldnew@gentoo ~ $ unzip androidthings_rpi3_devpreview_3.zip

解壓縮後會得到 iot_rpi3.img 這個映像檔。

燒錄到 sdcard

如果你是在 Linux 下,可以直接透過 dd 命令將他寫到你的 sdcard

coldnew@gentoo ~ $ sudo dd if=iot_rpi3.img of=/dev/sdc bs=1M

在 Mac OSX 下,我則是透過 ApplePi Baker 這個圖形化的程式來進行燒錄

啟動 RPI3

將你燒好映像檔的 sdcard 插入到 Raspberry Pi 3 Model B 後,插入 USB 電源以及接上網路線,如果你有 HDMI 螢幕的話,可以考慮接上去 (不接也可以)

如果你有接上 HDMI 的話,開機完成後會看到這樣的畫面,上面會顯示你的 Raspberry Pi 3 的 IP 位址

連接 ADB

啟動完 Raspberry Pi 3 後,我們可以透過 adb 工具去進行連線,假設你的系統有支援 zeroconf (在 Linux 下是 Avahi, Windows 下是 Bonjour) 的話,你可以透過 Android.local 在同一網域下接觸到你的 Raspberry Pi 3

coldnew@gentoo ~ $ ping Android.local
PING android.local (192.168.20.102): 56 data bytes
64 bytes from 192.168.20.102: icmp_seq=0 ttl=64 time=57.599 ms
64 bytes from 192.168.20.102: icmp_seq=1 ttl=64 time=4.529 ms
^C
--- android.local ping statistics ---
2 packets transmitted, 2 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 4.529/31.064/57.599/26.535 ms

於是我們就可以透過 adb 工具去進行連線

coldnew@gentoo ~ $ adb connect Android.local

你也可以登入進你的 Raspberry Pi 3 去看看裡面有啥東西

coldnew@gentoo ~ $ adb shell
rpi3:/ $ ls
acct    d            etc               init            init.usb.configfs.rc mnt         property_contexts seapp_contexts   storage    ueventd.rpi3.rc
cache   data         file_contexts.bin init.environ.rc init.usb.rc          oem         root              selinux_version  sys        vendor
charger default.prop fstab.rpi3        init.rc         init.zygote32.rc     postinstall sbin              sepolicy         system
config  dev          gapps             init.rpi3.rc    lost+found           proc        sdcard            service_contexts ueventd.rc

設定 Wi-Fi

當你登入你的 Raspberry Pi 後,如果你想拔掉網路線並起用 Raspberry Pi 3 上面的 Wi-Fi 的話,你可以透過 adb 去進行設定

coldnew@gentoo ~ $ adb shell am startservice \
       -n com.google.wifisetup/.WifiSetupService \
       -a WifiSetupService.Connect \
       -e ssid <Network_SSID> \
       -e passphrase <Network_Passcode>

(如果無線網路沒密碼的話,可以移除 passphrase 一行)

設定好後,可以透過 logcat 去進行驗證

coldnew@gentoo ~ $ adb logcat -d | grep Wifi
...
V WifiWatcher: Network state changed to CONNECTED
V WifiWatcher: SSID changed: ...
I WifiConfigurator: Successfully connected to ...

也可以透過 ping 命令確認你的 Raspberry Pi 3 可以順利透過無線上網

coldnew@gentoo ~ $ adb shell ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=57 time=6.67 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=57 time=55.5 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=57 time=23.0 ms
64 bytes from 8.8.8.8: icmp_seq=4 ttl=57 time=245 ms

如果要移除所有的無線網路設定,則可以透過以下命令進行

coldnew@gentoo ~ $ adb shell am startservice \
       -n com.google.wifisetup/.WifiSetupService \
       -a WifiSetupService.Reset

透過 UART 登入

如果你就是不想接上網路線來對 Raspberry Pi 3 進行設定,那我們也可以透過 TTL 轉 USB 線 來接到 Raspberry Pi 上面的 UART 接腳,透過 UART 來進入 console。

接上後,看你是要用 EmacsSerial (Mac OS)、Putty (Windows)、GtkTerm (Linux) 來進行連線,記得以下東西不要設定錯誤就好:

  • Baud Rate: 115200
  • Data Bits: 8
  • Parity: None
  • Stop Bits: 1

我自己是習慣透過 EmacsM-x serial-term 命令去進行連接