采用esp8266+mqtt+云服务器+mysql的物联网温湿度检测系统(代码片段)

Mpara Mpara     2022-11-29     765

关键词:

文章目录


前言

一般在做与物联网相关的项目,采集完数据需要上传到云端,然后再将数据保存至后台,也就是数据库,来方便工作人员去调用这些数据,更好的进行工作。
本文章就是使用wemos d1 mini来实现将dht11采集的温湿度数据通过MQTT服务器转存至数据库,使用的MQTT服务器为EMQX,使用MySQL作为数据库,可以简单方便的让使用者调取数据。


提示:以下是本篇文章正文内容,下面案例可供参考

一、项目所使用软硬件

1. 硬件部分

硬件数量
wemos d1 mini1
dht111
杜邦线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中,项目过程中遇到非常多的坑,代码修修改改多次,最后算是完成了这个简单的小项目,步骤不难,跟着本文流程动手实验一遍,相信会收获良多,如有写得不好的地方,欢迎向笔者提出你宝贵的建议。

云端web远程控制led(mqtt+esp8266+云服务器)(代码片段)

...效果前言本文是上一篇文章的进阶篇,本文使用的MQTT服务器为EMQX,适合在云服务器中使用,在云端搭建好网页好,发送控制消息至MQTT中指定的topic,esp8266订阅topic,接收到控制命令时,控制相应的LED... 查看详情

云端web远程控制led(mqtt+esp8266+云服务器)(代码片段)

...效果前言本文是上一篇文章的进阶篇,本文使用的MQTT服务器为EMQX,适合在云服务器中使用,在云端搭建好网页好,发送控制消息至MQTT中指定的topic,esp8266订阅topic,接收到控制命令时,控制相应的LED... 查看详情

安卓手机mqtt调试app自用分享版esp8266mqtt服务器

**最近玩ESP8266Mqtt服务器感觉不错,但网上找手机控制端没有,所以就自己写了个安卓手机调试版的APP。感觉用着很方便,特此分享给有需要的人。初次写手机程序水平有限,界面无优化但实用!纯绿色无广告&... 查看详情

esp8266sdk开发:物联网篇-esp8266连接阿里云物联网平台,使用阿里云提供的自定义topic通信控制

     搜索物联网平台(如果没有开通自行开通)  创建产品                        注意:看看自己的这里是那个区域的,... 查看详情

巴法云开源安卓app控制esp8266,通过mqtt协议,appinventor开发(代码片段)

...执行相应得动作。基于MQTT协议,ESP8266通过MQTT连接到服务器,app也同样通过MQTT连接到服务器,两者通过主题(topic)进行交流。第一下载ESP8266示例(arduinoide编程开发)下载地址:点击下载本demo是利用ard... 查看详情

esp8266物联网开发四:mqtt本地操控(代码片段)

...过程中,我们大略提到了一下MQTT的整体流程,由于其MQTT服务器是由点灯科技提供的,所以对其中的很多连接细节,我们并不知道,本节我们准备通过搭建本地的MQTT服务器,然后通过MQTTClient向MQTT服务器发送控制命令,来控制我... 查看详情

esp8266at指令开发(基于stc89c52单片机):测试下诱人的程序(51单片机,8266,mqtt远程通信控制)

...:  51单片机+ESP8266用AT指令实现实现MQTT,(连接的本人云服务器上的MQTT服务器软件)  ESP8266订阅的主题:device/Wi-Fi的MAC地址  ESP8266发布的主题:user/Wi-Fi的MAC地址 下载单片机程序        安装APP    &nbs... 查看详情

我无法在 Lua 上为 ESP8266 订阅 MQTT 代理

】我无法在Lua上为ESP8266订阅MQTT代理【英文标题】:Ican\'tsubscribetoMQTTbrokeronLuaforESP8266【发布时间】:2020-06-2601:16:12【问题描述】:首先我使用的是以下内容:ESP8266(ESP12E)来自Git的默认固件(使用带有所有相关配置的linux构建,根... 查看详情

智慧农业:stm32f103ze+esp8266+腾讯云物联网平台+微信小程序设计

一、环境介绍单片机采用:STM32F103ZET6上网方式:采用ESP8266,也可以使用其他设备代替,只要支持TCP协议即可。比如:GSM模块、有线网卡等。与物联网云平台的通信协议:  标准MQTT协议3.1.1(TCP)开发软件:keil5物联网平台:腾... 查看详情

怎么搭建esp8266智能家居mqtt服务器

自己有个两个服务器。想搭建一套简单的系统,MQTT啊什么的。通过esp8266来控制家居。网上也有免费,但想要弄个属于自己的,正好把服务器用上。问题来了,怎么搭建才好,用的阿里云的存储读取到的ESP8266的信息,然后用print... 查看详情

c_cppesp8266使用web服务器或mqtt进行esp-01继电器控制(代码片段)

查看详情

esp8266at指令开发(基于stc89c52单片机):关于上一节mqtt底层封包解包源码使用说明

...以自己去安装MQTT软件  然后让自己的设备通过自己的服务器进行通信  或者根据文章直接连接阿里云物联网平台     说明  用户看完上面的文章以后,需要明确,MQTT软件就是一个TCP服务器  然后在TCP服务器... 查看详情

微信硬件平台1esp8266通过mqtt交互消息

     //----------------------------------------------------------------------------------------////-----------------------------------程序功能------------------------------------- 查看详情

esp8266如何实现与服务器的tcp通讯

mqtt硬件部分演示,esp8266通过mqtt通信,和远程服务器连接,通过手机APP,实现远程控制开关。您的浏览器不支持HTML5视频zymedia(\'video\')参考技术A设置成TCP客户端以连接服务器就可以通讯或者远程控制。 查看详情

esp保姆级教程疯狂node.js服务器篇——案例:esp8266+环境监测+本地部署mqtt服务器+文件存储数据+钉钉/微信/飞书报警

忘记过去,超越自己❤️博客主页单片机菜鸟哥,一个野生非专业硬件IOT爱好者❤️❤️本篇创建记录2022-09-05❤️❤️本篇更新记录2022-09-05❤️ 查看详情

esp保姆级教程疯狂node.js服务器篇——案例:esp8266+环境监测+本地部署mqtt服务器+文件存储数据+钉钉/微信/飞书报警

忘记过去,超越自己❤️博客主页单片机菜鸟哥,一个野生非专业硬件IOT爱好者❤️❤️本篇创建记录2022-09-05❤️❤️本篇更新记录2022-09-05❤️ 查看详情

怎么使用esp8266wifi模块,js连接mqtt,实现简单的智能家居控制?

...网。通过连接到互联网,设备就能相互协作,以及与后端服务协同工作。互联网的基础网络协议是TCP/IP。MQTT(消息队列遥测传输)是基于TCP/IP协议栈而构建的,已成为IoT通信的标准。MQTT是一种轻量级的、灵活的网络协议,致力... 查看详情

esp8266和mqtt(mqtt介绍)

...息传输;3、使用TCP/IP提供网络连接;4、有三种消息发布服务质量:“至多一次”,消息发布完全依赖底层TCP/IP网络。会发生消息丢失或重复。这一级别可用于如下情况,环境传感器数据,丢失一次读记录无所谓,因为不久后还... 查看详情