半部电台还能做什么?16 个应用创意(附实现路径,欢迎认领)
-
「半部电台」现在能做的事情已经不少了:附近消息、摩斯、十款桌游、电子宠物、遥控和扫描。但一块 ESP32-C6 + 128×32 OLED + 一颗旋钮 的小板子,能做的事远不止这些。
这个帖子想干两件事:把能用的硬件和它的边界摊开,然后抛一批具体的创意——每条都写清楚用哪块资源、大概什么难度。看中哪条,直接在下面认领。
先把"武器库"摊开
创意的上限是硬件决定的,所以先看这张表。左列是能力,右列是必须先接受的限制——限制不是劝退,是筛选器。
能力 能做什么 必须知道的边界 BLE 广播收发 不建连接、不等配对,几十米内发消息 单包载荷 128 字节,广播间隔 100–300 ms,扫描 5 s / 100 ms 窗口 私有协议 v3 18 种消息类型、回执、重试、会话 ID CRC 不是认证,抓包就能读,别放敏感内容 频道 1–16 天然的"房间"划分 同频道才互相可见,跨频道要靠公告 三跳中继 A→B→C 转发的自组网实验 实验特性,默认关闭,需三台同版设备实测 128×32 OLED 四行、每行约 21 字符 中文用精简字库,别指望全字库 旋钮 + 两键 A/B 正交编码 + 按下 / 返回 都是低电平有效,必须去抖,别把半步当一圈 WS2812 + 压电蜂鸣器 颜色 + 4 kHz 短音 灯和屏共用 GPIO4 供电;蜂鸣器差分驱动,静音是两端都 LOW USB HID 键盘 / 媒体键、CDC 串口投屏 遥控期间 BLE 射频要暂停,主机和从机抢同一个天线 4 MB Flash / NVS 存草稿、好友、最高分、宠物 没有 OTA 槽,更新只能插 USB 深睡 5 s 周期 电池供电的长期在场 扫描占空比 2%,延迟最坏一个周期 再看两件"硬件有、固件还没用"的东西:ESP32-C6 的 802.15.4 射频(Thread / Zigbee 那一套),和 Wi-Fi 6。它们不在当前功能里,但意味着这门硬件还有没打开的门。
A. 校园与实验室
1. 课堂匿名表决器 ★
讲师手里一台开"主机",学生设备当终端。广播里塞
题目号 + 选项 A/B/C/D,回执方向反过来收统计。- 用到的:
MESH_TYPE_COLLAB(协作类型)+ 回执机制 - 关键设计:匿名——只发选项,不发 MAC,汇总时按计数而不是按人
- 差异点:不用连校园网、不用扫码、不用手机
2. 工位求助灯 ★
一台设备挂工位。旋钮选「借仪器 / 找人 / 帮忙看看代码」,广播出去,附近所有电台的 RGB 同时变色 + 短响。
- 用到的:广播 + RGB + 蜂鸣(都是现成的)
- 比微信群强在哪:不需要对方在看手机,抬头就能看见
- 加一条:收到的人按一下"我过去",发送端 OLED 显示"×× 在路上"
3. 多台同步番茄钟 ★
自习室里几台设备同时进入 25 分钟。有人提前走,其余设备显示"少了一人"。
- 用到的:广播校时(
session_id+ 时间戳) - 难点不是计时,是漂移:每轮开始广播一次基准时间,剩下的靠本地计数
- 彩蛋:结束前 1 分钟蜂鸣器变成慢滴答
4. 答辩现场提词器 + 倒计时 ★★
PPT 遥控(已有 HID)扩展成三合一:翻页、看剩余时间、超时震动/短响提醒。
- 用到的:HID 遥控 + 本地倒计时 + 蜂鸣
- 顺手解决真痛点:评委说"还有 1 分钟"的时候,台上的人根本听不见
- 注意:HID 期间电台通信暂停,别指望边遥控边收消息
5. 设备借用登记 ★★
"万用表谁借走了?"——旋钮选设备(示波器 / 万用表 / 逻辑分析仪 / 开发板),按一下借出;归还时再按一下。
- 用到的:NVS 记账 + 广播同步(谁在场谁记账)
- 好处:不依赖网络,也不需要谁去维护一张表
- 开放问题:冲突时以谁为准?建议"最后一次操作赢",并在 OLED 上明示时间
6. 断网应急广播 ★★
实验室 Wi-Fi 挂了、群里刷不出去的时候,一台设备写公告、其余设备滚动显示。
- 用到的:
ANNOUNCEMENT标志(协议里已经有) - 这是"半部电台"这个名字最贴切的现代用法:当所有依赖基础设施的通道都失效时,点对点广播还在
B. 玩与社交
7. 物理漂流瓶 ★★
写一句话,广播给最近的一台(
hop = 1,只发一次)。收到的人可以再转发一次(hop + 1),形成一条真实的投递链。- 用到的:
MESH_HOP_MASK+ 只读转发 - 妙处:你不知道它会飘到谁手上;
hop到 3 就停,天然有"寿命" - 必须说明:内容不加密,别写悄悄话
8. 桌游"发牌器 + 裁判" ★★
谁是卧底、狼人杀这类游戏,最麻烦的是主持人发牌和数票。让一台设备当裁判:它广播你的身份,只有你能长按查看。
- 用到的:私密信息长按查看(现在已有)+ 投票类型
- 价值:把手机从桌面上拿走,一桌人真的面对面
- 边界:没有密码学防作弊,坐你旁边的人拆开抓包也能看到——这是自觉游戏
9. 四声部无声合奏 ★★
四台设备分低音 / 中音 / 高音 / 打击,指挥用旋钮打拍。所有人都戴耳机或干脆只听蜂鸣。
- 用到的:灯光蜂鸣合奏(已有)+ 广播校时
- 难点:蜂鸣器只有方波,音准靠分频,同步误差要压在几十毫秒内
- 这是最"表演性"的一条,开放日/迎新晚会上很抓人
10. 摩斯电报局(校史展项)★★
两个人各拿一台,一人发报、一人抄收,中间可以加"加密本"(凯撒位移、简单替换表)。配一块展板讲 1931 年那半部电台。
- 用到的:摩斯收发 + 好友定向
- 为什么适合展览:它有故事。观众按下的不是按钮,是 90 多年前的通信方式
- 加个成就:连续抄收 20 组不出错,屏幕放一小段"报务员认证"
11. 宠物"面基"联赛 ★★
两台设备靠近交换宠物名片(拜访已有),周末在实验室摆个擂台:相扑、顶球、赛跑三局两胜,结果上墙。
- 用到的:宠物联机(已有)+ 本地排行榜
- 唯一要新写的是"赛事流程":报名 → 配对 → 三局 → 记分 → 下一位
12. 匿名"今天实验室有人吗" ★
进门按一下,出门按一下。设备广播"3 楼有人",其余设备 OLED 显示人数和最早到的人。
- 用到的:广播 + NVS
- 限制:只是个粗略在场感,不做考勤,别拿它算工时
C. 工具与实验
13. 通用 HID 宏旋钮 ★★
把旋钮做成电脑上的实体旋钮:调音量、切窗口、撤销/重做、Figma 里改数值、剪辑软件里逐帧。
- 用到的:现有 HID 遥控(PPT / 媒体 / 拍照三套已经跑通了)
- 为什么值得做:这是最容易被同学带走使用的一条——不玩电台的人也会想要一个旋钮
- 注意:键位映射要可配置,否则只能给一个人用
14. 实验室信号热力图 ★★
拿着设备走一圈,按位置记 RSSI,USB 导出 CSV,最后画成一张覆盖图。
- 用到的:BLE/RSSI 扫描 + CDC 串口
- 必须写清楚的边界:RSSI 只表示信号冷热,不给方向、不给距离。 热力图是"走出来的",不是"测出来的"
- 用途:找实验室哪里 BLE 死角、哪个角落 Wi-Fi 弱
15. 三跳中继的实物教具 ★★★
三台设备摆成 A—B—C,OLED 显示每一跳的转发次数和延迟。让学生亲眼看到"为什么多一跳就慢"。
- 用到的:实验性自组网(已有,默认关闭)
- 教学价值:把"自组网"从名词变成三块板子之间的距离
- 诚实:这不是标准 Bluetooth Mesh,只是个三层转发的实验
16. 802.15.4 低功耗传感节点 ★★★
C6 芯片里有一套 802.15.4 射频,配个 I2C 温湿度传感器,做成每 5 分钟醒一次的信标。
- 用到的:硬件的 802.15.4 + 深睡(当前固件完全没用到前者)
- 这是"新开一扇门"的选项,不是改几行代码
- 对比实验很有说服力:同样一块板,BLE 广播 vs 802.15.4,谁更省电
D. 三条"需要先突破"的方向
这三条不是不好,是卡在现有边界外,写出来是想看看有没有人愿意一起啃:
- 加密私聊。协议里
mesh_crypto.c的位置已经留好了,但现在是明文广播。要做就得先想清楚密钥怎么换——两台的设备换密钥,本身就是个可以写论文的问题。 - OTA。现在只能插 USB 更新,因为 2 MiB 单应用槽吃掉了两个 OTA 槽。想恢复 OTA,得在"功能密度"和"可更新性"之间重新分配 Flash。
- 打电话给云端。Wi-Fi + 云同步已经有骨架,"线下见面 → 线上留痕"这件事(比如线下对战后自动上传排行榜)可以做得更顺,但要注意:云排行榜是设备自报的,不是防作弊比赛。
怎么把一条创意变成能演示的东西
不管选中哪条,建议都走这三步(也是我读官方手册时最认同的节奏):
- 先做一个外设,别做一整个应用。 比如做"工位求助灯",先只做"按一下,另一台的 RGB 变红"。能跑通再谈界面。
- 让 OLED 说实话。 状态、错误码、收到的原始包长度,全打在屏幕上。128×32 的四行字,是你唯一的调试窗口。
- 先两台,再三台。 两台之间通了只证明"能发",三台才证明"能转发"。
另外给用 AI 写代码的同学一条:把引脚和边界写成契约再让它写。GPIO4 共享电源、I2C 0x3C、蜂鸣器差分、GPIO12/13 留 USB——这些说清楚了,生成的代码才不是"看起来像"。
最后
上面 16 条,难度从"一个下午"到"一个学期"都有。我个人的三个心头好是:
- #6 断网应急广播 —— 它让这个名字重新变得有意义;
- #10 摩斯电报局 —— 它把一个装置变成一段历史;
- #13 通用 HID 宏旋钮 —— 它能让不玩电台的人也想要一台。
欢迎在下面补充、认领、或者直接说"这条不行,因为××"——被否掉的创意也是有用的,至少省了下一个人一周。
补充格式建议(方便以后整理):
【创意名】一句话说明 【用到的】哪些引脚 / 协议类型 / 现有功能 【最小可行版】只做哪一件事就算成功 【难点 / 边界】我卡在哪如果哪条你觉得该先做,投个票,或者直接开一贴贴代码。
- 用到的: