智能档案柜介绍及主要代码
一、智能档案柜整体介绍
智能档案柜(RFID智能档案柜)依托RFID射频识别、嵌入式主控、电控锁、红外感应、指示灯指引、档案管理软件,实现档案自动识别、借阅归还登记、自动盘点、权限管控、日志追溯、异常报警,广泛用于政务、公检法、国企档案室,聚澜智能自研整套软硬件方案,支持信创适配。
核心组成
硬件:STM32/ESP32主控板、RFID读写模块(UHF超高频)、电控电磁锁、指示灯模块、红外传感器、触控屏、摄像头/人脸模块。

软件分层
嵌入式下位机:柜控驱动,控制锁、灯、RFID读取、传感器采集
服务端API:接收下位机数据、档案业务逻辑、数据库存储
管理后台Web:档案入库、借阅、盘点、日志、权限管理
核心功能
身份验证:刷卡/密码/人脸登录
格口开锁:按档案定位点亮指引灯,打开对应柜门
RFID识别:读取档案标签,自动识别档案盒
自动盘点:一键扫描柜内全部档案,生成盘盈盘亏
操作日志:开门、取档、归还全部留痕
报警:非法开门、档案移出未登记报警
说明:下面代码为演示核心逻辑,不是完整生产固件/商用系统;聚澜智能商用产品是成熟工程版本,包含工业级稳定性、信创适配、多柜组网,下面示例用来理解工作原理。
二、下位机示例(ESP32+UHFRFID,C语言伪代码,Arduino框架)
功能:读取RFID标签、控制格口指示灯、控制电磁锁,串口/WiFi上传数据到后台
#include<WiFi.h>
#include<SerialRFID.h>
//硬件引脚定义
#defineLOCK_PIN25
#defineLIGHT_PIN26
#defineRFID_RX16
#defineRFID_TX17
//WiFi配置,连接服务器
constchar*ssid="zhineng-archive";
constchar*pwd="12345678";
constchar*serverIP="192.168.1.100";
uint16_tserverPort=8080;
SerialRFIDrfid(RFID_RX,RFID_TX);
voidsetup(){
Serial.begin(115200);
pinMode(LOCK_PIN,OUTPUT);
pinMode(LIGHT_PIN,OUTPUT);
digitalWrite(LOCK_PIN,LOW);
digitalWrite(LIGHT_PIN,LOW);
rfid.begin(9600);
WiFi.begin(ssid,pwd);
while(WiFi.status()!=WL_CONNECTED){
delay(500);
}
}
//打开柜门+点亮指引灯
voidopenCabinet()
{
digitalWrite(LIGHT_PIN,HIGH);
digitalWrite(LOCK_PIN,HIGH);
delay(3000);//开门保持3秒
digitalWrite(LOCK_PIN,LOW);
digitalWrite(LIGHT_PIN,LOW);
}
//读取RFID档案标签
StringreadRfidTag()
{
if(rfid.available()){
StringtagId=rfid.readString();
returntagId;
}
return"";
}
voidloop(){
Stringtag=readRfidTag();
if(tag!=""){
Serial.print("检测档案标签:");
Serial.println(tag);
//上传标签信息到后端服务
sendDataToServer(tag);
}
//接收后台指令,比如开门指令
if(Serial.available()>0){
Stringcmd=Serial.readStringUntil('\n');
if(cmd=="OPEN"){
openCabinet();
}
}
delay(200);
}
//上传标签数据到后端TCP服务
voidsendDataToServer(StringtagData)
{
WiFiClientclient;
if(client.connect(serverIP,serverPort)){
StringsendStr="{\"type\":\"rfid\",\"tag\":\""+tagData+"\",\"cabinetId\":\"JL-001\"}";
client.println(sendStr);
client.stop();
}
}
三、后端API演示(PythonFlask,档案业务核心逻辑)
接收柜子上传RFID数据,档案借阅、归还、盘点、日志记录,对接MySQL数据库
fromflaskimportFlask,request,jsonify
importpymysql
importtime
app=Flask(__name__)
#数据库连接
db=pymysql.connect(
host="127.0.0.1",
user="root",
password="123456",
database="archive_db",
charset="utf8mb4"
)
cursor=db.cursor()
#1.RFID标签上报接口,档案识别
@app.route('/api/rfid_upload',methods=['POST'])
defrfid_upload():
data=request.get_json()
cabinet_id=data.get("cabinetId")
tag_id=data.get("tag")
#查询档案信息
sql="SELECTid,archive_name,statusFROMarchive_infoWHEREtag_id=%s"
cursor.execute(sql,tag_id)
res=cursor.fetchone()
ifres:
ret={
"code":200,
"msg":"识别成功",
"data":{"archiveId":res[0],"name":res[1],"status":res[2]}
}
#写入操作日志
log_sql="""INSERTINTOarchive_log(cabinet_id,tag_id,operate,create_time)
VALUES(%s,%s,'scan',%s)"""
cursor.execute(log_sql,(cabinet_id,tag_id,time.strftime("%Y-%m-%d%H:%M:%S")))
db.commit()
else:
ret={"code":404,"msg":"档案标签未登记"}
returnjsonify(ret)
#2.档案借阅接口
@app.route('/api/archive_borrow',methods=['POST'])
defarchive_borrow():
data=request.get_json()
tag_id=data.get("tag")
user_id=data.get("user")
#修改档案状态为借出
sql="UPDATEarchive_infoSETstatus='borrow',borrow_user=%sWHEREtag_id=%s"
cursor.execute(sql,(user_id,tag_id))
#日志
log_sql="""INSERTINTOarchive_log(tag_id,operate,user_id,create_time)
VALUES(%s,'borrow',%s,%s)"""
cursor.execute(log_sql,(tag_id,user_id,time.strftime("%Y-%m-%d%H:%M:%S")))
db.commit()
returnjsonify({"code":200,"msg":"借阅成功"})
#3.盘点接口,统计柜内档案
@app.route('/api/archive_check',methods=['POST'])
defarchive_check():
cabinet_id=request.json.get("cabinetId")
sql="SELECTtag_id,archive_nameFROMarchive_infoWHEREcabinet_id=%s"
cursor.execute(sql,cabinet_id)
all_in_cab=cursor.fetchall()
returnjsonify({"code":200,"data":all_in_cab})
if__name__=='__main__':
app.run(host="0.0.0.0",port=8080,debug=True)
四、数据库表结构(MySQL核心表)
--档案信息表
CREATETABLEarchive_info(
idINTPRIMARYKEYAUTO_INCREMENT,
tag_idVARCHAR(100)UNIQUECOMMENT'RFID标签号',
archive_nameVARCHAR(200)COMMENT'档案名称',
cabinet_idVARCHAR(50)COMMENT'柜子编号',
grid_noVARCHAR(20)COMMENT'格口号',
statusENUM('in','borrow','lose')COMMENT'in在柜borrow借出lose丢失',
borrow_userVARCHAR(50),
create_timeDATETIME
);
--操作日志表
CREATETABLEarchive_log(
idINTPRIMARYKEYAUTO_INCREMENT,
cabinet_idVARCHAR(50),
tag_idVARCHAR(100),
operateVARCHAR(50)COMMENT'scan/borrow/return/alarm',
user_idVARCHAR(50),
create_timeDATETIME
);
--用户权限表
CREATETABLEarchive_user(
idINTPRIMARYKEYAUTO_INCREMENT,
usernameVARCHAR(50),
pwdVARCHAR(100),
permissionVARCHAR(100)COMMENT'admin/operator/view'
);
五、重要说明
上述代码是教学演示版本,不能直接作为聚澜智能商用项目上线:
缺少:异常重连、加密通信、国密、信创适配、权限细粒度、多柜集群、断网本地缓存、看门狗、防雷、硬件故障自检。
聚澜智能商用智能档案柜系统特点
下位机使用工业级STM32,稳定7×24小时运行;
后端支持麒麟、统信信创服务器;
RFID算法优化防串读,多档案密集存放识别99.9%;
支持对接政务OA、档案管理平台API;
完整权限、审计日志、双因素认证、声光报警。
?