我的 Garmin 表盘
·
fifteenbao
我的 Garmin 表盘

23年的双十一换了 Garmin 的 Forerunner265S
购买原因:
- 可以不带手机跑步和听音乐
- 待机时间长
- 显得专业
想换《辐射》主题很久了…… 有看到喜欢的又没办法海外付款,最近试试用AI写了一个主题,目前还是比较满意的
Pip-Boy 3000 表盘 - Garmin Forerunner 265s
辐射(Fallout)系列游戏启发的Pip-Boy主题表盘,专为Garmin Forerunner 265s设计,采用标志性的绿色单色复古未来主义美学。
功能特性
- 复古Pip-Boy设计:经典绿色单色配色方案 (#00FF00)
- CRT屏幕效果:真实的扫描线叠加,呈现复古终端外观
- 全面的数据显示:
- 时间(时:分,带秒数)
- 日期(日、月、年)
- 步数计数器
- 心率监测
- 电池百分比
- 消耗卡路里
- 避难所男孩角色:标志性的辐射吉祥物
- Pip-Boy边框:带角落支架的技术边框
安装说明
前置要求:
- 安装 Connect IQ SDK Manager
- 下载地址:https://developer.garmin.com/connect-iq/sdk/
- 使用Garmin Connect账户登录
- 安装 Visual Studio Code
- 下载地址:https://code.visualstudio.com/
- 安装 Monkey C 扩展
- 打开 VS Code,进入扩展 (Cmd+Shift+X),搜索 “Monkey C”,安装官方Garmin扩展
- 生成开发者密钥(如果还没有)
openssl genrsa -out developer_key.pem 4096 openssl pkcs8 -topk8 -inform PEM -outform DER -in developer_key.pem -out developer_key.der -nocrypt
构建表盘:
使用 Visual Studio Code(推荐):
- 在VS Code中打开此项目文件夹
- 按
Ctrl+Shift+P(Mac上为Cmd+Shift+P) - 输入 “Monkey C: Build for Device”
- 选择 “fr265s” (Forerunner 265s)
.prg文件将在bin文件夹中生成
使用命令行:
# 确保 monkeyc 编译器在你的 PATH 中 # -o: 输出文件 # -f: Jungle 配置文件 # -y: 开发者密钥 # -d: 目标设备 (fr265s) # -w: 显示警告 monkeyc -o bin/garmin.prg -f monkey.jungle -y developer_key.der -d fr265s -w
在模拟器中测试:
- 使用 VS Code:按
Ctrl+Shift+P→ 输入 “Monkey C: Run” → 选择 “fr265s” - 使用命令行(推荐):
- 第一步:启动模拟器(新终端运行,需保持运行):
connectiq - 第二步:编译并推送:
monkeyc -o bin/garmin.prg -f monkey.jungle -y developer_key.der -d fr265s -w monkeydo bin/garmin.prg fr265s提示: 如果
monkeyc命令未找到,主要需要在 PATH 中添加 SDK 的bin目录。Mac 默认路径通常为:~/Library/Application Support/Garmin/ConnectIQ/Sdks/connectiq-sdk-mac-x.x.x/bin - 第一步:启动模拟器(新终端运行,需保持运行):
安装到手表:
- 通过 Garmin Express(电脑):将Forerunner 265s连接到电脑,打开Garmin Express,将
.prg文件复制到手表的GARMIN/APPS文件夹 - 通过 Connect IQ 手机应用:在VS Code中将项目导出为
.iq文件,传输到手机,使用Connect IQ应用安装到手表
项目结构
gamini/
├── manifest.xml # 应用清单和设备配置
├── monkey.jungle # 构建配置
├── source/
│ ├── PipBoyWatchFaceApp.mc # 主应用入口点
│ └── PipBoyWatchFaceView.mc # 表盘视图和渲染逻辑
└── resources/
├── strings/
│ └── strings.xml # 本地化字符串
├── layouts/
│ └── layout.xml # UI布局定义
└── drawables/
├── drawables.xml # 可绘制资源定义
├── launcher_icon.png # 应用启动图标
├── vault_boy_walk1.png # 走路动画1
├── vault_boy_walk2.png # 走路动画2
└── vault_boy.png # 避难所男孩待机精灵图
自定义
- 更改颜色:编辑
PipBoyWatchFaceView.mc并修改变量:var pipboyGreen = 0x00FF00; // 主Pip-Boy绿色 var backgroundColor = 0x000000; // 黑色背景 var darkGreen = 0x006600; // 扫描线颜色 - 调整数据字段:修改
drawStats()函数来更改显示的健身指标或它们的位置 - 动画:通过修改
drawVaultBoy()函数增强避难所男孩角色的动画效果,根据不同状态(心率区间、活动水平等)使用精灵图像
技术细节
- 目标设备:Garmin Forerunner 265s(416x416 AMOLED显示屏)
- 最低API级别:3.2.0
- 语言:Monkey C
- 权限:SensorHistory, UserProfile
致谢
- 灵感来自辐射游戏系列的Pip-Boy界面
- 为Garmin Connect IQ平台创建
- 避难所男孩角色 © Bethesda Softworks
许可
这是一个粉丝制作的表盘,仅供个人使用。
支持
- 官方文档:https://developer.garmin.com/connect-iq/
- 开发者论坛:https://forums.garmin.com/developer/
一些修改过程
添加唤醒走路动画
添加了一个手表唤醒之后行走的动画,会在 drawables.xml 文件制定图片资源:
<?xml version="1.0"?>
<resources>
<bitmap id="LauncherIcon" filename="launcher_icon.png" />
<bitmap id="VaultBoy" filename="vault_boy.png" />
<bitmap id="VaultBoyWalk1" filename="vault_boy_walk1.png" />
<bitmap id="VaultBoyWalk2" filename="vault_boy_walk2.png" />
</resources>
在 PipBoyWatchFaceView.mc 中定义动画:
// --- Center: Vault Boy ---
var bmpToDraw = vaultBoyBitmap;
if (isAwake && vaultBoyWalk1Bitmap != null && vaultBoyWalk2Bitmap != null) {
var nowMs = System.getTimer();
// Play animation for 2 seconds
if (nowMs - animStartTime < ANIM_DURATION) {
// Cycle every 250ms (Walking speed)
// 3 Frames: 0=Stand, 1=Walk1, 2=Walk2
var frame = (nowMs / 250) % 3;
if (frame == 1) {
bmpToDraw = vaultBoyWalk1Bitmap;
} else if (frame == 2) {
bmpToDraw = vaultBoyWalk2Bitmap;
}
}
}
动画效果:
字体
字体使用了谷歌的开源字体:Share Tech Mono。从AI写的工程来看,会提取使用的字符形成 fnt 格式的文档。

还优化了一些字符的显示,比如步数超过9999会溢出,当步数超过此数值时,会切换成千分位 10.0k 显示。时间符号 “:” 全字符很占小屏幕的位置,把小时和分钟布置成上下排列,减少占位。
目前看还是比较满意的。AI Coding 上大分!