一般在做与物联网相关的项目,采集完数据需要上传到云端,然后再将数据保存至后台,也就是数据库,来方便工作人员去调用这些数据,更好的进行工作。
本文章就是使用wemos d1 mini来实现将dht11采集的温湿度数据通过MQTT服务器转存至数据库,使用的MQTT服务器为EMQX,使用MySQL作为数据库,可以简单方便的让使用者调取数据。
提示:以下是本篇文章正文内容,下面案例可供参考
硬件 | 数量 |
---|---|
wemos d1 mini | 1 |
dht11 | 1 |
杜邦线 | 3 |
Centos7.6 |
---|
EMQ X Enterprise |
宝塔 |
Navicat 15 fot MySQL |
MQTTX |
Arduino IDE |
首先需要在云服务器上安装宝塔,如没有云服务器,可以下载虚拟机,安装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端口即可登录)
到此宝塔安装完毕。
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也可以接受消息
首先打开宝塔面板→数据库→添加数据库
点击添加数据库后,输入数据库名(任意),编码格式建议选择“utf8mb4”
(注意:这里请放行3306端口)
之后打开Navicat 15 for MySQL
下载地址:https://www.jb51.net/database/710931.html
点击连接→MySQL
创建完连接后,双击即可连接,之后在表中添加几个字段,No(序号),tem(温度),hum(湿度)
点击保存,命名为tem_hum_data
打开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});
//对应刚刚规则输出的值
(注意:注释需删除)
然后保存规则
硬件选择的是wemos d1 mini与dht11温湿度传感器,wemos d1 mini外观小巧,具有esp8266wifi模块,价格便宜,开发简单的物联网项目十分好用。
wemos d1 mini——————————dht11
3.3V——————————VCC
D7——————————DATA
GUN——————————GUN
本文使用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
这里可以用MQTTX订阅topic后来查看接收消息
MQTT服务器收到消息后,会检测是否符合规则,如果消息命中规则,则将数据根据字段切割,并且存进数据库。
这里使用的是Navicat 15 for MySQL查看存储情况
数据上传存储正常,项目结束。
以上全文就是使用wemos d1 mini(esp8266)来通过MQTT服务器(EMQ X Enterprise)进行数据传输,然后转存至MySQL中,项目过程中遇到非常多的坑,代码修修改改多次,最后算是完成了这个简单的小项目,步骤不难,跟着本文流程动手实验一遍,相信会收获良多,如有写得不好的地方,欢迎向笔者提出你宝贵的建议。