打开Raspberry Pi Imager,点击「选择设备」选对应树莓派型号,点击「选择操作系统」→「Raspberry Pi OS (Other)」→「Raspberry Pi OS Lite (64-bit)」,点击「选择存储」选SD卡,务必点击右下角齿轮图标配置:
配置好点击「烧录」,完成后SD卡插入树莓派,通电等待2-3分钟启动。
Windows打开MobaXterm,点击左上角「Session」→「SSH」,远程主机填raspberry-archive.local,用户名pi,点击OK输入密码登录;Mac/Linux终端输入:
``` ssh pi@raspberry-archive.local ```登录成功后执行以下命令更新系统:
``` sudo apt update && sudo apt upgrade -y ```树莓派GPIO引脚对应关系可通过SSH输入gpio readall查看(64位OS需先安装工具:sudo apt install wiringpi -y),按以下顺序连接:
执行以下命令:
``` sudo apt install python3-pip -y sudo pip3 install Adafruit_DHT ```输入以下命令创建数据库和数据表:
``` python3 << 'EOF' import sqlite3 conn = sqlite3.connect('/home/pi/archive_env.db') c = conn.cursor() c.execute('''CREATE TABLE env_data (id INTEGER PRIMARY KEY AUTOINCREMENT, temperature REAL NOT NULL, humidity REAL NOT NULL, record_time DATETIME DEFAULT CURRENT_TIMESTAMP)''') conn.commit() conn.close() EOF ```输入以下命令创建脚本文件:
``` nano /home/pi/get_env_data.py ```将以下代码完整复制粘贴(Ctrl+Shift+V在MobaXterm中有效,Mac/Linux终端直接粘贴):
```python import Adafruit_DHT import sqlite3 import time 固定配置:传感器型号DHT22,GPIO4 sensor = Adafruit_DHT.DHT22 pin = 4 db_path = '/home/pi/archive_env.db' def read_and_save(): humidity, temperature = Adafruit_DHT.read_retry(sensor, pin) if humidity is not None and temperature is not None: 保留1位小数,符合档案温湿度精度要求 temp_rounded = round(temperature, 1) humi_rounded = round(humidity, 1) conn = sqlite3.connect(db_path) c = conn.cursor() c.execute('INSERT INTO env_data (temperature, humidity) VALUES (?, ?)', (temp_rounded, humi_rounded)) conn.commit() conn.close() if __name__ == "__main__": while True: read_and_save() 档案场景建议每5分钟采集1次,可修改此处调整间隔(单位:秒) time.sleep(300) ```
按Ctrl+X,输入Y,按Enter保存退出。
先测试脚本:
``` python3 /home/pi/get_env_data.py & ```按Ctrl+C退出前台,验证数据是否写入:
``` python3 << 'EOF' import sqlite3 conn = sqlite3.connect('/home/pi/archive_env.db') c = conn.cursor() print(c.execute('SELECT FROM env_data ORDER BY id DESC LIMIT 1').fetchall()) conn.close() EOF ```设置开机自启动:
``` sudo nano /etc/systemd/system/archive-env.service ```粘贴以下内容:
``` [Unit] Description=Archive Environment Monitor Service After=network.target [Service] User=pi WorkingDirectory=/home/pi ExecStart=/usr/bin/python3 /home/pi/get_env_data.py Restart=always [Install] WantedBy=multi-user.target ```保存退出后执行:
``` sudo systemctl daemon-reload sudo systemctl enable archive-env.service sudo systemctl start archive-env.service ```查看服务状态:
``` sudo systemctl status archive-env.service ```显示active (running)即为成功。
现有系统需提供接收JSON格式温湿度数据的POST接口,接口示例字段:temperature(浮点数)、humidity(浮点数)、device_id(字符串,设备唯一标识)、record_time(ISO格式时间)。
输入以下命令打开原有脚本:
``` nano /home/pi/get_env_data.py ```替换为以下完整代码(替换前请修改第13-15行的接口配置):
```python import Adafruit_DHT import sqlite3 import time import requests from datetime import datetime 固定硬件配置 sensor = Adafruit_DHT.DHT22 pin = 4 db_path = '/home/pi/archive_env.db' 请修改此处对接配置 API_URL = "http://your-archive-system.com/api/env-data" 替换为你的档案系统接口地址 DEVICE_ID = "archive-001" 替换为你的设备唯一标识 def read_and_save(): humidity, temperature = Adafruit_DHT.read_retry(sensor, pin) if humidity is not None and temperature is not None: temp_rounded = round(temperature, 1) humi_rounded = round(humidity, 1) record_time_iso = datetime.now().isoformat() 本地存储备份 conn = sqlite3.connect(db_path) c = conn.cursor() c.execute('INSERT INTO env_data (temperature, humidity, record_time) VALUES (?, ?, ?)', (temp_rounded, humi_rounded, record_time_iso)) conn.commit() conn.close() 对接档案系统 try: payload = { "temperature": temp_rounded, "humidity": humi_rounded, "device_id": DEVICE_ID, "record_time": record_time_iso } headers = {"Content-Type": "application/json"} response = requests.post(API_URL, json=payload, headers=headers, timeout=5) response.raise_for_status() 接口返回4xx/5xx会抛出异常 except Exception as e: print(f"接口对接失败:{e}") 错误信息仅本地记录,不影响采集 if __name__ == "__main__": while True: read_and_save() time.sleep(300) ```保存退出后重启服务:
``` sudo systemctl restart archive-env.service ```档案温湿度标准:温度14-24℃,相对湿度45-60%RH。修改脚本添加本地LED或邮件预警(邮件预警需配置SMTP,此处以LED为例)。
修改脚本开头和read_and_save函数,添加LED控制代码即可。