采用esp8266+MQTT+云服务器+MySQL的物联网温湿度检测系统
Posted Mpara
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了采用esp8266+MQTT+云服务器+MySQL的物联网温湿度检测系统相关的知识,希望对你有一定的参考价值。
文章目录
前言
一般在做与物联网相关的项目,采集完数据需要上传到云端,然后再将数据保存至后台,也就是数据库,来方便工作人员去调用这些数据,更好的进行工作。
本文章就是使用wemos d1 mini来实现将dht11采集的温湿度数据通过MQTT服务器转存至数据库,使用的MQTT服务器为EMQX,使用mysql作为数据库,可以简单方便的让使用者调取数据。
提示:以下是本篇文章正文内容,下面案例可供参考
一、项目所使用软硬件
1. 硬件部分
硬件 | 数量 |
---|---|
wemos d1 mini | 1 |
dht11 | 1 |
杜邦线 | 3 |
2. 软件部分
Centos7.6 |
---|
EMQ X Enterprise |
宝塔 |
Navicat 15 fot MySQL |
MQTTX |
Arduino IDE |
二、软件安装与使用
1.安装宝塔
首先需要在云服务器上安装宝塔,如没有云服务器,可以下载虚拟机,安装Ubuntu或者Centos操作系统,再安装宝塔,已安装可以忽略此步骤。
宝塔官网链接:
https://www.bt.cn/
本文使用的是腾讯云的Centos7.6云服务器
安装命令:
yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh
在云服务器中输入安装命令,安装完毕后,使用外网链接打开宝塔面板,输入用户名与密码,登录即可。
(注意:宝塔的端口号为8888,登录前请自行到云服务器→防火墙→安全组中放行8888端口即可登录)
到此宝塔安装完毕。
2.安装EMQ X
EMQ X下载地址:
https://www.emqx.cn/downloads
(这里使用的是EMQ X Enterprise,也就是企业版,为什么不使用EMQ X Broker呢,因为只有企业版才支持数据存储功能)
(注意:下载版本,本文使用的是Centos 7.6,所以选择Centos 7下载,安装方式推荐zip)
运行以上命令后,会提示:
(注意:运行命令,需先使用cd emqx进入到emqx目录)
之后可以登录EMQ X Dashboard,地址为本地ip(云服务器ip):18083
local host:18083
(注意:同上宝塔面板登录,需先放行18083端口)
到此EMQ X安装完毕。
可以使用MQTTX测试EMQX服务器情况
MQTTX软件下载地址:
https://mqttx.app/cn/
打开软件后,点击+号,新建连接,如图:
(注意:如连接不上请放行1883端口
填好红框的内容,就可以连接,就可以向指定的topic发送消息,订阅的topic也可以接受消息
3.使用宝塔与Navicat 15 for MySQL建立数据库
首先打开宝塔面板→数据库→添加数据库
点击添加数据库后,输入数据库名(任意),编码格式建议选择“utf8mb4”
(注意:这里请放行3306端口)
之后打开Navicat 15 for MySQL
下载地址:https://www.jb51.net/database/710931.html
点击连接→MySQL
创建完连接后,双击即可连接,之后在表中添加几个字段,No(序号),tem(温度),hum(湿度)
点击保存,命名为tem_hum_data
4.使用EMQ X将数据提取出来转存至MySQL
打开EMQ X Dashboard→规则引擎→资源,点击创建资源
资源类型选择“MySQL”,数据库名、用户名、密码刚才所创建的数据库的参数保持一致
接着创建规则
点击创建
SELECT
payload.No as No,payload.tem as tem,payload.hum as hum
FROM
"tem_hum"
WHERE
topic =~ 'tem_hum'
(SELECT:payload可以理解为一个消息载体对象;“.No”、“.tem”、“.hum”)是对其属性的引用;as是给该变量或属性起别名。
FORM:“tem_hum”表示的是topic名字,筛选该主题的消息。
WHERE:只有当消息来自“topic = ~ ‘tem_hum’”时,才会执行相应的动作)
然后打开sql测试,输入topic和payload,payload中的字段要与上面创建的一致,字段内容随意,格式选择“JSON”,点击sql测试后,查看输出内容
sql测试就完成了,接下来点击添加动作,在页面下方,也就是将接受到的数据保存到MySQL中
这里使用到的sql插入语句为:
insert into
`tem_hum_data` (`No`, `tem`, `hum`)
//tem_hum_data是要插入数据的表的名字
values
($No,$tem,$hum);
//对应刚刚规则输出的值
(注意:注释需删除)
然后保存规则
三、硬件接线与代码
1.接线部分
硬件选择的是wemos d1 mini与dht11温湿度传感器,wemos d1 mini外观小巧,具有esp8266wifi模块,价格便宜,开发简单的物联网项目十分好用。
wemos d1 mini——————————dht11
3.3V——————————VCC
D7——————————DATA
GUN——————————GUN
2.核心代码
本文使用arduino IDE进行编译,上传数据的格式为JSON格式
void loop()
if (!client.connected())
reconnect();
client.loop();
long now = millis();
if (now - lastMsg > 30000)
// 等待几秒钟之间测量
lastMsg = now;
DHT11_detection();
// json serialize(json序列化)
DynamicJsonDocument data(256);
data["No"] = i++;
data["tem"] = Temp_Value;
data["hum"] = Humi_Value;
// 发布温度和湿度
char json_string[256];
serializeJson(data, json_string);
// "No":1,"tem":23.5,"hum":55
Serial.println(json_string);
client.publish(topic, json_string, false);
delay(2000);
完整代码:
https://download.csdn.net/download/weixin_44337303/17939446?spm=1001.2014.3001.5501
四、项目效果
1.arduino ide串口打印情况
(注意:波特率选择115200)
2.MQTT服务器上传数据情况
这里可以用MQTTX订阅topic后来查看接收消息
MQTT服务器收到消息后,会检测是否符合规则,如果消息命中规则,则将数据根据字段切割,并且存进数据库。
3.Mysql数据存储情况
这里使用的是Navicat 15 for MySQL查看存储情况
数据上传存储正常,项目结束。
五、总结
以上全文就是使用wemos d1 mini(esp8266)来通过MQTT服务器(EMQ X Enterprise)进行数据传输,然后转存至MySQL中,项目过程中遇到非常多的坑,代码修修改改多次,最后算是完成了这个简单的小项目,步骤不难,跟着本文流程动手实验一遍,相信会收获良多,如有写得不好的地方,欢迎向笔者提出你宝贵的建议。
以上是关于采用esp8266+MQTT+云服务器+MySQL的物联网温湿度检测系统的主要内容,如果未能解决你的问题,请参考以下文章
云端web远程控制LED(MQTT+esp8266+云服务器)
云端web远程控制LED(MQTT+esp8266+云服务器)
基于STM32设计的智能家居系统(采用ESP8266+OneNet云平台)
转载基于阿里云的MQTT远程控制(Android 连接MQTT服务器,ESP8266连接MQTT服务器实现远程通信控制----简单的连接通信)