Enhance HardwareRfid class with detailed logging and hardware verification; update main loop to log detected RFID tags

This commit is contained in:
2025-10-04 16:17:08 +02:00
parent c8b7882c2d
commit 7902518002
4 changed files with 67 additions and 12 deletions
+50 -5
View File
@@ -1,19 +1,59 @@
#include "hardware_rfid.hpp" #include "hardware_rfid.hpp"
#include <Arduino.h> #include <Arduino.h>
#include <SPI.h>
//#define DEBUG_RFID
#ifdef DEBUG_RFID
#define LOG(msg) Serial.println(msg)
#else
#define LOG(msg)
#endif
HardwareRfid::HardwareRfid(uint8_t ssPin, uint8_t rstPin) HardwareRfid::HardwareRfid(uint8_t ssPin, uint8_t rstPin)
: _mfrc(ssPin, rstPin) {} : _mfrc(ssPin, rstPin) {}
void HardwareRfid::begin() { void HardwareRfid::begin() {
LOG("RFID begin called");
SPI.begin(); // Initialize SPI bus
_mfrc.PCD_Init(); _mfrc.PCD_Init();
// Verify MFRC522 hardware
uint8_t version = _mfrc.PCD_ReadRegister(_mfrc.VersionReg);
if (version == 0x00 || version == 0xFF) {
LOG("ERROR: Failed to detect MFRC522 hardware. Check wiring or power.");
} else {
LOG("MFRC522 detected, version: 0x" + String(version, HEX));
}
// Optional: Set antenna gain for better range
_mfrc.PCD_SetAntennaGain(_mfrc.RxGain_max);
LOG("RFID initialized, antenna gain set to max");
} }
void HardwareRfid::end() { void HardwareRfid::end() {
// Nothing special to do LOG("RFID end called");
SPI.end(); // Stop SPI bus
} }
void HardwareRfid::update() { void HardwareRfid::update() {
if (!_mfrc.PICC_IsNewCardPresent() || !_mfrc.PICC_ReadCardSerial()) { static unsigned long lastLog = 0;
unsigned long now = millis();
if (now - lastLog >= 1000) {
LOG("RFID update called");
lastLog = now;
}
// Check if a new card is present
if (!_mfrc.PICC_IsNewCardPresent()) {
if (now - lastLog >= 1000) {
LOG("No new card present");
}
return;
}
// Try to read the card's serial number
if (!_mfrc.PICC_ReadCardSerial()) {
LOG("Failed to read card serial");
return; return;
} }
@@ -22,23 +62,28 @@ void HardwareRfid::update() {
for (byte i = 0; i < _mfrc.uid.size; i++) { for (byte i = 0; i < _mfrc.uid.size; i++) {
cardId = (cardId << 8) | _mfrc.uid.uidByte[i]; cardId = (cardId << 8) | _mfrc.uid.uidByte[i];
} }
LOG("Card detected, UID: 0x" + String(cardId, HEX));
// Create the message // Create the message
hardware_SensorToControlMessage msg = {0}; hardware_SensorToControlMessage msg = hardware_SensorToControlMessage_init_zero;
msg.sensor_id = 0; // Assuming single sensor msg.sensor_id = 0; // Assuming single sensor
msg.which_payload = hardware_SensorToControlMessage_rfid_reading_tag; // Assuming this is the tag msg.which_payload = hardware_SensorToControlMessage_rfid_reading_tag;
msg.payload.rfid_reading.card_id = cardId; msg.payload.rfid_reading.card_id = cardId;
// Call the callback if set // Call the callback if set
if (_callback) { if (_callback) {
LOG("Callback is set, calling it with card ID: 0x" + String(cardId, HEX));
_callback(msg); _callback(msg);
} else {
LOG("Callback not set");
} }
// Halt the card // Halt the card and stop crypto
_mfrc.PICC_HaltA(); _mfrc.PICC_HaltA();
_mfrc.PCD_StopCrypto1(); _mfrc.PCD_StopCrypto1();
} }
void HardwareRfid::setCallback(RfidCallback cb) { void HardwareRfid::setCallback(RfidCallback cb) {
_callback = cb; _callback = cb;
LOG("RFID callback set");
} }
+14 -5
View File
@@ -1,13 +1,22 @@
#pragma once #pragma once
#include <MFRC522.h>
#include <functional>
#include "hardware.pb.h" #include "hardware.pb.h"
#include <MFRC522.h>
typedef std::function<void(const hardware_SensorToControlMessage&)> RfidCallback; /**
* @class HardwareRfid
* @brief Manages an MFRC522 RFID reader on ESP8266.
* Reads card UIDs and sends them via a callback using hardware_SensorToControlMessage.
*/
class HardwareRfid { class HardwareRfid {
public: public:
using RfidCallback = void (*)(const hardware_SensorToControlMessage&);
/**
* @brief Constructor for HardwareRfid.
* @param ssPin SPI Slave Select (SS) pin for MFRC522.
* @param rstPin Reset pin for MFRC522.
*/
HardwareRfid(uint8_t ssPin, uint8_t rstPin); HardwareRfid(uint8_t ssPin, uint8_t rstPin);
void begin(); void begin();
void end(); void end();
@@ -16,5 +25,5 @@ public:
private: private:
MFRC522 _mfrc; MFRC522 _mfrc;
RfidCallback _callback; RfidCallback _callback = nullptr;
}; };
+1 -1
View File
@@ -26,4 +26,4 @@ custom_nanopb_protos =
--error-on-unmatched --error-on-unmatched
[env:esp8285] [env:esp8285]
platform = espressif8266 platform = espressif8266
board = esp8285 board = esp12e
+1
View File
@@ -14,6 +14,7 @@ unsigned long lastChange = 0;
int currentConfig = 0; int currentConfig = 0;
void onRfidTag(const hardware_SensorToControlMessage& msg) { void onRfidTag(const hardware_SensorToControlMessage& msg) {
Serial.println("Callback onRfidTag triggered");
Serial.print("RFID Tag detected: 0x"); Serial.print("RFID Tag detected: 0x");
Serial.println(msg.payload.rfid_reading.card_id, HEX); Serial.println(msg.payload.rfid_reading.card_id, HEX);
} }