Files
lora_meshtastic_project/CHANGELOG.md
T
kevin 609bee3c9d feat(travelers): TCA9535 矩阵键盘驱动 + 电源管理 + LoRa RST 虚拟引脚
- 新增 TCA9535ButtonThread 驱动 (4x4 矩阵键盘, 中断/轮询模式)
- 电源管理: P1.2 POWER_EN (MOS 供电) + P1.3 POWER_BOOT (2s 开/关机)
- LoRa RST 通过 TCA9535 P1.4 + TCA9535GpioHal 虚拟引脚 200 控制
- 修复 LTO 链接错误 (去掉 .h/.cpp 中的 HAS_TCA9535_BUTTON 守卫)
- 新增 CHANGELOG.md, 更新 readme.md (PCAL9535 升级计划)
2026-03-29 04:45:24 +08:00

4.2 KiB
Raw Blame History

Changelog

基于 Meshtastic 官方固件 v2.7.15 (commit 567b8ea)。

格式参考 Keep a Changelog


[Unreleased]

Added

CN 频段支持

  • 新增中国 CN 频段定义:470.0510.0 MHz100 信道,SETTING_MAX_POWER 宏保护默认 3 dBm
  • 修改文件:src/mesh/RadioInterface.cppRDEF(CN, ...)

esp32c3_moonshine_travelers 旅行者版 — TCA9535PWR IO 扩展器驱动

  • 新增 src/input/TCA9535ButtonThread.h / .cppTCA9535PWR 4×4 矩阵键盘驱动
    • I²C 地址 0x20A0=A1=A2=0),与 SH1106 屏幕共用 Wire 总线
    • P0.0P0.3 行输出,P0.4P0.7 列输入,逐行拉低扫描,50µs 行间延时
    • 支持中断模式(GPIO5 下降沿触发)和轮询模式
    • 默认按键映射:SELECT / UP / DOWN / LEFT / RIGHT / CANCEL(可通过 variant.h 覆盖)
    • src/input/TCA9535ButtonThread.h — 类声明、寄存器宏定义、静态工具函数
    • src/input/TCA9535ButtonThread.cpp — 矩阵扫描、边沿检测、事件派发

电源管理(P1.2 POWER_EN + P1.3 POWER_BOOT

  • P1.2 = POWER_EN 输出,高电平有效,驱动 MOS 管维持供电
    • tca9535PowerEn(bool on) — read-modify-write P1.2static inline
  • P1.3 = POWER_BOOT 输入,低电平有效(按键按下接地)
    • tca9535ReadPowerBoot() — 读取 P1.3 状态,static inline
  • 开机流程:物理按键 → MOS 导通 → ESP32 得电 → init() 检测 P1.3 持续按住 2 秒 → POWER_EN 拉高维持供电
    • 未按满 2 秒松开 → 不拉高 POWER_EN → MOS 断开 → 自动断电
  • 关机流程:运行中 P1.3 持续按住 2 秒 → 清空屏幕 → POWER_EN 拉低 → 用户松手后 MOS 断开断电
  • 电源状态机:BOOT_PENDINGRUNNINGSHUTDOWN_PENDING
  • P1 口配置:0xEBP1.2=输出, P1.3=输入, P1.4=输出)

LoRa RST 通过 TCA9535 P1.4 控制

  • 新增 TCA9535GpioHal 自定义 HAL 子类(在 src/main.cpp
    • 继承 LockingArduinoHal,拦截虚拟引脚 200 的 pinMode() / digitalWrite() 转发到 I²C
    • LORA_RESET = TCA9535_LORA_RST_VIRTUAL_PIN(200)
    • RadioLib 的 findChip() / reset() 全链路通过 I²C 控制 P1.4
  • tca9535LoraReset(bool high) — read-modify-write P1.4static inline

variant.h 配置(esp32c3_moonshine_travelers

  • HAS_TCA9535_BUTTON — 启用 TCA9535 按键驱动
  • TCA9535_INT_PIN 5 — 中断引脚
  • TCA9535_POWER_EN_BIT (1u << 2) — 电源使能位掩码
  • TCA9535_KEY_MAP { ... } — 4×4 矩阵按键映射
  • TCA9535_LORA_RST_VIRTUAL_PIN 200 — LoRa RST 虚拟引脚

main.cpp 集成

  • #ifdef HAS_TCA9535_BUTTON 条件编译包含 TCA9535ButtonThread.h 并实例化
  • setupModules() 后调用 tca9535ButtonThread->init()
  • #ifdef TCA9535_LORA_RST_VIRTUAL_PIN 条件编译使用 TCA9535GpioHal 作为 RadioLib HAL

Changed

Fixed

  • LTO 链接错误:编译时 -flto 导致 undefined reference to TCA9535ButtonThread::*
    • 原因:.h/.cpp 中的 #if defined(HAS_TCA9535_BUTTON) 守卫导致部分编译单元中符号被丢弃
    • 修复:去掉 .h/.cpp 中的条件守卫,类定义和实现始终编译;main.cpp 中的实例化仍由 #ifdef 控制

TODO(未来计划)

  • 升级 IO 扩展器 TCA9535 → PCAL9535
    • 原因:TCA9535 无可配置内部上拉,矩阵键盘列线悬空易受电磁干扰
    • PCAL9535 pin-compatible,支持软件可配置上拉/下拉寄存器(0x41~0x46)、每引脚独立中断遮罩、可配置输出驱动强度
    • 替代方案:PCB 上列线加 10kΩ 外部上拉电阻

自定义板卡概览

板卡 MCU LoRa 模块 屏幕 GPS 按键输入 特殊功能
esp32c3_moonshine ESP32-C3 E220-400M30S BUTTON_PIN=9
esp32c3_moonshine (fw) ESP32-C3 E220-400M30S / E22_400M33S BUTTON_PIN=9 USB CDC, 电池 ADC
esp32c3_moonshine_mv ESP32-C3 RA-01SC-P SSD1306 PCF8574 6 键 NeoPixel, GPS EN
esp32c3_moonshine_travelers ESP32-C3 RA-01SC-P SH1106 TCA9535 4×4 矩阵 电源管理, LoRa RST via I²C