【RaspberryPi5开发板方案创意赛】双胞胎健康监测系统-成果贴2-部署贴一、部署概述1.1 系统架构

1.2 设备清单设备类型硬件型号数量功能说明
| 发送端 | M5Stack Cardputer V1.1 | 1-2-N | 传感器数据采集、ESP-NOW发送 |
| 网关 | Cardputer / ESP32-S3 TFT Feather | 1 | ESP-NOW接收、MQTT转发 |
| 服务器 | 树莓派5 (4GB) | 1 | MQTT Broker、数据存储、Web服务 |
| 传感器 | M5Unit-Miniscale | 适量 | 称重检测 |
二、树莓派服务器部署2.1 安装操作系统
下载Raspberry Pi Imager工具
选择系统:Raspberry Pi OS (64-bit)
写入SD卡并完成基础配置
2.2 更换中国软件源
参考之前的开箱贴,过程贴。
https://forum.eepw.com.cn/thread/399205/1
https://forum.eepw.com.cn/thread/399206/1
2.4 配置Mosquitto MQTT Broker
编辑 /etc/mosquitto/mosquitto.conf:
listener 1883 0.0.0.0 allow_anonymous true persistence true persistence_location /var/lib/mosquitto/
启动服务:
sudo systemctl restart mosquittosudo systemctl enable mosquitto
2.5 部署后端代码
# 创建项目目录mkdir -p ~/twins_healthcd ~/twins_health# 创建虚拟环境python3 -m venv venvsource venv/bin/activate# 安装依赖pip install paho-mqtt flask flask-cors pandas openpyxl# 复制代码文件# mqtt_server.py -> ~/twins_health/mqtt_server.py# frontend/*.html -> ~/twins_health/static/
2.6 配置开机自启
创建 /etc/systemd/system/twins_health.service:
[Unit]Description=Twins Health Monitor MQTT ServerAfter=network.target mosquitto.service[Service]Type=simpleUser=piWorkingDirectory=/home/pi/twins_healthExecStart=/home/pi/twins_health/venv/bin/python mqtt_server.pyRestart=alwaysRestartSec=10[Install]WantedBy=multi-user.target
启用服务:
sudo systemctl daemon-reloadsudo systemctl enable twins_healthsudo systemctl start twins_health
三、网关设备部署3.1 安装CircuitPython
进入Bootloader模式(按住G0,按RST,松开)
复制 .uf2 文件到 CARDPUTERBOOT
如果之前不是CircuitPython环境,可以使用下面的在线安装模式。
3.2 安装依赖库
复制以下库到 CIRCUITPY/lib/ 目录:
lib/ ├── adafruit_minimqtt/ ├── adafruit_st7789.mpy ├── adafruit_requests.mpy └── espnow.mpy
3.3 配置文件
创建 CIRCUITPY/settings.toml:
WIFI_SSID = "你的WiFi名称"WIFI_PASSWORD = "你的WiFi密码"ESPNOW_CHANNEL = 1MQTT_BROKER = "raspberrypi.local"MQTT_PORT = 1883MQTT_TOPIC_WEIGHT = "sensors/twins/weight"MQTT_TOPIC_STATUS = "sensors/twins/status"BOARD_ID = "gateway"MQTT_SEND_INTERVAL = 5.0
3.4 部署主程序
复制 code.py 到 CIRCUITPY/ 根目录,设备自动重启运行。
3.5 获取MAC地址
重要步骤: 运行后记录本设备MAC地址,用于配置发送端。
串口输出示例:
======================================== 双胞胎健康监测系统 - ESP-NOW网关 设备ID: gateway ======================================== 本机MAC地址: AA:BB:CC:DD:EE:FF 请将此MAC地址配置到发送端设备
四、发送端设备部署4.1 硬件接线传感器引脚Cardputer引脚说明
| VCC | 3V3 | 电源正极 |
| GND | GND | 电源地 |
| SDA | SDA | I2C数据线 |
| SCL | SCL | I2C时钟线 |
4.2 安装CircuitPython
与网关设备步骤相同。
4.3 配置文件
创建 CIRCUITPY/settings.toml:
WIFI_SSID = "你的WiFi名称"WIFI_PASSWORD = "你的WiFi密码"ESPNOW_CHANNEL = 1GATEWAY_MAC = "AA:BB:CC:DD:EE:FF" # 网关设备的MAC地址BOARD_ID = "sender_A"[sensors]A1 = 0x26A2 = 0x27[sensor_items]A1 = "牙刷杯"A2 = "水杯"READ_INTERVAL = 1.0SEND_INTERVAL = 2.0
4.4 部署主程序
复制 code.py 到 CIRCUITPY/ 根目录。
五、验证测试5.1 检查MQTT服务
# 订阅测试mosquitto_sub -h localhost -t "sensors/#" -v# 应看到类似输出:# sensors/twins/weight {"timestamp": 1234567890, "board_id": "gateway", ...}5.2 检查Web服务
浏览器访问:http://<树莓派IP>:5000
5.3 检查数据流
完整数据流验证:
1. 发送端串口输出:
发送数据到网关: 2 个传感器
2. 网关串口输出:
ESP-NOW接收 [XX:XX:XX:XX:XX:XX]: 2 个传感器
MQTT发送: 2 个传感器
3. 树莓派串口输出:
收到消息: sensors/twins/weight - {...}
处理传感器 A1 数据成功
4. Web界面:
显示实时数据更新六、文件结构
RaspberryPi5Idea/ ├── devices/ # 设备代码 │ ├── sender/ # 发送端 │ │ ├── code.py # 主程序 │ │ ├── settings.toml # 配置模板 │ │ └── README.md # 部署文档 │ ├── gateway/ # 网关 │ │ ├── code.py # 主程序 │ │ ├── settings.toml # 配置模板 │ │ └── README.md # 部署文档 │ └── server/ # 服务器 │ └── README.md # 部署文档 │ └── raspberrypi/ # 树莓派代码 ├── backend/ │ ├── mqtt_server.py # MQTT服务器 │ └── requirements.txt # Python依赖 └── frontend/ ├── index.html # 主页面 ├── realtime.html # 实时数据 ├── stats.html # 统计页面 └── rawdata.html # 原始数据
七、常见问题问题解决方案
| WiFi连接失败 | 检查SSID和密码,确认信号强度 |
| MQTT连接失败 | 确认Mosquitto服务已启动 |
| ESP-NOW无数据 | 检查GATEWAY_MAC配置是否正确 |
| I2C传感器错误 | 检查接线和I2C地址 |
| Web无法访问 | 检查防火墙是否开放5000端口 |
八、部署总结8.1 部署顺序
✅ 树莓派服务器(先部署,获取IP地址)
✅ 网关设备(记录MAC地址)
✅ 发送端设备(配置网关MAC地址)
8.2 关键配置项配置项说明
| ESPNOW_CHANNEL | 发送端和网关必须一致 |
| GATEWAY_MAC | 发送端必须配置网关MAC地址 |
| MQTT_BROKER | 网关必须配置树莓派IP地址 |
8.3 成功标志
网关显示屏显示:WiFi:OK ESPN:OK MQTT:OK
Web界面实时更新传感器数据
数据库中有新数据记录
部署完成日期:2026年2月
详细文档请参考(附件中内容很多,这里不再赘述):
我要赚赏金
