esp8266+frc522点亮led
本帖最后由 一入极客深似海 于 2021-1-21 12:02 编辑刷卡点亮led,改一下就是控制门的开关,这里给大家提供一种简单的思路。只是一个方法,正所谓条条大路通北京。
此程序是在CSDN上一位博主的示例程序基础上修改的,这是他的地址 https://blog.csdn.net/qq_31878883/article/details/88971935
/*
* 此例程为ESP8266(ESP12-Module)连接FRC522
*
* 引脚接线图
* SEP8266 FRC522
* ---------------------------
* D1 RST
* D2 SDA
* D5 SCK
* D6 MSOI
* D7 MOSI
* GND GND
* 3.3V 3.3V
* RQ (不接) *
*/
#include <SPI.h>
#include <MFRC522.h>
#define RST_PIN 5 // 配置针脚
#define SS_PIN 4
#define LED D4 //定义刷卡正确控制引脚
#define LED_err D8 //定义刷卡错误控制引脚
MFRC522 mfrc522(SS_PIN, RST_PIN); // 创建新的RFID实例
MFRC522::MIFARE_Key key;
int NfcNum[]={733,887,539,664,692,836};//存储 需刷卡的值
int NumBer ; //定义全局变量,将存储卡的总值
void setup() {
Serial.begin(9600); // 设置串口波特率为9600
SPI.begin(); // SPI开始
mfrc522.PCD_Init(); // Init MFRC522 card
/*引脚初始化*/
pinMode(LED,OUTPUT);
pinMode(LED_err,OUTPUT);
digitalWrite(LED_err,0);
digitalWrite(LED,1);
Serial.println();
Serial.println("初始化完成");
}
void loop() {
// 寻找新卡
if ( ! mfrc522.PICC_IsNewCardPresent()) {
//Serial.println("没有找到卡");
return;
}
// 选择一张卡
if ( ! mfrc522.PICC_ReadCardSerial()) {
Serial.println("没有卡可选");
return;
}
// 显示卡片的详细信息
Serial.print(F("卡片 UID:"));
dump_byte_array(mfrc522.uid.uidByte, mfrc522.uid.size);
Serial.println();
Serial.print(F("卡片类型: "));
MFRC522::PICC_Type piccType = mfrc522.PICC_GetType(mfrc522.uid.sak);
Serial.println(mfrc522.PICC_GetTypeName(piccType));
MFRC522::StatusCode status;
if (status != MFRC522::STATUS_OK) {
Serial.print(F("身份验证失败?或者是卡链接失败"));
Serial.println(mfrc522.GetStatusCodeName(status));
return;
}
//停止 PICC
mfrc522.PICC_HaltA();
//停止加密PCD
mfrc522.PCD_StopCrypto1();
return;
}
/**
将字节数组转储为串行的十六进制值
*/
void dump_byte_array(byte *buffer, byte bufferSize) {
//byte num;
for (byte i = 0; i < bufferSize; i++) {
Serial.print(buffer < 0x10 ? " 0" : " ");
Serial.print(buffer, HEX);
NumBer+=buffer; //将指针记录的值汇总成一个总值
}
Serial.println();
Serial.print("NumBer全值:"); //待上个循环完成后,打印NumBer的值
Serial.println(NumBer);
diandeng();
NumBer=0; // diandeng()完成后将NumBer的值清零,不然影响下次刷卡的计算
}
/*对NumBer和NfcNum[]数组的值进行对比,相同则开门,不同则报错 */
void diandeng(){
unsigned char NFC_OK=0;
unsigned char h=0;
for( h=0;h<6;h++)
{
if(NumBer==NfcNum)
{
NFC_OK=1;
break;
}
else
{
NFC_OK=0;
}
}
if(NFC_OK==1)
{
digitalWrite(LED,0);
Serial.println("刷卡正确:开门");
Serial.println("5秒倒计时");
delay(5000);
Serial.println("关门");
digitalWrite(LED,1);
}
else
{
Serial.println("卡不对,请重试");
Serial.println("请在灯闪灭后重试");
for(char i=0;i<3;i++)
{
digitalWrite(LED_err,1);
delay(500);
digitalWrite(LED_err,0);
delay(500);
}
}
}视频链接,https://www.bilibili.com/video/BV1ez4y1S7CB
页:
[1]