期末作业选取了温湿度数据上传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数据
我也就是加了一点显示温湿度数据时有实时的时间显示。
最后,我个人是参考了上面那位大佬的作品,咱就斗胆投个自制了哈,大家见谅