/*
熱血阿伯東拼西湊的作品
*/
/*
RFID讀卡機連接NodeMCU的接腳方式
RST = GPIO5
SDA(SS) = GPIO4
MOSI = GPIO13
MISO = GPIO12
SCK = GPIO14
GND = GND
3.3V = 3.3V
*/
熱血阿伯東拼西湊的作品
*/
/*
RFID讀卡機連接NodeMCU的接腳方式
RST = GPIO5
SDA(SS) = GPIO4
MOSI = GPIO13
MISO = GPIO12
SCK = GPIO14
GND = GND
3.3V = 3.3V
*/
#include <ESP8266WiFi.h> // 引用程式庫
#include <SPI.h> // 引用程式庫
#include <MFRC522.h> // 引用程式庫
#include <SPI.h> // 引用程式庫
#include <MFRC522.h> // 引用程式庫
#define RST_PIN 5 // 讀卡機的重置腳位
#define SS_PIN 4 // 晶片選擇腳位
#define SS_PIN 4 // 晶片選擇腳位
const char *ssid = "angel in us coffee"; // WIFI名稱
const char *pass = "angelinus"; // WIFI密碼
const char *pass = "angelinus"; // WIFI密碼
struct RFIDTag { // 定義結構
byte uid[4];
char *name;
};
byte uid[4];
char *name;
};
struct RFIDTag tags[] = { // 初始化結構資料
{{229,206,22,119}, "BossFred"},
{{0xD4,0xD3,0xC0,0x61}, "Raspberry Pi"},
{{0x15,0x8,0xA,0x53}, "Espruino"}
};
{{229,206,22,119}, "BossFred"},
{{0xD4,0xD3,0xC0,0x61}, "Raspberry Pi"},
{{0x15,0x8,0xA,0x53}, "Espruino"}
};
byte totalTags = sizeof(tags) / sizeof(RFIDTag);
MFRC522 mfrc522(SS_PIN, RST_PIN); // 建立MFRC522物件
/////////////////// 設定 ///////////////////
void setup()
{
Serial.begin(115200);
delay(1000);
Serial.println("RFID reader initial...");
SPI.begin(); // 初始化SPI BUS
mfrc522.PCD_Init(); // 初始化MFRC522讀卡機模組
void setup()
{
Serial.begin(115200);
delay(1000);
Serial.println("RFID reader initial...");
SPI.begin(); // 初始化SPI BUS
mfrc522.PCD_Init(); // 初始化MFRC522讀卡機模組
WiFi.begin(ssid, pass); // 初始化WiFi
int retries = 0;
while ((WiFi.status() != WL_CONNECTED) && (retries < 10)) {
retries++;
delay(500);
Serial.print(".");
}
if (WiFi.status() == WL_CONNECTED) {
Serial.println(F("WiFi connected"));
}
Serial.println(F("WiFi Ready!"));
Serial.println(F("============================"));
Serial.println(F("Scan for Card and print UID:"));
}
int retries = 0;
while ((WiFi.status() != WL_CONNECTED) && (retries < 10)) {
retries++;
delay(500);
Serial.print(".");
}
if (WiFi.status() == WL_CONNECTED) {
Serial.println(F("WiFi connected"));
}
Serial.println(F("WiFi Ready!"));
Serial.println(F("============================"));
Serial.println(F("Scan for Card and print UID:"));
}
/////////////////// 迴圈 ///////////////////
void loop()
{
// 確認是否有新卡片
if (mfrc522.PICC_IsNewCardPresent() && mfrc522.PICC_ReadCardSerial()) { // 如果出現新卡片就讀取卡片資料
delay(100);
byte *id = mfrc522.uid.uidByte; // 取得卡片的UID
byte idSize = mfrc522.uid.size; // 取得UID的長度
bool foundTag = false; // 是否找到紀錄中的標籤,預設為「否」。
for (byte i=0; i<totalTags; i++) { // 逐一檢查UID碼
if (memcmp(tags[i].uid, id, idSize) == 0) {
Serial.println(tags[i].name); // 顯示結構化資料中標籤的名稱
foundTag = true; // 設定成「找到標籤了!」
void loop()
{
// 確認是否有新卡片
if (mfrc522.PICC_IsNewCardPresent() && mfrc522.PICC_ReadCardSerial()) { // 如果出現新卡片就讀取卡片資料
delay(100);
byte *id = mfrc522.uid.uidByte; // 取得卡片的UID
byte idSize = mfrc522.uid.size; // 取得UID的長度
bool foundTag = false; // 是否找到紀錄中的標籤,預設為「否」。
for (byte i=0; i<totalTags; i++) { // 逐一檢查UID碼
if (memcmp(tags[i].uid, id, idSize) == 0) {
Serial.println(tags[i].name); // 顯示結構化資料中標籤的名稱
foundTag = true; // 設定成「找到標籤了!」
Serial.print(F("Card UID:")); // 顯示卡片的UID
dump_byte_array(mfrc522.uid.uidByte, mfrc522.uid.size);
Serial.println();
Serial.println("Wait 5 seconds for next one...");
break; // 退出for迴圈
}
}
if (!foundTag) { // 若掃描到紀錄之外的標籤,則顯示"Wrong card!"。
Serial.println("Wrong card!");
}
mfrc522.PICC_HaltA(); // 讓卡片進入停止模式
delay(5000);
}
}
dump_byte_array(mfrc522.uid.uidByte, mfrc522.uid.size);
Serial.println();
Serial.println("Wait 5 seconds for next one...");
break; // 退出for迴圈
}
}
if (!foundTag) { // 若掃描到紀錄之外的標籤,則顯示"Wrong card!"。
Serial.println("Wrong card!");
}
mfrc522.PICC_HaltA(); // 讓卡片進入停止模式
delay(5000);
}
}
// Helper routine to dump a byte array as hex values to Serial
void dump_byte_array(byte *buffer, byte bufferSize) {
for (byte i = 0; i < bufferSize; i++) {
Serial.print(buffer[i] < 0x10 ? " 0" : " ");
Serial.print(buffer[i], DEC); //10進位;或者使用16進位HEX
}
}
void dump_byte_array(byte *buffer, byte bufferSize) {
for (byte i = 0; i < bufferSize; i++) {
Serial.print(buffer[i] < 0x10 ? " 0" : " ");
Serial.print(buffer[i], DEC); //10進位;或者使用16進位HEX
}
}