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

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


树莓派 + RFID 模块实现门禁系统:刷卡开门与日志记录

随着物联网技术的发展,门禁系统在各个领域得到了广泛应用。本文将介绍如何使用树莓派和RFID模块构建一个简单的门禁系统,实现刷卡开门和记录日志的功能。通过学习本文,读者可以了解树莓派的编程、RFID模块的使用以及日志记录的基本方法。

系统需求

1. 树莓派:作为门禁系统的核心控制器。
2. RFID模块:用于读取RFID卡信息。
3. 执行器:如继电器或电磁锁,用于控制门的开关。
4. 电源:为树莓派和RFID模块提供电力。
5. 数据库:用于存储用户信息和开门记录。

硬件连接

1. 将RFID模块的VCC、GND和TXD分别连接到树莓派的3.3V、GND和GPIO引脚。
2. 将执行器的控制端连接到树莓派的GPIO引脚。
3. 将树莓派连接到电源。

软件环境

1. 树莓派操作系统:Raspbian或Ubuntu。
2. Python编程语言:用于编写门禁系统程序。
3. RFID模块驱动:根据所选RFID模块选择合适的驱动程序。
4. 数据库:SQLite或MySQL。

代码实现

1. RFID模块驱动安装

以MFRC522模块为例,首先需要安装RFID模块的驱动程序。

bash
sudo apt-get install python-rpi.gpio

2. RFID模块读取卡信息

python
import RPi.GPIO as GPIO
import MFRC522
import time

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

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

while True:
检测是否有卡靠近
(status, tag_type) = rfid.MFRC522_Request(rfid.PICC_REQIDL)
if status == rfid.MFRC522_OK:
print("Card detected")
获取卡序列号
(status, serial) = rfid.MFRC522_Anticoll()
if status == rfid.MFRC522_OK:
print("Card serial number: " + str(serial))
执行开门操作
GPIO.output(24, GPIO.HIGH)
time.sleep(1)
GPIO.output(24, GPIO.LOW)
break

3. 数据库设计

以SQLite为例,创建一个名为`access.db`的数据库,并创建一个名为`users`的表,用于存储用户信息和开门记录。

python
import sqlite3

连接数据库
conn = sqlite3.connect('access.db')
c = conn.cursor()

创建表
c.execute('''CREATE TABLE IF NOT EXISTS users
(id INTEGER PRIMARY KEY AUTOINCREMENT,
card_id TEXT NOT NULL,
name TEXT NOT NULL,
access_time TEXT NOT NULL)''')

插入数据
c.execute("INSERT INTO users (card_id, name, access_time) VALUES (?, ?, ?)",
(serial, '张三', time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())))

提交事务
conn.commit()

关闭数据库连接
conn.close()

4. 完整程序

将上述代码整合到一个Python脚本中,即可实现刷卡开门和记录日志的功能。

python
import RPi.GPIO as GPIO
import MFRC522
import sqlite3
import time

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

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

连接数据库
conn = sqlite3.connect('access.db')
c = conn.cursor()

while True:
检测是否有卡靠近
(status, tag_type) = rfid.MFRC522_Request(rfid.PICC_REQIDL)
if status == rfid.MFRC522_OK:
print("Card detected")
获取卡序列号
(status, serial) = rfid.MFRC522_Anticoll()
if status == rfid.MFRC522_OK:
print("Card serial number: " + str(serial))
执行开门操作
GPIO.output(24, GPIO.HIGH)
time.sleep(1)
GPIO.output(24, GPIO.LOW)
插入数据
c.execute("INSERT INTO users (card_id, name, access_time) VALUES (?, ?, ?)",
(serial, '张三', time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())))
提交事务
conn.commit()
break

关闭数据库连接
conn.close()

总结

本文介绍了如何使用树莓派和RFID模块构建一个简单的门禁系统,实现刷卡开门和记录日志的功能。通过学习本文,读者可以了解树莓派的编程、RFID模块的使用以及日志记录的基本方法。在实际应用中,可以根据需求对系统进行扩展,如增加用户管理、权限控制等功能。