从硬件采集到云端数据库全实现之物联网体温检测系统(ESP32+MQTT+云服务器+MySQL )

article/2025/8/24 18:49:00

前言

学了这么久的物联网,一直停留在硬件层面的数据采集和显示,虽然也用过Ubuntu系统进行过项目开发(年初的时候用树莓派完成了口罩识别的项目),也使用过云服务器与硬件简单的MQTT通讯,但是一直没有把两者紧密的结合起来,这两天实现了从硬件采集数据、上传到云服务器以及将数据永久化(存储进数据库)的整个物联网系统,接下来我详细的叙述整个系统是如何实现的,也算是给自己留个纪念。
本文将分为五个部分:

  1. 用硬件来采集温度数据并通过MQTT协议上传到云服务器
  2. 在服务器上搭建自己的MQTT服务器
  3. 在云服务建立一个数据库
  4. 利用MQTT服务器对上传的数据进行解析并存储
  5. 实现效果

在这里插入图片描述

一、数据采集与上传

这里用到的硬件主要有:主控板ESP32、钢琴按键一排、DHT11一个(代替红外测温模块)
ESP32钢琴按键
DHT11硬件连线

ESP32   --------------------- DHT11
P19  --------------------- DATA
3.5V    --------------------- VCC
GND     --------------------- GND
ESP32   --------------------- PianoKey
P23     --------------------- key1
5V      --------------------- VCC
GND     --------------------- GND

关于数据格式
我们MQTT服务器接收到的JSON数据格式,即接收到的MQTT消息应该如下

{"name":"anyone",
"temp":"25",
"date":"2021-4-19",
"time":"22:32:36",
"client_id":"esp32"}

所以我们发出的代码定义的字符串应该对"进行转义处理,避免编译时当作特殊字符而出错

String message = "{\"name\":\"xxx\",
\"temp\":\"25\",
\"date\":\"2021-4-19\",
\"time\":\"22:32:36\",
\"client_id\":\"esp32\"}"

需要在消息中插入变量时应使用"+String+"的格式进行拼接。

String message = "{\"name\":\"xxx\",
\"temp\":\""+String+"\",
\"date\":\""+Date+"\",
\"time\":\""+Time+"\",
\"client_id\":\"esp32\"}";

部分代码
在这里插入图片描述

采集数据部分就是一个简单的DHT11,上传部分用了WIFI和MQTT,使用了WIFI库和PubSubClient库,为了记录每次测温数据的时间,这里还使用了一个全球的ntp服务器,每次开机自动联网,根据设定初始化并连接MQTT服务器和时间服务器,然后循环检测按键是否按下,按下则采集数据,并将数据封装成JSON格式,通过MQTT协议上传到云服务器。硬件的部分没什么特别难的地方,比较烦人的地方是将数据封装成JSON格式,要将一些变量转成字符串格式并且拼接在一起,特别要注意转义字符的使用,否则就会报错或者发送的数据无法解析;另外一个地方就是获取网络时间,ntp设置东八区获取的时间会晚八个小时,获取后把年月日、时分秒取出来、进行校正,最后拼接到上传的JSON数据里。这两个部分几乎耗费了我一天的时间。关于网络时间的获取可以参考这篇文章https://blog.csdn.net/LinQiPing233/article/details/83615058

完整代码点击此处下载

串口打印的信息
串口打印
用MQTTX进行调试也能接收到发送的数据,到这里硬件部分算是告一段落了。

MQTT

二、搭建MQTT服务器

这部分需要用到云服务器,由于我阿里云的服务器过期了,所以去腾讯云白嫖了一个月的服务器,如果实在没有服务器的话,也可以在虚拟机里搭建,废话不多说,MQTT我用的是EMQ,大家可以去官网下载,建议大家选择zip包安装
在这里插入图片描述
获取安装ZIP包

wget https://www.emqx.cn/downloads/enterprise/v4.2.5/emqx-ee-ubuntu18.04-4.2.5-x86_64.zip

解压并安装

unzip emqx-ee-ubuntu18.04-4.2.5-x86_64.zip

进入解压的目录运行shell命令启动EMQ

./bin/emqx start

启动成功后查看运行状态

emqx_ctl status

在这里插入图片描述到这里EMQ算是安装完成了,但是要想使用MQTT服务,必须还要在云服务器的安全组里放行MQTT所使用的1883端口,同时EMQ自带了个 管理控制台Dashboard,使用18083端口,放行之后可以通过IP:18083进行访问,详细的内容大家可以去看官方的文档https://docs.emqx.cn/enterprise/v4.2/getting-started/dashboard-ee.html#%E7%9B%91%E6%8E%A7
在这里插入图片描述
在这里插入图片描述
接下来我们用MQTTX来测试MQTT服务器,测试软件在这里下载https://mqttx.app/cn/
新建一个连接
在这里插入图片描述
连接上之后可以向指定的Topic发送消息,也可以订阅Topic,同时在控制台也可以看到连接上了的客户端
在这里插入图片描述

在这里插入图片描述
通过MQTTX给服务器发送消息,控制台中也能看到,说明服务器已经搭建完成可以使用,至此MQTT部分已经完成。
在这里插入图片描述
在这里插入图片描述

三、云端数据库搭建与设计表格

这部分需要在我们的云服务器上安装一个数据库,我在这里选择的是MySQL,还需要安装PHP、Nginx。大家可以自行在服务器上安装,这里就不展开来说了。由于阿里云的服务器过期之后忘记备份了,我又不想从头安装配置一遍,我选择了个简单的方法,安装宝塔运维面板,宝塔面板提供一键安装LNMP套件服务,这里提供大家参考。
宝塔官网
Ubuntu/Deepin安装命令:

 wget -O install.sh http://download.bt.cn/install/install-ubuntu_6.0.sh && sudo bash install.sh 124cc0

安装成功之后,同样在云服务器的安全组放行TCP8888端口,通过IP:8888访问运维面板。
在这里插入图片描述
第一次打开面板会自动提示安装LNMP套件,选择一键安装即可,安装完成之后点击数据库,选择新建数据库,要记住用户名和密码,等下我们本地连接数据库的时候要用到,访问权限建议选择所有IP。
在这里插入图片描述数据库建立好之后,在安全组放行3306端口,在本地用Navicat 15 for MySQL连接数据库,对刚刚建立的数据库进行设计和修改。Navicat下载地址
打开Navicat选择新建连接——MySQL,连接名可以随意填,主机填写我们云服务器的IP地址,端口默认选择3036,用户名和密码填写我们上一步新建数据库时填写的用户名和密码,填写完之后可以选择测试连接,如果出现无法连接的情况就去宝塔面板—安全—防火墙再次放行3036端口。
在这里插入图片描述
连接上数据库之后,双击展开,点击选中表,右键选择新建表格,根据自己的需求添加字段设计表格,类型可以选择整型、字符串、浮点型等,如果是需要存储中文字符数据,例如name字段,字符集需要选择utf8mb4,排列规则选择utf8mb4_general_ci,否则会出现乱码。设计好之后,Ctrl+Shift+S保存一下,到这里数据库部分就算搭建完成了。
在这片描述

四、数据解析以及数据永久化

在这里我们需要将服务器收到的JSON格式数据根据字段分割开来,并且将相应的字段存进数据库,实现数据的永久化,这一步可以使用MQTT服务器的规则引擎模块。
首先在规则引擎下找到资源,选择新建一个资源,由于我们的MQTT服务器和数据库在同一个云服务器上,所以这里填写的IP地址是本地的127.0.0.1:3306,用户名和密码则是我们创建数据库时设定的,如果忘了可以去宝塔面板上查询,填好之后选择测试连接,如果显示资源可用的则配置成功。
注意如果安装的EMQ是Broker版本,是不支持数据库资源的。
在这里插入图片描述添加资源完成之后,选择规则,新建规则,这里的规则就是用来根据字段切割消息,大家可以参考我的规则,然后根据自己数据库的字段以及上传的消息来编写规则。

SELECTpayload.client_id AS client_id,payload.name AS name,payload.date as date,payload.time AS time,payload.temp AS tempFROM"$events/message_delivered" //接受WHEREtopic = 'topic_temp'

在这里插入图片描述

填写好规则后进行SQL测试,确保上传的数据能正确解析。
在这里插入图片描述
点击测试后可以输出正确的数据则配置成功。
在这里插入图片描述最后一步就是把数据存进数据库了,即创建响应动作,资源选择我们刚刚创建的MySQL数据库资源

insert into`temp` (`client_id`, `name`, `date`,`time`, `temp`)//temp是要插入数据的表的名字
values(${client_id},${name},${date},${time},${temp});//对应刚刚规则输出的值

在这里插入图片描述

五、实现效果

开机自动连接WIFI并初始化连接MQTT服务器
在这里插入图片描述
等待按键按下,检测到按键按下则读取温度信息、获取网络时间,将相关数据封装为JSON格式上传。
在这里插入图片描述
MQTT服务器收到消息后,会检测是否符合规则,如果消息命中规则,则将数据根据字段切割,并且存进数据库。
在这里插入图片描述
视频效果链接:https://b23.tv/cPe6Ls


http://chatgpt.dhexx.cn/article/kfvjsyJZ.shtml

相关文章

微信小程序云开发:基本介绍及云端数据库的使用

基本介绍 开发者可以使用云开发快速开发小程序、小游戏、公众号网页等,并且原生打通微信开放能力。 发布小程序需要使用云开发。 开发者无需搭建服务器,可免鉴权直接使用平台提供的 API 进行业务开发。 配有云端数据库,与传统数据库相比操…

20210117noteexpress云端数据库经验分享

同步到云端数据库 蒙蔽了,居然要占老子C盘空间 这个 简直银魂不散吧,都删了又要来 貌似把这个附件文件夹从C盘改到其他盘就OK 了 C:\Users\16442\AppData\Roaming\NoteExpress\OnlineDBs 一占用就是几个G的文件夹,草 测试成功&#xff…

阿里云国际版建立云端数据库操作流程

手把手教学如何使用阿里云架设与托管网站系列,今天87loud继续编辑创建云数据库的操作教程: 自建关联式数据库的瓶颈 关联式数据库(Relational Database),几乎在所有应用中都可以见到的数据库应用,但是在套…

云端创建MySQL数据库

一、创建RDS MySQL实例 二、设置白名单 创建RDS实例后,需要设置RDS实例的白名单,以允许外部设备访问该RDS实例。 三、创建RDS数据库账号 登录RDS管理控制台,在左侧单击实例列表,然后在上方选择实例所在地域。 找到目标实例&am…

云端数据库配置

进入阿里云官网,购买云数据库 从控制台进入云数据库,选择自己购买的地区(示例中是杭州),可以看到已经在运行中 点击自己的实例ID进入RDS管理控制台创建账户 创建完成后可以看到自己的账号 接着创建自己的数据库 如图&a…

【记搭建云端数据库过程】

学习之云端数据库配置 这次的学习内容是跟B站的戴师兄学的,所以用到的资源可以到戴师兄的视频下面进行下载。 写这个的目的主要是记学习的过程。 下面就让我们看看怎么配置云端数据库吧 第一步:到阿里云购买云端数据库 在产品里找到数据库 然后找到…

云数据库

1. 云数据库概述 1.1. 云计算是云数据库兴起的基础 1.2. 云数据库概念 云数据库是部署和虚拟化在云计算环境中的数据库。云数据库是在云计算的大背景下发展起来的一种新兴的共享基础架构的方法,它极大地增强了数据库的存储能力,消除了人员、硬件、软件…

云数据库浅析

云数据库定义 1.部署和虚拟化在云计算环境当中的数据库,以网络提供IT资源服务。 2.云数据库没有一种自己的数据模型,只是将已有的数据模型(关系型数据库、nosql)在云端的实现。 特点(分布式统一管理带来的优势&#x…

华为BGP协议基础配置

目录 一、原理概述 二、实验目的 三、实验拓扑 四、实验步骤 五、查看代码: 一、原理概述 1、自治系统(AS)是由一个技术管理机构管理,使用统一选路策略的一组路由器集合,自治系统编号范围:1-65535,其…

BGP路由协议(1)

什么是BGP BGP是外部路由协议,是一种增强的距离矢量路由协议。 BGP作用 用来在AS之间传递路由信息。 什么是系统(AS) AS是由同一个技术管理机构管理、使用统一选路策略的一些路由器的集合。 BGP特征 可靠的路由更新机制丰富的Metric度量方…

BGP协议原理(一)BGP协议基本概念:BGP作用与特点、BGP邻居关系建立与配置

文章目录 前提概念ASASN IGP与EGP BGP的基本概述基本作用 BGP协议特点BGP邻居关系和配置建立TCP连接BGP邻居类型BGP简单邻居关系配置报文类型邻居关系的建立 前提概念 AS AS(Autonomous System):自治系统/路由选择域 AS是指由同一技术机构管…

【网络协议详解】——BGP协议(学习笔记)

目录 🕒 1. 概述🕒 2. BGP 发言人🕒 3. 工作原理🕒 4. 报文格式🕘 4.1 报文首部🕘 4.2 打开报文🕘 4.3 更新报文🕘 4.4 保活报文🕘 4.5 通知报文 🕒 5. BGP 的…

BGP协议:简介、属性、选路原则

BGP协议:简介、属性、选路原则 目录 BGP协议:简介、属性、选路原则 一、学习网络BGP必备基础知识 二、BGP 工作原理 三、BGP报文 四、BGP邻居关系的配置 五、BGP需要注意的事项 六、BGP的属性分类 及列举讲解 一、学习网络BGP必备基础知识 边界…

BGP路由协议的那些事?(上)

BGP是怎么来的?为什么要使用BGP? 路由协议的分类 分类包含协议说明IGP:用于域(AS)内路由选择。RIP距离矢量协议,多用于小型网络。ISIS链路状态协议,多用于运营商网络。OSPF链路状态协议&#…

BGP协议解析(白话版)

之前一直没搞明白BGP有啥用,加了跟没加没啥区别,专门查资料写了这篇《BGP协议解析》。 下面使用eNSP模拟器演示! IBGP与EBGP的区别 BGP分为两种:IBGP与EBGP。 两个路由器的BGP号相同,建立邻居关系叫IBGP&#xff0…

华为 BGP协议基础配置与总结

良药苦口利于病,忠言逆耳利于行。 文章目录 一、BGP概述二、拓扑三、基础配置四、BGP与IGP比较五、BGP的数据包六、BGP的邻居状态机七、BGP计时器八、BGP的更新源九、BGP的路由生成十、BGP的路由通告 BGP的邻居建立很关键,涉及环回口地址建立bgp邻居就需…

计算机网络——BGP协议

BGP协议 和谁交换:与其他AS的邻站BGP发言人交换信息。 交换什么:交换网络可达性信息 多久交换一次:发生变化时更新有变化的部分 一般来说两个网络都是由一个BGP发言人连接的。 BGP协议交换信息的过程 BGP协议所交换的网络可达性的信息就…

BGP 协议

BGP BGP 邻居类型BGP 5种包BGP 6种邻居状态BGP 邻居建立BGP 路由的生成方式BGP 通告原则与路由处理BGP 认证BGP 对等体之间的交互原则BGP 邻居学习next-hop-local补充BGP 常用属性BGP 防环BGP 选路规则BGP 路由聚合 BGP知识点: BGP基础配置,BGP 5种报文&…

计算机网络:BGP路由协议

BGP路由协议的概述 首先,再当前的互联网中,BGP是目前唯一支持的外部网关协议EGP的协议,用于自治系统AS之间传递路由信息,目前的版本为4。 从图中可以看出,BGP协议是连接自治系统AS的“桥梁”。 为什么需要BGP协议 …

BGP协议基础配置—学习

BGP重要概念 IGP是运行在AS内部的路由协议,主要有RIP、OSPF及IS-IS,着重于发现和计算路由。 EGP是运行在AS之间的路由协议,通常是BGP,它是实现路由控制和选择最好的路由协议。 这次主要讲的是BGP。 BGP它不生产路由&#xff0…