esp8266访问mysql_03-STM32+ESP8266+AIR202/302终端管理篇-把设备温湿度数据存储到MySQL数据库(Linux)...

前言

这一节把设备通过MQTT上报的数据写入MySQL数据库.

注:关于MySQL数据库的安装和基本使用请用户参考基础开源教程学习!

说明

此节代码使用的 IntelliJ IDEA 软件编写.

整个程序是使用java连接MQTT,通过通配符订阅所有设备的数据.

然后通过Druid连接池把数据写入MySQL数据库.

配置数据库

1.新建一个数据库

数据库名字为 historical_data

856135ebafe3e27a06af0210294f4e08.png

3bb0eff6874797a96490e9a2f8d3912f.png

2.使用 Navicat 连接数据库

注:主机名或IP地址如果没有配置域名,则直接填写服务器IP地址

fb9ce6bc79741f1fa9b59df0ca19fcbd.png

3.新建表格

472175df8017d71cdc005848015485cc.png

4.添加几个字段

字段id类型是int, 去掉允许空值, 设置为自增,然后设置为主键;

字段data_time类型设置为timestamp;(作为数据存储的时间)

字段client_id类型设置为varchar;(记录设备的id)

字段temperature类型设置为float;(存温度数据)

字段humidity类型设置为float;(存湿度数据)

6aab1d20f7f97be18ec0d914151f5b2c.png

5.点击保存 表格名字为 humiture_table

26de760329db53e6b0361840f947e789.png

6ca16535ed75b3e425503e59a1092cf2.png

打开源码

1.使用IntelliJ IDEA 打开

1c47abe17f412096344a9e3e58b66fa9.png

2.源码需要使用JDK1.8版本

083c584ec30c679c768bb5edbadb6b82.png

如果用户先前安装的1.7版本,需要安装JDK1.8版本

安装完以后不需要配置环境变量,只需要在软件中设置JDK路径

00fbbf94f5b5f6e36610c9109dfb9ff8.png

24ce43604038166b34c32830e260dfe8.png

c589a39dd539f66a58f484789b0ef7a4.png

7f3aec68a197ed8c3c53442c0a8b8fb7.png

测试

1.修改自己的数据库和MQTT服务器的信息

c12d70bb003645fe996989d655195c42.png

3.关于该程序订阅的主题

提供的教程里面设备发布的主题为: device/XXXXXX

如果是WiFi设备,XXXXXX是WiFi的MAC地址, 如果是GSM设备,XXXXXX是GSM设备的IMEI

为了得到所有设备的数据,所以订阅的主题为: device/#

d43330e8b244b41eacbabfc8c0aa073a.png

4.关于该程序解析消息并存到数据库

设备发布的消息:{"data":"TH","bit":1,"temperature":14,"humidity":45}

在MQTT接收的消息回调里面,获取解析温湿度消息,然后把数据插入到数据库.

955bcca4873c66f1cfdc60d7e5557bf3.png

5.运行程序

af94c630c2a80c76f757d27067534594.png

6.可以在控制台输出栏看到监控的所有设备的数据

f12b2b775da4eeab618f4f4b873c78d1.png

7.重新打开数据库表格

822ab67f210e15285f878546b66529ac.png

1ca90ee1cb5f25e234353302cdfcefaf.png

生成可执行jar包

1.关闭软件

34abcb01eaa314aeefa9d4271965ca41.png

2.注意:因为程序已经设置过生成jar包,所以用户直接按照下面图示操作即可生成可执行jar包.

3f33e2a2fdab62adee976ef2ec9f2a2c.png

caac6ca6255756ad48af63bc24d5bdcc.png

3.补充一下正常生成jar包的实际流程

7969a29ebbbf87612303c599f2d6a808.png

fc041085d6d6c0e24f69dc4b6eab8320.png

8cc7573d97f10b006528fd7a6b7da7e3.png

c4ee4aa2343956a6c6859bc8565d867a.png

a7ee8727a03dd67f66f412413f2115a1.png

3f33e2a2fdab62adee976ef2ec9f2a2c.png

f2a1572fd591c3437dc944a692cda6bb.png

4.生成的JAR包的位置

7d8cd18e18f0a7d38b416eccb856e625.png

部署到服务器运行

1.一般宝塔都已经安装了java虚拟机,可以随便找个目录点击上面的终端

输入 java -version

bfe2c9541fa10a2503db9d0f70641e6c.png

92cd989b37ce00e0dc0bb4bcdb3ed06e.png

注:如果没有安装java虚拟机,百度安装哈.

2.把先前生成的jar包拷贝到服务器

我放到了opt目录,根据自己的习惯随意

9d95fb0302d1248d8eb7ac4bf9c716f1.png

3.点击上面的终端并进入opt目录

333e86c73b674c2930ae05a07245ffb5.png

4.终端输入 java -jar MqttDataToMySQL.jar 命令启动程序

c7795ea93a5bc52c319c9bdf3f9a04a5.png

5.打印所有设备的数据,说明已经运行起来了

bec5d4b8a5d58282bec885d6d9b4ab52.png

6.查看一下数据库的表格,应该记录了设备的数据

f635c486307951ea557d60cae9f356fd.png

让程序在后台执行

1.在中断里面按下键盘的 Ctrl+C 组合键退出程序

9b7fe7ffc715972a0d4793f90bcbec19.png

2.输入   nohup java -jar MqttDataToMySQL.jar &

3b78c50347975fdff8223d6cc191155a.png

3.程序已经运行,3073为程序运行的PID值;并生成了日志文件nohup.out

4af64f433ba82d60a5698dd7bba5d38a.png

4.关闭窗体

9cfd8abf01b38739dd68977f75ca72c5.png

或者点击回车

6a8075234aa264f694dde981d494208c.png

5.点击刷新一下就可以看到日志文件

e184a768f002fd7b7fd4e1d8a9f7c865.png

6.可以查看下日志文件

13d66db0c850a65b270c6305dd722ab1.png

1863c9c3cb62151049cbf4ee4f8be126.png

7.关闭程序

先查看程序的进程PID

ps aux|grep MqttDataToMySQL.jar

27026c1585f279c6ae89df8d2c77e7bd.png

输入  kill -9 3073   关闭程序

4c42cfb3a628e15dd419bec8c4837767.png

源码说明

1.整个源码就两部分,MQTT和数据库

MQTT使用的是paho.client.mattv3-1.2.0的jar包

数据库除了基本的jabc连接器以外,使用了阿里巴巴的开源链接池 druid

0edf2392ff847f327ce3ee9659f4c86f.png

2.主函数就两部分,初始化连接池和连接MQTT

8d993d8eb6bcc61239a3b584ce975e84.png

3.连接池部分

c73a89fc4e6f1bc87b82a5a6891b43bd.png

4.连接MQTT部分,订阅主题

d8bc0d0a41f686d45ec97fea8408a0f0.png

5.从连接池获取链接对象,把数据写到数据库

4045fea487f4875a36fc69582550fc9f.png

补充

1.关于device/#

一般咱接收所有设备的数据不用 device/#

而且这样所有人都可以监控所有设备数据,这是不可取的!!

我之所以把所有设备发布的主题设置为 device/XXXXXX 是为了好测试

一般只设置一级主题就可以了不要加  /XXXXXX

咱在服务器上可以直接订阅 # 就可以获取所有设备的数据

注意:只有在服务器上才可以

用户可以修改程序把链接的地址改为 localhost

302dd8f2501d2d2b9082c33da0719a56.png

把订阅的主题改为 #

6504d8104c069175f8f2b57d2330354b.png

重新编译下工程

09ca162bdde6c36bfffcb0b901ba2aa6.png

重新生成jar包然后按照上面的步骤放到服务器运行即可

37239fb057a114ab86b059207ef9b2ae.png

40aec7624a35a551b5eea974380b1593.png

结语

用户可以用以下信息查看数据库里面的设备历史数据

IP地址: mnif.cn

端口号: 3306

用户名: yang

密码: 11223344.  注意后面有个点


版权声明:本文为weixin_39835147原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。