ESP32连接温度传感器并传输到oneNET里面代码

#include <Arduino.h>
#include "WiFi.h"
#include "PubSubClient.h"
#include "Ticker.h"
#include "ESPAsyncWebServer.h"
#include "stdio.h"
#include "DHTesp.h" //引入DHTesp头文件,为下面调用函数做准备。


#include<DHT.h>
#define DHTPIN  15
#define DHTTYPE  DHT11
DHT dht(DHTPIN,DHTTYPE);




const char *ssid = "LA";               //wifi名
const char *password = "15032097092";       //wifi密码
const char *mqtt_server = "183.230.40.96"; //onenet 的 IP地址183.230.40.120
const int port = 1883;                     //端口号

#define mqtt_devid "shuibiao_1" //设备ID
#define mqtt_pubid "uxs6lNA4K3"        //产品ID
//鉴权信息
#define mqtt_password "version=2018-10-31&res=products%2Fuxs6lNA4K3%2Fdevices%2Fshuibiao_1&et=2686969126&method=md5&sign=As9pkzSzlILDEs7%2BWMApeQ%3D%3D" //鉴权信息

WiFiClient espClient;           //创建一个WIFI连接客户端
PubSubClient client(espClient); // 创建一个PubSub客户端, 传入创建的WIFI客户端

char msgJson[200]; //发送信息缓冲区
//信息模板
//char dataTemplate[] = "{\"id\":123,\"version\":1.0,\"params\":{\"wendu\":{\"value\":19}}}";char dataTemplate[] = "{\"id\":123,\"dp\":{\"temp\":[{\"v\":%.2f}],\"humi\":[{\"v\":%.2f}]}}";
//char dataTemplate[] = "{\"id\":\"123\",\"version\":\"1.0\",\"params\":{\"wendu\":{\"value\":%.2f},\"shidu\":{\"value\":%d}]}}";
//char dataTemplate[] = "{\"id\":\"123\",\"version\":\"1.0\",\"params\":{\"wendu\":{\"value\":%.2f},\"shidu\":{\"value\":%.2f}}}";
//char dataTemplate[] = "{\"id\":\"123\",\"version\":\"1.0\",\"params\":{\"wendu\":{\"value\":%.2f}}}";
char dataTemplate[] = "{\"id\":\"123\",\"version\":\"1.0\",\"params\":{\"wendu\":{\"value\":%.2f},\"shidu\":{\"value\":%.2f}}}";

Ticker tim1; //定时器,用来循环上传数据

//连接WIFI相关函数
void setupWifi()
{
  delay(10);
  Serial.println("连接WIFI");
  WiFi.begin(ssid, password);
  while (!WiFi.isConnected())
  {
    Serial.print(".");
    delay(500);
  }
  Serial.println("OK");
  Serial.println("Wifi连接成功");
}


//收到主题下发的回调, 注意这个回调要实现三个形参 1:topic 主题, 2: payload: 传递过来的信息 3: length: 长度
void callback(char *topic, byte *payload, unsigned int length)
{
  Serial.println("message rev:");
  Serial.println(topic);
  for (size_t i = 0; i < length; i++)
  {
    Serial.print((char)payload[i]);
  }
  Serial.println();
}

//向主题发送模拟的温湿度数据
//void sendTempAndHumi()
//{
  // if (client.connected())
  // {
  //  //  snprintf(msgJson, 75, dataTemplate, 26.5, 42); //将模拟温湿度数据套入dataTemplate模板中, 生成的字符串传给msgJson
  //   snprintf(msgJson, 75, dataTemplate, 26.5,30); 
  //   Serial.print("public the data:");
  //   Serial.println(msgJson);
  //   //client.publish("$sys/PSl64STX9X/esp32/thing/property/post", (uint8_t *)msgJson, strlen(msgJson));
  //   client.publish("$sys/uxs6lNA4K3/shuibiao_1/thing/property/post", (uint8_t *)msgJson, strlen(msgJson));
  //   //发送数据到主题
  // }

//}

void sendTempAndHumi()
{
   float h=dht.readHumidity();//读湿度
   float t=dht.readTemperature();//读温度

  if (client.connected())
  {

    // float temperature = t; // 模拟温度数据
    // float humidity = h;   // 模拟湿度数据
       


    //snprintf(msgJson, sizeof(msgJson), dataTemplate, temperature, humidity);
    snprintf(msgJson, 200, dataTemplate, t, h);

    Serial.print("Publishing the data: ");
    Serial.println(msgJson);
   // client.publish("$sys/uxs6lNA4K3/shuibiao_1/thing/property/post", msgJson);

   client.publish("$sys/uxs6lNA4K3/shuibiao_1/thing/property/post", (uint8_t *)msgJson,strlen(msgJson));


  }
}

//重连函数, 如果客户端断线,可以通过此函数重连
void clientReconnect()
{
  while (!client.connected()) //再重连客户端
  {
    Serial.println("reconnect MQTT...");
    if (client.connect(mqtt_devid, mqtt_pubid, mqtt_password))
    {
      Serial.println("connected");
      client.subscribe("$sys/uxs6lNA4K3/shuibiao_1/thing/property/post/reply"); //订阅命令下发主题
    }
    else
    {
      Serial.println("failed");
      Serial.println(client.state());
      Serial.println("try again in 5 sec");
      delay(5000);
    }
  }
}

void setup()
{
  Serial.println("DHT11 test");
  dht.begin();



  Serial.begin(115200);                                  //初始化串口
  delay(3000);                                           //这个延时是为了让我打开串口助手
  setupWifi();                                           //调用函数连接WIFI
  client.setServer(mqtt_server, port);                   //设置客户端连接的服务器,连接Onenet服务器, 使用6002端口
  client.connect(mqtt_devid, mqtt_pubid, mqtt_password); //客户端连接到指定的产品的指定设备.同时输入鉴权信息
  if (client.connected())
  {
    Serial.println("OneNet is connected!");//判断以下是不是连好了.
  }
  client.setCallback(callback);                                //设置好客户端收到信息是的回调
  client.subscribe("$sys/uxs6lNA4K3/shuibiao_1/thing/property/post/reply"); //订阅命令下发主题
  tim1.attach(10, sendTempAndHumi);                            //定时每10秒调用一次发送数据函数sendTempAndHumi
}

void loop()
{
  
   

  if (!WiFi.isConnected()) //先看WIFI是否还在连接
  {
    setupWifi();
  }
  if (!client.connected()) //如果客户端没连接ONENET, 重新连接
  {
    clientReconnect();
    delay(100);
  }
  client.loop(); //客户端循环检测

}


  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值