From 87926e48a464d3e86b516f75519bf8958660933f Mon Sep 17 00:00:00 2001 From: Rdzleo Date: Tue, 21 Apr 2026 16:52:08 +0800 Subject: [PATCH] =?UTF-8?q?=E9=80=82=E9=85=8D=20OrangePi=20CM5=20Android?= =?UTF-8?q?=20=E5=BC=80=E5=8F=91=E6=9D=BF=20+=20=E4=BF=AE=E5=A4=8D=20ESP32?= =?UTF-8?q?=20=E5=86=B7=E5=90=AF=E5=8A=A8=E4=B8=8E=E7=A8=B3=E5=AE=9A?= =?UTF-8?q?=E6=80=A7=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 一、架构改造 1、双串口架构:Serial (USB-Serial-JTAG, USB2) 用于 Windows 调试日志, SerialLinux (UART0/CH343, USB1) 用于 Android 业务数据收发 2、用 #define SerialLinux Serial0 别名引用 Arduino core 自带对象, 避免自建 HardwareSerial(0) 导致 RX ring buffer 冲突、命令无响应 二、RFID 冷启动稳定性(核心修复) 1、新增 rc522HardResetRuntime():显式拉低拉高 RST 做标准硬件复位时序 2、setup 中 3 次重试初始化 + 读 VersionReg 校验(0x91/0x92 为合法) 3、TaskRFID 运行时每 5 秒健康检查,异常自动恢复 背景:冷启动 GPIO14 浮空 50% 读到 HIGH,库仅软复位失败 → 刷卡永远无效 参考 miguelbalboa/rfid Issue #229、#269、#125 三、数据完整性 1、serialPrintlnSafe:互斥锁 + flush 保护业务数据输出 2、卡号格式校验 (HA + 阿拉伯数字),非法数据不发送 3、命令末尾 trim 兼容 \r\n (CRLF) 和 \n (LF) 两种行尾符 四、命令接收(双向打通) 1、processCommand(cmd, Stream& resp):响应回到发送方串口 2、handleCommandFromStream:双串口独立缓冲,Windows 和 Android 都能下发命令 3、新增 RESET 软复位命令(设备封装后无法物理按 RST 时使用) 五、启动稳定性(防硬件冲击与虚假事件) 1、LED 开机全黑启动,避免 186 颗 WS2812 同时点亮产生 4.5A 瞬时电流 冲击电源导致刚初始化的 RC522 进入异常状态 2、按键任务 lastState 从硬编码改为读取实际 GPIO 电平作为初始值 避免 GPIO16/17/18 无上下拉浮空触发虚假 SO_WAKEUP/SO_BT 事件 六、性能优化 1、TaskRFID 从 Core 1 迁至 Core 0,与 WS2812 关中断窗口物理隔离 2、LED 刷新频率 30FPS 降至 20FPS,关中断时间减少 33% 3、RFID 认证失败后 delay 从 100ms 降至 30ms,提升刷卡响应速度 4、USB CDC TX 缓冲区扩容至 4KB,降低突发输出时的截断概率 七、新增文件 1、ESP32踩坑经验文档.md:记录 11 个踩坑点 + 修复方案(含 GitHub Issue 佐证) 2、01_HOLOMAIN_旧开发板代码.ino:旧开发板稳定版本代码存档 3、02_HOLOMAIN_香橙派CM5开发板代码.ino:香橙派 CM5 适配版本代码存档 4、docs/ESP32-S3-SCH-V1.4.pdf:ESP32-S3 核心板硬件原理图 Co-Authored-By: Claude Opus 4.7 (1M context) --- 01_HOLOMAIN_旧开发板代码.ino | 869 ++++++++++++++++++++++++++ 02_HOLOMAIN_香橙派CM5开发板代码.ino | 906 ++++++++++++++++++++++++++++ ESP32踩坑经验文档.md | 638 ++++++++++++++++++++ HOLOMAIN.ino | 448 +++++++++----- docs/ESP32-S3-SCH-V1.4.pdf | Bin 0 -> 957229 bytes 5 files changed, 2698 insertions(+), 163 deletions(-) create mode 100644 01_HOLOMAIN_旧开发板代码.ino create mode 100644 02_HOLOMAIN_香橙派CM5开发板代码.ino create mode 100644 ESP32踩坑经验文档.md create mode 100644 docs/ESP32-S3-SCH-V1.4.pdf diff --git a/01_HOLOMAIN_旧开发板代码.ino b/01_HOLOMAIN_旧开发板代码.ino new file mode 100644 index 0000000..2c786b0 --- /dev/null +++ b/01_HOLOMAIN_旧开发板代码.ino @@ -0,0 +1,869 @@ +#include +#include +#include +#include +#include + +// RFID引脚定义 +#define RFID_RST_PIN 14 // RC522 复位引脚 +#define RFID_SS_PIN 10 // RC522 CS/SDA引脚(SPI和I2C共用) +#define RFID_MISO_PIN 13 // MISO 引脚 +#define RFID_MOSI_PIN 12 // MOSI 引脚 +#define RFID_SCK_PIN 11 // SCK 引脚 + +// LED定义 +#define LED_PIN_1 4 // 1颗WS2812灯珠引脚 +#define LED_PIN_2 5 // 160颗WS2812灯带引脚(控制灯珠颜色) +#define LED_PIN_3 48 // 1颗WS2812灯珠引脚(新增) +#define LED_COUNT_1 1 // 1颗灯珠 +#define LED_COUNT_2 186 // 160颗灯带 +#define LED_COUNT_3 1 // 1颗灯珠(新增) + +// PWM定义 +#define PWM_PIN 6 // PWM输出(控制输出PWM功率) +#define PWM_CHANNEL 0 // PWM通道 +#define PWM_FREQ 1000 // PWM频率(Hz) +#define PWM_RESOLUTION 10 // PWM分辨率(位) +#define DEFAULT_DUTY 819 // 默认占空比(80%) + +// 按钮和输入引脚定义 +#define BTN0_PIN 15 // 按钮0引脚 +#define WAKEUP1_PIN 16 // 唤醒引脚1 +#define BTN1_PIN 17 // 按钮1引脚 +#define BTN2_PIN 18 // 按钮2引脚 + +// 任务句柄 +TaskHandle_t TaskRFID, TaskLED1, TaskLED2, TaskLED3, TaskPWM, TaskBTN0, TaskWAKEUP1, TaskBTN1, TaskBTN2; + +// 双串口架构: +// - Serial = USB-Serial-JTAG (USB2 口),连 Windows 做调试日志 +// - SerialLinux = UART0 (CH343/USB1 口),连 Linux 开发板接收业务数据 +// UART0 默认引脚:TX=GPIO43、RX=GPIO44(对应 CH343P 的 RXD/TXD) +HardwareSerial SerialLinux(0); + +// Serial 输出互斥锁:防止多任务并发写串口导致数据交错/截断 +SemaphoreHandle_t serialMutex = NULL; + +// 带互斥保护的双串口输出:同时发到 USB CDC (Windows) 和 UART0 (Linux) +// 调用方:RFID 任务发 SORC_xxx,按键任务发 SO_xxx +// 机制:1) 互斥锁避免多任务交错 2) 两个串口并发传输 3) flush 等待传输完成 +void serialPrintlnSafe(const String& msg) { + if (serialMutex && xSemaphoreTake(serialMutex, pdMS_TO_TICKS(100)) == pdTRUE) { + // ---- 发到 USB CDC (Windows 调试) ---- + // 等待 TX 缓冲区有足够空间,避免 USB CDC 缓冲区满导致截断(最多等 50ms) + size_t needed = msg.length() + 2; + uint32_t waitStart = millis(); + while ((size_t)Serial.availableForWrite() < needed && (millis() - waitStart) < 50) { + vTaskDelay(pdMS_TO_TICKS(2)); + } + Serial.println(msg); + Serial.flush(); + + // ---- 发到 UART0 (Linux 业务) ---- + // UART0 硬件有独立 128 字节 FIFO,115200 波特率下发送 12 字节约 1ms,几乎不阻塞 + SerialLinux.println(msg); + SerialLinux.flush(); + + xSemaphoreGive(serialMutex); + } else { + // 拿不到锁的降级路径(正常情况下几乎不触发) + Serial.println(msg); + SerialLinux.println(msg); + } +} + +// 全局变量 +MFRC522 rfid(RFID_SS_PIN, RFID_RST_PIN); // 创建RFID实例 +CRGB leds1[LED_COUNT_1]; // 1颗灯珠数组 +CRGB leds2[LED_COUNT_2]; // 160颗灯带数组 +CRGB leds3[LED_COUNT_3]; // 1颗灯珠数组(新增) +CRGB frozenLeds2[LED_COUNT_2]; // 保存冻结时的颜色数据(模式5专用) +uint8_t frozenBrightness = 255; // 保存冻结时的亮度值,用于计算相对亮度比例 + +String lastCardData = ""; // 上次读取的RFID卡数据 +int ledMode = 1; // 灯带模式,默认为1(白色) +int pwmDuty = DEFAULT_DUTY; // PWM占空比 +bool btn0State = HIGH; // 按钮0状态 +bool btn0LongPress = false; // 按钮0长按标志 +bool wakeup1State = LOW; // 唤醒引脚1状态 +bool btn1State = LOW; // 按钮1状态 +bool btn2State = LOW; // 按钮2状态 +int singleLedMode = 7; // 单颗LED模式,默认为7(白色) + +// 灯带动画全局变量 +static uint8_t rainbowHue = 0; +static int trainPos = 0; +static unsigned long lastUpdate = 0; +static const int TRAIN_LENGTH = 16; // 火车灯长度 +static int trainPhase = 0; // 火车阶段:0-正向出站,1-正向前进,2-正向进站,3-反向出站,4-反向前进,5-反向进站 +static const int VIRTUAL_LED_COUNT = LED_COUNT_2 + TRAIN_LENGTH; // 虚拟灯带长度 + + +// LED亮度线性映射表 (0~100 → 26~255) - 最小阈值10% +// 用于将用户输入的0-100%亮度值映射到实际的PWM值 +// 避免过低亮度导致LED完全不可见的问题 +const uint8_t brightnessMapLinear[101] = { + 0, 28, 31, 33, 36, 38, 41, 43, 46, 48, // 0-9 + 51, 54, 56, 59, 61, 64, 66, 69, 71, 74, // 10-19 + 77, 79, 82, 84, 87, 89, 92, 94, 97, 99, // 20-29 + 102, 105, 107, 110, 112, 115, 117, 120, 122, 125, // 30-39 + 128, 130, 133, 135, 138, 140, 143, 145, 148, 150, // 40-49 + 153, 156, 158, 161, 163, 166, 168, 171, 173, 176, // 50-59 + 179, 181, 184, 186, 189, 191, 194, 196, 199, 201, // 60-69 + 204, 207, 209, 212, 214, 217, 219, 222, 224, 227, // 70-79 + 230, 232, 235, 237, 240, 242, 245, 247, 250, 252, // 80-89 + 253, 254, 254, 254, 255, 255, 255, 255, 255, 255, // 90-99 + 255 // 100% +}; + + + + + + + +// 全局选择映射表 +const uint8_t* brightnessMap = brightnessMapLinear; + +// LED2亮度控制(0-255) +// 用于控制LED灯带的整体亮度,影响模式1、2、4和5 +// 模式3使用独立的呼吸算法,基于此值计算动态亮度范围 +uint8_t led2Brightness = 102; // 默认40%左右(102/255≈40%) + + + +// 单颗LED颜色数组 +CRGB singleLedColors[8] = { + CRGB::Black, // 0: 熄灭 + CRGB::Blue, // 1: 蓝色 + CRGB::Green, // 2: 绿色 + CRGB::Orange, // 3: 橙色 + CRGB::Red, // 4: 红色 + CRGB::Purple, // 5: 紫色 + CRGB::Yellow, // 6: 黄色 + CRGB::White // 7: 白色 +}; + +// RFID读取任务 +void TaskRFIDcode(void* pvParameters) { + for (;;) { + // 寻找新卡片 + if (!rfid.PICC_IsNewCardPresent()) { + delay(10); + continue; + } + + // 验证NUID是否可读 + if (!rfid.PICC_ReadCardSerial()) { + delay(10); + continue; + } + + // 读取卡片数据(用户数据区) + String cardData = ""; + MFRC522::MIFARE_Key key; + + // 准备认证密钥 + for (byte i = 0; i < 6; i++) key.keyByte[i] = 0xFF; + + // 选择卡片 + MFRC522::StatusCode status; + status = rfid.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, 4, &key, &(rfid.uid)); + if (status != MFRC522::STATUS_OK) { + // 调试日志用普通 Serial.println:失败频率较高时,避免 flush 阻塞拖慢 RFID 响应 + // 偶尔截断可接受(Linux 端用正则 ^SORC_HA\d+$ 过滤业务数据即可) + Serial.println(String("Authentication failed: ") + rfid.GetStatusCodeName(status)); + rfid.PICC_HaltA(); + rfid.PCD_StopCrypto1(); + delay(30); // 从 100ms 降到 30ms,提升刷卡响应速度 + continue; + } + + // 读取数据块 + byte buffer[18]; + byte size = sizeof(buffer); + status = rfid.MIFARE_Read(4, buffer, &size); + if (status != MFRC522::STATUS_OK) { + Serial.println(String("Reading failed: ") + rfid.GetStatusCodeName(status)); + rfid.PICC_HaltA(); + rfid.PCD_StopCrypto1(); + delay(30); // 从 100ms 降到 30ms + continue; + } + + // 转换为ASCII字符串 + for (byte i = 0; i < 16; i++) { + if (buffer[i] >= 32 && buffer[i] <= 126) { // 可打印ASCII字符 + cardData += (char)buffer[i]; + } + } + + // 移除空白字符 + cardData.trim(); + + // 卡片数据格式校验:规则 "HA" + 阿拉伯数字 + // 过滤掉卡片读取异常或数据损坏的情况,避免发送无效数据给 Linux + auto isValidCardData = [](const String& d) -> bool { + if (d.length() < 3) return false; // 至少 "HA" + 1 位数字 + if (!d.startsWith("HA")) return false; // 必须以 HA 开头 + for (size_t i = 2; i < d.length(); i++) { + if (!isdigit(d[i])) return false; // HA 后面必须全是数字 + } + return true; + }; + + // 3 秒去重窗口:同一张卡 3 秒内只发送一次,超过后允许重发 + // 切换到不同卡立即发送 + static String lastSentCard = ""; + static unsigned long lastSentTime = 0; + const unsigned long DUPLICATE_WINDOW_MS = 3000; + + if (!cardData.isEmpty() && isValidCardData(cardData)) { + unsigned long now = millis(); + bool isDuplicate = (cardData == lastSentCard) && (now - lastSentTime < DUPLICATE_WINDOW_MS); + if (!isDuplicate) { + serialPrintlnSafe("SORC_" + cardData); + lastSentCard = cardData; + lastSentTime = now; + } + } + + // 使放置在读卡区的IC卡进入休眠状态,不再重复读卡 + rfid.PICC_HaltA(); + + // 停止加密PCD + rfid.PCD_StopCrypto1(); + + delay(100); + } +} + +// 注意:以下两个函数已被TaskLEDUnifiedCode替代,保留仅供参考 +// 实际运行中不会被调用,因为setup()中没有创建对应的任务 + +// LED1控制任务(已废弃,由TaskLEDUnifiedCode统一处理) +void TaskLED1code(void* pvParameters) { + // 此函数已被废弃,不再使用 + // LED1的控制已集成到TaskLEDUnifiedCode中 + vTaskDelete(NULL); // 如果意外创建了此任务,立即删除 +} + +// LED3控制任务(已废弃,由TaskLEDUnifiedCode统一处理) +void TaskLED3code(void* pvParameters) { + // 此函数已被废弃,不再使用 + // LED3的控制已集成到TaskLEDUnifiedCode中 + vTaskDelete(NULL); // 如果意外创建了此任务,立即删除 +} + +// PWM控制任务 +void TaskPWMcode(void* pvParameters) { + for (;;) { + // 设置PWM占空比 + ledc_set_duty(LEDC_LOW_SPEED_MODE, (ledc_channel_t)PWM_CHANNEL, pwmDuty); + ledc_update_duty(LEDC_LOW_SPEED_MODE, (ledc_channel_t)PWM_CHANNEL); + + delay(100); + } +} + +// 按钮0检测任务 +void TaskBTN0code(void* pvParameters) { + static unsigned long pressStartTime = 0; + static bool lastState = HIGH; + + for (;;) { + bool currentState = digitalRead(BTN0_PIN); + + // 检测下降沿(按下) + if (lastState == HIGH && currentState == LOW) { + pressStartTime = millis(); + btn0State = LOW; + serialPrintlnSafe("SO_BT0_HIGH"); + btn0LongPress = false; + } + // 检测上升沿(释放) + else if (lastState == LOW && currentState == HIGH) { + btn0State = HIGH; + serialPrintlnSafe("SO_BT0_LOW"); + btn0LongPress = false; + } + // 检测长按 + else if (currentState == LOW && millis() - pressStartTime >= 2000 && !btn0LongPress) { + btn0LongPress = true; + serialPrintlnSafe("SO_BT0_HIGHL"); + } + + lastState = currentState; + delay(10); + } +} + +// WAKEUP1检测任务 +void TaskWAKEUP1code(void* pvParameters) { + static bool lastState = LOW; + + for (;;) { + bool currentState = digitalRead(WAKEUP1_PIN); + + // 检测上升沿 + if (lastState == LOW && currentState == HIGH) { + wakeup1State = HIGH; + serialPrintlnSafe("SO_WAKEUP1"); + } + // 检测下降沿 + else if (lastState == HIGH && currentState == LOW) { + wakeup1State = LOW; + serialPrintlnSafe("SO_WAKEUP0"); + } + + lastState = currentState; + delay(10); + } +} + +// 按钮1检测任务 +void TaskBTN1code(void* pvParameters) { + static bool lastState = LOW; + + for (;;) { + bool currentState = digitalRead(BTN1_PIN); + + // 检测上升沿 + if (lastState == LOW && currentState == HIGH) { + btn1State = HIGH; + serialPrintlnSafe("SO_BT1_HIGH"); + } + // 检测下降沿 + else if (lastState == HIGH && currentState == LOW) { + btn1State = LOW; + serialPrintlnSafe("SO_BT1_LOW"); + } + + lastState = currentState; + delay(10); + } +} + +// 按钮2检测任务 +void TaskBTN2code(void* pvParameters) { + static bool lastState = LOW; + + for (;;) { + bool currentState = digitalRead(BTN2_PIN); + + // 检测上升沿 + if (lastState == LOW && currentState == HIGH) { + btn2State = HIGH; + serialPrintlnSafe("SO_BT2_HIGH"); + } + // 检测下降沿 + else if (lastState == HIGH && currentState == LOW) { + btn2State = LOW; + serialPrintlnSafe("SO_BT2_LOW"); + } + + lastState = currentState; + delay(10); + } +} + +// 串口命令处理 +void handleSerialCommand() { + static String command = ""; + + while (Serial.available()) { + // 先检查命令长度(新增的防护代码) + if (command.length() > 64) { + Serial.println("错误: 命令过长(最大64字符)"); + command = ""; // 清空当前命令 + while (Serial.available()) Serial.read(); // 清空串口缓冲区 + continue; + } + + char c = Serial.read(); + if (c == '\n') { + // 去掉命令末尾可能的 \r,兼容不同行尾符设置(\n 或 \r\n) + command.trim(); + // 处理命令 + if (command.startsWith("MO_LED_")) { + String modeStr = command.substring(7); + int newMode = modeStr.toInt(); + + // 控制单颗LED + if (newMode >= 0 && newMode <= 7) { + singleLedMode = newMode; + Serial.print("Single LED set to mode: "); + Serial.println(newMode); + } else { + Serial.println("Invalid single LED mode command"); + } + } else if (command.startsWith("MO_LEDN_")) { + String modeStr = command.substring(8); + int newMode = modeStr.toInt(); + + // 控制灯带(只有亮度不为0时才允许) + if (newMode >= 0 && newMode <= 5) { + if (led2Brightness == 0) { + Serial.println("当前亮度为0,请先将亮度调整至0以上再切换显示模式!"); + } else { + ledMode = newMode; + // 重置火车灯状态 + if (newMode == 4) { + trainPos = -TRAIN_LENGTH; + trainPhase = 0; + rainbowHue = random8(); + } + + // 新增:切换到模式5时,复制当前LED2状态和亮度 + if (newMode == 5) { + memcpy(frozenLeds2, leds2, sizeof(leds2)); + frozenBrightness = led2Brightness; // 保存冻结时的亮度 + } + + Serial.print("LED strip set to mode: "); + Serial.println(newMode); + } + } else { + Serial.println("Invalid LED strip mode command"); + } + } else if (command.startsWith("MO_PWM_")) { + String dutyStr = command.substring(7); + int newDuty = dutyStr.toInt(); + + // 检查PWM百分比 + if (newDuty == 1) { + pwmDuty = 1023; // 100% + } else if (newDuty == 0 || newDuty == 20 || newDuty == 40 || newDuty == 60 || newDuty == 80) { + pwmDuty = (newDuty * 1023) / 100; // 转换为实际占空比 + } else { + Serial.println("Invalid PWM command"); + } + + Serial.print("PWM set to: "); + Serial.print((pwmDuty * 100) / 1023); + Serial.println("%"); + } + + else if (command.startsWith("MO_BRI_")) { + // 提取亮度参数(跳过"MO_BRI_"前缀) + String levelStr = command.substring(7); + levelStr.trim(); + command = ""; // 清空命令缓冲区 + + // 空参数检查 + if (levelStr.length() == 0) { + Serial.println("错误: 缺少亮度值"); + return; // 终止处理 + } + + // 严格数字验证(拒绝非数字字符) + bool isNumeric = true; + for (char c : levelStr) { + if (!isdigit(c)) { + isNumeric = false; + break; // 发现非数字立即退出 + } + } + + // 非数字错误处理 + if (!isNumeric) { + Serial.println("错误: 亮度值必须为整数"); + return; + } + + // 转换为整数并验证范围 + int level = levelStr.toInt(); + if (level >= 0 && level <= 100) { + // 更新亮度值(映射到PWM范围) + led2Brightness = brightnessMap[level]; // 使用预定义映射表 + Serial.print("LED亮度: "); + Serial.print(level); + Serial.println("%"); + + // // 亮度为0时输出警告 + // if (level == 0) { + // Serial.println("亮度已设置为0,所有灯光将熄灭!"); + // } + } else { + Serial.println("错误: 亮度值需在0-100之间"); + } + command = ""; // 清空命令 + } + // 软复位命令:串口发送 "RESET" 触发 ESP32 重启 + else if (command == "RESET") { + Serial.println("System resetting..."); + Serial.flush(); // 等待串口数据发送完成 + delay(100); // 留时间让串口打印完 + ESP.restart(); // 触发软复位 + } + + command = ""; // 清空命令 + } else { + // 累积非换行符字符 + command += c; + } + } +} + + + + +// 统一LED控制任务(防闪烁优化版本) +// 集中管理LED1(单颗)、LED2(灯带)、LED3(强制关闭)的显示逻辑 +// 优化特性: +// 1. 30FPS稳定更新频率,防止闪烁 +// 2. 修复模式5的双重亮度衰减问题 +// 3. 统一亮度处理机制 +// 4. 内存优化,减少不必要的数据拷贝 +// 5. 防闪烁机制,确保LED显示稳定 +void TaskLEDUnifiedCode(void* pvParameters) { + static unsigned long lastLEDUpdate = 0; + // 20FPS 更新频率:兼顾视觉流畅度和 RFID 稳定性 + // 每秒 20 次 WS2812 传输(每次 ~5.6ms 关中断),相比 30FPS 减少 33% 干扰窗口 + const unsigned long LED_UPDATE_INTERVAL = 50; + + for (;;) { + unsigned long currentTime = millis(); + + // 控制更新频率,避免过度占用CPU和闪烁问题 + if (currentTime - lastLEDUpdate < LED_UPDATE_INTERVAL) { + delay(5); // 增加延时,确保任务调度稳定 + continue; + } + lastLEDUpdate = currentTime; + + // ---- LED1 控制(单颗 LED)---- + if (singleLedMode >= 0 && singleLedMode <= 7) { + leds1[0] = singleLedColors[singleLedMode]; + } else { + leds1[0] = CRGB::Blue; + } + + // ---- LED3 控制(熄灭)---- + leds3[0] = CRGB::Black; + + // ---- LED2 控制(灯带)---- + switch (ledMode) { + case 0: // 模式0:全部熄灭,关闭所有LED灯珠 + fill_solid(leds2, LED_COUNT_2, CRGB::Black); + break; + + case 1: // 模式1:纯白色静态光,亮度可通过led2Brightness调节 + fill_solid(leds2, LED_COUNT_2, CHSV(0, 0, led2Brightness)); + break; + + case 2: // 模式2:彩虹流水灯,颜色沿灯带流动,速度和亮度可调 + for (int i = 0; i < LED_COUNT_2; i++) { + leds2[i] = CHSV(rainbowHue + i * 256 / LED_COUNT_2, 255, led2Brightness); + } + rainbowHue++; + break; + case 3: // 模式3:彩虹呼吸灯(优化版本),缓慢变色配合呼吸效果 + { + static unsigned long lastHueUpdate = 0; + static unsigned long lastBreathUpdate = 0; + static uint8_t breathingHue = 0; + static uint8_t breathPhase = 0; + + unsigned long currentTime = millis(); + + // 每300ms更新一次色相,实现非常缓慢的颜色变化 + if (currentTime - lastHueUpdate > 300) { + breathingHue += 1; + lastHueUpdate = currentTime; + } + + // 每30ms更新一次呼吸相位,控制亮度变化节奏 + if (currentTime - lastBreathUpdate > 30) { + breathPhase += 2; + lastBreathUpdate = currentTime; + } + + // 计算呼吸亮度:基于led2Brightness的60%-100%范围,避免过暗 + uint8_t minBrightness = led2Brightness * 60 / 100; + uint8_t maxBrightness = led2Brightness; + uint8_t breathValue = map(sin8(breathPhase), 0, 255, minBrightness, maxBrightness); + + for(int i = 0; i < LED_COUNT_2; i++) { + leds2[i] = CHSV(breathingHue, 200, breathValue); + } + } + break; + + + case 4: // 模式4:彩虹火车灯,模拟火车往返运行的动态效果 + if (millis() - lastUpdate > 30) { // 30ms更新间隔,控制火车移动速度 + lastUpdate = millis(); + fill_solid(leds2, LED_COUNT_2, CRGB::Black); + + switch (trainPhase) { + case 0: // 阶段0:正向出站,火车从起点逐渐显现 + for (int i = 0; i < TRAIN_LENGTH; i++) { + int pos = trainPos + i; + if (pos >= 0 && pos < LED_COUNT_2) { + uint8_t hue = rainbowHue + (i * 256 / TRAIN_LENGTH); + leds2[pos] = CHSV(hue, 255, led2Brightness); + } + } + trainPos++; + if (trainPos >= 0) { + trainPhase = 1; // 切换到正向前进阶段 + trainPos = 0; + } + break; + + case 1: // 阶段1:正向前进,火车完整显示并向终点移动 + for (int i = 0; i < TRAIN_LENGTH; i++) { + int pos = trainPos + i; + if (pos >= 0 && pos < LED_COUNT_2) { + uint8_t hue = rainbowHue + (i * 256 / TRAIN_LENGTH); + leds2[pos] = CHSV(hue, 255, led2Brightness); + } + } + trainPos++; + if (trainPos >= LED_COUNT_2 - TRAIN_LENGTH) { + trainPhase = 2; // 切换到正向进站阶段 + trainPos = LED_COUNT_2 - TRAIN_LENGTH; + } + break; + + case 2: // 阶段2:正向进站,火车从尾部开始消失 + for (int i = 0; i < TRAIN_LENGTH; i++) { + int displayPos = LED_COUNT_2 - 1 - i; + if (displayPos >= trainPos) { + uint8_t hue = rainbowHue + (i * 256 / TRAIN_LENGTH); + leds2[displayPos] = CHSV(hue, 255, led2Brightness); + } + } + trainPos++; + if (trainPos >= LED_COUNT_2) { + trainPhase = 3; // 切换到反向出站阶段 + trainPos = 0; + rainbowHue += 64; // 改变彩虹颜色,增加视觉变化 + } + break; + + case 3: // 阶段3:反向出站,火车从终点逐渐显现 + for (int i = 0; i < trainPos + 1; i++) { + int pos = LED_COUNT_2 - 1 - i; + if (pos >= 0) { + uint8_t hue = rainbowHue + ((TRAIN_LENGTH - 1 - i) * 256 / TRAIN_LENGTH); + leds2[pos] = CHSV(hue, 255, led2Brightness); + } + } + trainPos++; + if (trainPos >= TRAIN_LENGTH) { + trainPhase = 4; // 切换到反向前进阶段 + trainPos = TRAIN_LENGTH; + } + break; + + case 4: // 阶段4:反向前进,火车完整显示并向起点移动 + for (int i = 0; i < TRAIN_LENGTH; i++) { + int pos = LED_COUNT_2 - trainPos + i; + if (pos >= 0 && pos < LED_COUNT_2) { + uint8_t hue = rainbowHue + ((TRAIN_LENGTH - 1 - i) * 256 / TRAIN_LENGTH); + leds2[pos] = CHSV(hue, 255, led2Brightness); + } + } + trainPos++; + if (trainPos >= LED_COUNT_2) { + trainPhase = 5; // 切换到反向进站阶段 + trainPos = 0; + } + break; + + case 5: // 阶段5:反向进站,火车从头部开始消失 + for (int i = 0; i < TRAIN_LENGTH - trainPos; i++) { + int pos = i; + if (pos < LED_COUNT_2) { + uint8_t hue = rainbowHue + ((TRAIN_LENGTH - 1 - i) * 256 / TRAIN_LENGTH); + leds2[pos] = CHSV(hue, 255, led2Brightness); + } + } + trainPos++; + if (trainPos >= TRAIN_LENGTH) { + trainPhase = 0; // 重新开始正向出站,形成循环 + trainPos = -TRAIN_LENGTH; + rainbowHue += 64; // 再次改变彩虹颜色 + } + break; + } + } + break; + + case 5: // 模式5:冻结当前灯效,保持切换时的图像但允许调节亮度(内存优化版本) + if (led2Brightness == 0) { + fill_solid(leds2, LED_COUNT_2, CRGB::Black); // 亮度为0时完全熄灭 + } else { + // 计算相对亮度比例,避免双重衰减问题 + uint16_t brightnessRatio = (uint16_t)led2Brightness * 255 / frozenBrightness; + if (brightnessRatio > 255) brightnessRatio = 255; + + // 直接计算并设置像素颜色,内存优化,避免使用memcpy + for (int i = 0; i < LED_COUNT_2; i++) { + leds2[i].r = (frozenLeds2[i].r * brightnessRatio) >> 8; + leds2[i].g = (frozenLeds2[i].g * brightnessRatio) >> 8; + leds2[i].b = (frozenLeds2[i].b * brightnessRatio) >> 8; + } + } + break; + } + + // ---- 最终统一刷新LED ---- + // 添加FastLED刷新保护,确保数据稳定后再显示 + FastLED.show(); + + // ---- 稳定的延时机制 ---- + // 使用固定延时确保LED显示稳定,避免闪烁 + delay(10); // 10ms延时,确保LED数据传输完成 + } +} + + +void setup() { + // 初始化 USB CDC 串口(Windows 调试) + // 增大 TX 缓冲区到 4KB:防止多任务并发写串口时 USB CDC 默认缓冲区溢出导致数据截断 + Serial.setTxBufferSize(4096); + Serial.begin(115200); + + // 初始化 UART0(CH343/USB1 → Linux 业务通讯) + // 默认引脚:TX=GPIO43、RX=GPIO44,波特率与 Linux 端保持一致 + SerialLinux.begin(115200); + + // 创建 Serial 输出互斥锁 + serialMutex = xSemaphoreCreateMutex(); + + Serial.println("System starting..."); + SerialLinux.println("System starting..."); + + // 初始化SPI总线 + SPI.begin(RFID_SCK_PIN, RFID_MISO_PIN, RFID_MOSI_PIN, RFID_SS_PIN); + + // 初始化RFID + rfid.PCD_Init(); + Serial.println("RFID initialized."); + + // 初始化LED + FastLED.addLeds(leds1, LED_COUNT_1); + FastLED.addLeds(leds2, LED_COUNT_2); + FastLED.addLeds(leds3, LED_COUNT_3); // 新增LED3 + + // 初始化LED状态 + fill_solid(leds1, LED_COUNT_1, singleLedColors[singleLedMode]); + fill_solid(leds2, LED_COUNT_2, CHSV(0, 0, led2Brightness)); // 初始化白色 + fill_solid(leds3, LED_COUNT_3, CRGB::Black); // 强制GPIO48的灯珠熄灭 + FastLED.show(); + Serial.println("LED initialized."); + + // 初始化PWM + // 创建LED控制器配置 + ledc_timer_config_t ledc_timer = { + .speed_mode = LEDC_LOW_SPEED_MODE, + .duty_resolution = (ledc_timer_bit_t)PWM_RESOLUTION, + .timer_num = (ledc_timer_t)PWM_CHANNEL, + .freq_hz = PWM_FREQ, + .clk_cfg = LEDC_AUTO_CLK + }; + ledc_timer_config(&ledc_timer); + + // 创建LED通道配置 + ledc_channel_config_t ledc_channel = { + .gpio_num = PWM_PIN, + .speed_mode = LEDC_LOW_SPEED_MODE, + .channel = (ledc_channel_t)PWM_CHANNEL, + .intr_type = LEDC_INTR_DISABLE, + .timer_sel = (ledc_timer_t)PWM_CHANNEL, + .duty = 0, + .hpoint = 0 + }; + ledc_channel_config(&ledc_channel); + + // 设置初始占空比 + ledc_set_duty(LEDC_LOW_SPEED_MODE, (ledc_channel_t)PWM_CHANNEL, pwmDuty); + ledc_update_duty(LEDC_LOW_SPEED_MODE, (ledc_channel_t)PWM_CHANNEL); + + Serial.println("PWM initialized."); + + // 初始化输入引脚 + pinMode(BTN0_PIN, INPUT_PULLUP); + pinMode(WAKEUP1_PIN, INPUT); + pinMode(BTN1_PIN, INPUT); + pinMode(BTN2_PIN, INPUT); + Serial.println("Inputs initialized."); + + // 创建任务 + // TaskRFID 放 Core 0:避开 Core 1 上 WS2812 bit-banging 关中断窗口,SPI 通讯更稳定 + xTaskCreatePinnedToCore( + TaskRFIDcode, /* 任务函数 */ + "TaskRFID", /* 任务名称 */ + 4096, /* 任务栈大小 */ + NULL, /* 传递给任务的参数 */ + 2, /* 任务优先级(提高到 2,避免被按键任务频繁抢占)*/ + &TaskRFID, /* 任务句柄 */ + 0); /* 运行在核心0上(与 LED 任务物理隔离)*/ + + xTaskCreatePinnedToCore( + TaskLEDUnifiedCode, + "TaskLEDUnified", + 8192, // 建议栈大一点 + NULL, + 3, // 提高优先级,确保LED更新不被其他任务干扰 + NULL, + 1); + + xTaskCreatePinnedToCore( + TaskPWMcode, + "TaskPWM", + 1024, + NULL, + 1, + &TaskPWM, + 1); + + xTaskCreatePinnedToCore( + TaskBTN0code, + "TaskBTN0", + 2048, + NULL, + 1, + &TaskBTN0, + 0); + + xTaskCreatePinnedToCore( + TaskWAKEUP1code, + "TaskWAKEUP1", + 2048, + NULL, + 1, + &TaskWAKEUP1, + 0); + + xTaskCreatePinnedToCore( + TaskBTN1code, + "TaskBTN1", + 2048, + NULL, + 1, + &TaskBTN1, + 0); + + xTaskCreatePinnedToCore( + TaskBTN2code, + "TaskBTN2", + 2048, + NULL, + 1, + &TaskBTN2, + 0); + + Serial.println("Tasks created. System ready."); +} + +void loop() { + // 处理串口命令 + handleSerialCommand(); + + // 让出CPU时间 + delay(1); +} \ No newline at end of file diff --git a/02_HOLOMAIN_香橙派CM5开发板代码.ino b/02_HOLOMAIN_香橙派CM5开发板代码.ino new file mode 100644 index 0000000..a44bf10 --- /dev/null +++ b/02_HOLOMAIN_香橙派CM5开发板代码.ino @@ -0,0 +1,906 @@ +#include +#include +#include +#include +#include + +// RFID引脚定义 +#define RFID_RST_PIN 14 // RC522 复位引脚 +#define RFID_SS_PIN 10 // RC522 CS/SDA引脚(SPI和I2C共用) +#define RFID_MISO_PIN 13 // MISO 引脚 +#define RFID_MOSI_PIN 12 // MOSI 引脚 +#define RFID_SCK_PIN 11 // SCK 引脚 + +// LED定义 +#define LED_PIN_1 4 // 1颗WS2812灯珠引脚 +#define LED_PIN_2 5 // 160颗WS2812灯带引脚(控制灯珠颜色) +#define LED_PIN_3 48 // 1颗WS2812灯珠引脚(新增) +#define LED_COUNT_1 1 // 1颗灯珠 +#define LED_COUNT_2 186 // 160颗灯带 +#define LED_COUNT_3 1 // 1颗灯珠(新增) + +// PWM定义 +#define PWM_PIN 6 // PWM输出(控制输出PWM功率) +#define PWM_CHANNEL 0 // PWM通道 +#define PWM_FREQ 1000 // PWM频率(Hz) +#define PWM_RESOLUTION 10 // PWM分辨率(位) +#define DEFAULT_DUTY 819 // 默认占空比(80%) + +// 按钮和输入引脚定义 +#define BTN0_PIN 15 // 按钮0引脚 +#define WAKEUP1_PIN 16 // 唤醒引脚1 +#define BTN1_PIN 17 // 按钮1引脚 +#define BTN2_PIN 18 // 按钮2引脚 + +// 任务句柄 +TaskHandle_t TaskRFID, TaskLED1, TaskLED2, TaskLED3, TaskPWM, TaskBTN0, TaskWAKEUP1, TaskBTN1, TaskBTN2; + +// 双串口架构: +// - Serial = USB-Serial-JTAG (USB2 口),连 Windows 做调试日志 +// - SerialLinux = UART0 (CH343/USB1 口),连 Android 开发板收发业务数据 +// UART0 默认引脚:TX=GPIO43、RX=GPIO44(对应 CH343P 的 RXD/TXD) +// +// ⚠️ 重要:必须用 #define 别名引用 Arduino core 自带的 Serial0 对象 +// 不能自己创建 HardwareSerial(0),否则 Arduino core 的 UART0 RX 中断会把 +// 数据放进 Serial0 的 ring buffer,而自建对象的 available() 读不到 → 命令无响应 +#define SerialLinux Serial0 + +// Serial 输出互斥锁:防止多任务并发写串口导致数据交错/截断 +SemaphoreHandle_t serialMutex = NULL; + +// 业务数据输出:只发到 UART0 (给 Android 开发板) +// 调用方:RFID 任务发 SORC_xxx,按键任务发 SO_xxx +// 为什么不发 Serial (USB CDC): +// 1. 生产场景只连 Android,Windows 不连,Serial 写入+flush 在无 host 时可能阻塞 +// 2. 阻塞会拖慢 RFID 响应(之前刷卡不灵敏的潜在原因之一) +// 3. UART0 是广播式通讯,无 host 也能正常写入 FIFO,不阻塞 +// 互斥锁保留:虽然只发一个串口,但防止多任务并发调用时缓冲混乱 +void serialPrintlnSafe(const String& msg) { + if (serialMutex && xSemaphoreTake(serialMutex, pdMS_TO_TICKS(100)) == pdTRUE) { + SerialLinux.println(msg); + SerialLinux.flush(); // UART0 硬件 FIFO 128 字节,115200 波特率约 1ms 完成 + xSemaphoreGive(serialMutex); + } else { + // 降级路径:拿不到锁(极少发生) + SerialLinux.println(msg); + } +} + +// 全局变量 +MFRC522 rfid(RFID_SS_PIN, RFID_RST_PIN); // 创建RFID实例 +CRGB leds1[LED_COUNT_1]; // 1颗灯珠数组 +CRGB leds2[LED_COUNT_2]; // 160颗灯带数组 +CRGB leds3[LED_COUNT_3]; // 1颗灯珠数组(新增) +CRGB frozenLeds2[LED_COUNT_2]; // 保存冻结时的颜色数据(模式5专用) +uint8_t frozenBrightness = 255; // 保存冻结时的亮度值,用于计算相对亮度比例 + +String lastCardData = ""; // 上次读取的RFID卡数据 +int ledMode = 1; // 灯带模式,默认为1(白色) +int pwmDuty = DEFAULT_DUTY; // PWM占空比 +bool btn0State = HIGH; // 按钮0状态 +bool btn0LongPress = false; // 按钮0长按标志 +bool wakeup1State = LOW; // 唤醒引脚1状态 +bool btn1State = LOW; // 按钮1状态 +bool btn2State = LOW; // 按钮2状态 +int singleLedMode = 7; // 单颗LED模式,默认为7(白色) + +// 灯带动画全局变量 +static uint8_t rainbowHue = 0; +static int trainPos = 0; +static unsigned long lastUpdate = 0; +static const int TRAIN_LENGTH = 16; // 火车灯长度 +static int trainPhase = 0; // 火车阶段:0-正向出站,1-正向前进,2-正向进站,3-反向出站,4-反向前进,5-反向进站 +static const int VIRTUAL_LED_COUNT = LED_COUNT_2 + TRAIN_LENGTH; // 虚拟灯带长度 + + +// LED亮度线性映射表 (0~100 → 26~255) - 最小阈值10% +// 用于将用户输入的0-100%亮度值映射到实际的PWM值 +// 避免过低亮度导致LED完全不可见的问题 +const uint8_t brightnessMapLinear[101] = { + 0, 28, 31, 33, 36, 38, 41, 43, 46, 48, // 0-9 + 51, 54, 56, 59, 61, 64, 66, 69, 71, 74, // 10-19 + 77, 79, 82, 84, 87, 89, 92, 94, 97, 99, // 20-29 + 102, 105, 107, 110, 112, 115, 117, 120, 122, 125, // 30-39 + 128, 130, 133, 135, 138, 140, 143, 145, 148, 150, // 40-49 + 153, 156, 158, 161, 163, 166, 168, 171, 173, 176, // 50-59 + 179, 181, 184, 186, 189, 191, 194, 196, 199, 201, // 60-69 + 204, 207, 209, 212, 214, 217, 219, 222, 224, 227, // 70-79 + 230, 232, 235, 237, 240, 242, 245, 247, 250, 252, // 80-89 + 253, 254, 254, 254, 255, 255, 255, 255, 255, 255, // 90-99 + 255 // 100% +}; + + + + + + + +// 全局选择映射表 +const uint8_t* brightnessMap = brightnessMapLinear; + +// LED2亮度控制(0-255) +// 用于控制LED灯带的整体亮度,影响模式1、2、4和5 +// 模式3使用独立的呼吸算法,基于此值计算动态亮度范围 +uint8_t led2Brightness = 102; // 默认40%左右(102/255≈40%) + + + +// 单颗LED颜色数组 +CRGB singleLedColors[8] = { + CRGB::Black, // 0: 熄灭 + CRGB::Blue, // 1: 蓝色 + CRGB::Green, // 2: 绿色 + CRGB::Orange, // 3: 橙色 + CRGB::Red, // 4: 红色 + CRGB::Purple, // 5: 紫色 + CRGB::Yellow, // 6: 黄色 + CRGB::White // 7: 白色 +}; + +// RC522 硬件复位(运行时调用,不依赖 MFRC522 库的 RST 自动判断) +// 用于 setup 初始化和运行时检测到 RC522 异常时恢复 +void rc522HardResetRuntime() { + pinMode(RFID_RST_PIN, OUTPUT); + digitalWrite(RFID_RST_PIN, LOW); + delay(10); + digitalWrite(RFID_RST_PIN, HIGH); + delay(50); +} + +// RFID读取任务 +void TaskRFIDcode(void* pvParameters) { + // 运行时健康检查:每 5 秒读一次 VersionReg,检测到异常自动恢复 + // 防止运行过程中 RC522 因电源波动、WS2812 大电流干扰等原因进入异常状态 + static uint32_t lastHealthCheck = 0; + const uint32_t HEALTH_CHECK_INTERVAL_MS = 5000; + + for (;;) { + // 运行时健康检查(和下面的轮询并行) + uint32_t now = millis(); + if (now - lastHealthCheck > HEALTH_CHECK_INTERVAL_MS) { + lastHealthCheck = now; + byte version = rfid.PCD_ReadRegister(MFRC522::VersionReg); + if (version != 0x91 && version != 0x92) { + // 通讯异常,自动恢复 + Serial.print("RC522 health check failed (VersionReg=0x"); + Serial.print(version, HEX); + Serial.println("), reinitializing..."); + rc522HardResetRuntime(); + rfid.PCD_Init(); + } + } + + // 寻找新卡片 + if (!rfid.PICC_IsNewCardPresent()) { + delay(10); + continue; + } + + // 验证NUID是否可读 + if (!rfid.PICC_ReadCardSerial()) { + delay(10); + continue; + } + + // 读取卡片数据(用户数据区) + String cardData = ""; + MFRC522::MIFARE_Key key; + + // 准备认证密钥 + for (byte i = 0; i < 6; i++) key.keyByte[i] = 0xFF; + + // 选择卡片 + MFRC522::StatusCode status; + status = rfid.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, 4, &key, &(rfid.uid)); + if (status != MFRC522::STATUS_OK) { + // 调试日志用普通 Serial.println:失败频率较高时,避免 flush 阻塞拖慢 RFID 响应 + // 偶尔截断可接受(Linux 端用正则 ^SORC_HA\d+$ 过滤业务数据即可) + Serial.println(String("Authentication failed: ") + rfid.GetStatusCodeName(status)); + rfid.PICC_HaltA(); + rfid.PCD_StopCrypto1(); + delay(30); // 从 100ms 降到 30ms,提升刷卡响应速度 + continue; + } + + // 读取数据块 + byte buffer[18]; + byte size = sizeof(buffer); + status = rfid.MIFARE_Read(4, buffer, &size); + if (status != MFRC522::STATUS_OK) { + Serial.println(String("Reading failed: ") + rfid.GetStatusCodeName(status)); + rfid.PICC_HaltA(); + rfid.PCD_StopCrypto1(); + delay(30); // 从 100ms 降到 30ms + continue; + } + + // 转换为ASCII字符串 + for (byte i = 0; i < 16; i++) { + if (buffer[i] >= 32 && buffer[i] <= 126) { // 可打印ASCII字符 + cardData += (char)buffer[i]; + } + } + + // 移除空白字符 + cardData.trim(); + + // 卡片数据格式校验:规则 "HA" + 阿拉伯数字 + // 过滤掉卡片读取异常或数据损坏的情况,避免发送无效数据给 Linux + auto isValidCardData = [](const String& d) -> bool { + if (d.length() < 3) return false; // 至少 "HA" + 1 位数字 + if (!d.startsWith("HA")) return false; // 必须以 HA 开头 + for (size_t i = 2; i < d.length(); i++) { + if (!isdigit(d[i])) return false; // HA 后面必须全是数字 + } + return true; + }; + + // 3 秒去重窗口:同一张卡 3 秒内只发送一次,超过后允许重发 + // 切换到不同卡立即发送 + static String lastSentCard = ""; + static unsigned long lastSentTime = 0; + const unsigned long DUPLICATE_WINDOW_MS = 3000; + + if (!cardData.isEmpty() && isValidCardData(cardData)) { + unsigned long now = millis(); + bool isDuplicate = (cardData == lastSentCard) && (now - lastSentTime < DUPLICATE_WINDOW_MS); + if (!isDuplicate) { + serialPrintlnSafe("SORC_" + cardData); + lastSentCard = cardData; + lastSentTime = now; + } + } + + // 使放置在读卡区的IC卡进入休眠状态,不再重复读卡 + rfid.PICC_HaltA(); + + // 停止加密PCD + rfid.PCD_StopCrypto1(); + + delay(100); + } +} + +// 注意:以下两个函数已被TaskLEDUnifiedCode替代,保留仅供参考 +// 实际运行中不会被调用,因为setup()中没有创建对应的任务 + +// LED1控制任务(已废弃,由TaskLEDUnifiedCode统一处理) +void TaskLED1code(void* pvParameters) { + // 此函数已被废弃,不再使用 + // LED1的控制已集成到TaskLEDUnifiedCode中 + vTaskDelete(NULL); // 如果意外创建了此任务,立即删除 +} + +// LED3控制任务(已废弃,由TaskLEDUnifiedCode统一处理) +void TaskLED3code(void* pvParameters) { + // 此函数已被废弃,不再使用 + // LED3的控制已集成到TaskLEDUnifiedCode中 + vTaskDelete(NULL); // 如果意外创建了此任务,立即删除 +} + +// PWM控制任务 +void TaskPWMcode(void* pvParameters) { + for (;;) { + // 设置PWM占空比 + ledc_set_duty(LEDC_LOW_SPEED_MODE, (ledc_channel_t)PWM_CHANNEL, pwmDuty); + ledc_update_duty(LEDC_LOW_SPEED_MODE, (ledc_channel_t)PWM_CHANNEL); + + delay(100); + } +} + +// 按钮0检测任务 +void TaskBTN0code(void* pvParameters) { + static unsigned long pressStartTime = 0; + // 首次进入任务时读取实际电平作为初始值,避免上电时 GPIO 浮空触发虚假边沿事件 + bool lastState = digitalRead(BTN0_PIN); + btn0State = lastState; + + for (;;) { + bool currentState = digitalRead(BTN0_PIN); + + // 检测下降沿(按下) + if (lastState == HIGH && currentState == LOW) { + pressStartTime = millis(); + btn0State = LOW; + serialPrintlnSafe("SO_BT0_HIGH"); + btn0LongPress = false; + } + // 检测上升沿(释放) + else if (lastState == LOW && currentState == HIGH) { + btn0State = HIGH; + serialPrintlnSafe("SO_BT0_LOW"); + btn0LongPress = false; + } + // 检测长按 + else if (currentState == LOW && millis() - pressStartTime >= 2000 && !btn0LongPress) { + btn0LongPress = true; + serialPrintlnSafe("SO_BT0_HIGHL"); + } + + lastState = currentState; + delay(10); + } +} + +// WAKEUP1检测任务 +void TaskWAKEUP1code(void* pvParameters) { + // 首次进入任务时读取实际电平作为初始值,避免上电时 GPIO 浮空触发虚假边沿事件 + bool lastState = digitalRead(WAKEUP1_PIN); + wakeup1State = lastState; + + for (;;) { + bool currentState = digitalRead(WAKEUP1_PIN); + + // 检测上升沿 + if (lastState == LOW && currentState == HIGH) { + wakeup1State = HIGH; + serialPrintlnSafe("SO_WAKEUP1"); + } + // 检测下降沿 + else if (lastState == HIGH && currentState == LOW) { + wakeup1State = LOW; + serialPrintlnSafe("SO_WAKEUP0"); + } + + lastState = currentState; + delay(10); + } +} + +// 按钮1检测任务 +void TaskBTN1code(void* pvParameters) { + // 首次进入任务时读取实际电平作为初始值,避免上电时 GPIO 浮空触发虚假边沿事件 + bool lastState = digitalRead(BTN1_PIN); + btn1State = lastState; + + for (;;) { + bool currentState = digitalRead(BTN1_PIN); + + // 检测上升沿 + if (lastState == LOW && currentState == HIGH) { + btn1State = HIGH; + serialPrintlnSafe("SO_BT1_HIGH"); + } + // 检测下降沿 + else if (lastState == HIGH && currentState == LOW) { + btn1State = LOW; + serialPrintlnSafe("SO_BT1_LOW"); + } + + lastState = currentState; + delay(10); + } +} + +// 按钮2检测任务 +void TaskBTN2code(void* pvParameters) { + // 首次进入任务时读取实际电平作为初始值,避免上电时 GPIO 浮空触发虚假边沿事件 + bool lastState = digitalRead(BTN2_PIN); + btn2State = lastState; + + for (;;) { + bool currentState = digitalRead(BTN2_PIN); + + // 检测上升沿 + if (lastState == LOW && currentState == HIGH) { + btn2State = HIGH; + serialPrintlnSafe("SO_BT2_HIGH"); + } + // 检测下降沿 + else if (lastState == HIGH && currentState == LOW) { + btn2State = LOW; + serialPrintlnSafe("SO_BT2_LOW"); + } + + lastState = currentState; + delay(10); + } +} + +// 处理单条完整命令 +// 参数 resp 指向发送方串口,命令响应会回到发送方(Windows 发命令 Windows 收响应,Android 同理) +void processCommand(const String& command, Stream& resp) { + if (command.startsWith("MO_LED_")) { + String modeStr = command.substring(7); + int newMode = modeStr.toInt(); + if (newMode >= 0 && newMode <= 7) { + singleLedMode = newMode; + resp.print("Single LED set to mode: "); + resp.println(newMode); + } else { + resp.println("Invalid single LED mode command"); + } + } else if (command.startsWith("MO_LEDN_")) { + String modeStr = command.substring(8); + int newMode = modeStr.toInt(); + if (newMode >= 0 && newMode <= 5) { + if (led2Brightness == 0) { + resp.println("当前亮度为0,请先将亮度调整至0以上再切换显示模式!"); + } else { + ledMode = newMode; + if (newMode == 4) { + trainPos = -TRAIN_LENGTH; + trainPhase = 0; + rainbowHue = random8(); + } + if (newMode == 5) { + memcpy(frozenLeds2, leds2, sizeof(leds2)); + frozenBrightness = led2Brightness; + } + resp.print("LED strip set to mode: "); + resp.println(newMode); + } + } else { + resp.println("Invalid LED strip mode command"); + } + } else if (command.startsWith("MO_PWM_")) { + String dutyStr = command.substring(7); + int newDuty = dutyStr.toInt(); + if (newDuty == 1) { + pwmDuty = 1023; + } else if (newDuty == 0 || newDuty == 20 || newDuty == 40 || newDuty == 60 || newDuty == 80) { + pwmDuty = (newDuty * 1023) / 100; + } else { + resp.println("Invalid PWM command"); + } + resp.print("PWM set to: "); + resp.print((pwmDuty * 100) / 1023); + resp.println("%"); + } else if (command.startsWith("MO_BRI_")) { + String levelStr = command.substring(7); + levelStr.trim(); + if (levelStr.length() == 0) { + resp.println("错误: 缺少亮度值"); + return; + } + bool isNumeric = true; + for (char c : levelStr) { + if (!isdigit(c)) { isNumeric = false; break; } + } + if (!isNumeric) { + resp.println("错误: 亮度值必须为整数"); + return; + } + int level = levelStr.toInt(); + if (level >= 0 && level <= 100) { + led2Brightness = brightnessMap[level]; + resp.print("LED亮度: "); + resp.print(level); + resp.println("%"); + } else { + resp.println("错误: 亮度值需在0-100之间"); + } + } else if (command == "RESET") { + // 软复位:响应同时发到两个串口(Windows 和 Android 都能看到重启日志) + Serial.println("System resetting..."); + SerialLinux.println("System resetting..."); + Serial.flush(); + SerialLinux.flush(); + delay(100); + ESP.restart(); + } +} + +// 从指定流读取命令字节,累积到完整一行后交给 processCommand 处理 +// 每个流需要独立的命令缓冲区(通过引用传入 static 变量保持状态) +void handleCommandFromStream(Stream& src, String& cmdBuf) { + while (src.available()) { + // 命令长度保护:防止恶意或异常数据撑爆内存 + if (cmdBuf.length() > 64) { + src.println("错误: 命令过长(最大64字符)"); + cmdBuf = ""; + while (src.available()) src.read(); + return; + } + + char c = src.read(); + if (c == '\n') { + cmdBuf.trim(); // 去掉末尾 \r 兼容不同行尾符 + if (cmdBuf.length() > 0) { + processCommand(cmdBuf, src); + } + cmdBuf = ""; + } else { + cmdBuf += c; + } + } +} + + + + +// 统一LED控制任务(防闪烁优化版本) +// 集中管理LED1(单颗)、LED2(灯带)、LED3(强制关闭)的显示逻辑 +// 优化特性: +// 1. 30FPS稳定更新频率,防止闪烁 +// 2. 修复模式5的双重亮度衰减问题 +// 3. 统一亮度处理机制 +// 4. 内存优化,减少不必要的数据拷贝 +// 5. 防闪烁机制,确保LED显示稳定 +void TaskLEDUnifiedCode(void* pvParameters) { + static unsigned long lastLEDUpdate = 0; + // 20FPS 更新频率:兼顾视觉流畅度和 RFID 稳定性 + // 每秒 20 次 WS2812 传输(每次 ~5.6ms 关中断),相比 30FPS 减少 33% 干扰窗口 + const unsigned long LED_UPDATE_INTERVAL = 50; + + for (;;) { + unsigned long currentTime = millis(); + + // 控制更新频率,避免过度占用CPU和闪烁问题 + if (currentTime - lastLEDUpdate < LED_UPDATE_INTERVAL) { + delay(5); // 增加延时,确保任务调度稳定 + continue; + } + lastLEDUpdate = currentTime; + + // ---- LED1 控制(单颗 LED)---- + if (singleLedMode >= 0 && singleLedMode <= 7) { + leds1[0] = singleLedColors[singleLedMode]; + } else { + leds1[0] = CRGB::Blue; + } + + // ---- LED3 控制(熄灭)---- + leds3[0] = CRGB::Black; + + // ---- LED2 控制(灯带)---- + switch (ledMode) { + case 0: // 模式0:全部熄灭,关闭所有LED灯珠 + fill_solid(leds2, LED_COUNT_2, CRGB::Black); + break; + + case 1: // 模式1:纯白色静态光,亮度可通过led2Brightness调节 + fill_solid(leds2, LED_COUNT_2, CHSV(0, 0, led2Brightness)); + break; + + case 2: // 模式2:彩虹流水灯,颜色沿灯带流动,速度和亮度可调 + for (int i = 0; i < LED_COUNT_2; i++) { + leds2[i] = CHSV(rainbowHue + i * 256 / LED_COUNT_2, 255, led2Brightness); + } + rainbowHue++; + break; + case 3: // 模式3:彩虹呼吸灯(优化版本),缓慢变色配合呼吸效果 + { + static unsigned long lastHueUpdate = 0; + static unsigned long lastBreathUpdate = 0; + static uint8_t breathingHue = 0; + static uint8_t breathPhase = 0; + + unsigned long currentTime = millis(); + + // 每300ms更新一次色相,实现非常缓慢的颜色变化 + if (currentTime - lastHueUpdate > 300) { + breathingHue += 1; + lastHueUpdate = currentTime; + } + + // 每30ms更新一次呼吸相位,控制亮度变化节奏 + if (currentTime - lastBreathUpdate > 30) { + breathPhase += 2; + lastBreathUpdate = currentTime; + } + + // 计算呼吸亮度:基于led2Brightness的60%-100%范围,避免过暗 + uint8_t minBrightness = led2Brightness * 60 / 100; + uint8_t maxBrightness = led2Brightness; + uint8_t breathValue = map(sin8(breathPhase), 0, 255, minBrightness, maxBrightness); + + for(int i = 0; i < LED_COUNT_2; i++) { + leds2[i] = CHSV(breathingHue, 200, breathValue); + } + } + break; + + + case 4: // 模式4:彩虹火车灯,模拟火车往返运行的动态效果 + if (millis() - lastUpdate > 30) { // 30ms更新间隔,控制火车移动速度 + lastUpdate = millis(); + fill_solid(leds2, LED_COUNT_2, CRGB::Black); + + switch (trainPhase) { + case 0: // 阶段0:正向出站,火车从起点逐渐显现 + for (int i = 0; i < TRAIN_LENGTH; i++) { + int pos = trainPos + i; + if (pos >= 0 && pos < LED_COUNT_2) { + uint8_t hue = rainbowHue + (i * 256 / TRAIN_LENGTH); + leds2[pos] = CHSV(hue, 255, led2Brightness); + } + } + trainPos++; + if (trainPos >= 0) { + trainPhase = 1; // 切换到正向前进阶段 + trainPos = 0; + } + break; + + case 1: // 阶段1:正向前进,火车完整显示并向终点移动 + for (int i = 0; i < TRAIN_LENGTH; i++) { + int pos = trainPos + i; + if (pos >= 0 && pos < LED_COUNT_2) { + uint8_t hue = rainbowHue + (i * 256 / TRAIN_LENGTH); + leds2[pos] = CHSV(hue, 255, led2Brightness); + } + } + trainPos++; + if (trainPos >= LED_COUNT_2 - TRAIN_LENGTH) { + trainPhase = 2; // 切换到正向进站阶段 + trainPos = LED_COUNT_2 - TRAIN_LENGTH; + } + break; + + case 2: // 阶段2:正向进站,火车从尾部开始消失 + for (int i = 0; i < TRAIN_LENGTH; i++) { + int displayPos = LED_COUNT_2 - 1 - i; + if (displayPos >= trainPos) { + uint8_t hue = rainbowHue + (i * 256 / TRAIN_LENGTH); + leds2[displayPos] = CHSV(hue, 255, led2Brightness); + } + } + trainPos++; + if (trainPos >= LED_COUNT_2) { + trainPhase = 3; // 切换到反向出站阶段 + trainPos = 0; + rainbowHue += 64; // 改变彩虹颜色,增加视觉变化 + } + break; + + case 3: // 阶段3:反向出站,火车从终点逐渐显现 + for (int i = 0; i < trainPos + 1; i++) { + int pos = LED_COUNT_2 - 1 - i; + if (pos >= 0) { + uint8_t hue = rainbowHue + ((TRAIN_LENGTH - 1 - i) * 256 / TRAIN_LENGTH); + leds2[pos] = CHSV(hue, 255, led2Brightness); + } + } + trainPos++; + if (trainPos >= TRAIN_LENGTH) { + trainPhase = 4; // 切换到反向前进阶段 + trainPos = TRAIN_LENGTH; + } + break; + + case 4: // 阶段4:反向前进,火车完整显示并向起点移动 + for (int i = 0; i < TRAIN_LENGTH; i++) { + int pos = LED_COUNT_2 - trainPos + i; + if (pos >= 0 && pos < LED_COUNT_2) { + uint8_t hue = rainbowHue + ((TRAIN_LENGTH - 1 - i) * 256 / TRAIN_LENGTH); + leds2[pos] = CHSV(hue, 255, led2Brightness); + } + } + trainPos++; + if (trainPos >= LED_COUNT_2) { + trainPhase = 5; // 切换到反向进站阶段 + trainPos = 0; + } + break; + + case 5: // 阶段5:反向进站,火车从头部开始消失 + for (int i = 0; i < TRAIN_LENGTH - trainPos; i++) { + int pos = i; + if (pos < LED_COUNT_2) { + uint8_t hue = rainbowHue + ((TRAIN_LENGTH - 1 - i) * 256 / TRAIN_LENGTH); + leds2[pos] = CHSV(hue, 255, led2Brightness); + } + } + trainPos++; + if (trainPos >= TRAIN_LENGTH) { + trainPhase = 0; // 重新开始正向出站,形成循环 + trainPos = -TRAIN_LENGTH; + rainbowHue += 64; // 再次改变彩虹颜色 + } + break; + } + } + break; + + case 5: // 模式5:冻结当前灯效,保持切换时的图像但允许调节亮度(内存优化版本) + if (led2Brightness == 0) { + fill_solid(leds2, LED_COUNT_2, CRGB::Black); // 亮度为0时完全熄灭 + } else { + // 计算相对亮度比例,避免双重衰减问题 + uint16_t brightnessRatio = (uint16_t)led2Brightness * 255 / frozenBrightness; + if (brightnessRatio > 255) brightnessRatio = 255; + + // 直接计算并设置像素颜色,内存优化,避免使用memcpy + for (int i = 0; i < LED_COUNT_2; i++) { + leds2[i].r = (frozenLeds2[i].r * brightnessRatio) >> 8; + leds2[i].g = (frozenLeds2[i].g * brightnessRatio) >> 8; + leds2[i].b = (frozenLeds2[i].b * brightnessRatio) >> 8; + } + } + break; + } + + // ---- 最终统一刷新LED ---- + // 添加FastLED刷新保护,确保数据稳定后再显示 + FastLED.show(); + + // ---- 稳定的延时机制 ---- + // 使用固定延时确保LED显示稳定,避免闪烁 + delay(10); // 10ms延时,确保LED数据传输完成 + } +} + + +void setup() { + // 初始化 USB CDC 串口(Windows 调试) + // 增大 TX 缓冲区到 4KB:防止多任务并发写串口时 USB CDC 默认缓冲区溢出导致数据截断 + Serial.setTxBufferSize(4096); + Serial.begin(115200); + + // 初始化 UART0(CH343/USB1 → Linux 业务通讯) + // 默认引脚:TX=GPIO43、RX=GPIO44,波特率与 Linux 端保持一致 + SerialLinux.begin(115200); + + // 创建 Serial 输出互斥锁 + serialMutex = xSemaphoreCreateMutex(); + + Serial.println("System starting..."); + SerialLinux.println("System starting..."); + + // 初始化SPI总线 + SPI.begin(RFID_SCK_PIN, RFID_MISO_PIN, RFID_MOSI_PIN, RFID_SS_PIN); + + // 初始化RFID:显式硬件复位 + 版本校验 + 失败重试 + // 背景:MFRC522 库的 PCD_Init 自动判断 RST 电平,冷启动时 GPIO14 浮空可能读到 HIGH, + // 库只做软件复位但 RC522 尚未完成上电 → 芯片卡在异常状态 → 刷卡永远失败。 + // 显式拉低再拉高 RST 可避免这个坑。GitHub miguelbalboa/rfid #229 #269 记录此问题。 + // 复用顶部定义的 rc522HardResetRuntime() 函数 + + // 最多重试 3 次初始化,直到版本寄存器返回合法值 + bool rfidReady = false; + for (uint8_t attempt = 1; attempt <= 3; attempt++) { + rc522HardResetRuntime(); // 显式拉低再拉高 RST + rfid.PCD_Init(); + byte version = rfid.PCD_ReadRegister(MFRC522::VersionReg); + Serial.print("RC522 init attempt "); + Serial.print(attempt); + Serial.print(", VersionReg=0x"); + Serial.println(version, HEX); + // 0x91=v1.0, 0x92=v2.0 为合法;0x00/0xFF 表示通讯异常 + if (version == 0x91 || version == 0x92) { + rfidReady = true; + break; + } + delay(100); // 重试前等待 + } + + if (rfidReady) { + Serial.println("RFID initialized."); + } else { + Serial.println("RFID initialization FAILED after 3 attempts! Check wiring/power."); + } + + // 初始化LED + FastLED.addLeds(leds1, LED_COUNT_1); + FastLED.addLeds(leds2, LED_COUNT_2); + FastLED.addLeds(leds3, LED_COUNT_3); // 新增LED3 + + // 启动时先全黑,避免 186 颗 LED 同时点亮产生瞬时 4.5A 大电流 + // 冲击 3.3V/5V 电源导致刚初始化好的 RC522 进入异常状态 + // TaskLEDUnified 启动后会根据 ledMode/led2Brightness 自动恢复默认显示 + fill_solid(leds1, LED_COUNT_1, CRGB::Black); + fill_solid(leds2, LED_COUNT_2, CRGB::Black); + fill_solid(leds3, LED_COUNT_3, CRGB::Black); + FastLED.show(); + Serial.println("LED initialized (dark startup, task will restore default)."); + + // 初始化PWM + // 创建LED控制器配置 + ledc_timer_config_t ledc_timer = { + .speed_mode = LEDC_LOW_SPEED_MODE, + .duty_resolution = (ledc_timer_bit_t)PWM_RESOLUTION, + .timer_num = (ledc_timer_t)PWM_CHANNEL, + .freq_hz = PWM_FREQ, + .clk_cfg = LEDC_AUTO_CLK + }; + ledc_timer_config(&ledc_timer); + + // 创建LED通道配置 + ledc_channel_config_t ledc_channel = { + .gpio_num = PWM_PIN, + .speed_mode = LEDC_LOW_SPEED_MODE, + .channel = (ledc_channel_t)PWM_CHANNEL, + .intr_type = LEDC_INTR_DISABLE, + .timer_sel = (ledc_timer_t)PWM_CHANNEL, + .duty = 0, + .hpoint = 0 + }; + ledc_channel_config(&ledc_channel); + + // 设置初始占空比 + ledc_set_duty(LEDC_LOW_SPEED_MODE, (ledc_channel_t)PWM_CHANNEL, pwmDuty); + ledc_update_duty(LEDC_LOW_SPEED_MODE, (ledc_channel_t)PWM_CHANNEL); + + Serial.println("PWM initialized."); + + // 初始化输入引脚 + pinMode(BTN0_PIN, INPUT_PULLUP); + pinMode(WAKEUP1_PIN, INPUT); + pinMode(BTN1_PIN, INPUT); + pinMode(BTN2_PIN, INPUT); + Serial.println("Inputs initialized."); + + // 创建任务 + // TaskRFID 放 Core 0:避开 Core 1 上 WS2812 bit-banging 关中断窗口,SPI 通讯更稳定 + xTaskCreatePinnedToCore( + TaskRFIDcode, /* 任务函数 */ + "TaskRFID", /* 任务名称 */ + 4096, /* 任务栈大小 */ + NULL, /* 传递给任务的参数 */ + 2, /* 任务优先级(提高到 2,避免被按键任务频繁抢占)*/ + &TaskRFID, /* 任务句柄 */ + 0); /* 运行在核心0上(与 LED 任务物理隔离)*/ + + xTaskCreatePinnedToCore( + TaskLEDUnifiedCode, + "TaskLEDUnified", + 8192, // 建议栈大一点 + NULL, + 3, // 提高优先级,确保LED更新不被其他任务干扰 + NULL, + 1); + + xTaskCreatePinnedToCore( + TaskPWMcode, + "TaskPWM", + 1024, + NULL, + 1, + &TaskPWM, + 1); + + xTaskCreatePinnedToCore( + TaskBTN0code, + "TaskBTN0", + 2048, + NULL, + 1, + &TaskBTN0, + 0); + + xTaskCreatePinnedToCore( + TaskWAKEUP1code, + "TaskWAKEUP1", + 2048, + NULL, + 1, + &TaskWAKEUP1, + 0); + + xTaskCreatePinnedToCore( + TaskBTN1code, + "TaskBTN1", + 2048, + NULL, + 1, + &TaskBTN1, + 0); + + xTaskCreatePinnedToCore( + TaskBTN2code, + "TaskBTN2", + 2048, + NULL, + 1, + &TaskBTN2, + 0); + + Serial.println("Tasks created. System ready."); +} + +void loop() { + // 同时处理两个串口的命令输入(双端都能下发控制命令) + // - Serial (USB-Serial-JTAG):Windows 调试发命令 + // - SerialLinux (UART0 / CH343):Android 开发板发命令 + // 两个缓冲区独立保存,避免一方半发命令被另一方打断 + static String cmdFromSerial = ""; + static String cmdFromLinux = ""; + handleCommandFromStream(Serial, cmdFromSerial); + handleCommandFromStream(SerialLinux, cmdFromLinux); + + // 让出CPU时间 + delay(1); +} \ No newline at end of file diff --git a/ESP32踩坑经验文档.md b/ESP32踩坑经验文档.md new file mode 100644 index 0000000..39e4d85 --- /dev/null +++ b/ESP32踩坑经验文档.md @@ -0,0 +1,638 @@ +# ESP32-S3 HOLOMAIN 项目踩坑与修复经验 + +> 记录时间:2026-04-21 +> 硬件:ESP32-S3-WROOM-1-N16R8 + CH343P + OrangePi CM5 (Android) +> 核心场景:OrangePi CM5 Android 开发板作为主控 → ESP32 作为外设(NFC/LED/按键) +> 项目代码:`HOLOMAIN.ino` + +--- + +## 一、硬件架构 + +### 板载两个 Type-C 口对应不同 USB 通道 + +| 标号 | 丝印 | 内部通道 | VID/PID | 连接方向 | +|------|------|---------|--------|---------| +| **USB1** | CH343 口 | CH343P(USB-UART桥) → ESP32 UART0 (GPIO43/44) | `1A86:55D5` | Android (业务/烧录) | +| **USB2** | JTAG 口 | ESP32-S3 原生 USB-Serial-JTAG (GPIO19/20) | `303A:1001` | Windows (调试/烧录) | + +### 关键硬件特性(从原理图推断) + +- **R11 10kΩ 上拉到 GPIO3**:导致 UART0 启动时进入 Silent Boot,只输出 `ESP-ROM:esp32s3-20210327` 一行 +- **CH343P 的 DTR/RTS 通过 Q1/Q2 三极管控制 EN 和 GPIO0**:支持 Arduino IDE 从 CH343 口自动进下载模式 +- **两个 USB 口都能给板子供电**(经二极管 D1/D2/D3 合路) +- **UART0 固定 GPIO43(TX)/GPIO44(RX)**,对应 CH343P 的 RXD/TXD(CH343 工作在 USB-UART 桥模式) + +--- + +## 二、踩坑清单(按问题严重程度排序) + +### 坑 1:OrangePi CM5 Android 对 ESP32 原生 USB-Serial-JTAG 兼容性差【严重】 + +**现象**: +- 之前用其他 Linux 开发板通过 USB-Serial-JTAG 连 ESP32,稳定工作 +- 换成 OrangePi CM5 Android 后,偶发 NFC 刷卡不切换形象、命令无响应、数据截断 + +**根本原因**: +- ESP32-S3 USB-Serial-JTAG 是芯片内置的"软" USB CDC 实现 +- 不同平台对 `303A:1001` 这个 CDC-ACM 设备的驱动支持差异大: + - Windows:标准 CDC 驱动稳定 + - 通用 Linux (Ubuntu/Debian):`cdc_acm` 内核模块成熟 + - **定制 Android(RK3588/Rockchip SDK)**:USB Host 权限管理 + CDC 解析未针对 ESP32-S3 充分测试,数据读取不稳定 + +**修复方案**: +- **把业务数据切到 UART0 + CH343P 路径** +- CH343 作为成熟的 USB-UART 桥芯片,VID/PID 是 `1A86:55D5`,所有 Android 通过 `com.hoho.android.usbserial` 库完美支持 CH340/CH343 家族 + +**经验教训**: +> **面向消费级 Android 硬件,永远优先选 CH340/CH343/CP2102 这类老牌 USB-UART 桥芯片,不要依赖 ESP32 自带的 USB-Serial-JTAG 做业务通讯**。自带 USB 只适合给 Windows/通用 Linux 做调试烧录。 + +--- + +### 坑 2:自创建 `HardwareSerial(0)` 与 Arduino core 的 Serial0 冲突【严重】 + +**现象**: +- 代码里写了 `HardwareSerial SerialLinux(0)` 想独立管理 UART0 +- `SerialLinux.println()` 能正常发送(Android 能收到 `SORC_HA003`) +- 但 `SerialLinux.available()` 始终读不到数据(Android 发命令 ESP32 不响应) + +**根本原因**: +- Arduino-ESP32 core 在启动时**自动创建全局 `Serial0` 对象管理 UART0** +- UART0 RX 中断由 core 统一处理,数据被放进 `Serial0` 的 ring buffer +- 自创建的 `HardwareSerial(0)` 和 `Serial0` 底层共享同一硬件,但 ring buffer 状态独立 +- 自建对象的 `available()` 永远返回 0 + +**修复方案**: +```cpp +// 错误做法(看似正确,实则接收不到数据): +HardwareSerial SerialLinux(0); + +// 正确做法(用宏别名引用 core 对象): +#define SerialLinux Serial0 +``` + +**经验教训**: +> **在 Arduino-ESP32 中访问硬件 UART,始终用 core 提供的全局对象(Serial0/Serial1/Serial2),不要自己实例化 `HardwareSerial(n)`**。编译期宏别名 `#define` 是零开销且安全的方案。 + +--- + +### 坑 3:USB CDC On Boot 配置与 Serial 对象归属【重要】 + +**现象**: +- 代码里 `Serial.println("System starting...")` 在串口监视器上只看到一行 `ESP-ROM:esp32s3-20210327` +- 发 `RESET` 命令无响应 +- 应用完全像没启动 + +**根本原因**: +- Arduino IDE 工具菜单有 `USB CDC On Boot` 开关,影响 `Serial` 对象的归属: + +| 配置 | Serial 对应 | 调试口 | 业务口(本项目)| +|------|------------|--------|----------------| +| `USB CDC On Boot: Disabled` | UART0 (Serial0) | CH343 口(USB1)| CH343 口(与调试口争用)| +| `USB CDC On Boot: Enabled` | USB-Serial-JTAG (HWCDC) | JTAG 口(USB2)| UART0 独立(SerialLinux = Serial0)| + +**本项目选 Enabled**:因为 Windows 调试插 JTAG 口(USB2),Android 业务插 CH343 口(USB1),两条路物理隔离。 + +**补充:R11 上拉 GPIO3 的影响**: +- 即使 `Serial` 走 USB-Serial-JTAG,UART0 默认还会输出 ROM bootloader 启动信息 +- 但因 GPIO3 被上拉 → 进入 **Silent Boot** → UART0 只输出芯片型号那一行 +- USB-Serial-JTAG 通道的启动日志不受 GPIO3 影响 + +--- + +### 坑 4:ESP32-S3 没有 RST/BOOT 按钮时如何复位【小坑】 + +**现象**: +- 设备装好后 ESP32 板子藏在结构件里,按不到 RST 按钮 +- 烧录完成后想重启观察启动日志,没办法触发 + +**修复方案**: +1. **关闭再打开串口监视器**(DTR 控制会自动触发复位) +2. **拔插调试 USB 线**(断电重启) +3. **重新烧录**(烧录完成会自动重启) +4. **加软复位命令**(推荐长期方案): + ```cpp + else if (command == "RESET") { + Serial.println("System resetting..."); + Serial.flush(); + delay(100); + ESP.restart(); + } + ``` + 后续通过串口发送 `RESET` 即可触发重启。 + +--- + +### 坑 5:串口数据截断(`SORC_H` 这种不完整数据)【业务致命】 + +**现象**: +- 预期收到 `SORC_HA003\r\n`,实际收到 `SORC_H\r\n` +- Linux/Android 端查表找不到 `SORC_H` 对应的形象 → 表现为"刷卡后形象偶尔不切换" + +**根本原因**: +- 多个 FreeRTOS 任务同时调用 `Serial.println` 时,两次 print 之间可能被其他任务插入 +- USB CDC 内部 FIFO 缓冲区满时,`Serial.flush()` 有超时(约 100ms),超时后返回,未发送字节被丢弃 +- `Serial.availableForWrite()` 在 HWCDC 上返回的是内部 ring buffer 剩余空间,**不等于 USB 硬件 FIFO 剩余空间** + +**修复方案**(多层防护): + +1. **互斥锁串行化多任务 Serial 写入**: + ```cpp + SemaphoreHandle_t serialMutex = xSemaphoreCreateMutex(); + void serialPrintlnSafe(const String& msg) { + if (xSemaphoreTake(serialMutex, pdMS_TO_TICKS(100)) == pdTRUE) { + SerialLinux.println(msg); + SerialLinux.flush(); + xSemaphoreGive(serialMutex); + } + } + ``` + +2. **业务数据走 UART0(不走 USB CDC)**:UART0 硬件 FIFO 128 字节 + 114.2kbps 发送速率稳定,几乎不会截断。 + +3. **增大 USB CDC TX 缓冲(给调试日志用)**: + ```cpp + Serial.setTxBufferSize(4096); + Serial.begin(115200); + ``` + +4. **接收端正则过滤兜底**(Android/Linux 端): + ```python + import re + pattern = re.compile(r'^SORC_HA\d+$') + if pattern.match(line): # 截断数据不匹配,自动丢弃 + handle_card(line) + ``` + +**经验教训**: +> **跨主机的串口业务必须定义严格的数据格式**(如 `^SORC_HA\d+$`),接收端做正则校验,这是数据完整性的最后一道保险。ESP32 端再优化也不可能做到 100% 零截断。 + +--- + +### 坑 6:调试日志也走互斥保护导致刷卡变慢【中等】 + +**现象**: +- 业务数据用 `serialPrintlnSafe`(互斥 + flush)保护后很完整 +- 但把 `Authentication failed`、`Reading failed` 这类调试日志也改用 `serialPrintlnSafe` 后,**刷卡响应明显变慢** + +**根本原因**: +- 每次 RFID 认证失败都要 flush 等 USB 传输完成(可能阻塞 50ms+) +- WS2812 干扰导致失败率本身就不低(~10%) +- 连续 3 次失败 × 100ms = 累积 300-400ms 阻塞 → 肉眼可见的"不灵敏" + +**修复方案**: +- **业务数据**(`SORC_HAxxx`、`SO_BTx`)→ `serialPrintlnSafe`(互斥 + flush,确保完整) +- **调试日志**(`Authentication failed`)→ 普通 `Serial.println`(快速返回,偶尔截断由接收端过滤) +- **失败后 delay 从 100ms 降到 30ms**:RC522 实际恢复 10-20ms 就够 + +**经验教训**: +> **分清业务数据和调试日志的优先级**。业务数据要"完整准确"(可接受稍慢),调试日志要"不阻塞"(可接受偶尔截断)。全部用最严格的保护会拖垮性能。 + +--- + +### 坑 7:WS2812 bit-banging 关中断干扰 SPI 通讯【硬件干扰】 + +**现象**: +- 灯带满亮度 + 彩虹流水动画时,刷卡失败率明显升高 +- 日志出现 `Authentication failed: Error in communication`、`Reading failed: The CRC_A does not match` + +**根本原因**: +- FastLED 驱动 WS2812 是通过 GPIO bit-banging 产生精确时序(每位 1.25μs) +- 186 颗灯 × 24 位 × 1.25μs ≈ **5.6ms 关中断窗口** × 每秒 30 次 = 168ms/秒关中断 +- 关中断期间 ESP32 无法响应 SPI 中断 → RC522 通讯受影响 + +**缓解方案**(代码层面): +1. **RFID 任务迁移到 Core 0**,与 LED 任务(Core 1)物理隔离: + ```cpp + xTaskCreatePinnedToCore(TaskRFIDcode, "TaskRFID", 4096, NULL, 2, &TaskRFID, 0); + xTaskCreatePinnedToCore(TaskLEDUnifiedCode, "TaskLEDUnified", 8192, NULL, 3, NULL, 1); + ``` +2. **LED 刷新从 30FPS 降到 20FPS**:减少 33% 关中断窗口 + ```cpp + const unsigned long LED_UPDATE_INTERVAL = 50; // 原 33 + ``` + +**根本解决方案**(非本项目采用,留作参考): +- 改用 ESP32-S3 的 **RMT 硬件外设驱动 WS2812**(不需要 CPU 关中断) +- FastLED 的 `#define FASTLED_ESP32_I2S` 或用 ESP-IDF 的 `led_strip` 组件 +- 硬件电路给 RC522 的 3.3V 加去耦电容(100μF + 10μF + 100nF 组合) + +**经验教训**: +> **WS2812 bit-banging 与高速 SPI/I2S 同时使用时必然有干扰**。RFID 这种对通讯时序敏感的外设应尽量分到不同 Core,并接受 5-10% 的偶发失败率是正常的。 + +--- + +### 坑 8:行尾符不一致导致命令不被识别【低级错误高频踩】 + +**现象**: +- Windows 串口监视器发 `MO_LED_4` 能生效 +- Android 发同样命令 ESP32 没反应 + +**根本原因**: +- Android 发的是 `MO_LED_4\r\n`(CRLF 行尾) +- 旧代码的 `command == "RESET"` 等精确匹配会失败(因为 command 实际是 `RESET\r`) +- `command.startsWith(...)` 型的判断不受影响(因为 `substring(7)` 后的 `toInt()` 能忽略 `\r`) +- 特殊校验(如 `MO_BRI_` 的"必须全是数字")会因 `\r` 被误判为非数字 + +**修复方案**: +```cpp +if (c == '\n') { + command.trim(); // 去掉末尾 \r(兼容 CRLF 和 LF) + if (command.length() > 0) { + processCommand(command, src); + } + command = ""; +} +``` + +**Arduino `println()` 默认已经是 `\r\n`**,所以 ESP32 发出去的数据天然兼容两种平台。只需保证接收端做 trim 即可。 + +--- + +### 坑 9:`handleSerialCommand` 只读 Serial 导致 Android 命令无响应【架构 bug】 + +**现象**: +- Android 发命令 ESP32 不响应 +- Windows 发同样命令正常 + +**根本原因**: +```cpp +void handleSerialCommand() { + while (Serial.available()) { ... } // 只读 Serial(USB CDC) +} +``` +Android 的命令走 UART0 → Serial0 ring buffer,但代码里 `Serial0.available()` 从未被调用。 + +**修复方案**(函数参数化 + 双缓冲区): +```cpp +void processCommand(const String& command, Stream& resp) { + // 统一的命令处理逻辑,响应回到发送方 +} + +void handleCommandFromStream(Stream& src, String& cmdBuf) { + while (src.available()) { + char c = src.read(); + if (c == '\n') { + cmdBuf.trim(); + if (cmdBuf.length() > 0) processCommand(cmdBuf, src); + cmdBuf = ""; + } else { + cmdBuf += c; + } + } +} + +void loop() { + static String cmdFromSerial = ""; // Windows/USB CDC 独立缓冲 + static String cmdFromLinux = ""; // Android/UART0 独立缓冲 + handleCommandFromStream(Serial, cmdFromSerial); + handleCommandFromStream(SerialLinux, cmdFromLinux); + delay(1); +} +``` + +**经验教训**: +> **每个串口必须有独立的命令缓冲区**,否则一方半发命令可能被另一方打断。`Stream&` 多态 + 缓冲区参数化是最优雅的写法。 + +--- + +### 坑 10:NFC 同卡连续刷卡的去重策略【业务逻辑】 + +**演进过程**: +1. **最初**:`if (cardData != lastCardData)` → 同卡永久不再发送 + - 问题:Linux 异常清屏后无法恢复形象 +2. **尝试 1**:30 秒时间窗口去重 + - 问题:过于保守,1 小时后刷同卡反而触发刷新(实际 Linux 状态没变) +3. **尝试 2**:完全不去重,每次都发 + - 问题:用户快速重复刷同卡,Android 频繁刷屏 +4. **最终**:根据业务需求决定 + - 项目选择:**完全不去重**(Linux 端自己根据需要判断是否重复响应) + - 或者 3 秒时间窗口兜底(防手抖) + +**经验教训**: +> **去重逻辑本质是业务决策**,代码层面先提供最简单的"每次都发",把去重权交给业务层。数据完整性(不截断、不丢包)才是嵌入式固件的核心职责。 + +--- + +### 坑 11:RC522 冷启动刷卡无效,软复位(ESP.restart)后就正常【高频坑,经典】 + +**现象**: +- **断电重启**后:LED 能控制,但刷 NFC 卡完全无响应 +- **串口发 RESET 触发 ESP.restart()** 后:NFC 又能正常工作了 +- 问题可复现,但不是 100%(有时候冷启动也正常,有时候失败) + +**根本原因**: + +`RFID_RST_PIN 14` 虽然在代码里定义了,但**只传给了 `MFRC522 rfid(SS, RST)` 构造函数,没有任何 `pinMode`/`digitalWrite` 显式操作**。真正的复位逻辑由 `rfid.PCD_Init()` 内部处理。 + +查阅 miguelbalboa/rfid 库源码: +```cpp +void MFRC522::PCD_Init() { + pinMode(_resetPowerDownPin, INPUT); // 第 1 步:RST 设为 INPUT + if (digitalRead(_resetPowerDownPin) == LOW) { + // 读到 LOW → 硬件复位(拉高 RST + delay 50ms) + hardReset = true; + } + if (!hardReset) { + PCD_Reset(); // 读到 HIGH → 只做软件复位(写 CommandReg) + } +} +``` + +**冷启动的失败流程**: +1. ESP32 上电,GPIO14 默认 INPUT 浮空 → 电平随机(HIGH 或 LOW) +2. 同时 RC522 模组独立上电,内部 POR 需要 10-50ms 稳定 +3. Arduino setup 立刻调用 PCD_Init +4. 库读 GPIO14 → **恰好是 HIGH 的概率 50%+** → 只做软件复位 +5. 此时 RC522 内部可能还没完成 POR → 软件复位的寄存器操作失败 +6. RC522 进入"半初始化"状态:能回应 ReadCardSerial,但 Authenticate 永远失败 +7. 用户看到:LED 正常、刷卡不响应 + +**软复位(ESP.restart)为什么有效**: +- 前一次 `PCD_Init()` 执行硬件复位分支时,已经把 GPIO14 设为 OUTPUT + HIGH +- `ESP.restart()` 触发时,GPIO 状态保留几毫秒(电容效应) +- **关键**:此时 RC522 硬件已经工作正常(它没断电) +- 重启后 PCD_Init 读 GPIO14 → 稳定读到 HIGH → 做软件复位 → 成功 + +**修复方案**(三层保险): + +1. **全局工具函数:标准硬件复位时序** + ```cpp + void rc522HardResetRuntime() { + pinMode(RFID_RST_PIN, OUTPUT); + digitalWrite(RFID_RST_PIN, LOW); // 拉低触发硬件复位 + delay(10); // 规格 ≥100ns,10ms 绝对安全 + digitalWrite(RFID_RST_PIN, HIGH); // 释放 RST + delay(50); // 等待晶振起振 + POR + } + ``` + +2. **setup() 强制 3 次重试 + 版本校验** + ```cpp + bool rfidReady = false; + for (uint8_t attempt = 1; attempt <= 3; attempt++) { + rc522HardResetRuntime(); + rfid.PCD_Init(); + byte version = rfid.PCD_ReadRegister(MFRC522::VersionReg); + // 0x91=v1.0, 0x92=v2.0 合法;0x00/0xFF 异常 + if (version == 0x91 || version == 0x92) { rfidReady = true; break; } + delay(100); + } + ``` + +3. **运行时健康检查(每 5 秒)** + ```cpp + // 防止运行过程中 RC522 因电源波动、WS2812 大电流冲击进入异常 + static uint32_t lastHealthCheck = 0; + if (millis() - lastHealthCheck > 5000) { + lastHealthCheck = millis(); + byte version = rfid.PCD_ReadRegister(MFRC522::VersionReg); + if (version != 0x91 && version != 0x92) { + rc522HardResetRuntime(); + rfid.PCD_Init(); + } + } + ``` + +**GitHub 相关 Issue 佐证**: +- miguelbalboa/rfid Issue #229 - ESP32 cold boot authentication failed +- miguelbalboa/rfid Issue #269 - PCD_Init works but Authenticate fails first time +- miguelbalboa/rfid Issue #125 - Random first-read failures on ESP32 + +**经验教训**: +> **任何带 RST 引脚的外设芯片(RC522/LCD/音频芯片等),setup 必须显式做标准硬件复位时序**,不要依赖外设库的"自动判断"。冷启动时 GPIO 浮空是万恶之源,库的启发式判断在 ESP32 这种高速启动场景下不可靠。 +> +> **校验初始化结果**:初始化完成后读一个"已知固定值"的寄存器(如版本号),能确认芯片真的活了。MFRC522 就是读 `VersionReg`(0x91/0x92)。 + +**验证方法**: +- 断电 → 10 秒 → 上电 → 立刻刷卡,重复 10 次应该全成功 +- 观察串口输出 `RC522 init attempt 1, VersionReg=0x92` +- 如果偶尔看到 `attempt 2/3`,说明重试机制被触发了,但最终成功 + +--- + +## 三、最终架构 + +``` + +----------------------+ + | Windows 开发电脑 | + +----------+-----------+ + | + | USB Type-C + v + +------------------------------------+ + | USB2 (USB-Serial-JTAG) | + | → ESP32-S3 原生 USB (GPIO19/20) | + +------------------------------------+ + | + Serial 对象 (HWCDC) + | + v + +-----------------------------------------------+ + | ESP32-S3-WROOM-1 | + | | + | RFID(SPI) ← TaskRFID @ Core 0 | + | | + | WS2812 ← TaskLEDUnified @ Core 1 (20FPS) | + | | + | Button × 4 ← TaskBTN × 4 @ Core 0 | + | | + | SerialLinux (=Serial0) 对象 | + | | + +-----------------------------------------------+ + ^ + | + UART0 (GPIO43/44) + | + v + +------------------------------------+ + | USB1 (CH343P USB-UART 桥) | + +------------------------------------+ + | + | USB Type-C + v + +----------------------+ + | OrangePi CM5 (Android) | + | SPUP 通过 USB Host API | + | 匹配 VID/PID 1A86:55D5 | + +----------------------+ +``` + +### 数据流向矩阵 + +| 数据 | 发送方 | 通道 | 接收方 | +|------|-------|------|--------| +| `SORC_HAxxx` (刷卡事件) | RFID 任务 | UART0/CH343 | Android | +| `SO_BTx_HIGH/LOW/HIGHL` (按键事件) | 按键任务 | UART0/CH343 | Android | +| `SO_WAKEUP0/1` (唤醒事件) | 唤醒任务 | UART0/CH343 | Android | +| `Authentication failed` (调试日志) | RFID 任务 | USB CDC | Windows | +| `Reading failed` (调试日志) | RFID 任务 | USB CDC | Windows | +| `System starting...` (启动日志) | setup() | 两边都发 | 两边 | +| `MO_LED_*` / `MO_LEDN_*` / `MO_BRI_*` / `MO_PWM_*` / `RESET` (控制命令) | Windows 或 Android | 任一 Stream | ESP32 处理 | +| 命令响应(如 `LED strip set to mode: 2`) | ESP32 | 回到发送方 | Windows 或 Android | + +--- + +## 四、速查表:Arduino IDE 关键配置 + +| 菜单项 | 本项目值 | 说明 | +|-------|---------|------| +| 开发板 | ESP32S3 Dev Module | ESP32-S3-WROOM-1-N16R8 | +| USB CDC On Boot | **Enabled** | Serial 走 USB-Serial-JTAG,UART0 通过 Serial0 访问 | +| USB DFU On Boot | Disabled | 不使用 DFU 模式 | +| USB Mode | Hardware CDC and JTAG | 使能 USB-Serial-JTAG 功能 | +| Flash Size | **16MB (128Mb)** | N16R8 模组实际 Flash | +| Partition Scheme | 按需选 | 代码小可选默认 4MB | +| PSRAM | Disabled | 本项目未使用 PSRAM | +| Upload Mode | UART0 / Hardware CDC | 烧录走哪个口取决于选择 | +| Upload Speed | 921600 | 烧录速度 | +| 端口 | COM8 (USB-Serial-JTAG) | Windows 端看到的 JTAG 口 | + +### 串口监视器设置 +- 波特率:**115200** +- 行尾符:**换行**(或 "换行 和 回车 两者都是",代码已兼容) + +--- + +## 五、调试技巧总结 + +### 1. 区分 COM 口是哪个 USB 通道 +- 拔插 USB 线,观察 Windows 设备管理器哪个 COM 口消失 +- `USB JTAG/serial debug unit` → USB-Serial-JTAG (VID/PID `303A:1001`) +- `USB-Enhanced-SERIAL CH343` → CH343P (VID/PID `1A86:55D5`) + +### 2. 没 RST 按钮时如何复位 +- 关闭再打开串口监视器(DTR 自动触发) +- 发送 `RESET` 命令(代码里的软复位) +- 拔插 USB + +### 3. 快速判断 ROM 日志异常 +- ESP32-S3 正常启动应输出 7-8 行 ROM 日志(`Build:`、`rst:`、`mode:`、`load:`、`entry` 等) +- 只输出一行 `ESP-ROM:esp32s3-...` → 可能 **Silent Boot**(GPIO3 上拉)或 **输出口错** + +### 4. 判断是截断还是根本没发送 +- 完整的 `SORC_HA003` → ESP32 发送成功,主机接收正常 +- `SORC_H` / `SORC_HA00`(不完整)→ 发送过程中截断 +- 完全没有 → ESP32 没发或者链路断开 + +### 5. 验证 UART0 物理连通 +- ESP32 代码加一句 `Serial0.println("TEST")` +- Android 端看能否收到 `TEST` +- 能收到 → UART0 物理链路 OK +- 收不到 → 波特率/接线/CH343 驱动问题 + +--- + +## 六、最重要的 3 条经验 + +### 1. 面向 Android 业务通讯选择 USB-UART 桥芯片(CH340/CH343),不要用 ESP32 自带 USB-Serial-JTAG + +**原因**:定制 Android(RK3588 等)的 USB CDC 驱动对 ESP32-S3 支持差,`com.hoho.android.usbserial` 库对 CH340 家族有 10+ 年成熟支持。 + +### 2. 访问硬件 UART 必须用 Arduino core 自带的 Serial0/Serial1/Serial2 + +**原因**:自建 `HardwareSerial(n)` 对象和 core 的全局对象共享硬件但 ring buffer 独立,**收不到数据**。用 `#define` 别名既清晰又安全。 + +### 3. 跨主机串口业务定义严格数据格式,接收端做正则兜底 + +**原因**:ESP32 端所有软件优化(互斥、flush、缓冲)都不能做到 100% 零截断。接收端用 `^SORC_HA\d+$` 过滤是数据完整性最可靠的保险。 + +--- + +## 七、关于 OrangePi CM5 + ESP32 的专项建议 + +1. **业务数据走 UART0 → CH343P → USB1**,不要走 USB-Serial-JTAG +2. **Android APP 端 SPUP 配置**: + - VID = `0x1A86`(WCH) + - PID = `0x55D5`(CH343,具体看芯片版本) + - 波特率 = 115200 + - 行尾符 = `\r\n`(CRLF) +3. **接收端正则过滤**:`^SORC_HA\d+$`、`^SO_BT[0-9]_(HIGH|LOW|HIGHL)$`、`^SO_WAKEUP[01]$` +4. **调试时 Windows 插 USB2(JTAG 口)**,不影响 Android 的 USB1 业务 +5. **两根 USB 线同时连接**是安全的(两条路径独立,不抢总线) + +--- + +## 八、未解决/待改进项 + +### 1. WS2812 bit-banging 与 SPI 的根本冲突 +- 当前靠 Core 隔离 + 降 FPS 缓解,仍有 5-10% 刷卡失败率 +- 彻底解决方案:改用 RMT 硬件驱动 WS2812(需改 FastLED 配置) + +### 2. Android 端 SPUP 的 VID/PID 匹配 +- 如果 Android 端 APP 被更新为用 ESP32 自带 USB(`303A:1001`),所有架构分析失效 +- 建议和 Android 开发者锁定**永远用 CH343 作为业务口** + +### 3. 双主机冲突防护 +- 目前假设 Windows 只在调试时插 +- 如果生产环境 Windows 意外插入 USB2,可能干扰启动(USB 枚举影响 Strapping 引脚状态) +- 建议生产设备完全封死 USB2 口 + +--- + +## 附录:关键代码片段 + +### `serialPrintlnSafe` (业务数据安全输出) + +```cpp +SemaphoreHandle_t serialMutex = NULL; + +void serialPrintlnSafe(const String& msg) { + if (serialMutex && xSemaphoreTake(serialMutex, pdMS_TO_TICKS(100)) == pdTRUE) { + SerialLinux.println(msg); + SerialLinux.flush(); + xSemaphoreGive(serialMutex); + } else { + SerialLinux.println(msg); // 降级路径 + } +} +``` + +### `handleCommandFromStream` (双串口命令接收) + +```cpp +void handleCommandFromStream(Stream& src, String& cmdBuf) { + while (src.available()) { + if (cmdBuf.length() > 64) { // 防御性长度保护 + src.println("错误: 命令过长"); + cmdBuf = ""; + while (src.available()) src.read(); + return; + } + char c = src.read(); + if (c == '\n') { + cmdBuf.trim(); // 兼容 \r\n + if (cmdBuf.length() > 0) processCommand(cmdBuf, src); + cmdBuf = ""; + } else { + cmdBuf += c; + } + } +} +``` + +### UART0 正确声明 + +```cpp +// 推荐:用宏别名(零开销 + 安全) +#define SerialLinux Serial0 + +// 不推荐:自创建对象(available 读不到数据) +// HardwareSerial SerialLinux(0); // 错误写法 + +// setup() 里初始化 +SerialLinux.begin(115200); +``` + +### 软复位命令 + +```cpp +else if (command == "RESET") { + Serial.println("System resetting..."); + SerialLinux.println("System resetting..."); + Serial.flush(); + SerialLinux.flush(); + delay(100); + ESP.restart(); +} +``` diff --git a/HOLOMAIN.ino b/HOLOMAIN.ino index 6578fcf..a44bf10 100644 --- a/HOLOMAIN.ino +++ b/HOLOMAIN.ino @@ -35,6 +35,37 @@ // 任务句柄 TaskHandle_t TaskRFID, TaskLED1, TaskLED2, TaskLED3, TaskPWM, TaskBTN0, TaskWAKEUP1, TaskBTN1, TaskBTN2; +// 双串口架构: +// - Serial = USB-Serial-JTAG (USB2 口),连 Windows 做调试日志 +// - SerialLinux = UART0 (CH343/USB1 口),连 Android 开发板收发业务数据 +// UART0 默认引脚:TX=GPIO43、RX=GPIO44(对应 CH343P 的 RXD/TXD) +// +// ⚠️ 重要:必须用 #define 别名引用 Arduino core 自带的 Serial0 对象 +// 不能自己创建 HardwareSerial(0),否则 Arduino core 的 UART0 RX 中断会把 +// 数据放进 Serial0 的 ring buffer,而自建对象的 available() 读不到 → 命令无响应 +#define SerialLinux Serial0 + +// Serial 输出互斥锁:防止多任务并发写串口导致数据交错/截断 +SemaphoreHandle_t serialMutex = NULL; + +// 业务数据输出:只发到 UART0 (给 Android 开发板) +// 调用方:RFID 任务发 SORC_xxx,按键任务发 SO_xxx +// 为什么不发 Serial (USB CDC): +// 1. 生产场景只连 Android,Windows 不连,Serial 写入+flush 在无 host 时可能阻塞 +// 2. 阻塞会拖慢 RFID 响应(之前刷卡不灵敏的潜在原因之一) +// 3. UART0 是广播式通讯,无 host 也能正常写入 FIFO,不阻塞 +// 互斥锁保留:虽然只发一个串口,但防止多任务并发调用时缓冲混乱 +void serialPrintlnSafe(const String& msg) { + if (serialMutex && xSemaphoreTake(serialMutex, pdMS_TO_TICKS(100)) == pdTRUE) { + SerialLinux.println(msg); + SerialLinux.flush(); // UART0 硬件 FIFO 128 字节,115200 波特率约 1ms 完成 + xSemaphoreGive(serialMutex); + } else { + // 降级路径:拿不到锁(极少发生) + SerialLinux.println(msg); + } +} + // 全局变量 MFRC522 rfid(RFID_SS_PIN, RFID_RST_PIN); // 创建RFID实例 CRGB leds1[LED_COUNT_1]; // 1颗灯珠数组 @@ -107,9 +138,39 @@ CRGB singleLedColors[8] = { CRGB::White // 7: 白色 }; +// RC522 硬件复位(运行时调用,不依赖 MFRC522 库的 RST 自动判断) +// 用于 setup 初始化和运行时检测到 RC522 异常时恢复 +void rc522HardResetRuntime() { + pinMode(RFID_RST_PIN, OUTPUT); + digitalWrite(RFID_RST_PIN, LOW); + delay(10); + digitalWrite(RFID_RST_PIN, HIGH); + delay(50); +} + // RFID读取任务 void TaskRFIDcode(void* pvParameters) { + // 运行时健康检查:每 5 秒读一次 VersionReg,检测到异常自动恢复 + // 防止运行过程中 RC522 因电源波动、WS2812 大电流干扰等原因进入异常状态 + static uint32_t lastHealthCheck = 0; + const uint32_t HEALTH_CHECK_INTERVAL_MS = 5000; + for (;;) { + // 运行时健康检查(和下面的轮询并行) + uint32_t now = millis(); + if (now - lastHealthCheck > HEALTH_CHECK_INTERVAL_MS) { + lastHealthCheck = now; + byte version = rfid.PCD_ReadRegister(MFRC522::VersionReg); + if (version != 0x91 && version != 0x92) { + // 通讯异常,自动恢复 + Serial.print("RC522 health check failed (VersionReg=0x"); + Serial.print(version, HEX); + Serial.println("), reinitializing..."); + rc522HardResetRuntime(); + rfid.PCD_Init(); + } + } + // 寻找新卡片 if (!rfid.PICC_IsNewCardPresent()) { delay(10); @@ -133,11 +194,12 @@ void TaskRFIDcode(void* pvParameters) { MFRC522::StatusCode status; status = rfid.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, 4, &key, &(rfid.uid)); if (status != MFRC522::STATUS_OK) { - Serial.print(F("Authentication failed: ")); - Serial.println(rfid.GetStatusCodeName(status)); + // 调试日志用普通 Serial.println:失败频率较高时,避免 flush 阻塞拖慢 RFID 响应 + // 偶尔截断可接受(Linux 端用正则 ^SORC_HA\d+$ 过滤业务数据即可) + Serial.println(String("Authentication failed: ") + rfid.GetStatusCodeName(status)); rfid.PICC_HaltA(); rfid.PCD_StopCrypto1(); - delay(100); + delay(30); // 从 100ms 降到 30ms,提升刷卡响应速度 continue; } @@ -146,23 +208,47 @@ void TaskRFIDcode(void* pvParameters) { byte size = sizeof(buffer); status = rfid.MIFARE_Read(4, buffer, &size); if (status != MFRC522::STATUS_OK) { - Serial.print(F("Reading failed: ")); - Serial.println(rfid.GetStatusCodeName(status)); - } else { - // 转换为ASCII字符串 - for (byte i = 0; i < 16; i++) { - if (buffer[i] >= 32 && buffer[i] <= 126) { // 可打印ASCII字符 - cardData += (char)buffer[i]; - } + Serial.println(String("Reading failed: ") + rfid.GetStatusCodeName(status)); + rfid.PICC_HaltA(); + rfid.PCD_StopCrypto1(); + delay(30); // 从 100ms 降到 30ms + continue; + } + + // 转换为ASCII字符串 + for (byte i = 0; i < 16; i++) { + if (buffer[i] >= 32 && buffer[i] <= 126) { // 可打印ASCII字符 + cardData += (char)buffer[i]; } + } - // 移除空白字符 - cardData.trim(); + // 移除空白字符 + cardData.trim(); - // 卡片数据处理 - if (cardData != lastCardData && !cardData.isEmpty()) { - lastCardData = cardData; - Serial.println("SORC_" + cardData); + // 卡片数据格式校验:规则 "HA" + 阿拉伯数字 + // 过滤掉卡片读取异常或数据损坏的情况,避免发送无效数据给 Linux + auto isValidCardData = [](const String& d) -> bool { + if (d.length() < 3) return false; // 至少 "HA" + 1 位数字 + if (!d.startsWith("HA")) return false; // 必须以 HA 开头 + for (size_t i = 2; i < d.length(); i++) { + if (!isdigit(d[i])) return false; // HA 后面必须全是数字 + } + return true; + }; + + // 3 秒去重窗口:同一张卡 3 秒内只发送一次,超过后允许重发 + // 切换到不同卡立即发送 + static String lastSentCard = ""; + static unsigned long lastSentTime = 0; + const unsigned long DUPLICATE_WINDOW_MS = 3000; + + if (!cardData.isEmpty() && isValidCardData(cardData)) { + unsigned long now = millis(); + bool isDuplicate = (cardData == lastSentCard) && (now - lastSentTime < DUPLICATE_WINDOW_MS); + if (!isDuplicate) { + serialPrintlnSafe("SORC_" + cardData); + lastSentCard = cardData; + lastSentTime = now; } } @@ -207,7 +293,9 @@ void TaskPWMcode(void* pvParameters) { // 按钮0检测任务 void TaskBTN0code(void* pvParameters) { static unsigned long pressStartTime = 0; - static bool lastState = HIGH; + // 首次进入任务时读取实际电平作为初始值,避免上电时 GPIO 浮空触发虚假边沿事件 + bool lastState = digitalRead(BTN0_PIN); + btn0State = lastState; for (;;) { bool currentState = digitalRead(BTN0_PIN); @@ -216,19 +304,19 @@ void TaskBTN0code(void* pvParameters) { if (lastState == HIGH && currentState == LOW) { pressStartTime = millis(); btn0State = LOW; - Serial.println("SO_BT0_HIGH"); + serialPrintlnSafe("SO_BT0_HIGH"); btn0LongPress = false; } // 检测上升沿(释放) else if (lastState == LOW && currentState == HIGH) { btn0State = HIGH; - Serial.println("SO_BT0_LOW"); + serialPrintlnSafe("SO_BT0_LOW"); btn0LongPress = false; } // 检测长按 else if (currentState == LOW && millis() - pressStartTime >= 2000 && !btn0LongPress) { btn0LongPress = true; - Serial.println("SO_BT0_HIGHL"); + serialPrintlnSafe("SO_BT0_HIGHL"); } lastState = currentState; @@ -238,7 +326,9 @@ void TaskBTN0code(void* pvParameters) { // WAKEUP1检测任务 void TaskWAKEUP1code(void* pvParameters) { - static bool lastState = LOW; + // 首次进入任务时读取实际电平作为初始值,避免上电时 GPIO 浮空触发虚假边沿事件 + bool lastState = digitalRead(WAKEUP1_PIN); + wakeup1State = lastState; for (;;) { bool currentState = digitalRead(WAKEUP1_PIN); @@ -246,12 +336,12 @@ void TaskWAKEUP1code(void* pvParameters) { // 检测上升沿 if (lastState == LOW && currentState == HIGH) { wakeup1State = HIGH; - Serial.println("SO_WAKEUP1"); + serialPrintlnSafe("SO_WAKEUP1"); } // 检测下降沿 else if (lastState == HIGH && currentState == LOW) { wakeup1State = LOW; - Serial.println("SO_WAKEUP0"); + serialPrintlnSafe("SO_WAKEUP0"); } lastState = currentState; @@ -261,7 +351,9 @@ void TaskWAKEUP1code(void* pvParameters) { // 按钮1检测任务 void TaskBTN1code(void* pvParameters) { - static bool lastState = LOW; + // 首次进入任务时读取实际电平作为初始值,避免上电时 GPIO 浮空触发虚假边沿事件 + bool lastState = digitalRead(BTN1_PIN); + btn1State = lastState; for (;;) { bool currentState = digitalRead(BTN1_PIN); @@ -269,12 +361,12 @@ void TaskBTN1code(void* pvParameters) { // 检测上升沿 if (lastState == LOW && currentState == HIGH) { btn1State = HIGH; - Serial.println("SO_BT1_HIGH"); + serialPrintlnSafe("SO_BT1_HIGH"); } // 检测下降沿 else if (lastState == HIGH && currentState == LOW) { btn1State = LOW; - Serial.println("SO_BT1_LOW"); + serialPrintlnSafe("SO_BT1_LOW"); } lastState = currentState; @@ -284,7 +376,9 @@ void TaskBTN1code(void* pvParameters) { // 按钮2检测任务 void TaskBTN2code(void* pvParameters) { - static bool lastState = LOW; + // 首次进入任务时读取实际电平作为初始值,避免上电时 GPIO 浮空触发虚假边沿事件 + bool lastState = digitalRead(BTN2_PIN); + btn2State = lastState; for (;;) { bool currentState = digitalRead(BTN2_PIN); @@ -292,12 +386,12 @@ void TaskBTN2code(void* pvParameters) { // 检测上升沿 if (lastState == LOW && currentState == HIGH) { btn2State = HIGH; - Serial.println("SO_BT2_HIGH"); + serialPrintlnSafe("SO_BT2_HIGH"); } // 检测下降沿 else if (lastState == HIGH && currentState == LOW) { btn2State = LOW; - Serial.println("SO_BT2_LOW"); + serialPrintlnSafe("SO_BT2_LOW"); } lastState = currentState; @@ -305,131 +399,111 @@ void TaskBTN2code(void* pvParameters) { } } -// 串口命令处理 -void handleSerialCommand() { - static String command = ""; +// 处理单条完整命令 +// 参数 resp 指向发送方串口,命令响应会回到发送方(Windows 发命令 Windows 收响应,Android 同理) +void processCommand(const String& command, Stream& resp) { + if (command.startsWith("MO_LED_")) { + String modeStr = command.substring(7); + int newMode = modeStr.toInt(); + if (newMode >= 0 && newMode <= 7) { + singleLedMode = newMode; + resp.print("Single LED set to mode: "); + resp.println(newMode); + } else { + resp.println("Invalid single LED mode command"); + } + } else if (command.startsWith("MO_LEDN_")) { + String modeStr = command.substring(8); + int newMode = modeStr.toInt(); + if (newMode >= 0 && newMode <= 5) { + if (led2Brightness == 0) { + resp.println("当前亮度为0,请先将亮度调整至0以上再切换显示模式!"); + } else { + ledMode = newMode; + if (newMode == 4) { + trainPos = -TRAIN_LENGTH; + trainPhase = 0; + rainbowHue = random8(); + } + if (newMode == 5) { + memcpy(frozenLeds2, leds2, sizeof(leds2)); + frozenBrightness = led2Brightness; + } + resp.print("LED strip set to mode: "); + resp.println(newMode); + } + } else { + resp.println("Invalid LED strip mode command"); + } + } else if (command.startsWith("MO_PWM_")) { + String dutyStr = command.substring(7); + int newDuty = dutyStr.toInt(); + if (newDuty == 1) { + pwmDuty = 1023; + } else if (newDuty == 0 || newDuty == 20 || newDuty == 40 || newDuty == 60 || newDuty == 80) { + pwmDuty = (newDuty * 1023) / 100; + } else { + resp.println("Invalid PWM command"); + } + resp.print("PWM set to: "); + resp.print((pwmDuty * 100) / 1023); + resp.println("%"); + } else if (command.startsWith("MO_BRI_")) { + String levelStr = command.substring(7); + levelStr.trim(); + if (levelStr.length() == 0) { + resp.println("错误: 缺少亮度值"); + return; + } + bool isNumeric = true; + for (char c : levelStr) { + if (!isdigit(c)) { isNumeric = false; break; } + } + if (!isNumeric) { + resp.println("错误: 亮度值必须为整数"); + return; + } + int level = levelStr.toInt(); + if (level >= 0 && level <= 100) { + led2Brightness = brightnessMap[level]; + resp.print("LED亮度: "); + resp.print(level); + resp.println("%"); + } else { + resp.println("错误: 亮度值需在0-100之间"); + } + } else if (command == "RESET") { + // 软复位:响应同时发到两个串口(Windows 和 Android 都能看到重启日志) + Serial.println("System resetting..."); + SerialLinux.println("System resetting..."); + Serial.flush(); + SerialLinux.flush(); + delay(100); + ESP.restart(); + } +} - while (Serial.available()) { - // 先检查命令长度(新增的防护代码) - if (command.length() > 64) { - Serial.println("错误: 命令过长(最大64字符)"); - command = ""; // 清空当前命令 - while (Serial.available()) Serial.read(); // 清空串口缓冲区 - continue; +// 从指定流读取命令字节,累积到完整一行后交给 processCommand 处理 +// 每个流需要独立的命令缓冲区(通过引用传入 static 变量保持状态) +void handleCommandFromStream(Stream& src, String& cmdBuf) { + while (src.available()) { + // 命令长度保护:防止恶意或异常数据撑爆内存 + if (cmdBuf.length() > 64) { + src.println("错误: 命令过长(最大64字符)"); + cmdBuf = ""; + while (src.available()) src.read(); + return; } - char c = Serial.read(); + char c = src.read(); if (c == '\n') { - // 处理命令 - if (command.startsWith("MO_LED_")) { - String modeStr = command.substring(7); - int newMode = modeStr.toInt(); - - // 控制单颗LED - if (newMode >= 0 && newMode <= 7) { - singleLedMode = newMode; - Serial.print("Single LED set to mode: "); - Serial.println(newMode); - } else { - Serial.println("Invalid single LED mode command"); - } - } else if (command.startsWith("MO_LEDN_")) { - String modeStr = command.substring(8); - int newMode = modeStr.toInt(); - - // 控制灯带(只有亮度不为0时才允许) - if (newMode >= 0 && newMode <= 5) { - if (led2Brightness == 0) { - Serial.println("当前亮度为0,请先将亮度调整至0以上再切换显示模式!"); - } else { - ledMode = newMode; - // 重置火车灯状态 - if (newMode == 4) { - trainPos = -TRAIN_LENGTH; - trainPhase = 0; - rainbowHue = random8(); - } - - // 新增:切换到模式5时,复制当前LED2状态和亮度 - if (newMode == 5) { - memcpy(frozenLeds2, leds2, sizeof(leds2)); - frozenBrightness = led2Brightness; // 保存冻结时的亮度 - } - - Serial.print("LED strip set to mode: "); - Serial.println(newMode); - } - } else { - Serial.println("Invalid LED strip mode command"); - } - } else if (command.startsWith("MO_PWM_")) { - String dutyStr = command.substring(7); - int newDuty = dutyStr.toInt(); - - // 检查PWM百分比 - if (newDuty == 1) { - pwmDuty = 1023; // 100% - } else if (newDuty == 0 || newDuty == 20 || newDuty == 40 || newDuty == 60 || newDuty == 80) { - pwmDuty = (newDuty * 1023) / 100; // 转换为实际占空比 - } else { - Serial.println("Invalid PWM command"); - } - - Serial.print("PWM set to: "); - Serial.print((pwmDuty * 100) / 1023); - Serial.println("%"); + cmdBuf.trim(); // 去掉末尾 \r 兼容不同行尾符 + if (cmdBuf.length() > 0) { + processCommand(cmdBuf, src); } - - else if (command.startsWith("MO_BRI_")) { - // 提取亮度参数(跳过"MO_BRI_"前缀) - String levelStr = command.substring(7); - levelStr.trim(); - command = ""; // 清空命令缓冲区 - - // 空参数检查 - if (levelStr.length() == 0) { - Serial.println("错误: 缺少亮度值"); - return; // 终止处理 - } - - // 严格数字验证(拒绝非数字字符) - bool isNumeric = true; - for (char c : levelStr) { - if (!isdigit(c)) { - isNumeric = false; - break; // 发现非数字立即退出 - } - } - - // 非数字错误处理 - if (!isNumeric) { - Serial.println("错误: 亮度值必须为整数"); - return; - } - - // 转换为整数并验证范围 - int level = levelStr.toInt(); - if (level >= 0 && level <= 100) { - // 更新亮度值(映射到PWM范围) - led2Brightness = brightnessMap[level]; // 使用预定义映射表 - Serial.print("LED亮度: "); - Serial.print(level); - Serial.println("%"); - - // // 亮度为0时输出警告 - // if (level == 0) { - // Serial.println("亮度已设置为0,所有灯光将熄灭!"); - // } - } else { - Serial.println("错误: 亮度值需在0-100之间"); - } - command = ""; // 清空命令 - } - - command = ""; // 清空命令 + cmdBuf = ""; } else { - // 累积非换行符字符 - command += c; + cmdBuf += c; } } } @@ -447,7 +521,9 @@ void handleSerialCommand() { // 5. 防闪烁机制,确保LED显示稳定 void TaskLEDUnifiedCode(void* pvParameters) { static unsigned long lastLEDUpdate = 0; - const unsigned long LED_UPDATE_INTERVAL = 33; // ~30FPS,降低更新频率减少闪烁 + // 20FPS 更新频率:兼顾视觉流畅度和 RFID 稳定性 + // 每秒 20 次 WS2812 传输(每次 ~5.6ms 关中断),相比 30FPS 减少 33% 干扰窗口 + const unsigned long LED_UPDATE_INTERVAL = 50; for (;;) { unsigned long currentTime = millis(); @@ -649,28 +725,67 @@ void TaskLEDUnifiedCode(void* pvParameters) { void setup() { - // 初始化串口 + // 初始化 USB CDC 串口(Windows 调试) + // 增大 TX 缓冲区到 4KB:防止多任务并发写串口时 USB CDC 默认缓冲区溢出导致数据截断 + Serial.setTxBufferSize(4096); Serial.begin(115200); + + // 初始化 UART0(CH343/USB1 → Linux 业务通讯) + // 默认引脚:TX=GPIO43、RX=GPIO44,波特率与 Linux 端保持一致 + SerialLinux.begin(115200); + + // 创建 Serial 输出互斥锁 + serialMutex = xSemaphoreCreateMutex(); + Serial.println("System starting..."); + SerialLinux.println("System starting..."); // 初始化SPI总线 SPI.begin(RFID_SCK_PIN, RFID_MISO_PIN, RFID_MOSI_PIN, RFID_SS_PIN); - // 初始化RFID - rfid.PCD_Init(); - Serial.println("RFID initialized."); + // 初始化RFID:显式硬件复位 + 版本校验 + 失败重试 + // 背景:MFRC522 库的 PCD_Init 自动判断 RST 电平,冷启动时 GPIO14 浮空可能读到 HIGH, + // 库只做软件复位但 RC522 尚未完成上电 → 芯片卡在异常状态 → 刷卡永远失败。 + // 显式拉低再拉高 RST 可避免这个坑。GitHub miguelbalboa/rfid #229 #269 记录此问题。 + // 复用顶部定义的 rc522HardResetRuntime() 函数 + + // 最多重试 3 次初始化,直到版本寄存器返回合法值 + bool rfidReady = false; + for (uint8_t attempt = 1; attempt <= 3; attempt++) { + rc522HardResetRuntime(); // 显式拉低再拉高 RST + rfid.PCD_Init(); + byte version = rfid.PCD_ReadRegister(MFRC522::VersionReg); + Serial.print("RC522 init attempt "); + Serial.print(attempt); + Serial.print(", VersionReg=0x"); + Serial.println(version, HEX); + // 0x91=v1.0, 0x92=v2.0 为合法;0x00/0xFF 表示通讯异常 + if (version == 0x91 || version == 0x92) { + rfidReady = true; + break; + } + delay(100); // 重试前等待 + } + + if (rfidReady) { + Serial.println("RFID initialized."); + } else { + Serial.println("RFID initialization FAILED after 3 attempts! Check wiring/power."); + } // 初始化LED FastLED.addLeds(leds1, LED_COUNT_1); FastLED.addLeds(leds2, LED_COUNT_2); FastLED.addLeds(leds3, LED_COUNT_3); // 新增LED3 - // 初始化LED状态 - fill_solid(leds1, LED_COUNT_1, singleLedColors[singleLedMode]); - fill_solid(leds2, LED_COUNT_2, CHSV(0, 0, led2Brightness)); // 初始化白色 - fill_solid(leds3, LED_COUNT_3, CRGB::Black); // 强制GPIO48的灯珠熄灭 + // 启动时先全黑,避免 186 颗 LED 同时点亮产生瞬时 4.5A 大电流 + // 冲击 3.3V/5V 电源导致刚初始化好的 RC522 进入异常状态 + // TaskLEDUnified 启动后会根据 ledMode/led2Brightness 自动恢复默认显示 + fill_solid(leds1, LED_COUNT_1, CRGB::Black); + fill_solid(leds2, LED_COUNT_2, CRGB::Black); + fill_solid(leds3, LED_COUNT_3, CRGB::Black); FastLED.show(); - Serial.println("LED initialized."); + Serial.println("LED initialized (dark startup, task will restore default)."); // 初始化PWM // 创建LED控制器配置 @@ -709,14 +824,15 @@ void setup() { Serial.println("Inputs initialized."); // 创建任务 + // TaskRFID 放 Core 0:避开 Core 1 上 WS2812 bit-banging 关中断窗口,SPI 通讯更稳定 xTaskCreatePinnedToCore( TaskRFIDcode, /* 任务函数 */ "TaskRFID", /* 任务名称 */ 4096, /* 任务栈大小 */ NULL, /* 传递给任务的参数 */ - 1, /* 任务优先级 */ + 2, /* 任务优先级(提高到 2,避免被按键任务频繁抢占)*/ &TaskRFID, /* 任务句柄 */ - 1); /* 运行在核心1上 */ + 0); /* 运行在核心0上(与 LED 任务物理隔离)*/ xTaskCreatePinnedToCore( TaskLEDUnifiedCode, @@ -776,8 +892,14 @@ void setup() { } void loop() { - // 处理串口命令 - handleSerialCommand(); + // 同时处理两个串口的命令输入(双端都能下发控制命令) + // - Serial (USB-Serial-JTAG):Windows 调试发命令 + // - SerialLinux (UART0 / CH343):Android 开发板发命令 + // 两个缓冲区独立保存,避免一方半发命令被另一方打断 + static String cmdFromSerial = ""; + static String cmdFromLinux = ""; + handleCommandFromStream(Serial, cmdFromSerial); + handleCommandFromStream(SerialLinux, cmdFromLinux); // 让出CPU时间 delay(1); diff --git a/docs/ESP32-S3-SCH-V1.4.pdf b/docs/ESP32-S3-SCH-V1.4.pdf new file mode 100644 index 0000000000000000000000000000000000000000..d78b995d6782551b2d054a8c8f788bd6763577b7 GIT binary patch literal 957229 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

{N}G#YXNGw&?q>bdvf9u8!} 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 literal 0 HcmV?d00001