实验一 MQTT与MySQL数据持久化实验

实验一 MQTT与MySQL数据持久化实验

DHT11+ESP8266上传温湿度数据到云服务器

准备

你需要有一个云服务器、ESP8266、DHT11、一条安卓线和3根母母线。

步骤:
首先登录你的云服务器终端界面,我这里以腾讯云为例,
在这里插入图片描述
然后打开网址https://www.emqx.cn/download,选中EMQ X Enterprise,
在这里插入图片描述
根据你的云服务器选择相应系统,安装方式选npm,CPU架构一般都是选x86_64,然后依次运行下面的命令来安装和运行emqx。
在这里插入图片描述

登录你的宝塔页面,还没安装的根据宝塔官网安装步骤自行安装即可,比较简单,这里就不说了。
选择数据库——添加数据库,输入数据库名,访问权限选本地服务器。
创建完数据库后,点击右边的管理,选中work,在新建数据表下输入名字和字段数,我这里写的是homework1和3
在这里插入图片描述
然后执行。再输入名字和类型,如下所示:
在这里插入图片描述
然后执行。

然后,云服务器和宝塔都要添加1883、3306和18083端口,比如腾讯云在安全组添加,宝塔选择安全,输入放行端口和备注即可放行。

接着打开浏览器输入网址:云服务器IP:18083,登录账号,选择规则引擎——资源——创建,选择MySql,输入你刚刚在宝塔创建的数据库的数据库名、用户名和数据库密码(注意下面都要根据所给图片选择要选的选项和输入相应内容)
在这里插入图片描述
然后确定。
再选择规则引擎——规则——创建,

SQL输入框填

SELECT

  payload.xuhao as xuhao,payload.tem as tem,payload.hum as hum

FROM

  "homework1"

WHERE

  topic = 'homework1'

在这里插入图片描述

开启SQL测试,topic填刚SQL语句的TOPIC

payload框填{"xuhao": 1,"tem":2,"hum":3}
在这里插入图片描述

点击SQL测试看是否成功,成功的话添加动作

INSERT INTO
  `homework1` (`xuhao`,`tem`,`hum`)
VALUES
  (${xuhao},${tem},${hum});

在这里插入图片描述
然后点击创建,出错的话请自行检查。

接着用母母线连接ESP8266和DHT11,3V连VCC,DATA连D4,GND连GND,并将安卓线插入ESP8266和电脑相连,打开软件Arduino,点击工具——选择端口——com几,开发板选ESP8266 Boards(2.7.4)——Nodemcu1.0,没装所需的库文件的自行百度方法装,代码如下:

#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <ArduinoJson.h>
#include "DHT.h"

#define DHTPIN D4     //DHT11与NodeMUC的连接

// 连接WIFI
#define wifi_ssid "WIFI账号"
#define wifi_password "WIFI密码"


#define mqtt_server "IP地址"  // MQTT云地址

//topic
#define topic "topic主题"

#define DHTTYPE DHT11   // DHT 11

WiFiClient espClient;
PubSubClient client(espClient);
DHT dht(DHTPIN, DHTTYPE);

void setup_wifi() {
    delay(10);
    WiFi.begin(wifi_ssid, wifi_password);
    while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(".");
    }
Serial.println("WiFi 连接成功!");
}

void reconnect() {
    // 循环,直到我们重新连接
    while (!client.connected()) {
        Serial.print("尝试MQTT连接…");
        if (client.connect("nodeMcuDHT11")) {
            Serial.println("连接成功");
        } else {
            Serial.print("失败,rc =");
            Serial.print(client.state());
            Serial.println(" 在5秒后再试一次");
            delay(5000);
        }
    }
}

bool checkBound(float newValue, float prevValue, float maxDiff) {
    return newValue < prevValue - maxDiff || newValue > prevValue + maxDiff;
}

long lastMsg = 0;
int i = 1;
float tem = 0.0;
float hum = 0.0;
//float diff = 1.0;

void setup() {
    Serial.begin(115200);
    setup_wifi();
    client.setServer(mqtt_server, 1883);
    dht.begin();
}

void loop() {
    if (!client.connected()) {
        reconnect();
    }
    client.loop();

    long now = millis();
    if (now - lastMsg > 30000) {
        // 等待几秒钟之间测量
        lastMsg = now;

        float newTemp = dht.readTemperature();
        float newHum = dht.readHumidity();
        tem = newTemp;
        hum = newHum;
        
        // json serialize(json序列化)
        DynamicJsonDocument data(256);
        data["xuhao"] = i++;
        data["tem"] = tem;
        data["hum"] = hum;
        
        // 发布温度和湿度
        char json_string[256];
        serializeJson(data, json_string);
        // {"xuhao":1,"tem":23.5,"hum":55}
        Serial.println(json_string);
        client.publish(topic, json_string, false);
        delay(2000);
    }
}

根据自己实际情况修改代码,注意MQTT云地址为你的云服务器地址,后面不需要加东西。打开你的手机热点,然后上传代码,点击右上角串口监视器观察,如下所示:

在这里插入图片描述
打开刚刚自己数据库内创建的表,也可看到上传到服务器的温湿度数据。
在这里插入图片描述
完成!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值