esp8266连接onenet协议mqtt

img


是不是我发送到内容格式错了,esp8266连接onenet,已经显示连接到mqtt服务器啦,但是不知道怎么发送内容到onenet,上传数据

  • 你看下这篇博客吧, 应该有用👉 :ESP32 + MQTT 连接到中移动物联网云平台 OneNET
  • 除此之外, 这篇博客: esp8266 onenet MQTT固件的烧录中的 1、onenet MQTT固件的优势 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  •  esp8266要使用MQTT需要烧录AT固件,目前市场上常用的是乐鑫官网及安信可官网或者onenet官网的AT固件,不同的AT固件之间它们的AT指令可能有所差异。就目前我使用的感觉来说,我个人觉得onenet的MQTT固件是使用起来比较舒适的一个AT固件。onenet的固件发布和发送都只需一句简单的AT指令就可以完成,而乐鑫或安信可的固件发送或发布数据都需要有固定的json格式,比较麻烦,相较起来onenet的AT指令是非常简单。

    虽然说onenet官网的MQTT固件是专门针对MQTT协议的,不过经过我的测试,其他的HTTP协议或者EDP协议等都可以使用。

  • 以下回答由chatgpt基于相关博客总结生成:

    根据题目描述和参考资料,我将提供解决方案如下:

    步骤1: 硬件连接

    根据参考资料中的"段落0: ESP8266和MCU连接",将MCU和ESP8266模块进行连接,确保可以正常通信。

    步骤2: 准备开发环境

    安装Arduino IDE 1.8.5及以上版本。

    步骤3: 添加所需库文件

    在Arduino IDE中打开“Sketch”菜单,选择“Include Library”->“Manage Libraries”,然后搜索并安装以下库文件: - PubSubClient:用于连接和通信MQTT服务器 - ArduinoJson:用于处理JSON数据 - DHT11:用于读取DHT11温湿度传感器数据

    步骤4: 创建OneNet产品并记录相关信息

    在OneNet平台上创建一个MQTT协议的产品,并记录产品ID和Master-APIkey。后续将使用这些信息进行连接和数据上传。

    步骤5: 编写代码

    使用Arduino IDE创建一个新的Sketch(代码文件),并添加以下代码:

    #include <ESP8266WiFi.h>
    #include <PubSubClient.h>
    #include <DHT11.h>
    
    // 定义WiFi连接信息
    const char* ssid = "your_wifi_ssid";
    const char* password = "your_wifi_password";
    
    // 定义OneNet服务器信息
    const char* onenetServer = "mqtt.heclouds.com";
    const int onenetPort = 6002;
    const char* productId = "your_product_id";
    const char* apiKey = "your_api_key";
    
    // 定义DHT11引脚
    const int dhtPin = D5;
    
    // 初始化DHT11对象
    DHT11 dht;
    
    // 初始化WiFi和MQTT客户端对象
    WiFiClient espClient;
    PubSubClient client(espClient);
    
    // 连接WiFi和OneNet服务器
    void setupWifi() {
      delay(10);
      Serial.println();
      Serial.print("Connecting to ");
      Serial.println(ssid);
    
      WiFi.begin(ssid, password);
    
      while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(".");
      }
    
      Serial.println("");
      Serial.println("WiFi connected");
      Serial.println("IP address: ");
      Serial.println(WiFi.localIP());
    }
    
    // 连接到OneNet服务器
    void setupOneNet() {
      client.setServer(onenetServer, onenetPort);
    }
    
    // 处理接收到的消息
    void callback(char* topic, byte* payload, unsigned int length) {
      Serial.println("Message arrived");
      Serial.print("Topic: ");
      Serial.println(topic);
      Serial.print("Payload: ");
      for (int i = 0; i < length; i++) {
        Serial.print((char)payload[i]);
      }
      Serial.println();
    }
    
    // 发送数据到OneNet平台
    void sendData(float temperature, float humidity) {
      char tempString[10];
      char humString[10];
      dtostrf(temperature, 4, 2, tempString);
      dtostrf(humidity,  4, 2, humString);
    
      // 构建JSON数据字符串
      String json = "{\"temperature\":" + String(tempString) + ",\"humidity\":" + String(humString) + "}";
    
      // 发布JSON数据到OneNet
      client.publish(productId, json.c_str());
    }
    
    void setup() {
      Serial.begin(115200);
      setupWifi();
      setupOneNet();
      dht.attach(dhtPin);
    }
    
    void loop() {
      if (!client.connected()) {
        // 尝试连接到OneNet服务器
        if (client.connect(productId, apiKey, NULL)) {
          Serial.println("Connected to OneNet");
          // 订阅接收消息的主题
          client.setCallback(callback);
          client.subscribe(productId);
        } else {
          Serial.print("Connection to OneNet failed, rc=");
          Serial.print(client.state());
          Serial.println(" retrying in 5 seconds");
          delay(5000);
        }
      } else {
        // 获取温湿度数据
        int temperature = dht.readTemperature();
        int humidity = dht.readHumidity();
        // 发送数据到OneNet
        sendData(temperature, humidity);
        delay(5000);
      }
    
      // 处理MQTT消息
      client.loop();
    }
    

    在代码中替换以下信息: - ssid: 替换成你的Wi-Fi网络的名称 - password: 替换成你的Wi-Fi网络的密码 - onenetServer: 替换成OneNet MQTT服务器的地址 - onenetPort: MQTT服务器端口,默认为6002 - productId: 替换成你的OneNet产品的ID - apiKey: 替换成你的OneNet产品的Master-APIkey

    步骤6: 上传代码到ESP8266

    将ESP8266通过USB连接到计算机,并选择正确的端口和开发板类型,在Arduino IDE中点击“上传”按钮,将代码上传到ESP8266。确保上传成功并开始运行。

    步骤7: 观察数据上传情况

    通过串口监视器打开调试信息输出,观察ESP8266连接到OneNet并发送数据的情况。

    至此,你已经成功连接到OneNet平台的MQTT协议,并能够通过ESP8266发送温湿度数据到OneNet平台进行数据上传。

    请注意:以上方案仅供参考,具体实施可能需要根据实际情况进行调整和修改,以符合你的需求和环境。