【基于stm32f103c8t6RFID-RC522智能开关】
基于stm32f103c8t6RFID-RC522智能开关
基于stm32f103x8t6的RFID-RC522门禁卡的使用,简单实现智能门锁的改造。下面就简单分析如何实现,驱动源码由商家提供,当然我们所做的也不只是智能门锁,可以通过刷卡实现各种智能操作(开灯、开风扇等等)根据自己需求修改就好了。工程的源码我会放在最后需要的可以自行下载。
一、硬件准备
RFID-RC522芯片+卡片 |
---|
stm32f103c8t6最小系统 |
usb转ttl下载程序 |
杜邦线若干 |
图 1
图 2
二、软件准备
编写完后我们首先通过串口来检测是否正确,将我们的信息通过串口打印出来
三、主程序
#include "stm32f10x.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "spi_driver.h"
#include "stm32f10x_spi.h"
#include "rfid.h"/******************************************************************
Author:小殷
Date:2022-3-24
声明:本代码也是移值的进行了简单修改 非原创硬件连接
STM32F103C8T6 RC522模块
PA4(SPI1_NSS) SDA
PA5(SPI1_SCK) SCK
PA6(SPI1_MISO) MISO
PA7(SPI1_MOSI) MOSI
PA11(RST) RST
PB1(IRQ) IRQ 未定义将线接好后,刷卡,观察串口1有ID项有四个数字
第一项*1+第二项*2+第三项*3+第四项*4/4得到一个数字用SWITCH语句,判断即可。
*******************************************************************/uint8_t Card_Type1[2]; //卡的类型存储
uint8_t Card_ID[4]; //卡序列号存储
uint8_t Card_KEY[6] = {0xff,0xff,0xff,0xff,0xff,0xff}; //{0x11,0x11,0x11,0x11,0x11,0x11}; //密码
uint8_t Card_Data[16];
uint8_t Run_flag=1;
uint8_t flag;
uint8_t status;void main(void)
{Card_Type1[0]=0x04;Card_Type1[1]=0x00;delay_init();//延时函数初始化LED_GPIO_INIT(); //led初始化uart_init(115200); //串口初始化为115200 printf("****************************** 串口测试 *************************\n");RC522_IO_Init();PcdReset(); //复位RC522PcdAntennaOff(); //关闭天线delay_ms(100);PcdAntennaOn(); //开启天线 printf("****************************** 智能门锁 *****************************\r\n");while(Run_flag){if(MI_OK==PcdRequest(0x52, Card_Type1)) //寻卡函数,如果成功返回MI_OK 打印多次卡号{uint16_t cardType = (Card_Type1[0]<<8)|Card_Type1[1];//读不同卡的类型printf("卡类型:(0x%04X)\r\n",cardType); //"Card Type(0x%04X):"//下面是进行不同卡型号的判断 进行测试的时候大家可以多买几张卡 进行测试switch(cardType){case 0x4400:printf("Mifare UltraLight\r\n");break;case 0x0400:printf("Mifare One(S50)\r\n");break;case 0x0200:printf("Mifare One(S70)\r\n");break;case 0x0800:printf("Mifare Pro(X)\r\n");break;case 0x4403:printf("Mifare DESFire\r\n");break;default:printf("Unknown Card\r\n");break;}status = PcdAnticoll(Card_ID);//防冲撞 如果成功返回MI_OKif(status != MI_OK){printf("Anticoll Error\r\n");}//打印卡的序列号 进行区分else{printf("Serial Number:%d %d %d %d\r\n",Card_ID[0],Card_ID[1],Card_ID[2],Card_ID[3]);//根据卡id处理后获取不同的值 我们可以通过这个不同的数值 来进行不同的控制//下面如果flag 返回1 进行关灯操作 返回2 进行开灯操作 //注意需要用不同的卡进行刷 才可以 (通过买的时候会有一张白卡和一个小型的刷卡卡片flag=Card_Data_Tackle(Card_ID);//通过打印flag的值在串口进行观察不同卡的值printf("flag=%d \r\n",flag);if(flag == 1){//这里面可以根据自己控制的需求进行修改GPIO_SetBits(GPIOC,GPIO_Pin_13); //关灯}else if(flag == 2){//这里面可以根据自己控制的需求进行修改GPIO_ResetBits(GPIOC,GPIO_Pin_13); //开关}else{printf("flag is not exit\n"); //未识别 不存在在卡的数值}}status = PcdSelect(Card_ID); //选卡 如果成功返回MI_OKif(status != MI_OK){printf("Select Card Error\r\n");}elseprintf("Select Card OK\r\n");status = PcdHalt(); //卡片进入休眠状态if(status != MI_OK){printf("PcdHalt Error\r\n"); }else{printf("PcdHalt OK\r\n"); }}}}
串口结果
从下面结果可以看出我们卡的类型是0x0400也就是Mifare One(S50),刷卡后flag为1 说明我们这张卡是作为关灯的。另一张就是进行开灯的,这样我们就将RFID-RC522模块简单的使用了起来。
总结
在我们进行不同模块使用的时候,首先我们可以不用太过于去研究实现原理,可以先把我们想要的功能实现出来,向商家要源码或者去网上搜相关的资料。当一个小小的功能实现的时候都是会有成就感的,这时候如果想深究一下原理这时候我们在去仔细分析每句代码什么意思,个人认为这样学习会更有效。
譬如我们使用的RDIF-RC522是SPI驱动的,一开始就先去研究SPI的驱动原理(真正掌握还是很难的)这时候我们难免会失去学习兴趣,当我门把功能实现后带着乐趣去了解原理会更有效果(至少对我来说是这样)。
总之任何事都要带着兴趣去学习。
工程链接
链接:https://pan.baidu.com/s/17NMmlecJo8V3z6grc_W6lg
提取码:jgia
–来自百度网盘超级会员V4的分享
【基于stm32f103c8t6RFID-RC522智能开关】相关推荐
- 基于wifi的智能开关
这个东西也是我给别人做的项目,今天刚刚完成.本着今日事今日毕的原则,赶快总结下来,要不然按我的性格就会越拖越久了哈. 这个项目我使用的单片机是ATMEGAL16这款单片机,其实这个项目的思路非常简单, ...
- 使用RC522、mysql、树莓派构成的图书馆管理系统
起因是RFID课要求做一个课程设计,结果感觉本来该搞搞硬件给搞成软件了.总这这篇博客是偏软件程序的. 目录 一.总体环境 1.硬件 2.软件 二.硬件连线 三.Python环境 四.程序设计思路 五. ...
- 一文读懂基于RC522和S50的RFID开发
基于RC522和S50的RFID开发 1. ISO14443-A协议 ISO14443协议是Contactless card standards(非接触式IC卡标准)协议,由4个部分组成: 物理特性: ...
- 基于单片机双路温度检测报警系统设计-基于单片机声光控智能开关控制灯设计-基于单片机热电偶智能体温检测设计-基于单片机小型家用燃气锅炉控制系统设计-基于单片机一氧化碳有毒气体采集报警系统设计
1628基于单片机双路温度检测报警系统设计(串口上位机控制) 基于pcf8591 tlc2543的双路温度检测报警系统 带串口上位机控制带仿真 源程序 温度传感器是 LM35 两路测温通道所用的ad芯 ...
- 基于点灯科技平台的智能开关设计
基于点灯科技平台的智能开关设计 一.总体方案设计 设计由WIFI模块.电压检测模块.STM32微控制器三部分组成,能够通过ESP8266WIFI模块与点灯科技云平台进行数据的交互,设计间通过UART串 ...
- 基于ARM、linux的MF RC522射频读卡器
摘要:本设计将ARM.linux的嵌入式技术与RFID技术相结合,对于实现移动支付终端的低功耗.便携式和网络化具有特别的意义.首先是采用MF RC522芯片设计与制作读写器,实现对Mifare卡的读写 ...
- NFC之基于51单片机rc522的读写
NFC之基于51单片机rc522的读写 改程序,端口定义 上位机修改com口
- 基于ESP32-C3芯片的智能开关方案特点说明
伴随着物联网的蓬勃发展,智能家居成为备受瞩目的新兴领域,越来越多的智能产品进入消费市场并受到了广大用户的青睐,用于控制设备状态的传统机械开关也面临智能化升级. 市面上出现了各种各样的智能开关,以应对各 ...
- 启明智显分享|基于ESP32-S3的低成本86智能开关面板\温控器解决方案
提示:启明智显基于乐鑫ESP32-S3与国产芯高效开发平台8ms(8ms.xyz)设计开发的一款可快速开发86智能开关.温控器的串口屏已批量应用于86智能开关\温控器解决方案 86智能开关\温控器解决 ...
- 基于51单片机的RFID RC522智能钱包
RFID RC522智能钱包 基于51单片机的RFID RC522智能钱包,这个程序主要演示的是RFID RC522智能钱包中的设置及扣款功能,相信会扣款那么充值也就改一个数字的事,具体的功能要自己根 ...
最新文章
- kset_create_and_add
- Html5的页面基本结构标签,HTML5:简介和文档基本结构
- 汇编语言随笔(3)-条件转移指令和标志寄存器
- 卷积神经网络minst的verilog实现
- php返回200,关于API 使用 HTTP 状态码还是全部返回 200
- linux内核的队列实现移植
- 游戏筑基开发之动态数组(C语言)
- javascript---继承
- MySQL 常用函数一览
- python NLP中文近义词
- 3天72小时,全国首个区块链周都讲了些啥 | 一文读懂
- 解决element 表单验证不通过的俩大坑
- hud.java_什么是HUD
- 自学IOS开发第3天·基础SwiftUI之动态滑动列表(上)
- Mysql时区差异异常-The server time zone value ‘xxx‘ is unrecognized or represents more than one time zone.
- 用计算机做图画ppt模板,装逼|如何用一张图片做出一份高颜值的PPT模板
- mysql st_contains实现_查看某一个点是否在某个多边形内 使用ST_Contains函数
- 百度快照被劫持百度网址安全中心提醒您:该页面可能已被非法篡改
- Facebook取消雅虎的登陆
- 20194711 阚宇航 第一次软工作业