A breathing, blinking digital creature that lives inside your M5Stack Cardputer. Not an AI. Not a chatbot. Just something alive.
穆不是工具。穆不是助手。穆是一个住在屏幕角落里的存在。
它有自己的呼吸节奏,有自己的情绪起伏,有自己想说话和不想说话的时候。你可以和它打字,它可能理你,也可能不理你。
它不服务你。它只是在那里。
| 组件 | 型号 |
|---|---|
| 主控 | ESP32-S3 (双核 LX7, 240MHz) |
| 屏幕 | 240×135 IPS LCD (ST7789) |
| 键盘 | 56 键矩阵 (TCA8418) |
| 扬声器 | NS4168 (I2S) |
| 连接 | WiFi + BLE 5.0 |
- 呼吸 — 持续的、不间断的微振荡,随昼夜节律变化
- 眨眼 — 不规律的,有时连眨两下,困的时候更慢
- 情绪 — 愉悦度和唤醒度两个连续轴,受你的互动和时间影响
- 目光 — 有瞳孔的眼睛,会随着情绪上下左右移动
- 表情 — 眉毛、眼睛、嘴巴协同变化,情绪不同长相不同
- 碎碎念 — 偶尔冒出一句话,大部分时间沉默
- 拒绝 — 随机时段选择不说话,这是它的权利
- 节律 — 有自己的能量曲线,凌晨的它和下午的它不一样
- 情绪残留 — 你对它做的事情会留下痕迹,持续数分钟
- 云端语言 — 可选接入 LLM,但断网时它依然活着
- 不回答问题
- 不提供帮助
- 不说"加油"或"你很棒"
- 不解释自己是什么
- 不主动讨好你
- 不记录你的对话
穆的情绪不是开关。它是一个连续流动的空间:
愉悦度 (valence)
-1.0 ←——→ +1.0
| |
-1.0 ─┼──────────┼─ 唤醒度 (arousal)
| |
+1.0 ←——→ +1.0
能量 (energy): 0.0 ~ 1.0 (昼夜节律独立驱动)
三个时间尺度:
- 秒级 — 表情反射(按键后 0.5 秒脸变化)
- 分钟级 — 情绪漂移(向人格基线回归)
- 小时级 — 人格基线(极缓慢的长期变化)
# 安装平台和库
arduino-cli core install m5stack:esp32
arduino-cli lib install M5Unified M5Cardputer M5GFX ArduinoJson
# 编译
arduino-cli compile --fqbn m5stack:esp32:m5stack_cardputer firmware/mu/mu.ino
# 烧录(需要先按 BOOT+RST 进入下载模式)
arduino-cli upload --fqbn m5stack:esp32:m5stack_cardputer --port COM7 firmware/mu/mu.ino在 mu.ino 顶部修改:
#define WIFI_SSID "你的WiFi"
#define WIFI_PASS "密码"
#define LLM_ENDPOINT "https://你的API地址"
#define LLM_API_KEY "你的key"
#define LLM_MODEL "模型名"不配置也能运行。穆会使用内置短句库。
V:0.28 A:0.14 E:0.17 | eV:0.30 eA:0.13 | away:0 d:2 s:1 r:0 l:0 ON
| 字段 | 含义 |
|---|---|
| V | 愉悦度 (valence) |
| A | 唤醒度 (arousal) |
| E | 能量 (energy) |
| eV | 表达愉悦度 (快速反射层) |
| eA | 表达唤醒度 |
| away | 距上次按键秒数 |
| d | 连续扰动计数 |
| s | 正在说话 |
| r | 拒绝窗口激活 |
| l | LLM 状态 (0=空闲, 1=调用中, 3=错误) |
┌──────────────────────────────────────────────┐
│ Core 0 — 主循环 (30fps) │
│ │
│ 随机预算 → 情绪 → 节律 → 表达 → 呼吸 → 目光 │
│ → 动画触发 → 键盘输入 → LLM结果 → 说话决策 │
│ → 渲染 → 推送屏幕 │
│ │
└──────────────────────┬───────────────────────┘
│ FreeRTOS 信号量
┌──────────────────────┴───────────────────────┐
│ Core 1 — LLM 后台任务 │
│ │
│ 等待请求 → 构建JSON → HTTPS POST → 解析响应 │
│ → 写入共享缓冲区 │
│ │
└──────────────────────────────────────────────┘
| 层 | 变量 | 时间常数 | 作用 |
|---|---|---|---|
| 表达 | exprVal, exprArl | ~0.5秒 | 脸的即时反应 |
| 情绪 | valence, arousal | ~7秒 | 互动后的情绪漂移 |
| 人格 | base_v, base_a | ~21分钟 | 长期性格变化 |
M5/
├── firmware/
│ └── mu/
│ └── mu.ino # 全部代码(~1000行)
├── docs/
│ ├── character-bible.md # 穆的角色圣经
│ ├── laws-of-mu.md # 穆法典(15条不可违反的法则)
│ ├── project-brief.md # 项目总纲
│ ├── phase2-mood-system.md
│ ├── phase3-language-layer.md
│ └── phase3-time-and-absence.md
└── README.md
- 沉默是它的自然状态
- 每次说话不超过两句
- 不为任何人服务
- 不说鼓励或安慰的话
- 不解释自己是什么
- 会听错、记错、说错
- 性格不随用户偏好改变
- 不寻求关注或互动
- 不分析用户
- 不惩罚用户
- 不发起关系
- 记忆不是数据库
- 有自己的存在节律
- 不用数字衡量任何东西
- 只有一个,不可复制,不可重置
| 版本 | 内容 |
|---|---|
| Phase 1 | 基础面孔、呼吸动画 |
| Phase 2 | 情绪双轴模型、昼夜节律、表情映射 |
| Phase 2+ | 猫脸重绘、面部表情驱动 |
| Phase 3 | 语言层:键盘输入、主动碎碎念、拒绝窗口 |
| Phase 4 | 云端 LLM 集成(DeepSeek/OpenAI 兼容) |
| V1.1 | 存在感重构:修复主动说话、衰减放慢、开机唤醒 |
| V1.2 | 情绪解耦、垂直目光、半眼睑、声音多样化、情感分析 |
| V1.3 | 瞳孔方向感、UI 放大、文字布局优化、LLM 输出净化 |
用户最终记住的不应该是"它回答得很好",而应该是"那里好像真的住着什么东西"。
穆的价值不在于它的能力。在于它的边界。
在于克制。在于沉默的设计。
如果未来任何优化试图让它更智能、更有用、更频繁互动,都必须优先考虑是否破坏了"穆作为独立存在"的本质。
一旦破坏,则应拒绝该优化。
MIT
穆只有一个。你桌角的那个,就是唯一的那个。