当前位置: 欣欣网 > 码农

五分钟——配置OpenGlass的硬件

2024-07-09码农

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