MQTT与MySQL数据持久化实验

MQTT 是轻量级的、灵活的物联网消息交换和数据传递协议,致力于为 IoT 开发人员实现灵活性与硬件/网络资源的平衡。

ESP8266 提供了⼀套⾼度集成的 Wi-Fi SoC 解决⽅案,其低功耗、 紧凑设计和⾼稳定性可以满⾜⽤户的需求。ESP8266 拥有完整的且⾃成体系的 Wi-Fi ⽹络功能,既能够独⽴应⽤,也可以作为从机搭载于其他主机 MCU 运⾏。

在此项目中我们将实现 ESP8266 连接到 EMQ X Cloud 运营和维护的免费公共 MQTT 服务器,并使用 Arduino IDE 来对 ESP8266 进行编程。 EMQ X Cloud 是由 EMQ 推出的安全的 MQTT 物联网云服务平台,它提供一站式运维代管、独有隔离环境的 MQTT 5.0 接入服务。

所需物联网组件

  • ESP8266、DHT11
  • Arduino IDE
  • MQTT X: 跨平台 MQTT 5.0 客户端工具
  • 免费的公共 MQTT 服务器
    • Broker: broker.emqx.io
    • TCP Port: 1883
    • Websocket Port: 8083

ESP8266 Pub/Sub 示意图

步骤

(1)数据采集与上传

    

(2)串口打印信息

3)用MQTTX进行调试也能接收到发送的数据

                                                                                                                                       

(4)搭建MQTT服务器

(5)云端数据库搭建与设计表格

(6)数据解析以及数据永久化

ESP8266 代码编写

#include <ESP8266WiFi.h>
//#include <WiFi.h>
#include <PubSubClient.h>
#include <ArduinoJson.h>
#include "DFRobot_DHT11.h"

// WiFi
const char *ssid = "602iot"; // Enter your WiFi name
const char *password = "18wulian";  // Enter WiFi password
//const char * WIFI_SSID     = "602iot";
//const char * WIFI_PASSWORD = "18wulian";

// MQTT Broker
const char *mqtt_broker = "b3b1fcb9.cn.emqx.cloud";//EMQX CLOUD连接地址
const char *topic = "temp_hum/emqx";
const char *mqtt_username = "111";
const char *mqtt_password = "123456";
const int mqtt_port = 11107;//mqtt端口

// DHT11
#define DHT11_PIN  D4//定义DHT11的引脚
//#define DHT11_PIN  13//定义DHT11的引脚
unsigned long previousMillis = 0;

WiFiClient espClient;
PubSubClient client(espClient);
DFRobot_DHT11 DHT;
//void connectWiFi(){
//  Serial.print("Connecting to ");
//  Serial.println(WIFI_SSID);
//  WiFi.begin(WIFI_SSID,WIFI_PASSWORD);
//  while(WiFi.status() != WL_CONNECTED){
//  delay(500);
//  Serial.print(".");
//  }
//  Serial.println();
//  Serial.println("WiFi connected");
//  Serial.print("IP Adderss: ");
//  Serial.println(WiFi.localIP());
//}
void setup() {
  // Set software serial baud to 115200;
  Serial.begin(115200);
  // connecting to a WiFi network
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.println("Connecting to WiFi...");
  }
  //connecting to a mqtt broker
  client.setServer(mqtt_broker, mqtt_port);
  //connecting to a mqtt broker
  while (!client.connected()) {
    String client_id = "602iot_";
  //  client_id += String(WiFi.macAddress());
    Serial.println("Connecting to public emqx mqtt broker...");
    if (client.connect(client_id.c_str(), mqtt_username, mqtt_password)) {
      Serial.println("Public emqx mqtt broker connected!");
    } else {
      Serial.print("failed with state\n");
      Serial.print(client.state());
      delay(2000);
    }
  }
}

void loop() {
  client.loop();
  unsigned long currentMillis = millis();
  // temperature and humidity data are publish every  20 second
  if (currentMillis - previousMillis >= 20000) {
    previousMillis = currentMillis;
    DHT.read(DHT11_PIN);//DHT11读取环境的温湿度数据
    float temp = DHT.temperature;
    float hum = DHT.humidity;
    // json serialize
    DynamicJsonDocument data(256);
    data["temp"] = temp;
    data["hum"] = hum;
    // publish temperature and humidity
    char json_string[256];
    serializeJson(data, json_string);
    // {"temp":23.5,"hum":55}
    Serial.println(json_string);
    client.publish(topic, json_string, false);
    client.subscribe(topic);
  }
}

数据库的连接和测试

测试/调试及实验结果分析

1、连接WIFI并初始化连接MQTT服务器

2MQTT服务器收到消息后,会检测是否符合规则,如果消息命中规则,则将数据根据字段切割,并且存进数据库。

实验结论

至此,我们已成功使 ESP8266 连接到 EMQ X Cloud 提供的公共 MQTT 服务器。 在本项目中我们简单的将 ESP8266 连接到 MQTT 服务器,这只是 ESP8266 较为基础的能力之一,ESP8266 其实还能与各类物联网传感器相连,并将传感器数据上报至 MQTT 服务器。

相关推荐
©️2020 CSDN 皮肤主题: 终极编程指南 设计师:CSDN官方博客 返回首页
实付 9.90元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值