深色模式
M5 DMR 对讲固件
系列代号:M5MMDVMRadio / FMO_Companion —— 用 ESP32 把"网络数字对讲"做成可摸到的电台。
项目定位
DMR 数字对讲通常需要专用硬件(对讲机 + 热点/中继)。这个项目反其道而行:用一块 ESP32 开发板 + 屏幕 + 功放,直接实现一个可以上网的 DMR 终端——既是开发板,也是对讲机。
配套生态还包括:
- M5Cardputer / ESP32-3248S035 等不同形态的硬件载体;
- FMOMate 安卓端作为 Companion;
- 自建的 FMO / DMR 网络服务(架构文档已归档)。
硬件要点
- ESP32(PSRAM QSPI,Huge APP 分区),运行 Arduino Core 3.x;
- 屏幕常见为 480×320(ILI9488 + XPT2046 触摸)或 M5Stack 生态屏;
- 音频走内置 DAC/功放,部分板型 GPIO26 = AUDIO(DAC1),带 1.5W 功放可直接推喇叭。
UI 与字体(踩坑多的地方)
UI 采用 LVGL,从竖屏开始做像素级对齐,调通后再适配横屏。几个重要结论:
- DRAM 极其紧张。UI 曾因差 88 字节直接编译失败,普通静态大数组默认进 DRAM。
EXT_RAM_BSS_ATTR并非万能:在部分配置下无效,且开启 PSRAM 后 SPIRAM 驱动自身也会占内存,净效果可能反而更差——一切以编译后实际内存报告为准,不要想当然。- CJK 字体体积大,长期方向是把字体库从 flash 迁到 SD 卡 / 文件系统,以换取 OTA 升级能力;全尺寸字体按需打包,CJK 用回退字体减少体积。
网络与协议
- 支持直连 BrandMeister(BM)DMR 网络,也支持通过阿里云中转服务器接入自有 FMO 集群;
- 连接方式在设备端一键切换,底部提示条显示当前模式;
- 注意:提示条
setTextFont(0)只覆盖 ASCII,中文不可见是字体加载问题,不是文本问题。
版本管理
源码本地 git + 阿里云 CodeUp 私有仓库,固件版本号随功能递增,每次改动前保留可回退的基线。