# 2026-03-30 日志 ## 编译环境搭建(esp32c3_moonshine_travelers) - Python 3.14.0 已预装(C:\Python314) - 安装 PlatformIO 6.1.19:`pip install platformio` - PlatformIO Scripts 路径:`C:\Users\wuwen\AppData\Roaming\Python\Python314\Scripts` - 已写入用户 PATH 永久生效(无需每次手动加) - 平台工具链 `espressif32@6.11.0`、`framework-arduinoespressif32`、`toolchain-riscv32-esp` 已存在(之前工程留下) - 固件目录:`code/firmware-2.7.15.567b8ea`,编译命令:`pio run -e esp32c3_moonshine_travelers` ## 遇到问题:Windows MAX_PATH 限制 - SparkFun ICM-20948 库解压时路径超过 260 字符 → `PackageException` - 根因:`examples/Arduino/Example10_DMP_FastMultipleSensors/` 路径过长 - 修复方案:需要管理员权限执行以下命令启用 Windows 长路径支持: ```powershell Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem" -Name "LongPathsEnabled" -Value 1 ``` - 后续:用户反映编译成功(Windows 长路径问题已自行解决) ## 调试:节点不发公钥/节点名字对端看不到 - **根本原因**:设备 Flash 中残留 `owner.is_licensed = true`(HamConfig 曾通过 App 下发并持久化) - **公钥不发**:`NodeInfoModule::allocReply()` 中 `is_licensed==true` 时主动清零公钥字段(Ham 法规要求) - **名字对端不可见**:`handleReceivedProtobuf()` 检查 `p.is_licensed != owner.is_licensed` 时直接丢包 - **解决**:擦除 Flash NVS 分区(`pio run -t erase`)后重烧,或通过 App 关闭 Licensed 开关 ## 修复:切换 role 后 NodeInfo/公钥仍不广播(CLIENT_HIDDEN 遗留问题) ### Bug 1:owner.role 不随 config.device.role 同步 - **位置**:`AdminModule.cpp` `handleSetConfig()` device_tag 分支 - **原因**:改 role 时只更新 `config.device.role`,`owner.role`(广播字段)从不更新 - **修复**:在 `installRoleDefaults()` 调用后加 `owner.role = config.device.role;` ### Bug 2:从 CLIENT_HIDDEN 切回 CLIENT 后广播间隔不恢复 - **位置**:`NodeDB.cpp` `installRoleDefaults()` - **原因**:CLIENT_HIDDEN 把 `node_info_broadcast_secs` 设为 `INT32_MAX`,切回 CLIENT 时没有对应的重置分支 - **修复**:新增 `CLIENT` / `CLIENT_MUTE` 分支,恢复 `default_node_info_broadcast_secs` 等默认值 ### 额外确认 - **公钥不生成的前置条件**:`config.lora.region == UNSET` 时 NodeDB::init() 跳过 PKI keygen;需先通过 App 设置 region 才会生成密钥对