如何为RFID智能锁添加非阻塞读卡延迟(ESP8266+SinricPro)
智能锁RFID读卡频率限制解决方案
问题背景
我正在开发一款搭载RFID模块、ESP8266并集成SinricPro(对接Alexa、Google Home)的智能锁,遇到以下问题:
在处理RFID读卡的handleRFID()函数中,当卡片持续感应时,串口会被重复的有效/无效卡信息刷屏,同时向SinricPro API发送大量重复请求。由于不能使用delay()函数,需要在代码标注位置添加超时机制:有效卡解锁后等待TEMP_AUTOLOCK时长再重新读卡,无效卡等待约3秒后再重新读卡,以此限制读卡频率。
原代码如下:
void handleRFID() { if (RFID_card_is_not_present()) return; String card_id = get_RFID_card_ID(); bool RFID_card_is_valid = validate_RFID_card(card_id); if (RFID_card_is_valid) { Serial.printf("The RFID card \"%s\" is valid.\r\n", card_id.c_str()); unlock_with_auto_relock(); send_lock_state(false); // Insert a timeout here, to start reading the card again only after TEMP_AUTOLOCK is over } else { Serial.printf("The RFID card \"%s\" is not valid.\r\n", card_id.c_str()); // Insert a delay time here, to start reading the card again only after X time (something like 3 seconds) } }
解决方案
实现思路
采用非阻塞式的时间戳判断机制,通过记录上次处理读卡的时间,在函数开头检查是否处于冷却周期,若未过冷却期则直接跳过本次读卡处理,避免重复触发。
修改后的完整代码
首先在全局区域定义两个变量,用于记录冷却时间:
// 全局变量:记录上次处理RFID的时间戳 unsigned long lastRFIDProcessTime = 0; // 全局变量:当前需要等待的冷却时长(毫秒) unsigned long rfidCooldownDuration = 0;
然后修改handleRFID()函数:
void handleRFID() { // 检查是否处于冷却期,未到时间直接返回 if (millis() - lastRFIDProcessTime < rfidCooldownDuration) { return; } if (RFID_card_is_not_present()) return; String card_id = get_RFID_card_ID(); bool RFID_card_is_valid = validate_RFID_card(card_id); if (RFID_card_is_valid) { Serial.printf("The RFID card \"%s\" is valid.\r\n", card_id.c_str()); unlock_with_auto_relock(); send_lock_state(false); // 设置有效卡解锁后的冷却时长为TEMP_AUTOLOCK rfidCooldownDuration = TEMP_AUTOLOCK; lastRFIDProcessTime = millis(); } else { Serial.printf("The RFID card \"%s\" is not valid.\r\n", card_id.c_str()); // 设置无效卡后的冷却时长为3秒(3000毫秒) rfidCooldownDuration = 3000; lastRFIDProcessTime = millis(); } }
代码说明
lastRFIDProcessTime:存储上次完成读卡处理的时间,使用millis()获取系统运行时间,完全避免delay()阻塞程序rfidCooldownDuration:动态设置冷却时长,有效卡时复用已定义的TEMP_AUTOLOCK,无效卡时设为3000毫秒- 函数开头的时间差判断,确保在冷却周期内不会重复处理同一卡片的感应,彻底解决串口刷屏和重复API请求问题
内容的提问来源于stack exchange,提问作者Gabriel Borges
相关产品推荐
相关产品推荐

