← Back to blog

把 M5Stack StopWatch 做成 Ricoh GR 无线取景器

M5Stack StopWatch running a Ricoh GR wireless live view

这次做的不是简单移植,而是把一个原本面向 M5StickS3 的 Ricoh GR 取景项目,重构成适合 M5Stack StopWatch 的独立应用。

StopWatch 的硬件更接近一个真正的口袋取景器:466 x 466 圆形 AMOLED、触摸、两个硬件按键、ESP32-S3R8、8MB PSRAM、WiFi 和震动马达。它不应该只是把矩形 UI 拉伸到圆屏里,而应该像一个专门为 GR III / GR IIIx 做的小取景器。

目标

核心原则很明确:Ricoh 相机通信逻辑尽量不动,硬件相关逻辑重构出来。相机 API、HTTP 请求、JPEG live view 流和 BLE 配对都应该保持清晰边界,显示、输入、震动和系统集成则放到 StopWatch 侧。

连接链路

最终链路分成几层:

  • BLE 用来建立相机控制配对。
  • WiFi 连接相机热点。
  • HTTP 请求负责状态、控制和 live view。
  • JPEG live view 流被解码后绘制到圆形屏幕中间。

过程中最麻烦的点不是单个 API,而是相机状态。GR 在不同拍摄界面、遥控模式、回看状态下,对 live view 和快门控制的表现不完全一样。

StopWatch UI

圆形屏幕的 UI 重新排了一遍:

  • live view 居中显示,并保持比例。
  • 图片外侧保持黑色,不强行铺满圆屏。
  • 顶部显示相机和连接状态。
  • 周围显示 ISO、EV、光圈、快门、WiFi、HTTP、LiveView 等状态。
  • 提示文字从取景画面中移开,避免挡住画面。

这一步让它从“能显示”变成“像一个取景器”。

输入

现在的输入逻辑更偏抓拍:

  • 左键:单拍。
  • 右键:连拍/扩展动作预留。
  • 点击屏幕:触摸位置对焦,然后拍摄。

拍摄时尽量避免多余半按对焦,让相机可以按自己的 Snap/拍摄设定工作。

回看

后来又专门处理了拍摄后的回看体验。不能让相机一直被困在遥控模式黑屏里,否则无法看刚拍的照片,也无法方便地调整相机参数。现在 live view、拍摄和回看之间的状态处理更接近真实使用。

当前状态

目前这版已经能完成核心流程:

  • App 安装在 StopWatch 上,不覆盖系统。
  • 能连接 Ricoh GR。
  • 能显示 live view。
  • 能通过按键和触摸拍照。
  • 图标已经替换。
  • 拍摄后回看可用。

接下来更值得做的是把它从“遥控取景器”继续推进成真正的 GR Companion:快速参数、回放上一张、直方图、曝光提示和自定义快捷菜单。