Hi I'm new with Arduino and I have been working on Node MCU ESP8266MOD with RC522 and MicroSD Card Adapter.. my code works but when I tried connecting MicroSD Card the RC522 RF Tag Reader will not work.. need your help on any suggestion that could fix this problem. TIA
Here's my code for your reference
#include <ESP8266WiFi.h>
#include <ESP8266Ping.h>
#include <SPI.h>
#include <MFRC522.h>
#include <SD.h> // Required for SD card logging
// WiFi Credentials
const char* ssid = "Wifi Name";
const char* password = "wifi password";
// RC522 Pins
#define SS_PIN D4 // SDA (CS)
#define RST_PIN D3 // RST
// SD Card Pin
#define SD_CS_PIN D8
// LED Pins
const int ledWiFiConnected = D1;
const int ledWiFiDisconnected = D2;
MFRC522 rfid(SS_PIN, RST_PIN);
// Timing
unsigned long lastWiFiCheck = 0;
unsigned long lastInternetCheck = 0;
const unsigned long wifiCheckInterval = 5000;
const unsigned long internetCheckInterval = 10000;
// Status Flags
bool isWiFiConnected = false;
bool isInternetConnected = false;
void setup() {
Serial.begin(9600);
SPI.begin();
pinMode(SS_PIN, OUTPUT);
digitalWrite(SS_PIN, HIGH);
pinMode(SD_CS_PIN, OUTPUT);
digitalWrite(SD_CS_PIN, HIGH);
rfid.PCD_Init();
delay(100);
byte version = rfid.PCD_ReadRegister(MFRC522::VersionReg);
if (version == 0x00 || version == 0xFF) {
Serial.println("ERROR: RC522 not found. Check wiring and power.");
} else {
Serial.print("RC522 Firmware Version: 0x");
Serial.println(version, HEX);
}
pinMode(ledWiFiConnected, OUTPUT);
pinMode(ledWiFiDisconnected, OUTPUT);
digitalWrite(ledWiFiConnected, LOW);
digitalWrite(ledWiFiDisconnected, HIGH);
WiFi.begin(ssid, password);
Serial.println("Connecting to WiFi...");
}
void loop() {
scanRFID();
checkWiFiStatus();
if (WiFi.status() == WL_CONNECTED) {
checkInternetStatus();
}
}
void scanRFID() {
activateRC522(true);
if (!rfid.PICC_IsNewCardPresent()) {
activateRC522(false);
return;
}
if (!rfid.PICC_ReadCardSerial()) {
Serial.println("Card detected but failed to read.");
activateRC522(false);
return;
}
String uidString = "";
for (byte i = 0; i < rfid.uid.size; i++) {
uidString += (rfid.uid.uidByte[i] < 0x10 ? "0" : "");
uidString += String(rfid.uid.uidByte[i], HEX);
}
uidString.toUpperCase();
Serial.print("RFID Tag UID: ");
Serial.println(uidString);
// Deactivate RFID before logging to SD
rfid.PICC_HaltA();
rfid.PCD_StopCrypto1();
activateRC522(false);
// Log to SD
activateSDCard(true);
if (SD.begin(SD_CS_PIN)) {
File logFile = SD.open("/rfid_log.txt", FILE_WRITE);
if (logFile) {
logFile.print("UID: ");
logFile.print(uidString);
logFile.print(" | Time: ");
logFile.println(millis());
logFile.close();
Serial.println("Logged to SD card.");
} else {
Serial.println("Failed to open log file.");
}
} else {
Serial.println("SD Card not available.");
}
activateSDCard(false);
}
void checkInternetStatus() {
unsigned long currentMillis = millis();
if (currentMillis - lastInternetCheck >= internetCheckInterval) {
lastInternetCheck = currentMillis;
IPAddress targetIP;
WiFi.hostByName("www.google.com", targetIP);
bool pingResult = Ping.ping(targetIP, 1);
if (pingResult && !isInternetConnected) {
Serial.println("Internet access confirmed!");
Serial.print("IP Address: ");
Serial.println(WiFi.localIP());
isInternetConnected = true;
digitalWrite(ledWiFiConnected, HIGH);
digitalWrite(ledWiFiDisconnected, LOW);
} else if (!pingResult && isInternetConnected) {
Serial.println("Lost Internet access.");
isInternetConnected = false;
digitalWrite(ledWiFiConnected, LOW);
digitalWrite(ledWiFiDisconnected, HIGH);
}
}
}
void checkWiFiStatus() {
unsigned long currentMillis = millis();
if (currentMillis - lastWiFiCheck >= wifiCheckInterval) {
lastWiFiCheck = currentMillis;
if (WiFi.status() != WL_CONNECTED) {
Serial.println("WiFi Disconnected. Reconnecting...");
WiFi.begin(ssid, password);
digitalWrite(ledWiFiConnected, LOW);
digitalWrite(ledWiFiDisconnected, HIGH);
isWiFiConnected = false;
isInternetConnected = false;
} else if (!isWiFiConnected) {
Serial.println("WiFi Connected.");
digitalWrite(ledWiFiConnected, HIGH);
digitalWrite(ledWiFiDisconnected, LOW);
isWiFiConnected = true;
}
}
}
void activateRC522(bool active) {
digitalWrite(SS_PIN, active ? LOW : HIGH);
}
void activateSDCard(bool active) {
digitalWrite(SD_CS_PIN, active ? LOW : HIGH);
}