档案库房智能化解决方案:从硬件选型到系统部署全流程实操

一、硬件选型与电路接线详解

档案库房智能化的核心在于环境监控与实体安全。为了实现零门槛落地,本方案选用树莓派4B作为边缘计算网关,配合高精度传感器与RFID模块。以下为具体硬件清单及接线操作步骤,请严格按照引脚定义连接,避免烧毁设备。

  • 核心控制器:树莓派4B(4GB内存版),运行64位Linux系统。
  • 环境传感器:SHT30温湿度传感器(I2C接口),精度高于DHT11,适合库房精密监控。
  • 安防模块:RC522 RFID读卡器(SPI接口),用于档案实体出入库登记。
  • 报警执行器:有源蜂鸣器(GPIO控制),温湿度超限或非法闯入时触发。

接线操作步骤:

1. 连接SHT30温湿度传感器:使用杜邦线将传感器VCC接树莓派3.3V(Pin 1),GND接GND(Pin 6),SCL接GPIO3(Pin 5),SDA接GPIO2(Pin 3)。SHT30默认I2C地址为0x44或0x45。

2. 连接RC522 RFID模块:该模块需要3.3V供电,严禁接5V。VCC接3.3V(Pin 1),GND接GND(Pin 6)。MOSI接GPIO10(Pin 19),MISO接GPIO9(Pin 21),SCK接GPIO11(Pin 23),NSS/SDA接GPIO8(Pin 24),RST接GPIO25(Pin 22)。

3. 连接蜂鸣器:正极接GPIO18(Pin 12),负极接GND(Pin 14)。建议串联一个100Ω电阻保护GPIO口。

二、基础环境与依赖库安装

在开始编写代码前,必须先配置好树莓派的系统环境。请确保树莓派已连接互联网,打开终端依次执行以下命令。所有命令均针对Debian/Ubuntu系统优化。

1. 开启树莓派I2C与SPI接口:

执行配置命令:

```bash sudo raspi-config ```

在界面中选择 Interface Options -> I2C -> Yes 开启I2C。同理进入 SPI -> Yes 开启SPI。重启树莓派使配置生效:

```bash sudo reboot ```

2. 安装Python系统依赖:

```bash sudo apt update sudo apt install python3-pip python3-dev build-essential git libgpiod-dev ```

3. 安装Python项目依赖库:

创建项目目录并安装必要的库:

```bash mkdir -p /home/pi/archive_smart_system cd /home/pi/archive_smart_system pip3 install flask spidev mfrc522 RPi.GPIO smbus2 mysql-connector-python apscheduler ```

注:RPi.GPIO用于控制蜂鸣器,smbus2用于读取SHT30,mfrc522用于RFID读写,flask用于搭建Web管理界面,apscheduler用于定时任务。

三、数据库设计与容器化部署

为了方便管理,我们使用MySQL存储档案数据与环境记录。采用Docker部署MySQL,避免繁琐的手动配置。

档案库房智能化解决方案:从硬件选型到系统部署全流程实操

1. 安装Docker与启动MySQL:

```bash curl -fsSL https://get.docker.com | sh sudo usermod -aG docker pi sudo systemctl start docker ```

启动MySQL容器,设置root密码为Archive@2024(请根据实际需求修改):

```bash sudo docker run --name archive-mysql \ -e MYSQL_ROOT_PASSWORD=Archive@2024 \ -e MYSQL_DATABASE=archive_db \ -p 3306:3306 \ -d mysql:8.0 \ --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci ```

2. 初始化数据库表结构:

等待30秒让MySQL完全启动,然后执行建表语句:

```bash sudo docker exec -i archive-mysql mysql -uroot -pArchive@2024 archive_db <四、后端核心业务逻辑开发

/home/pi/archive_smart_system 目录下创建 app.py 文件。该文件将集成传感器读取、RFID监听与Web API服务。以下是完整的、可直接运行的代码。

```python import time import RPi.GPIO as GPIO import smbus2 import mfrc522 from flask import Flask, jsonify, request from apscheduler.schedulers.background import BackgroundScheduler import mysql.connector import threading 配置部分 BUZZER_PIN = 18 TEMP_LIMIT_HIGH = 30.0 HUMIDITY_LIMIT_HIGH = 70.0 DB_CONFIG = { 'user': 'root', 'password': 'Archive@2024', 'host': '127.0.0.1', 'database': 'archive_db' } 初始化 app = Flask(__name__) GPIO.setmode(GPIO.BCM) GPIO.setup(BUZZER_PIN, GPIO.OUT) GPIO.output(BUZZER_PIN, GPIO.LOW) SHT30 初始化 I2C_BUS = 1 SHT30_ADDR = 0x44 bus = smbus2.SMBus(I2C_BUS) RFID 初始化 MIFAREReader = mfrc522.MFRC522() 数据库操作 def get_db_conn(): return mysql.connector.connect(DB_CONFIG) def log_env(temp, hum, status): try: conn = get_db_conn() cursor = conn.cursor() cursor.execute("INSERT INTO env_logs (temperature, humidity, status) VALUES (%s, %s, %s)", (temp, hum, status)) conn.commit() cursor.close() conn.close() except Exception as e: print(f"DB Error: {e}") def log_rfid(uid, action): try: conn = get_db_conn() cursor = conn.cursor() cursor.execute("INSERT INTO rfid_records (card_uid, action_type) VALUES (%s, %s)", (uid, action)) conn.commit() cursor.close() conn.close() except Exception as e: print(f"DB Error: {e}") 硬件控制逻辑 def read_sht30(): try: SHT30 测量命令: 0x2C06 (High repeatability) bus.write_i2c_block_data(SHT30_ADDR, 0x2C, [0x06]) time.sleep(0.5) data = bus.read_i2c_block_data(SHT30_ADDR, 0x00, 6) temp = (data[0] 256 + data[1]) 175.0 / 65535.0 - 45.0 humidity = (100.0 (data[3] 256 + data[4])) / 65535.0 return round(temp, 2), round(humidity, 2) except Exception as e: print(f"Sensor Read Error: {e}") return None, None def trigger_alarm(duration=1): GPIO.output(BUZZER_PIN, GPIO.HIGH) time.sleep(duration) GPIO.output(BUZZER_PIN, GPIO.LOW) 后台任务:环境监控 def monitor_env(): temp, hum = read_sht30() if temp and hum: status = "NORMAL" if temp > TEMP_LIMIT_HIGH or hum > HUMIDITY_LIMIT_HIGH: status = "ALARM" 在单独线程中报警,避免阻塞定时器 threading.Thread(target=trigger_alarm, args=(2,)).start() log_env(temp, hum, status) print(f"Env: {temp}C, {hum}% - {status}") 后台任务:RFID监听 def monitor_rfid(): print("RFID Monitor Started...") while True: 扫描卡片 (status, TagType) = MIFAREReader.MFRC522_Request(MIFAREReader.PICC_REQIDL) if status == MIFAREReader.MI_OK: (status, uid) = MIFAREReader.MFRC522_Anticoll() if status == MIFAREReader.MI_OK: uid_str = "".join([str(u) for u in uid]) print(f"Card Detected: {uid_str}") trigger_alarm(0.5) 短鸣提示 log_rfid(uid_str, "SCAN") time.sleep(2) 防止重复读取 time.sleep(0.1) Web API 接口 @app.route('/api/env/latest', methods=['GET']) def get_latest_env(): conn = get_db_conn() cursor = conn.cursor(dictionary=True) cursor.execute("SELECT FROM env_logs ORDER BY created_at DESC LIMIT 1") data = cursor.fetchone() cursor.close() conn.close() return jsonify(data) @app.route('/api/env/history', methods=['GET']) def get_env_history(): limit = request.args.get('limit', 20) conn = get_db_conn() cursor = conn.cursor(dictionary=True) cursor.execute(f"SELECT FROM env_logs ORDER BY created_at DESC LIMIT {limit}") data = cursor.fetchall() cursor.close() conn.close() return jsonify(data) @app.route('/api/rfid/logs', methods=['GET']) def get_rfid_logs(): conn = get_db_conn() cursor = conn.cursor(dictionary=True) cursor.execute("SELECT FROM rfid_records ORDER BY created_at DESC LIMIT 50") data = cursor.fetchall() cursor.close() conn.close() return jsonify(data) 启动入口 if __name__ == '__main__': 启动定时器,每30秒检测一次环境 scheduler = BackgroundScheduler() scheduler.add_job(monitor_env, 'interval', seconds=30) scheduler.start() 启动RFID监听线程 rfid_thread = threading.Thread(target=monitor_rfid, daemon=True) rfid_thread.start() 启动Web服务 app.run(host='0.0.0.0', port=5000, threaded=True) ```

五、前端可视化大屏实现

为了直观展示库房状态,我们在同目录下创建 templates/index.html。我们将使用ECharts库绘制温湿度曲线,无需复杂的构建工具,保存即可使用。

首先创建templates目录:

```bash mkdir -p /home/pi/archive_smart_system/templates ```

编写 templates/index.html 内容:

```html 档案库房智能监控中心

档案库房智能监控中心

实时环境监测

最近档案出入记录

时间档案UID操作类型
```

六、系统自启动配置与运行

为了确保断电重启后系统能自动恢复运行,我们需要将Python脚本配置为系统服务。

1. 创建Systemd服务文件:

```bash sudo nano /etc/systemd/system/archive_system.service ```

2. 写入以下配置内容:

```ini [Unit] Description=Archive Smart System Service After=network.target mysql.service [Service] Type=simple User=pi WorkingDirectory=/home/pi/archive_smart_system ExecStart=/usr/bin/python3 /home/pi/archive_smart_system/app.py Restart=on-failure RestartSec=5 [Install] WantedBy=multi-user.target ```

3. 启用并启动服务:

```bash sudo systemctl daemon-reload sudo systemctl enable archive_system sudo systemctl start archive_system ```

4. 验证运行状态:

```bash sudo systemctl status archive_system ```

若显示 active (running)则表示启动成功。此时,打开浏览器访问树莓派的IP地址(例如 http://192.168.1.100:5000),即可看到实时温湿度曲线。当SHT30检测到温度超过30°C或湿度超过70%时,蜂鸣器将长鸣报警;当使用RFID卡片靠近读卡器时,系统将记录UID并在前端显示,同时蜂鸣器短鸣提示。

AI咨询
热线电话

028-85154420

15388110056

全国售前咨询电话

扫码咨询
安答联动微信公众号二维码

微信扫码关注安答联动

申请试用
热线电话
申请试用

安答联动档案管理系统