This commit is contained in:
2026-05-03 01:32:56 +08:00
parent fc307f79cf
commit 39074ae258
7 changed files with 426 additions and 48 deletions
@@ -0,0 +1,10 @@
# 2026-05-02 工作日志
## 分析 esp32c3_moonshine_travelers_3 变体工作逻辑
- 对 Meshtastic 固件项目中的 esp32c3_moonshine_travelers_3 变体进行了完整的工作逻辑分析。
- 该变体基于 ESP32-C3,使用 TCA9535PWR I²C IO 扩展器进行硬件扩展(矩阵键盘、电源管理、LoRa RST、振子、背光等)。
- 与 travelers(上一版本)的主要差异:新增 PIN_BUZZER (GPIO12)LoRa 功率从 RA-01SC-P(最大3dBm)改为 E22_400M33S(最大22dBm),新增 SX126X_RXEN (GPIO13)。
- 与 moonshine(基础版)差异:travelers_3 有 TCA9535 全套功能,moonshine 基础版无屏、无I2C、无GPS。
- 关键源码:src/input/TCA9535ButtonThread.cpp/.h 实现 I²C IO 扩展器的全部驱动逻辑。
- main.cpp 中早期 Boot 即拉高 POWER_ENWire.begin 后立即调用 tca9535PowerEn(true)),随后 setupModules 后才创建 TCA9535ButtonThread。
@@ -0,0 +1,78 @@
# 长期记忆 — Meshtastic 固件项目
## 项目基本信息
- 项目路径:`C:\Users\wuwen\Documents\prj\lora_meshtastic_project\code\firmware-2.7.15.567b8ea`
- 固件版本:2.7.15.567b8ea
- 当前开发变体:`esp32c3_moonshine_travelers_3`(位于 `variants/esp32c3/diy/esp32c3_moonshine_travelers_3/`
## esp32c3_moonshine 系列变体谱系
| 变体 | 屏幕 | GPS | TCA9535 | LoRa模组 | 蜂鸣器 | 振子 |
|------|------|-----|---------|----------|--------|------|
| esp32c3_moonshine | 无 | 无 | 无 | E22_400M33S | 无 | 无 |
| esp32c3_moonshine_mv | 有(SH1106) | 有 | 有 | RA-01SC-P(3dBm) | 无 | 有 |
| esp32c3_moonshine_travelers | 有(SH1106) | 有 | 有 | RA-01SC-P(3dBm) | 无 | 有 |
| esp32c3_moonshine_travelers_3 | 有(SH1106) | 有 | 有 | E22_400M33S(22dBm) | GPIO12 | 有 |
## esp32c3_moonshine_travelers_3 硬件引脚汇总
### ESP32-C3 直连引脚
- GPIO0: I2C_SCL(屏幕+TCA9535共用)
- GPIO1: I2C_SDA
- GPIO2: BATTERY_PINADC,分压比2.0x
- GPIO3: LORA_DIO1
- GPIO4: LORA_BUSY
- GPIO5: TCA9535_INT(下降沿,低有效)
- GPIO6: LORA_MISO
- GPIO7: LORA_MOSI
- GPIO8: LORA_CS
- GPIO9: BUTTON_PIN(短按=SELECT,长按功能禁用)
- GPIO10: LORA_SCK
- GPIO12: PIN_BUZZER / BUZZER_PIN
- GPIO13: SX126X_RXEN
- GPIO20: GPS_TXGPS RX端)
- GPIO21: GPS_RXGPS TX端)
### TCA9535 I²C IO扩展(地址0x20
- P0.0~P0.3: 矩阵键盘行输出(ROW0~ROW3
- P0.4~P0.7: 矩阵键盘列输入(COL0~COL3
- P1.0: 键盘背光(高电平点亮,5秒无操作自动熄灭)
- P1.1: CHARGE_DET输入(高电平=充电中)
- P1.2: POWER_EN输出(高电平=MOS维持供电)
- P1.3: POWER_BOOT输入(低电平有效,长按2秒关机)
- P1.4: LoRa RST输出(虚拟引脚号200
- P1.5: 状态指示灯(低电平点亮,500ms周期闪烁)
- P1.6: 振子VIBRATOR(高电平震动)
- P1.7: GPS_EN输出(高电平=GPS上电)
### LoRa模组(E22_400M33S / LLCC68 / SX126X兼容)
- LORA_RESET: 虚拟引脚200(通过TCA9535 P1.4控制)
- SX126X_DIO2_AS_RF_SWITCH: 启用
- SX126X_DIO3_TCXO_VOLTAGE: 1.8VTCXO可选)
## 关键代码逻辑
### 开机流程
1. 用户按住电源键 → MOS导通 → ESP32+TCA9535上电
2. main.cpp Wire.begin() 后立即调用 `tca9535PowerEn(true)` 锁住供电
3. setupModules() 后创建 TCA9535ButtonThread,调用 init()
4. init() 检查开机已确认,状态机进入RUNNING,触发300ms开机震动
### 关机流程
- runOnce() 检测 P1.3(POWER_BOOT),持续按住2秒 → 触发关机震动300ms → 发送SHUTDOWN事件
### 矩阵键盘扫描
- 有TCA9535_INT_PIN时:中断驱动(下降沿),20ms防抖
- 无中断时:50ms轮询
- 扫描:逐行拉低→读列状态→16位状态bitmap→边沿检测→派发InputEvent
### 4×4键盘映射(九宫格布局)
- key0~2=1~3key4~6=4~6key8~10=7~9
- key12=*key13=0key14=#
- key3=UPkey7=DOWNkey11=LEFTkey15=RIGHT
- GPIO9短按=SELECTP1.3短按=CANCEL
## 项目约定
- 变体文件路径:variants/esp32c3/diy/{变体名}/variant.h
- 自定义驱动放在 src/input/ 目录下
- 虚拟引脚号200用于TCA9535控制的LoRa RST