esp32dht11向onenet上传温湿度数据

本文介绍了如何使用Arduino和DHT11传感器将温湿度数据上传到OneNet云平台,并通过Arduino代码实现温湿度阈值控制LED灯。首先在OneNet创建设备和数据流模型,然后编写Arduino代码连接WiFi、设置MQTT客户端并发送温湿度数据。同时,代码中包含了温湿度数据上传的函数和LED灯控制逻辑。最后提到了参考的微信小程序获取数据的方法。
摘要由CSDN通过智能技术生成

期末作业选取了温湿度数据上传onenet云平台,首先要在onenet平台建立一个属于自己的设备

进入云平台后选择控制台,进去找到全部产品服务选择多协议接入,之后自己选择想要的产品类型等类别,创建完成后就可以得到一个属于你自己的设备了。(如下图所示)

然后你可以在新建的设备中自己创建数据流模型,当然了也可以先不创建,后面通过arduino代码也可以自行创建。

接下来就是arduino代码的编写了,能写到这里的相信大家应该都知道如何使用arduino了,这里我就不多介绍啦

使用dht11传感器进行温湿度的数据采集在编写代码时要先调用库

#include <Arduino.h>
#include "WiFi.h"
#include "PubSubClient.h"
#include "Ticker.h"

#include "DHT.h"

const char *ssid = "";                 //wifi名
const char *password = "";         //wifi密码
const char *mqtt_server = ""; //onenet 的 IP地址
const int led =; //灯的接口
const int port = ;//端口号

#define mqtt_devid ""  //设备ID
#define mqtt_pubid ""     //产品ID
#define mqtt_password "" //鉴权信息

其中wifi名以及密码,要使用自己的热点或wifi,保证电脑和esp32在同一个局域网下,至于设备id以及鉴权信息都在我第一张图里啦,然后产品id与onenet的IP地址的查看见下图

 

 dht11的定义

 #define DHTPIN 2     //dht的接口为2
#define DHTTYPE DHT11   // DHT 11
DHT dht(DHTPIN, DHTTYPE);

后续的一段代码

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

char msg_buf[200];                                //发送信息缓冲区
char dataTemplate[] = "{\"temp\":%.2f,\"hum\":%.2f}"; //信息模板

char msgJson[75];                                 //要发送的json格式的数据
unsigned short json_len = 0;                      //json长度
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();
  
}

然后对于LED灯,我个人不太会在微信小程序上面 下发指令,所以我就在arduino代码上面小做了一下文章,我个人设定的是在温度介于20到30度之间或者湿度大于50%时亮灯,大家可以随意。

if(dht.readTemperature()>20 && dht.readTemperature()<30  || dht.readHumidity()>50 )
  digitalWrite(led, HIGH);
  else
  digitalWrite(led, LOW);

温湿度数据的上传需要使用到sendTempAndHumi()函数

//向主题发送模拟的温湿度数据
void sendTempAndHumi()
{
  if (client.connected())
  {
    snprintf(msgJson, 75, dataTemplate,dht.readTemperature(),dht.readHumidity()); //将模拟温湿度数据套入dataTemplate模板中, 生成的字符串传给msgJson
    json_len = strlen(msgJson);                   //msgJson的长度
    msg_buf[0] = char(0x03);                       //要发送的数据必须按照ONENET的要求发送, 根据要求,数据第一位是3
    msg_buf[1] = char(json_len >> 8);              //数据第二位是要发送的数据长度的高八位
    msg_buf[2] = char(json_len & 0xff);            //数据第三位是要发送数据的长度的低八位
    memcpy(msg_buf + 3, msgJson, strlen(msgJson)); //从msg_buf的第四位开始,放入要传的数据msgJson
    msg_buf[3 + strlen(msgJson)] = 0;              //添加一个0作为最后一位, 这样要发送的msg_buf准备好了
    Serial.print("public message:");
    Serial.println(msgJson);
    client.publish("$dp", (uint8_t *)msg_buf, 3 + strlen(msgJson)); //发送数据到主题$dp
  }
}

然后剩下的一部分代码相信大家应该能很容易查到吧,这里我就不多放了

然后就是微信小程序获取数据部分的代码了,我个人也是参考的这个大佬的,大家可以移步去欣赏大佬的作品

(5条消息) 微信小程序获取OneNet数据显示温湿度_帕法西尔的博客-CSDN博客_微信小程序获取onenet数据

我也就是加了一点显示温湿度数据时有实时的时间显示。

最后,我个人是参考了上面那位大佬的作品,咱就斗胆投个自制了哈,大家见谅

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值