树莓派 + 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模块的使用以及日志记录的基本方法。在实际应用中,可以根据需求对系统进行扩展,如增加用户管理、权限控制等功能。
Comments NOTHING