采用esp8266+MQTT+云服务器+MySQL的物联网温湿度检测系统

文章目录

  • 前言
  • 一、项目所使用软硬件
    • 1. 硬件部分
    • 2. 软件部分
  • 二、软件安装与使用
    • 1.安装宝塔
    • 2.安装EMQ X
    • 3.使用宝塔与Navicat 15 for MySQL建立数据库
    • 4.使用EMQ X将数据提取出来转存至MySQL
  • 三、硬件接线与代码
    • 1.接线部分
    • 2.核心代码
  • 四、项目效果
    • 1.arduino ide串口打印情况
    • 2.MQTT服务器上传数据情况
    • 3.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

在云服务器中输入安装命令,安装完毕后,使用外网链接打开宝塔面板,输入用户名与密码,登录即可。
采用esp8266+MQTT+云服务器+MySQL的物联网温湿度检测系统_第1张图片
(注意:宝塔的端口号为8888,登录前请自行到云服务器→防火墙→安全组中放行8888端口即可登录)
到此宝塔安装完毕。

2.安装EMQ X

EMQ X下载地址:
https://www.emqx.cn/downloads
(这里使用的是EMQ X Enterprise,也就是企业版,为什么不使用EMQ X Broker呢,因为只有企业版才支持数据存储功能)
采用esp8266+MQTT+云服务器+MySQL的物联网温湿度检测系统_第2张图片
(注意:下载版本,本文使用的是Centos 7.6,所以选择Centos 7下载,安装方式推荐zip)
采用esp8266+MQTT+云服务器+MySQL的物联网温湿度检测系统_第3张图片
运行以上命令后,会提示:
在这里插入图片描述
(注意:运行命令,需先使用cd emqx进入到emqx目录)
之后可以登录EMQ X Dashboard,地址为本地ip(云服务器ip):18083

local host:18083

(注意:同上宝塔面板登录,需先放行18083端口)
采用esp8266+MQTT+云服务器+MySQL的物联网温湿度检测系统_第4张图片
到此EMQ X安装完毕。
可以使用MQTTX测试EMQX服务器情况
MQTTX软件下载地址:
https://mqttx.app/cn/
打开软件后,点击+号,新建连接,如图:
采用esp8266+MQTT+云服务器+MySQL的物联网温湿度检测系统_第5张图片
(注意:如连接不上请放行1883端口
填好红框的内容,就可以连接,就可以向指定的topic发送消息,订阅的topic也可以接受消息
采用esp8266+MQTT+云服务器+MySQL的物联网温湿度检测系统_第6张图片

3.使用宝塔与Navicat 15 for MySQL建立数据库

首先打开宝塔面板→数据库→添加数据库
采用esp8266+MQTT+云服务器+MySQL的物联网温湿度检测系统_第7张图片
点击添加数据库后,输入数据库名(任意),编码格式建议选择“utf8mb4”
采用esp8266+MQTT+云服务器+MySQL的物联网温湿度检测系统_第8张图片
(注意:这里请放行3306端口)
之后打开Navicat 15 for MySQL
下载地址:https://www.jb51.net/database/710931.html
采用esp8266+MQTT+云服务器+MySQL的物联网温湿度检测系统_第9张图片
点击连接→MySQL
采用esp8266+MQTT+云服务器+MySQL的物联网温湿度检测系统_第10张图片
创建完连接后,双击即可连接,之后在表中添加几个字段,No(序号),tem(温度),hum(湿度)
采用esp8266+MQTT+云服务器+MySQL的物联网温湿度检测系统_第11张图片
点击保存,命名为tem_hum_data
在这里插入图片描述

4.使用EMQ X将数据提取出来转存至MySQL

打开EMQ X Dashboard→规则引擎→资源,点击创建资源
采用esp8266+MQTT+云服务器+MySQL的物联网温湿度检测系统_第12张图片
资源类型选择“MySQL”,数据库名、用户名、密码刚才所创建的数据库的参数保持一致
采用esp8266+MQTT+云服务器+MySQL的物联网温湿度检测系统_第13张图片
接着创建规则
采用esp8266+MQTT+云服务器+MySQL的物联网温湿度检测系统_第14张图片
点击创建
采用esp8266+MQTT+云服务器+MySQL的物联网温湿度检测系统_第15张图片

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测试后,查看输出内容
采用esp8266+MQTT+云服务器+MySQL的物联网温湿度检测系统_第16张图片

采用esp8266+MQTT+云服务器+MySQL的物联网温湿度检测系统_第17张图片

sql测试就完成了,接下来点击添加动作,在页面下方,也就是将接受到的数据保存到MySQL中
采用esp8266+MQTT+云服务器+MySQL的物联网温湿度检测系统_第18张图片
采用esp8266+MQTT+云服务器+MySQL的物联网温湿度检测系统_第19张图片
这里使用到的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

采用esp8266+MQTT+云服务器+MySQL的物联网温湿度检测系统_第20张图片

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串口打印情况

采用esp8266+MQTT+云服务器+MySQL的物联网温湿度检测系统_第21张图片
(注意:波特率选择115200)

2.MQTT服务器上传数据情况

这里可以用MQTTX订阅topic后来查看接收消息
采用esp8266+MQTT+云服务器+MySQL的物联网温湿度检测系统_第22张图片
MQTT服务器收到消息后,会检测是否符合规则,如果消息命中规则,则将数据根据字段切割,并且存进数据库。

3.Mysql数据存储情况

这里使用的是Navicat 15 for MySQL查看存储情况
采用esp8266+MQTT+云服务器+MySQL的物联网温湿度检测系统_第23张图片
数据上传存储正常,项目结束。

五、总结

以上全文就是使用wemos d1 mini(esp8266)来通过MQTT服务器(EMQ X Enterprise)进行数据传输,然后转存至MySQL中,项目过程中遇到非常多的坑,代码修修改改多次,最后算是完成了这个简单的小项目,步骤不难,跟着本文流程动手实验一遍,相信会收获良多,如有写得不好的地方,欢迎向笔者提出你宝贵的建议。

你可能感兴趣的:(arduino,云服务器,数据库,mysql,linux,arduino,云服务,物联网)