就在五月份,一个名为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]