前言
之前物联网硬件采集数据一直都是通过阿里云实现数据的可视化,没有将硬件采集到的数据存入云数据库,没有进一步利用数据进行操作。
本文一共有五个步骤:
1.esp32通过arduino平台和硬件DHT11温湿度模块采集数据
2.创建EMQ X Cloud MQTT云服务器或者本地部署EMQ X企业版MQTT服务器(这里展示云与服务器)
3.云服务器通过宝塔创建MySQL数据库或本地虚拟机内宝塔MySQL数据库(这里展示云MySQ)
4.利用MQTT将硬件采集到的数据送入云服务器MySQL存储
5.效果展示
1.1硬件设备在这里插入图片描述
DHT11温湿度模块
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
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();
}
方案一
2.1、在云服务上安装EMQX Cloud(开始180天试用云服务器板)
进行注册后
2.2、下载MQTTX软件测试EMQ X Cloud MQTT服务器的搭建情况
测试软件在这里下载https://mqttx.app/cn/
新建一个连接
名称随便
服务器地址和端口填写 EMQ X Cloud概览里面的连接地址和连接端口(端口选择mqtt的端口)
用户名和密码在 EMQ X Cloud 认证鉴权-认证里面添加
连接上之后可以向指定的Topic发送消息,也可以订阅Topic,同时在控制台也可以看到连接上了的客户端
这部分需要在我们的云服务器上安装一个数据库,我在这里选择的是MySQL,还需要安装PHP、Nginx。大家可以自行在服务器上安装,这里展示华为云安装宝塔后的情况
1.第一次打开面板会自动提示安装LNMP套件,选择一键安装即可,安装完成之后点击数据库,在安全开放3306端口,选择新建数据库,要记住用户名和密码,等下我们本地连接数据库的时候要用到,访问权限建议选择所有IP。
2.在MySQL服务器创建温湿度标,在宝塔面板数据库内点击管理,
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;
数据库建立好后可以在本地用Navicat 15 for MySQL连接数据库,方便数据后续操作。这里不展开,只是展示下连接步骤
1.连接名随便
2.主机填写MySQL所在云服务器的地址
3.用户名和密码填写MySQL的用户名和密码
4.测试连接,连接成功即可
5.开启连接后可以看到在云服务器宝塔里面的数据库同步过来
在这里我们需要将服务器收到的JSON格式数据根据字段分割开来,并且将相应的字段存进数据库,实现数据的永久化,这一步可以使用MQTT服务器的规则引擎模块。
在EMQ X规则引擎-规则 新建规则内输入下面代码,新建规则,这里的规则就是用来根据字段切割消息。
SELECT
timestamp as up_timestamp,
clientid as client_id,
payload.temp as temp,
payload.hum as hum
FROM
"temp_hum/emqx"
填写规则后,我们可以使用SQL测试,看看规则能否使用,确保数据能够上传。
测试完成后添加响应动作
数据选保存到MySQL
使用资源选择新建
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})
确认后创建即可。这样到现在我们就实现了 硬件-EMQ XMQTT服务器 -云服务器MySQL数据库 -本地Navicat 15 for MySQL。
MQTT服务器收到消息后,会检测是否符合规则,如果消息命中规则,则将数据根据字段切割,并且存进数据库。
云服务器数据情况
本地数据库情况
注:这里只是展示云服务器部署,其实本地部署和云服务器部署差别不大