话不多说,咱先上图上视频
nfc门锁
使用方法还是很简单的,有当前卡id是刷卡,舵机就会动作。当没有保存当前卡时只需要按一下按钮就可以把当前卡的信息保存到eeprom中,可以实现掉电存储。
必要硬件:nodemcu开发板,rc522模块,舵机,按钮,电源模块,杜邦线若干,还可以添加蜂鸣器或者led灯
硬件接线图esp8266nodemcu连接rc522模块
用arduinoIDE编程,需要下载blinker库,esp8266支持包,mfrc522库。
blinker点灯app界面配置(当然不需要手机控制的可以不用点灯)
下面是包含blinker的代码,后面有不包含blinker的代码,不适用blinker与WiFi可以更加省电。
#include <EEPROM.h>
#include <SPI.h>
#include <MFRC522.h>
#include <BLINKER_PMSX003ST.h>
#include <Servo.h>
#define BLINKER_WIFI
#include <Blinker.h>
char auth[] = "e610c0fae090"; //点灯密钥
char ssid[] = "2-19公共wifi"; //WiFi名称
char pswd[] = "12345678"; //WiFi密码
// 新建组件对象
BlinkerButton Button1("btn-num"); //位置1 按钮 数据键名
BlinkerButton Button2("btn-max"); //位置2 按钮 数据键名
BlinkerSlider Slider1("ser-num"); //实时位置 滑块 数据键名 范围1-180
Servo myservo; //创建电机对象
int ser_num ;
int ser_max ;
#define RST_PIN 5 // 配置针脚
#define SS_PIN 4
MFRC522 mfrc522(SS_PIN, RST_PIN); // 创建新的RFID实例
//RC模块使用了D1.D2.D5.D6.D7
/*************************IO配置**************************/
int Buzzer = 16; //D0(io16)蜂鸣器,提示音,也可以用led
int btn = 15; //D8(io15)按钮,保存门禁卡ID到EEPROM
/*************************数据**************************/
//使用union结构,合并4个byte数据,转换为1个long
union long_byte
{
long long_data;
byte byte_data[4];
};
long_byte lb;
long EEPROM_RFID1 = -1;//EEPROM中保存的门禁卡ID1
long EEPROM_RFID2 = -1;
long EEPROM_RFID3 = -1;
long EEPROM_RFID4 = -1;
long EEPROM_RFID5 = -1;
long EEPROM_RFID6 = -1;
long EEPROM_RFID7 = -1;
long read_RFID = -1; //当前读取到的门禁卡ID
int num ;
void setup()
{
Serial.begin(115200);
Serial.println("");
BLINKER_DEBUG.stream(Serial);
Blinker.begin(auth, ssid, pswd);
EEPROM.begin(1024);
Button1.attach(button1_callback);
Button2.attach(button2_callback);
Slider1.attach(slider1_callback);
Blinker.attachData(dataRead);
myservo.attach(0); //servo.attach():设置舵机数据引脚
myservo.write(10); //servo.write():设置转动角度
ser_num = 100;
ser_max = 100;
//读取EEPROM索引的值 我这里设置了七张卡,不够也可以再加
for (int i = 0; i < 4; i++)
{
lb.byte_data[i] = EEPROM.read(i); //卡1
}
EEPROM_RFID1 = lb.long_data;
for (int i = 0 ; i<4 ; i++ )
{
lb.byte_data[i] = EEPROM.read(i+4); //卡2
}
EEPROM_RFID2 = lb.long_data;
for (int i = 0 ; i<4 ; i++ )
{
lb.byte_data[i] = EEPROM.read(i+8); //卡3
}
EEPROM_RFID3 = lb.long_data;
for (int i = 0 ; i<4 ; i++ )
{
lb.byte_data[i] = EEPROM.read(i+12); //卡4
}
EEPROM_RFID4 = lb.long_data;
for (int i = 0 ; i<4 ; i++ )
{
lb.byte_data[i] = EEPROM.read(i+16); //卡5
}
EEPROM_RFID5 = lb.long_data;
for (int i = 0 ; i<4 ; i++ )
{
lb.byte_data[i] = EEPROM.read(i+20); //卡6
}
EEPROM_RFID6 = lb.long_data;
for (int i = 0 ; i<4 ; i++ )
{
lb.byte_data[i] = EEPROM.read(i+24); //卡7
}
EEPROM_RFID7 = lb.long_data;
num = EEPROM.read(30);
IO_init();
RFID_init();
}
void loop()
{
Blinker.run();
Btn_Even