基于EMQX+Flask+InfluxDB+Grafana打造多协议物联网云平台:MQTT/HTTP设备接入与数据可视化流程(附代码示例)

摘要: 本文深入浅出地介绍了物联网、云平台、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 InfluxDBClientclient = 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"),}}]# 写入 InfluxDBinfluxdb_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-mqttinfluxdbflask 等。
  • 在实际部署中,需要考虑数据的安全性、系统的稳定性等因素。

想要具体的代码以及思路可以私信我!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/45307.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024-07-14 Unity插件 Odin Inspector1 —— 插件介绍

文章目录 1 介绍2 模块3 学习目的 1 介绍 ​ Odin Inspector 是 Unity 的一个插件,拥有强大、自定义和用户友好的编辑器,而无需编写任何自定义编辑器代码,使得编程过程中的数据可视化更容易实现。 ​ 具体功能包括: 更舒适美观…

软件设计师(中级)备考视频教程

一、视频介绍 本视频主要包括软件设计师系统学习教程,通过学习本视频,可以帮助考生高效且深入地掌握软件设计师资格考试核心知识,全方位覆盖考试要点,从而轻松备战考试。视频不仅涵盖了考试所需的全面知识体系,还通过直…

Linux--USB驱动开发(二)插入USB后的内核执行程序

一、USB总线驱动程序的作用 a)识别USB设备 1.1 分配地址 1.2 并告诉USB设备(set address) 1.3 发出命令获取描述符 b)查找并安装对应的设备驱动程序 c)提供USB读写函数 二、USB设备工作流程 由于内核自带了USB驱动,所以我们先插入一个U…

Google Colab 云端硬盘路径读取

加载云端硬盘 需要在左上角点击这个文件图标; from google.colab import drive drive.mount("/content/drive") # 挂载云端硬盘import os path"/content/drive/MyDrive/TextClassificationCustom" os.chdir(path) # 以路径path作为当前工作目…

在 SwiftUI 中的作用域动画

文章目录 前言简单示例动画视图修饰符使用多个可动画属性使用 ViewBuilder总结 前言 从一开始,动画就是 SwiftUI 最强大的功能之一。你可以在 SwiftUI 中快速构建流畅的动画。唯一的缺点是每当我们需要运行多步动画或将动画范围限定到视图层次结构的特定部分时&…

docker emqx 配置密码和禁用匿名连接

mqtt版本emqx/emqx:4.4.3 1.首先把镜像内目录/opt/emqx/etc拷贝到本地 2.做映射 3.allow_anonymous, false改成true 4. 5.MQTTX连不上的话看看下图的有没有打开

windows下环境变量开启方式

第一种方法: 使用快捷键打开“运行”对话框:按下 Win R 组合键,这将打开“运行”窗口。 输入系统属性命令:在“运行”窗口中输入 sysdm.cpl 然后按回车键。这将打开“系统属性”对话框。【sysdm.cpl是"System Data Manager…

Linux多线程编程-哲学家就餐问题详解与实现(C语言)

在哲学家就餐问题中,假设有五位哲学家围坐在圆桌前,每位哲学家需要进行思考和进餐两种活动。他们的思考不需要任何资源,但进餐需要使用两根筷子(左右两侧各一根)。筷子是共享资源,哲学家们在进行进餐时需要…

鞭炮插画:成都亚恒丰创教育科技有限公司

鞭炮插画:年味里的绚烂记忆 在岁末年初的温柔时光里,总有一抹色彩,能瞬间唤醒沉睡的年味——那便是鞭炮插画中跃动的红与金,成都亚恒丰创教育科技有限公司 它们不仅仅是纸与墨的交织,更是情感与记忆的桥梁&#xff0c…

自适应手机版大学职业技术学院网站模版源码系统 带完整的安装代码包以及搭建部署教程

系统概述 随着智能手机的普及和移动互联网技术的飞速发展,用户越来越倾向于通过移动设备访问网站。对于大学职业技术学院而言,一个能够自适应各种屏幕尺寸、操作流畅、内容丰富的移动端网站,不仅能够提升用户体验,还能有效扩大学…

mysql快速精通(三)表关系

主打一个实用 一. 一对多(多对一)关系 例如班级和学生,这种类型我们一般建两个表,一方为主表,多方为从表 二. 多对多 例如课程与学生,这种类型我们一般需要建三张表,两张一方主表,与一张多方从表…

初识影刀:EXCEL根据部门筛选低值易耗品

第一次知道这个办公自动化的软件还是在招聘网站上,了解之后发现对于办公中重复性的工作还是挺有帮助的,特别是那些操作非EXCEL的重复性工作,当然用在EXCEL上更加方便,有些操作比写VBA便捷。 下面就是一个了解基本操作后&#xff…

[Linux]CentOS软件的安装

一、Linux 软件包管理器 yum 1.Linux安装软件的方式 在linux中安装软件常用的有三种方式: 源代码安装(我们还需要进行编译运行后才可以,很麻烦) rpm安装(Linux的安装包,需要下载一些rpm包,但是…

基于机器学习的锂离子电池容量估计(MATLAB R2021B)

锂离子电池已经广泛应用于电动汽车或混合动力汽车的能源存储装置。由于电化学成分的衰退,锂离子电池随着使用时间的增加,电池性能不断退化,导致电池容量和功率发生衰退。电池容量衰退的因素主要有金属锂沉积,活性物质分解和电解液…

深度学习DeepLearning多元线性回归 学习笔记

文章目录 多维特征变量与术语公式多元线性回归正规方程法Mean normalizationZ-score normalization设置合适的学习率Feature engineering 多维特征 变量与术语 列属性xj属性数n x ⃗ \vec{x} x (i)行向量某个值 x ⃗ j i \vec{x}_j^i x ji​上行下列均值μ标准化标准差σsigm…

Chromium CI/CD 之Jenkins实用指南2024-如何创建新节点(三)

1. 前言 在前一篇《Jenkins实用指南2024-系统基本配置(二)》中,我们详细介绍了如何对Jenkins进行基本配置,包括系统设置、安全配置、插件管理以及创建第一个Job。通过这些配置,您的Jenkins环境已经具备了基本的功能和…

Java 设计模式系列:外观模式

简介 外观模式(Facade Pattern)是一种设计模式,又名门面模式,是一种通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更加容易被访问的模式。该模式对外有一个统一接口,外部应用程序不用关心内部…

Android中RecyclerView使用详解(一)

目录 概述优点列表布局RecyclerView一、创建RecyclerView并且在布局中绑定二、实现RecyclerView单个item的布局三、给RecyclerView写一个对应的适配器Adapter1.创建自定义的ViewHolder2.继承Adapter,泛型使用我们自定义的ViewHolder3.重写Adapter的三个方法onCreate…

线程安全(二)synchronized 的底层实现原理、锁升级、对象的内存结构

目录 一、基础使用1.1 不加锁的代码实现1.2 加锁的代码实现二、实现原理2.1 synchronized 简介2.2 对象监控器(Monitor)2.3 加锁过程第一步:判断 Owner 指向第二步:进入 EntryList 阻塞第三步:主动进入 WaitSet 等待三、锁升级3.1 对象的内存结构3.2 Mark Word 对象头3.3 …

SpringBoot实战:多表联查

1. 保存和更新公寓信息 请求数据的结构 Schema(description "公寓信息") Data public class ApartmentSubmitVo extends ApartmentInfo {Schema(description"公寓配套id")private List<Long> facilityInfoIds;Schema(description"公寓标签i…