物联网数据采集与可视化:使用 Python 和 MQTT 构建实时监控系统
引言
物联网(IoT)的核心在于连接各种设备并收集其产生的数据。然而,仅仅收集数据是不够的,我们需要能够实时地处理、分析和可视化这些数据,以便做出及时的决策。本文将带你构建一个完整的物联网数据采集与可视化系统,使用 Python、MQTT 协议和 WebSocket 技术,实现实时数据监控。
我们将创建一个模拟的温度传感器系统,该系统会:
- 模拟传感器数据生成
- 使用 MQTT 协议发布数据
- 通过 Python 服务订阅并处理数据
- 将处理后的数据通过 WebSocket 发送到前端
- 使用 HTML/CSS/JavaScript 实现前端可视化
系统架构
[传感器] --> [MQTT Broker] --> [Python 服务] --> [WebSocket Server] --> [Web 浏览器]
所需软件和库
- Python 3.x
paho-mqtt: MQTT 客户端库websockets: WebSocket 服务端库asyncio: 异步 I/O 库flask: Web 框架(用于提供静态文件)matplotlib: 数据可视化库numpy: 数值计算库
项目结构
iot_monitoring/
├── app.py # 主应用逻辑
├── mqtt_publisher.py # MQTT 发布者(模拟传感器)
├── requirements.txt # 依赖包列表
├── templates/
│ └── index.html # 前端页面
└── static/
└── script.js # 前端 JavaScript
安装依赖
pip install paho-mqtt websockets flask matplotlib numpy asyncio
1. MQTT 发布者(模拟传感器)
创建 mqtt_publisher.py 文件:
# mqtt_publisher.py
import random
import time
import json
import paho.mqtt.client as mqtt
# MQTT 配置
MQTT_BROKER = "localhost"
MQTT_PORT =
TOPIC =
SENSOR_ID =
():
rc == :
()
:
(, rc)
():
client = mqtt.Client()
client.on_connect = on_connect
client.connect(MQTT_BROKER, MQTT_PORT, )
:
:
temperature = (random.uniform(, ), )
humidity = (random.uniform(, ), )
payload = {
: SENSOR_ID,
: temperature,
: humidity,
: time.time()
}
client.publish(TOPIC, json.dumps(payload))
()
time.sleep()
KeyboardInterrupt:
()
client.disconnect()
__name__ == :
simulate_sensor_data()

