(esp32+MQTT+云服务器+MySQL)实现物联网温湿度数据采集到云端数据库MySQL

前言
之前物联网硬件采集数据一直都是通过阿里云实现数据的可视化,没有将硬件采集到的数据存入云数据库,没有进一步利用数据进行操作。
本文一共有五个步骤:
1.esp32通过arduino平台和硬件DHT11温湿度模块采集数据
2.创建EMQ X Cloud MQTT云服务器或者本地部署EMQ X企业版MQTT服务器(这里展示云与服务器)
3.云服务器通过宝塔创建MySQL数据库或本地虚拟机内宝塔MySQL数据库(这里展示云MySQ)
4.利用MQTT将硬件采集到的数据送入云服务器MySQL存储
5.效果展示

(esp32+MQTT+云服务器+MySQL)实现物联网温湿度数据采集到云端数据库MySQL_第1张图片

1.esp32通过arduino平台和硬件DHT11温湿度模块采集数据

1.1硬件设备在这里插入图片描述

乐鑫esp32
(esp32+MQTT+云服务器+MySQL)实现物联网温湿度数据采集到云端数据库MySQL_第2张图片

DHT11温湿度模块
(esp32+MQTT+云服务器+MySQL)实现物联网温湿度数据采集到云端数据库MySQL_第3张图片
1.2、软件准备
1.2.1、Arduino IDE
a)官方下载地址: http://arduino.cc/en/Main/Software
b)Arduino IDE老版本下载链接:https://www.arduino.cc/en/Main/OldSoftwareReleases#previous
(esp32+MQTT+云服务器+MySQL)实现物联网温湿度数据采集到云端数据库MySQL_第4张图片
1.2.2、库文件*esp32开发板下载
打开arduino udo-文件-首选项-附加开发板管理器网址,添加https://dl.espressif.com/dl/package_esp32_index.json
再点工具-开发版-开发版管理器,搜索esp32并下载。
1.2.3、库文件
链接:http://note.youdao.com/noteshare?id=28fa267e0187a5e7502079098b27a9fe&sub=21E9C4DB0C0846018189EA1E27F9D72D

1.2.4、硬件连线

ESP32   --------------------- DHT11
P15  --------------------- DATA
3.5V    --------------------- VCC
GND     --------------------- GND

注:搭建好mqtt服务器在运行代码
1.2.5、示例代码


```c
#include 
#include 
#include 
#include 
DFRobot_DHT11 DHT;
#define DHT11_PIN 15
#include 
const char* ssid = ""; //wifi账号
const char* password =  ";  //wifi密码
const char* mqttServer = "";  //mqtt服务器
const int mqttPort = ;//端口
const char* mqttUser = ""; //mqtt账号
const char* mqttPassword = ""; //mqtt密码
 String Temp="temp";
 String Hum="hum";
   char str[60];
     char str1[20];
       char str2[20];
WiFiClient espClient;
PubSubClient client(espClient);
 
void setup() {
 
  Serial.begin(115200);
  WiFi.begin(ssid, password);
 
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.println("Connecting to WiFi..");
  }
 
  Serial.println("Connected to the WiFi network");
 
  client.setServer(mqttServer, mqttPort);
 
  while (!client.connected()) {
    Serial.println("Connecting to MQTT...");
 
    if (client.connect(topic, mqttUser, mqttPassword )) {
 
      Serial.println("connected");
 
    } else {
 
      Serial.print("failed with state ");
      Serial.print(client.state());
      delay(2000);
 
    }
  }
 
  
  client.publish(topic, "Hello from ESP32"); //填写主题
 
}
 
void loop() {
  DHT.read(DHT11_PIN);
  String temp= String(DHT.temperature);
 String humidity1 = String(DHT.humidity);
 
  sprintf(str,"{\"temp\":%s,\"hum\":%s}",temp,humidity1);
   

  
  Serial.println(str);
 client.publish(topic,str); //填写主题


  delay(10000);
  client.loop();
}

1.3串口打印信息
(esp32+MQTT+云服务器+MySQL)实现物联网温湿度数据采集到云端数据库MySQL_第5张图片

2.创建EMQX Cloud MQTT服务器

方案一

2.1、在云服务上安装EMQX Cloud(开始180天试用云服务器板)
(esp32+MQTT+云服务器+MySQL)实现物联网温湿度数据采集到云端数据库MySQL_第6张图片

进行注册后
(esp32+MQTT+云服务器+MySQL)实现物联网温湿度数据采集到云端数据库MySQL_第7张图片
2.2、下载MQTTX软件测试EMQ X Cloud MQTT服务器的搭建情况
测试软件在这里下载https://mqttx.app/cn/

(esp32+MQTT+云服务器+MySQL)实现物联网温湿度数据采集到云端数据库MySQL_第8张图片
新建一个连接
名称随便
服务器地址和端口填写 EMQ X Cloud概览里面的连接地址和连接端口(端口选择mqtt的端口)
(esp32+MQTT+云服务器+MySQL)实现物联网温湿度数据采集到云端数据库MySQL_第9张图片
用户名和密码在 EMQ X Cloud 认证鉴权-认证里面添加
在这里插入图片描述

连接上之后可以向指定的Topic发送消息,也可以订阅Topic,同时在控制台也可以看到连接上了的客户端
(esp32+MQTT+云服务器+MySQL)实现物联网温湿度数据采集到云端数据库MySQL_第10张图片

EMQ X Cloud 监控里面已经有显示已连接
(esp32+MQTT+云服务器+MySQL)实现物联网温湿度数据采集到云端数据库MySQL_第11张图片

3.云服务器通过宝塔创建MySQL数据库并连接到本地

这部分需要在我们的云服务器上安装一个数据库,我在这里选择的是MySQL,还需要安装PHP、Nginx。大家可以自行在服务器上安装,这里展示华为云安装宝塔后的情况

(esp32+MQTT+云服务器+MySQL)实现物联网温湿度数据采集到云端数据库MySQL_第12张图片
1.第一次打开面板会自动提示安装LNMP套件,选择一键安装即可,安装完成之后点击数据库,在安全开放3306端口,选择新建数据库,要记住用户名和密码,等下我们本地连接数据库的时候要用到,访问权限建议选择所有IP。
2.在MySQL服务器创建温湿度标,在宝塔面板数据库内点击管理,
(esp32+MQTT+云服务器+MySQL)实现物联网温湿度数据采集到云端数据库MySQL_第13张图片
3.复制代码

CREATE TABLE `temp_hum` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `up_timestamp` timestamp NULL DEFAULT NULL,
  `client_id` varchar(32) DEFAULT NULL,
  `temp` float unsigned DEFAULT NULL,
  `hum` float unsigned DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `up_timestamp_client_id` (`up_timestamp`,`client_id`)
) ENGINE=InnoDB AUTO_INCREMENT=26 DEFAULT CHARSET=utf8mb4;

到这里,点击执行,一个温湿度表即创建成功。
(esp32+MQTT+云服务器+MySQL)实现物联网温湿度数据采集到云端数据库MySQL_第14张图片

(esp32+MQTT+云服务器+MySQL)实现物联网温湿度数据采集到云端数据库MySQL_第15张图片
数据库建立好后可以在本地用Navicat 15 for MySQL连接数据库,方便数据后续操作。这里不展开,只是展示下连接步骤
1.连接名随便
2.主机填写MySQL所在云服务器的地址
3.用户名和密码填写MySQL的用户名和密码
4.测试连接,连接成功即可
5.开启连接后可以看到在云服务器宝塔里面的数据库同步过来
(esp32+MQTT+云服务器+MySQL)实现物联网温湿度数据采集到云端数据库MySQL_第16张图片

4.利用MQTT将硬件采集到的数据送入云服务器MySQL存储

在这里我们需要将服务器收到的JSON格式数据根据字段分割开来,并且将相应的字段存进数据库,实现数据的永久化,这一步可以使用MQTT服务器的规则引擎模块。
(esp32+MQTT+云服务器+MySQL)实现物联网温湿度数据采集到云端数据库MySQL_第17张图片

在EMQ X规则引擎-规则 新建规则内输入下面代码,新建规则,这里的规则就是用来根据字段切割消息。

SELECT 
timestamp as up_timestamp, 
clientid as client_id,
payload.temp as temp,
payload.hum as hum  
FROM  

"temp_hum/emqx"  

(esp32+MQTT+云服务器+MySQL)实现物联网温湿度数据采集到云端数据库MySQL_第18张图片
填写规则后,我们可以使用SQL测试,看看规则能否使用,确保数据能够上传。

(esp32+MQTT+云服务器+MySQL)实现物联网温湿度数据采集到云端数据库MySQL_第19张图片

测试完成后添加响应动作
(esp32+MQTT+云服务器+MySQL)实现物联网温湿度数据采集到云端数据库MySQL_第20张图片
(esp32+MQTT+云服务器+MySQL)实现物联网温湿度数据采集到云端数据库MySQL_第21张图片
数据选保存到MySQL
使用资源选择新建
(esp32+MQTT+云服务器+MySQL)实现物联网温湿度数据采集到云端数据库MySQL_第22张图片
MySQL填写云服务器宝塔里面的IP地址:3306
MySQL数据库名和用户名、密码填写云服务器宝塔里面的MySQL。

SQL模块填写

insert into 
temp_hum(up_timestamp, client_id, temp, hum) values 
(FROM_UNIXTIME(${up_timestamp}/1000), ${client_id}, ${temp}, ${hum}) 

(esp32+MQTT+云服务器+MySQL)实现物联网温湿度数据采集到云端数据库MySQL_第23张图片
确认后创建即可。这样到现在我们就实现了 硬件-EMQ XMQTT服务器 -云服务器MySQL数据库 -本地Navicat 15 for MySQL。

5.效果展示

开机连接wifi和mqtt,过段时间打印温湿度数据
(esp32+MQTT+云服务器+MySQL)实现物联网温湿度数据采集到云端数据库MySQL_第24张图片

MQTT服务器收到消息后,会检测是否符合规则,如果消息命中规则,则将数据根据字段切割,并且存进数据库。
云服务器数据情况
(esp32+MQTT+云服务器+MySQL)实现物联网温湿度数据采集到云端数据库MySQL_第25张图片
本地数据库情况
(esp32+MQTT+云服务器+MySQL)实现物联网温湿度数据采集到云端数据库MySQL_第26张图片

注:这里只是展示云服务器部署,其实本地部署和云服务器部署差别不大

你可能感兴趣的:(mysql,mqtt,云平台,arduino)