择要: 本文深入浅出地先容了物联网 、云平台、MQTT、HTTP、数据可视化等核心概念,并联合 EMQX、Flask、InfluxDB、Grafana 等主流工具,手把手教你搭建一个支持多协议的物联网 云平台。文章结构清楚,图文并茂,代码翔实易懂,旨在资助读者快速把握物联网 云平台搭建的核心技能。
关键词: 物联网,云平台,MQTT,HTTP,数据可视化,EMQX,Flask,InfluxDB,Grafana
一、物联网根本知识
1.1 物联网概述
物联网(IoT,Internet of Things)是指通过各种信息传感器、射频辨认技能、环球定位体系等,及时收罗任何必要监控 、毗连、互动的物体或过程,实现物与物、物与人的泛在毗连,进而实现对物品和过程的智能化感知、辨认和管理。
1.2 物联网架构
物联网体系架构通常分为三层:
- 感知层: 负责收罗数据,包罗各种传感器、RFID 标签、GPS 模块等。
- 网络层: 负责数据传输,包罗各种网络协议、通讯技能等,比方 WiFi、蓝牙、Zigbee、NB-IoT 等。
- 应用层: 负责数据处置处罚和应用出现,比方数据分析、长途控制、智能决议等。
二、云平台与数据可视化
2.1 云平台
云平台是指基于互联网的相干服务的增长、使用和交付模式,通常涉及通过互联网来提供动态易扩展且常常是捏造化的资源。 云平台可以为物联网应用提供强盛的盘算、存储和网络资源,低沉物联网应用开发和摆设的资本。
2.2 数据可视化
数据可视化是指将数据以图形、图表等可视化情势展示出来,资助用户更直观地明白数据,洞察数据背后的规律和趋势。
三、常用协议与工具先容
3.1 MQTT 协议
MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是一种轻量级的消息发布/订阅协议,专为低带宽、低功耗装备和网络而操持。MQTT 广泛应用于物联网范畴,特别实用于资源受限的装备和不可靠的网络情况。
3.2 HTTP 协议
HTTP(Hypertext Transfer Protocol,超文本传输协议)是一种应用层协议,用于在 Web 欣赏器和 Web 服务器之间传输信息。 HTTP 协议简朴易用,被广泛应用于各种网络应用,包罗物联网范畴。
3.3 EMQX
EMQX 是一款开源、高性能、可扩展的 MQTT 消息服务器,支持百万级并发毗连和消息吞吐。
3.4 Flask
Flask 是一个轻量级的 Web 应用框架,使用 Python 编写,易于学习和使用,得当快速搭建 Web 应用和 API 接口。
3.5 InfluxDB
InfluxDB 是一款开源的时序数据库,专为存储和查询时间序列数据而操持,实用于存储物联网传感器数据、监控 数据等。
3.6 Grafana
Grafana 是一款开源的数据可视化工具,可以毗连多种数据源,创建雅观、功能强盛的仪表盘,及时展示数据。
四、多协议物联网云平台搭建
本项目将搭建一个支持 MQTT 和 HTTP 协议的物联网云平台,实现以下功能:
- 多协议支持: 同时支持 MQTT 和 HTTP 协议的装备接入。
- 数据收罗与存储: 及时收罗来自差别协议装备的数据,并将其存储到 InfluxDB 数据库。
- 数据可视化: 使用 Grafana 对收罗到的数据举行可视化展示。
4.1 体系架构
4.2 代码实现
1. HTTP 服务器搭建 (Flask)- # 导入 Flask 库
- from flask import Flask, request, jsonify
- # 创建 Flask 应用
- app = Flask(__name__)
- # 定义 HTTP 接口,接收 POST 请求
- @app.route('/data', methods=['POST'])
- def receive_data():
- # 获取请求数据
- data = request.get_json()
- # 数据处理逻辑,例如数据校验、格式转换等
- # ...
- # 将数据写入 InfluxDB (示例)
- from influxdb import InfluxDBClient
- client = InfluxDBClient('localhost', 8086, 'user', 'password', 'iot_data')
- json_body = [
- {
- "measurement": "sensor_data",
- "tags": {
- "sensor_id": data.get("sensor_id")
- },
- "fields": {
- "temperature": data.get("temperature"),
- "humidity": data.get("humidity")
- }
- }
- ]
- client.write_points(json_body)
- # 返回响应
- return jsonify({'message': 'Data received successfully!'}), 200
- # 启动 Flask 应用
- if __name__ == '__main__':
- app.run(debug=True)
复制代码 代码分析:
- 使用 Flask 框架创建 HTTP 服务器,并界说 /data 接口吸取 POST 哀求。
- 使用 request.get_json() 获取 HTTP 哀求中的 JSON 数据。
- 举行数据处置处罚,比方数据校验、格式转换等。
- 使用 InfluxDBClient 毗连 InfluxDB 数据库,并将数据写入数据库。
- 返回 JSON 格式的相应,告知客户端数据吸取乐成。
2. MQTT 消息处置处罚 (Python)- # 导入必要的库
- import paho.mqtt.client as mqtt
- from influxdb import InfluxDBClient
- import json
- # MQTT Broker 配置
- MQTT_BROKER = "localhost"
- MQTT_PORT = 1883
- MQTT_TOPIC = "sensor/data"
- # InfluxDB 配置
- INFLUXDB_HOST = "localhost"
- INFLUXDB_PORT = 8086
- INFLUXDB_USER = "user"
- INFLUXDB_PASSWORD = "password"
- INFLUXDB_DATABASE = "iot_data"
- # 创建 InfluxDB 客户端
- influxdb_client = InfluxDBClient(
- host=INFLUXDB_HOST,
- port=INFLUXDB_PORT,
- username=INFLUXDB_USER,
- password=INFLUXDB_PASSWORD,
- database=INFLUXDB_DATABASE
- )
- # 连接到 MQTT Broker
- def on_connect(client, userdata, flags, rc):
- print("Connected to MQTT Broker with result code " + str(rc))
- client.subscribe(MQTT_TOPIC)
- # 接收 MQTT 消息
- def on_message(client, userdata, msg):
- # 解析数据
- data = json.loads(msg.payload.decode())
-
- # 构建 InfluxDB 数据点
- influxdb_data = [
- {
- "measurement": "sensor_data",
- "tags": {
- "sensor_id": data.get("sensor_id"),
- },
- "fields": {
- "temperature": data.get("temperature"),
- "humidity": data.get("humidity"),
- }
- }
- ]
- # 写入 InfluxDB
- influxdb_client.write_points(influxdb_data)
- print("Data written to InfluxDB: " + str(influxdb_data))
- # 创建 MQTT 客户端
- mqtt_client = mqtt.Client()
- mqtt_client.on_connect = on_connect
- mqtt_client.on_message = on_message
- mqtt_client.connect(MQTT_BROKER, MQTT_PORT, 60)
- # 启动 MQTT 客户端
- mqtt_client.loop_start()
- # 保持程序运行
- while True:
- pass
复制代码 代码分析:
- 使用 paho.mqtt.client 毗连到 MQTT Broker,并订阅指定主题。
- 当收到 MQTT 消息时,使用 json.loads() 剖析消息内容。
- 将剖析后的数据构建成 InfluxDB 数据点格式。
- 使用 influxdb_client.write_points() 将数据写入 InfluxDB 数据库。
3. 数据可视化 (Grafana)
- 安装 Grafana 并设置数据源毗连到 InfluxDB 数据库。
- 创建仪表盘并在仪表盘上添加图表,比方折线图、柱状图等。
- 设置图表的数据源为 InfluxDB,并编写查询语句从 InfluxDB 中获取数据。
- 根据必要设置图表的样式、标题、坐标轴等属性,使数据展示更加直观易懂。
示例 Grafana 查询语句:- SELECT "temperature", "humidity" FROM "sensor_data" WHERE time > now() - 1h
复制代码 该查询语句将从 sensor_data measurement 中查询迩来 1 小时的温度和湿度数据。
本项目通过联合 Flask、EMQX、InfluxDB 和 Grafana 等工具,搭建了一个支持 MQTT 和 HTTP 协议的物联网云平台,并实现了数据的收罗、存储和可视化展示。该平台可以机动扩展,支持更多范例的装备和协议接入,并根据实际需求举行功能定制。
留意:
- 以上代码仅供参考,实际应用中必要根据具体需求举行修改。
- 请确保已安装全部依赖库,比方 paho-mqtt,influxdb,flask 等。
- 在实际摆设中,必要思量数据的安全性、体系的稳固性等因素。
想要具体的代码以及思绪可以私信我!!!
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!qidao123.com:ToB企服之家,中国第一个企服评测及软件市场,开放入驻,技术点评得现金 |