Skip to content

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,从竖屏开始做像素级对齐,调通后再适配横屏。几个重要结论:

  1. DRAM 极其紧张。UI 曾因差 88 字节直接编译失败,普通静态大数组默认进 DRAM。
  2. EXT_RAM_BSS_ATTR 并非万能:在部分配置下无效,且开启 PSRAM 后 SPIRAM 驱动自身也会占内存,净效果可能反而更差——一切以编译后实际内存报告为准,不要想当然。
  3. CJK 字体体积大,长期方向是把字体库从 flash 迁到 SD 卡 / 文件系统,以换取 OTA 升级能力;全尺寸字体按需打包,CJK 用回退字体减少体积。

网络与协议

  • 支持直连 BrandMeister(BM)DMR 网络,也支持通过阿里云中转服务器接入自有 FMO 集群;
  • 连接方式在设备端一键切换,底部提示条显示当前模式;
  • 注意:提示条 setTextFont(0) 只覆盖 ASCII,中文不可见是字体加载问题,不是文本问题。

版本管理

源码本地 git + 阿里云 CodeUp 私有仓库,固件版本号随功能递增,每次改动前保留可回退的基线。