嵌入式人工智能(43-基于树莓派4B的刷卡模块射频识别RFID-RC522)

news2024/9/27 7:26:39

1、RFID

射频识别(RFID,Radio Frequency Identification)是一种无线通信技术,用于自动识别和追踪标签上的信息。这项技术基于射频信号的传输和接收,通过将标签上的数据存储在特定的芯片中,实现物体的识别和跟踪。

射频识别系统由三个主要组件组成:读写器、标签和后台系统。读写器用于发送射频信号,并接收标签返回的信息。标签通常由一个芯片和一个天线组成,用于存储数据,并与读写器进行通信。后台系统则用于处理和管理从标签中读取的数据。

射频识别技术具有诸多优点,包括快速读取、无需直接接触、大容量存储、抗干扰能力强等。它在物流、零售、医疗、农业等领域得到广泛应用。例如,物流领域中可以使用射频识别追踪货物的流动和可靠性;零售领域中可以使用射频识别快速扫描商品并提供库存信息。

然而,射频识别技术也存在一些挑战和问题,例如安全性问题、实施成本较高等。为了克服这些问题,需要在技术上不断改进,并制定相应的规范和标准。

总的来说,射频识别技术具有广泛的应用前景和发展空间,可以为各行各业提供更高效、更准确的自动识别和追踪解决方案。

2、RC522 

一套完整的RFID系统,由读写器、电子标签和数据管理系统(应用软件系统)三部分组成。系统涵盖数据库、前端服务器、硬件模块等资源来实协调控制,其低成本,通用性强的特点,也可以满足其他近距离通信、身份识别等领域,或者是其他个性化的二次开发。

RC522 是一种非接触式读写卡芯片,底层采用SPI模拟时序,可以应用于校园一卡通、水卡充值消费、公交卡充值消费设计、门禁卡等。

RC522 有两个部分组成,射频读写器和IC卡。射频读写器向IC卡发一组固定频率的电磁波,卡片内有一个LC串联谐振电路,其频率与读写器发射的频率相同,这样在电磁波激励下,LC谐振电路产生共振,从而使电容内有了电荷;在这个电荷的另一端,接有一个单向导通的电子泵,将电容内的电荷送到另一个电容内存储,当所积累的电荷达到2V时,此电容可作为电源为其它电路提供工作电压,将卡内数据发射出去或接受读写器的数据。

非接触性IC卡与读卡器之间通过无线电波来完成读写操作。二者之间的通讯频率为13.56MHZ。非接触性IC卡本身是无源卡,当读写器对卡进行读写操作时,读写器发出的信号由两部分叠加组成:一部分是电源信号,该信号由卡接收后,与本身的LC产生一个瞬间能量来供给芯片工作。另一部分则是指令和数据信号,指挥芯片完成数据的读取、修改、储存等,并返回信号给读写器,完成一次读写操作。

复位应答:M1射频卡的通讯协议和通讯波特率是定义好的,当有卡片进入读写器的操作范围时,读写器以特定的协议与它通讯,从而确定该卡是否为M1射频卡,即验证卡片的卡型。

防冲突机制:当有多张卡进入读写器操作范围时,防冲突机制会从其中选择一张进行操作,未选中的则处于空闲模式等待下一次选卡,该过程会返回被选卡的序列号。

选择卡片:选择被选中的卡的序列号,并同时返回卡的容量代码。

三次互相确认:选定要处理的卡片之后,读写器就确定要访问的扇区号,并对该扇区密码进行密码校验,在三次相互认证之后就可以通过加密流进行通讯。(在选择另一扇区时,则必须进行另一扇区密码校验。)

如果概括来说的话,主要也就四部分:开关连接、寻卡、验证密码、读取。

3、SPI通信

 嵌入式不同芯片之间最常用的三种串行通信协议:UART、I2C、SPI,前面2个已经非常熟悉了,剩下SPI还没有用过,SPI是全双工串行通信,IIC为半双工通信。SPI也是采用主从方式工作,主机通常为FPGA、MCU或DSP等可编程控制器,从机通常为EPROM、Flash,AD/DA,音视频处理芯片等设备。一般由SCLK、CS、MOSI,MISO四根线组成,有的地方可能是:SCK、SS、SDI、SDO等名称,都是一样的含义。

当有多个从机存在时,通过CS来选择要控制的从机设备。IIC通过器件地址来选择从机,从机数量的增加不会导致GPIO的增加,而SPI通过CS选择从机,每增加一个从机就要多占用一个GPIO,当然也可以通过加入译码器来实现多从机控制。

主机发送到从机时:主机产生相应的时钟信号,然后数据一位一位地将从MOSI信号线上进行发送到从机;主机接收从机数据:如果从机需要将数据发送回主机,则主机将继续生成预定数量的时钟信号,并且从机会将数据通过MISO信号线发送;

 4、引脚定义与连接

 

这个接线要稍微比IIC复杂写,注意看准引脚,不要差错。 

RC522蓝色MOSI接树莓派GPIO10(MOSI)BOARD19

RC522紫色MISO接树莓派GPIO9(MISO)BOARD21

RC522绿色SCK接树莓派GPIO11(SCLK)BOARD23

RC522黄色SS接树莓派GPIO8(CE0)BOARD24

RC522白色RST接树莓派GPIO25-BOARD22

GND接地,VCC接3.3V

这线比较多,比较乱,看的头晕啊。

5、环境搭建

(1)硬件开发板开启SPI总线,开启后重启。

(2)安装Python库。

pip install spidev
pip install mfrc522

6、实验代码与现象

实际上能用上RFID的基本都是大点的项目,至少有个前端系统,有个数据库,Python的Falsk框架我感觉挺好的,我现在没时间做,等有时间我把前端页面简单的写下,然后将后端的数据库和业务逻辑加上,然后将结果通过wifi显示到网页。我们今天的实验做不了这么复杂,通过mfrc522库简单调用下即可。

整个实验我们就把蜂鸣器和OLED也拿来,如果是蓝卡,则门禁打开,蜂鸣器响一下,OLED显示用户号码欢迎你。否则显示用户没有找到。

import RPi.GPIO as GPIO
#引入Simple MFRC522库
from mfrc522 import SimpleMFRC522
import time
from PIL import Image  
from PIL import ImageDraw
from PIL import ImageFont
import RPi.GPIO as GPIO
import luma.oled as oled  
from luma.core.interface.serial import i2c    
from luma.oled.device import ssd1306  
from luma.core.render import canvas
  
WIDTH=128
HEIGHT=64 

beeper = 37
# 指定编号规则为BOARD
GPIO.setmode(GPIO.BOARD)
# 将第40个引脚设置为输出模式
GPIO.setup(beeper, GPIO.OUT)
GPIO.output(beeper,1)
time.sleep(0.3)

#调用SimpleMFRC522的函数,将其作为对象存储到创建的reader变量中,方便与其进行交互
reader = SimpleMFRC522()
print(reader)
def load_device():
    # 创建I2C接口对象  
    serial = i2c(port=1, address=0x3C)  # 地址可能因显示屏型号而异,由命令行“sudo i2cdetect -y 1”得到
    # 创建OLED设备对象  
    device = ssd1306(serial, WIDTH, HEIGHT) 
    return device

device = load_device()
font = ImageFont.truetype('STKAITI.TTF',17)
try:     
    while True:
        #调用读取到的RFID标签数据作为对象
        id,text = reader.read()
        #打印RFID标签的ID
        if id ==429216044767:
            reader.write('No9567')   
            GPIO.output(beeper,0)
            time.sleep(0.3) 
            GPIO.output(beeper,1)        
            with canvas(device) as draw:
                draw.rectangle(device.bounding_box, outline=0, fill=0)
                draw.text((0,0), str(text),font=font, fill='white')
                draw.text((60,0), '欢迎你!', font=font, fill="white")
        else:
            print('User not find!')
            with canvas(device) as draw:
                draw.rectangle(device.bounding_box, outline=0, fill=0)
                draw.text((0,0), 'User not find',font=font, fill='white')


except KeyboardInterrupt:
     print('end!')
#终止
finally:
	#清理GPIO
	GPIO.cleanup()

RFID

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1975527.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

上市公司绿色信息披露质量评分数据(2008-2023年)

数据来源:基础数据来源于上市公司年报/社会责任报告/环境报告以及ZJ会及统计局 时间跨度:2008-2023年 数据范围:企业及行业层面 数据指标: 按照是否货币化分类企业对于环境信息的披露:对于货币化的信息,定量和定性…

共襄恰青赛马节盛事 共享农业产业园成果

恰青赛马节是那曲一年一度的草原盛事,是藏北规模盛大的传统节日,承载着那曲悠久的文化底蕴,体现了藏北各族群众丰富的传统习俗,更是深受民众欢迎。今年的赛马节上,色尼区国家现代农业产业园紧抓机遇,设置农…

Android设备发送蓝牙文件到电脑笔记本失败解决

Android设备发送蓝牙文件到电脑笔记本失败解决 文章目录 Android设备发送蓝牙文件到电脑笔记本失败解决一、前言二、解决1、比较旧的电脑2、大部分新的电脑 三、其他1、发送蓝牙文件到Window电脑端小结2、可传输的蓝牙文件的文件类型 一、前言 普通手机之间蓝牙配对后&#xf…

软件测试开发

软件测试的职业发展 起点:功能测试 走管理 业务专家行业业务专家行业业务发展专家 走技术 测试开发资深测试开发测试架构师/全栈测试工程师 软件开发模型 瀑布模型 V模型和W模型 W模型和V模型都把软件的开发视为需求,设计,编码&#x…

SolarMarker 正在使用水坑攻击与伪造的 Chrome 浏览器更新进行攻击

在过去的三个月里,eSentire 的安全研究团队发现信息窃密恶意软件 SolarMarker 都没有发动攻击,却在最近忽然重返舞台。此前,SolarMarker 的运营者使用 SEO 投毒或者垃圾邮件来引诱受害者,受害者试图下载一些文档的免费模板&#x…

非对称加密:数据安全的双重保障

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

每日OJ_牛客HJ73 计算日期到天数转换

目录 牛客HJ73 计算日期到天数转换 解析代码 牛客HJ73 计算日期到天数转换 计算日期到天数转换_牛客题霸_牛客网 解析代码 用一个数组存放每月的累积天数输入的日期天数 当月的天数 当月之前的累积天数,如果包含二月,再去判断是否为闰年,…

听专家的,不如听国家的,网络安全究竟值不值得报?

考学选专业,或者跳槽选行业的,看这篇! 如果你什么都不懂,家里也没有矿,那就紧跟国家大事和地方政策。 关于网络安全专业究竟是否值得报考? 要知道“二十大”、“十四五”等大会一直在提一个词叫做“数字中国建设”…

精通推荐算法19:特征交叉之DeepFM -- 异构模型Wide侧引入FM

1 引言 Wide & Deep的提出,使推荐模型同时具备记忆和泛化能力。通过融合低阶和高阶特征交叉,开启了推荐算法异构模型的风潮。后续越来越多的模型,在其基础上进一步优化,并取得了不错的效果。DeepFM就是其中一个很经典的模型&…

渗透测试--钓鱼网站实验

实验原理 使用工具 setoo1kit,构造钓鱼网站,钓鱼网站可以选择为比较知名的网站,例如学信网。被攻击者访问了钓鱼网站,输入自己的真实账号密码进行登录,账号密码会被 kali 收集 实验步骤 打开 kali 终端,输…

PyCharm中安装和使用FittenCode的AI插件助手

AI 逐步进入生活的方方面面,在编程开发中也不例外,下面简单记录一下 PyCharm IDE中安装和使用FittenCode插件AI助手的过程; 1,假设本地已经安装 PyCharm IDE, 如果还没有安装到如下地址进行下载2024年社区版: Thank …

短视频平台引流玩法

今天盘点了4大视频类的主流平台的精准引流触点,拿去用吧!

Qt pdf文件转换操作

qt文件转换操作&#xff0c;包括word转为pdf&#xff1b;Excel转为pdf&#xff1b;PPT转为pdf&#xff1b;image转为pdf&#xff1b;pdf转为文本文件&#xff1b;pdf导出图片&#xff1b;接口如下所示&#xff1a; #pragma once #include <QObject> #include "file…

模拟实现strcat(字符串追加)

1.我们要知道stcat的作用是什么&#xff0c;字符串追加。 2.我们进行模仿&#xff0c;我们先将arr1不断&#xff0c;直到“\0”,我们加在后面。 //模拟实现strcat(字符串追加) char* my_strcat(char* arr1, const char* arr2) {assert(arr1 && arr2);char ret arr1;…

揭秘!格行随身WiFi:如何在‘内卷’市场中逆袭?如何重新定义市场新标准?随身WIFI哪个品牌网速快,续航时间长?随身WiFi热卖第一名

近年来&#xff0c;随身WiFi市场竞争激烈&#xff0c;部分商家为追求利润最大化&#xff0c;不惜采取偷工减料等不正当手段&#xff0c;导致产品质量参差不齐&#xff0c;消费者在使用过程中频繁遭遇信号不稳定、网络卡顿、电池不耐用等问题。这种“内卷”现象不仅损害了消费者…

Hive命令为表增加字段(内置数据库)

【实验目的】 1) 了解hive操作命令 2) 熟练操作hive数据库 【实验原理】 进入hive shell环境&#xff0c;确保hive中存在已经创建的表结构&#xff0c;然后可以通过alter命令对表的字段进行修改。 【实验环境】 本次环境是&#xff1a;centos6.5 Hadoop-2.4.1 jdk1.7.0_7…

【数据结构与算法】单链表、双链表和循环单链表中头指针未知的情况下能否删除某节点

在单链表、双链表和循环单链表中&#xff0c;若仅知道指针p指向某结点&#xff0c;不知道头指针&#xff0c;能否将结点p从相应的链表中删去&#xff1f;为什么&#xff1f;若可以&#xff0c;其时间复杂度各为多少&#xff1f; 单链表&#xff1a;不能 在单链表中&#xff0c…

一些爬虫代码的解析

import requests from bs4 import BeautifulSoup import time import logging import json from concurrent.futures import ThreadPoolExecutor import random# 配置日志 logging.basicConfig(levellogging.INFO, format%(asctime)s - %(levelname)s - %(message)s)# 目标网页…

rocket 如何解决消息堆积问题、如何消息丢失问题、r安全问题(设置密码)、时间复杂度。

20240803 一、 如何解决消息堆积问题&#xff1f;一般认为单条队列消息差值>10w时 算堆积问题生产太快了线程数量的设置挤压问题 消费者消费出现问题如果堆积的消息不想要了&#xff0c;可以直接跳过堆积 二、 信息丢失问题为什么会丢失解决思路1 记录下来解决思路2 使用roc…

BulingBuling - 活法自如 [Reset Your Routine] - 2

2. What matters most to you? 学习如何优先考虑适合自己的日常工作。 Learn how to prioritize what fits into your routine. Get to your why (找到原因) 因此&#xff0c;当你开始制定新的个性化日常计划时&#xff0c;其中一个关键因素就是要深入挖掘什么对你来说才是真…