就在五月份,一个名为Open Glass的开源项目在Meta的HackaThon上吸引了大量的关注。因为通过20美金左右的硬件成本,结合大语言多模态模型的能力,实现了很多炫酷的功能

五分钟——配置OpenGlass的硬件_ollama

    有个简短的演示视频: OpenGlass Demo - Meta AI LLaMa Hackathon - 12th May 2024 - YouTube

    从LLM的开发角度看,其实在这个基础之上还可以做很多的尝试。这个项目目前已经开源,可以通过

 BasedHardware/OpenGlass: Turn any glasses into AI-powered smart glasses (github.com)

访问代码和相关介绍。

    为了便于大家一起尝试,我把这个尝试过程简短的写出来供参考。


配置OpenGlass项目的硬件

这个项目首先需要准备必要的硬件和运行在硬件上的程序。


1.准备OpenGlass的硬件

    BasedHardware使用的硬件XIAO ESP32 S3 Sense是从AWS买的,我们可以到淘宝搞定~

      使用”ESP32 S3 Sense“作为关键字搜索,可与下图比较,基本上不会找错。

五分钟——配置OpenGlass的硬件_OpenGlass_02

  •  EEMB LP502030 3.7v 250mAH 电池
    使用”502030 电池“作为关键字搜索,502030表示的是电池的尺寸,即5x20x30mm。这款锂电通常250mah,而连续工作下这块板子的电流还是不小的,可以视场景修改工作模式或者选择更大容量的电池。

    本来还可以用他们提供的 STL文件3D打印一个盒子以便固定在眼镜上,我决定先不搞这个。等我充分理解和决定搞成啥样了再考虑盒子。

    拿到的开发板可能密封在袋子里,分为ESP32S3 Sense板、摄像头板和wifi/蓝牙天线三个部分。为了正常工作,需要组合在一起。摄像头板包括了OV2640摄像头(1600x1200分辨率,也可换用OV5640摄像头)和一个板到板(B2B)接口,可以与ESP32S3 Sense板连接。摄像头板还包括了麦克风(图中带有金色小孔的黑色块)以及Micro SD卡插槽。将两块板子的B2B接口对齐,紧密的连接起来。

五分钟——配置OpenGlass的硬件_ollama_03

    由于XIAO ESP32S3 Sense板的集成度相当高,所以貌似没有提供板载天线,而是通过一个微型BNC接口连接一个2.4Ghz的wifi/蓝牙印刷天线。连接天线有点小技巧,先对上一边,然后用指甲稍微用力的斜往下用力按紧即可。拆开天线的时候不要直接抓着线缆硬拔,以免损坏天线接头,使用指甲撬动一侧即可方便拔出。

    开发板工作会非常烫,如果时间较长,建议反面贴一片散热片。由于集成度很高,在连接或者焊接引脚的时候,要注意不到搭接其他部分电路或者是金属屏蔽罩等部分。


2.准备Arduino开发环境

    首先,需要下载安装Arduino IDE软件,可以直接从Arduino官方网站下载: official website (arduino.cc)

    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的地址导入所需开发板管理器需要的包的清单。

五分钟——配置OpenGlass的硬件_开源_04

    要将板子对应的开发板管理器(Board Manager,我理解为板子需要的代码环境)安装到Arduino IDE中。如图,在IDE界面左边就能看到第二个图标,这是开发板管理器(Boards Manager)。也可以通过“文件”>"开发板">”开发板管理器…“ 打开。在搜索框中输入ESP32,会显示两个不同的项目,一个是Arduino官方发布的,一个是Espressif官方发布的,逻辑上来说Espressif发布的会更新一点。这里我们选择Espressif的2.0.17版本,因为BasedHardware的OpenGlass示例代码用的这个版本。使用相同版本可以避免由于版本差异导致的依赖库文件的问题。

五分钟——配置OpenGlass的硬件_ollama_05

    静静等待下载包并等待完成安装。可以看到主要是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”。

五分钟——配置OpenGlass的硬件_OpenGlass_06

    在左边的板子搜索框里输入“xiao”,如果之前开发板包清单导入和开发板管理安装无误,就能够搜索到“XIAO_ESP32S3"开发板,确认勾选了正确的开发板和端口之后,点击”OK“确认。

    在Arduino IDE的工具(”Tools“)菜单中就可以看到板子的很多信息和设置了。大部分的设置不需要改变,但由于开发板需要调用摄像头,使用更多存储,所以要把PSRAM的选项打开,选择”OPI PSRAM“以便让摄像头正常工作。

五分钟——配置OpenGlass的硬件_ollama_07


4.上传示例固件代码

    开发板使用的示例固件代码在存储的firmware目录中。可以下载或者使用git clone将代码复制到本地。在Arduino IDE里打开这个目录,就可以刷固件代码到开发板了。

五分钟——配置OpenGlass的硬件_开源_08

    在上传之前,首先点击验证按钮(左上角对勾图标),检查代码中是否存在错误。然后点击上传按钮(左上角箭头图标),开始将代码上传到XIAO ESP32S3 Sense开发板。这个过程会显示开发板和芯片的有关信息,然后上传固件。等待上传完成。

    固件上传完毕后,就可以启动运行了。可以使用Debug来调试跟踪代码,也可以在工具菜单找到串口监视器来查看写到串口的信息。

五分钟——配置OpenGlass的硬件_ollama_09

    至此,用于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:esp32@2.0.17
  • 1.
  • 2.

    第一行和前文添加开发板管理器一样,添加引用的包清单JSON文件地址。第二行为核心安装2.0.17版本的ESP32开发板管理程序。

arduino-cli board list
 arduino-cli board details -b esp32:esp32:XIAO_ESP32S3
  • 1.
  • 2.

    如果已经连接开发板,可以查看开发板清单,然后显示详细信息。请注意买到的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
  • 1.

    通过命令行可以检查编译并上传程序。-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板正反面示意图如下

五分钟——配置OpenGlass的硬件_OpenAI_10

五分钟——配置OpenGlass的硬件_ollama_11

    Thermal PAD位置附近可以增加散热片。电池的连接处焊接要注意不要搭接和短路。除了这里,还有一种电源方式,参考下图引脚示意图,在5V引脚使用二极管阳极连接电池,阴极连接开发板。这是因为5V引脚是USB端口的5V输出。通过电池焊点连接电池供电的时候,该5V引脚没有电压。

五分钟——配置OpenGlass的硬件_ollama_12

    3.3V引脚可提供不超过700ma的板载稳压输出,可用于驱动其他组件或传感器等。可以看到ESP32 S3的引脚大多是复用的,应该是可以在固件程序中定义。

    关于更多XIAO ESP32 S3 Sense的硬件信息,例如电流消耗,休眠模式,尺寸指标和示例代码,可以访问Seeed Studio的Wiki站点: Getting Started with Seeed Studio XIAO ESP32S3 (Sense) | Seeed Studio Wiki