Python 语言 用树莓派 + RFID 模块实现门禁系统 刷卡开门 + 记录日志 + 黑名单管理

Python阿木 发布于 16 小时前 1 次阅读


树莓派 + RFID 模块实现门禁系统:Python 代码与实践

随着物联网技术的发展,门禁系统在各个领域得到了广泛应用。本文将介绍如何使用树莓派和RFID模块,结合Python编程语言,实现一个简单的门禁系统。该系统具备刷卡开门、记录日志和黑名单管理等功能。

系统需求

1. 刷卡开门:用户通过刷卡器读取RFID卡信息,系统验证后允许用户进入。
2. 记录日志:系统记录每次开门的时间、用户ID等信息,便于后续查询。
3. 黑名单管理:系统支持将特定用户加入黑名单,使其无法进入。

硬件准备

1. 树莓派(如树莓派3B+)
2. RFID模块(如MFRC522)
3. RFID卡(如NFC卡)
4. 树莓派电源、散热片、SD卡等
5. 开关、继电器等控制电路

软件准备

1. 树莓派操作系统(如Raspbian)
2. Python 3.x
3. RFID模块驱动程序

系统设计

1. 系统架构

本系统采用树莓派作为主控单元,RFID模块负责读取RFID卡信息,继电器控制门的开关。系统架构如下:


+------------------+ +------------------+ +------------------+
| 树莓派 | | RFID模块 | | 继电器 |
| (Python程序) | ----> | (读取RFID卡信息) | ----> | (控制门开关) |
+------------------+ +------------------+ +------------------+

2. 功能模块

1. RFID读取模块:负责读取RFID卡信息,并将信息发送给树莓派。
2. 门禁控制模块:根据RFID卡信息,控制门的开关。
3. 日志记录模块:记录每次开门的时间、用户ID等信息。
4. 黑名单管理模块:管理黑名单,防止黑名单用户进入。

代码实现

1. RFID读取模块

我们需要安装RFID模块的驱动程序。在树莓派上,可以使用以下命令安装:

bash
sudo apt-get install python-rpi.gpio

然后,编写RFID读取模块的代码:

python
import RPi.GPIO as GPIO
import MFRC522

初始化GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setup(24, GPIO.OUT)

初始化RFID模块
rfid = MFRC522.MFRC522()

def read_rfid():
try:
激活RFID模块
GPIO.output(24, GPIO.HIGH)
(status, tag_type) = rfid.MFRC522_Request(rfid.PICC_REQIDL)
if status == rfid.MI_OK:
print("RFID卡已激活")
(status, uid) = rfid.MFRC522_Anticoll()
if status == rfid.MI_OK:
print("RFID卡序列号:", uid)
return uid
except Exception as e:
print("读取RFID卡信息失败:", e)
finally:
GPIO.output(24, GPIO.LOW)
rfid.MFRC522_Halt()

2. 门禁控制模块

门禁控制模块负责根据RFID卡信息,控制门的开关。以下是一个简单的门禁控制模块代码:

python
import time

初始化继电器
GPIO.setup(17, GPIO.OUT)

def open_door():
GPIO.output(17, GPIO.HIGH)
time.sleep(1)
GPIO.output(17, GPIO.LOW)

def close_door():
GPIO.output(17, GPIO.LOW)

3. 日志记录模块

日志记录模块负责记录每次开门的时间、用户ID等信息。以下是一个简单的日志记录模块代码:

python
import datetime

def log_open(user_id):
with open("access_log.txt", "a") as f:
f.write(f"{datetime.datetime.now()} - 用户{user_id}开门")

4. 黑名单管理模块

黑名单管理模块负责管理黑名单,防止黑名单用户进入。以下是一个简单的黑名单管理模块代码:

python
def is_blacklisted(user_id):
with open("blacklist.txt", "r") as f:
for line in f:
if user_id in line.strip():
return True
return False

系统整合

将以上模块整合到一起,编写主程序:

python
import time

def main():
while True:
user_id = read_rfid()
if user_id and not is_blacklisted(user_id):
log_open(user_id)
open_door()
time.sleep(5)
close_door()
else:
print("用户不在黑名单中或RFID卡信息读取失败")
time.sleep(1)

if __name__ == "__main__":
main()

总结

本文介绍了如何使用树莓派和RFID模块,结合Python编程语言,实现一个简单的门禁系统。该系统具备刷卡开门、记录日志和黑名单管理等功能。在实际应用中,可以根据需求对系统进行扩展和优化。