就在五月份,一個名為Open Glass的開源計畫在Meta的黑客松上吸引了大量的關註。因為透過20美金左右的硬體成本,結合大語言多模態模型的能力,實作了很多炫酷的功能。
在Youtube有個簡短的演示視訊: OpenGlass Demo - Meta AI LLaMa Hackathon - 12th May 2024 - YouTube
從LLM的開發角度看,其實在這個基礎之上還可以做很多的嘗試。這個計畫目前已經開源,可以透過 github.com/ BasedHardware/OpenGlass 存取程式碼和相關介紹。
為了便於大家一起嘗試,我把這個嘗試過程簡短的寫出來供參考。
配置OpenGlass計畫的硬體
這個計畫首先需要準備必要的硬體和執行在硬體上的程式。
1.準備OpenGlass的硬體
BasedHardware使用的硬體XIAO ESP32 S3 Sense是從AWS買的,我們可以到淘寶搞定~
Seeed Studio XIAO ESP32 S3 Sense
使用」ESP32 S3 Sense「作為關鍵字搜尋,可與下圖比較,基本上不會找錯。
EEMB LP502030 3.7v 250mAH 電池
使用」502030 電池「作為關鍵字搜尋,502030表示的是電池的尺寸,即5x20x30mm。這款鋰電通常250mah,而連續工作下這塊板子的電流還是不小的,可以視場景修改工作模式或者選擇更大容量的電池。
本來還可以用他們提供的 STL檔 3D打印一個盒子以便固定在眼鏡上,我決定先不搞這個。等我充分理解和決定搞成啥樣了再考慮盒子。
拿到的開發板可能密封在袋子裏,分為ESP32S3 Sense板、網路攝影機板和wifi/藍芽天線三個部份。 為了正常工作,需要組合在一起。 網路攝影機板包括了OV2640網路攝影機(1600x1200分辨率,也可換用OV5640網路攝影機)和一個板到板(B2B)介面,可以與ESP32S3 Sense板連線。 網路攝影機板還包括了麥克風(圖中帶有金色小孔的黑色塊)以及Micro SD卡插槽。 將兩塊板子的B2B介面對齊,緊密 地 連線起來。
由於XIAO ESP32S3 Sense板的整合度相當高,所以貌似沒有提供板載天線,而是透過一個微型BNC介面連線一個2.4Ghz的wifi/藍芽印刷天線。連線天線有點小技巧,先對上一邊,然後用指甲稍微用力的斜往下用力按緊即可。拆開天線的時候不要直接抓著線纜硬拔,以免損壞天線接頭,使用指甲撬動一側即可方便拔出。
開發板工作會非常燙,如果時間較長,建議反面貼一片散熱片。由於整合度很高,在連線或者焊接引腳的時候,要註意不到搭接其他部份電路或者是金屬遮蔽罩等部份。
2.準備Arduino開發環境
首先,需要下載安裝Arduino IDE軟體,可以直接從Arduino官方網站下載: https://arduino.cc/en/software
Arduino IDE可以執行在多個系統平台上,我會以MacOS為主介紹,但不用擔心在Windows上有太大不同,因為主要的區別可能就在於串口的表示方式,Windows上會顯示為COM3這種,而MacOS上大多顯示為路徑。
安裝好之後需要匯入板子的包描述JSON檔。在選單欄的「檔」(Windows)或「Arduino IDE」欄(MacOS)上點選>「偏好設定」(Preferences),預設的設定(Setting)頁找到「其他 Boards Manager URL」("Additional Boards Manager URLs" )中貼上以下連結:
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
這會讓Arduino IDE從指定的連結,例如Espressif的地址匯入所需開發板管理器需要的包的清單。
要將板子對應的開發板管理器(Board Manager,我理解為板子需要的程式碼環境)安裝到Arduino IDE中。如圖,在IDE界面左邊就能看到第二個圖示,這是開發板管理器(Boards Manager)。也可以透過「檔」>"開發板">」開發板管理器…「 開啟。在搜尋框中輸入ESP32,會顯示兩個不同的計畫,一個是Arduino官方釋出的,一個是Espressif官方釋出的,邏輯上來說Espressif釋出的會更新一點。這裏我們選擇Espressif的2.0.17版本,因為BasedHardware的OpenGlass範例程式碼用的這個版本。使用相同版本可以避免由於版本差異導致的依賴庫檔的問題。
靜靜等待下載包並等待完成安裝。 可以看到主要是gcc和gdb的編譯環境啥的,還有dfu等 開發板 處理的工具包。 如果出現無法完成下載的錯誤,可以看看是不是存取github受限,在後文有解決的建議。
3.連線ESP32 S3 Sense開發板
ESP32 S3 Sense開發板內建了串口到USB的轉換,並提供了Type-C的USB介面,因此只需要把板子透過一根Type-C的USB線纜連線到電腦上即可。
開發板上的紅色LED接入時,然後熄滅。這是正常的,如果外接了電池,紅色LED會提示電池狀態。
如無意外,Arduino IDE會顯示已連線的串口裝置。在MacOS的電腦上,如下圖例,埠顯示為「dev/cu.usbmodemxxxxx Serial Port (USB)」,在Window中可能會顯示為「COMx」。
在左邊的板子搜尋框裏輸入「xiao」,如果之前開發板包清單匯入和開發板管理安裝無誤,就能夠搜尋到「XIAO_ESP32S3"開發板,確認勾選了正確的開發板和埠之後,點選」OK「確認。
在Arduino IDE的工具(」Tools「)選單中就可以看到板子的很多資訊和設定了。大部份的設定不需要改變,但由於開發板需要呼叫網路攝影機,使用更多儲存,所以要把PSRAM的選項開啟,選擇」OPI PSRAM「以便讓網路攝影機正常工作。
4.上傳範例固件程式碼
開發板使用的範例固件程式碼在儲存的firmware目錄中。可以下載或者使用git clone將程式碼復制到本地。在Arduino IDE裏開啟這個目錄,就可以刷固件程式碼到開發板了。
在上傳之前,首先點選驗證按鈕(左上角對勾圖示),檢查程式碼中是否存在錯誤。然後點選上傳按鈕(左上角箭頭圖示),開始將程式碼上傳到XIAO ESP32S3 Sense開發板。這個過程會顯示開發板和芯片的有關資訊,然後上傳固件。等待上傳完成。
固件上傳完畢後,就可以啟動執行了。可以使用Debug來偵錯跟蹤程式碼,也可以在工具選單找到串口監視器來檢視寫到串口的資訊。
至此,用於OpenGlass的硬體部份就準備好了。
x.準備開發板的命令列模式
這部份並不是必需的步驟,如果對Arduino開發很熟悉,可以使用Arduino-CLI工具直接以命令列方式準備硬體。
arduino-cli config add board_manager.additional_urls https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
arduino-cli core install esp32:[email protected]
第一行和前文添加開發板管理器一樣,添加參照的包清單JSON檔地址。第二行為核心安裝2.0.17版本的ESP32開發板管理程式。
arduino-cli board list
arduino-cli board details -b esp32:esp32:XIAO_ESP32S3
如果已經連線開發板,可以檢視開發板清單,然後顯示詳細資訊。請註意買到的XIAO ESP32 S3 Sense可能顯示為不同的名稱,請自行使用實際的名稱替代命令列中的esp32:esp32:XIAO_ESP32S3。
arduino-cli compile --build-path build --output-dir dist -e -u -p COM5 -b esp32:esp32:XIAO_ESP32S3:PSRAM=opi
透過命令列可以檢查編譯並上傳程式。
-p
表示的連線埠,
-b
表示的板子名稱,和前文一樣,替換為實際名稱。
:PSRAM=opi
表示開啟PSRAM供網路攝影機使用。
可能遇到的問題
1.無法或很慢下載ESP32包
可以透過在選單欄的「檔」(Windows)或「Arduino IDE」欄(MacOS)上點選>「偏好設定」(Preferences),點選網路(Network)頁簽,為Arduino IDE配置網路代理。使用能夠更順利存取Github的網路代理(你懂的)即可。
2.安裝錯了開發板管理器
如果是安裝錯了版本,或者不小心升級到了最新版本,直接移除現有開發板管理器版本,然後重新安裝指定的版本即可。
3.無法完成固件程式碼下載
在折騰的過程中,使用錯誤的程式或者傳輸過程中出現異常,可能會導致無法完成下載:
雖然開發板連線到電腦,但無法辨識開發板連線的埠
電腦已連線並顯示出埠,但上傳程式失敗
這時可以嘗試將開發板進入BootLoader模式,重新傳輸程式:
斷開開發板,按住Type-C介面右側的Boot微動開關,在黃色的LED燈上方(即紅色LED燈的另外一側),並且保持不要松開
將開發板透過數據線連線到電腦,然後再松開Boot開關
可以上傳範例程式碼中的Blink程式,檢查開發板的執行情況
範例程式碼可以在「檔」>「範例」>「01.Basics」>「Blink」找到。成功上傳執行,黃色LED燈將以一秒間隔閃爍
按住並保持Boot開關,然後按一次Reset開關(在紅色LED燈上方),也可進入BootLoader模式。
4.重設固件程式的執行
可以按動Reset開關,程式將重新執行。如果程式非預期陷入例如迴圈的錯誤,可以透過重設重新執行。
5.重刷BootLoader
步驟與進入BootLoader模式一樣,按住Boot開關連線,或者按住Boot開關再按一下Reset。然後在選單中點選工具,倒數第二行的Programmer選擇「esptool」,然後再點選倒數第一行的「Burn BootLoader」。
參考材料:
XIAO ESP32 S3 Sense板正反面示意圖如下
Thermal PAD位置附近可以增加散熱片。 電池的連線處焊接要註意不要搭接和短路。 除了這裏,還有一種電源方式,參考下圖引腳示意圖,在5V引腳使用二極體陽極連線電池,陰極連線開發板。 這是因為5V引腳是USB埠的5V輸出。 透過電池焊點連線電池供電的時候,該5V引腳沒有電壓。
3.3V引腳可提供不超過700ma的板載穩壓輸出,可用於驅動其他元件或傳感器等。可以看到ESP32 S3的引腳大多是復用的,應該是可以在固件程式中定義。
關於更多XIAO ESP32 S3 Sense的硬體資訊,例如電流消耗,休眠模式,尺寸指標和範例程式碼,可以存取Seeed Studio的Wiki站點:
Getting Started with Seeed Studio XIAO ESP32S3 (Sense) | Seeed Studio Wiki [https://wiki.seeedstudio.com/xiao_esp32s3_getting_started]