一、代码

根据实际情况,对WIFI的名称,密码进行修改,onenet的端口号与IP地址不必修改,设备id,产品id,鉴权信息通过onenet平台获取

#include <WiFi.h>
#include "DHT.h"
#include "PubSubClient.h"
#include "Ticker.h"
#define DHTPIN 21
//`#define DHTTYPE DHT11   // DHT 11
DHT dht(DHTPIN, DHT11);
int god=0;
const int led =15; //灯的接口
const char *ssid     = "ABCD"; //wifi名称
const char *password = "12345678";//wifi密码
const char *mqtt_server = "183.230.40.96"; //onenet 的 IP地址
const int port = 6002;                     //端口号
#define mqtt_devid "960321553" //设备ID
#define mqtt_pubid "529638"        //产品ID
//鉴权信息
#define mqtt_password "test12" //鉴权信息
WiFiClient espClient;           //创建一个WIFI连接客户端
PubSubClient client(espClient); // 创建一个PubSub客户端, 传入创建的WIFI客户端
char msg_buf[200];               //发送信息缓冲区
char msgJson[75]; //要发送的json格式的数据
unsigned short json_len = 0;                      //json长度
//信息模板
char dataTemplate[] = "{\"temp\":%.2f,\"humi\":%.2f,\"led\":%d}";  //  temp humi要与onenet相对应
Ticker tim1; //定时器,用来循环上传数据void setupWifi(){WiFi.begin(ssid, password);while (WiFi.status() != WL_CONNECTED) {delay(500);Serial.print("正在连接中----\n");}Serial.print("WIFI已连接\n");Serial.print(WiFi.localIP());
}
void setup() {Serial.begin(115200);pinMode(led,OUTPUT);//输出setupWifi();   //调用函数连接WIFISerial.print(F("DHT11 test!"));dht.begin();                                            client.setServer(mqtt_server, port);                   //设置客户端连接的服务器,连接Onenet服务器, 使用6002端口client.connect(mqtt_devid, mqtt_pubid, mqtt_password); //客户端连接到指定的产品的指定设备.同时输入鉴权信息if (client.connected()){Serial.print("OneNet is connected!");//判断以下是不是连好了.}//client.setCallback(callback);                                //设置好客户端收到信息是的回调client.setCallback(callback); //订阅命令下发主题tim1.attach(5, sendTempAndHumi);                            //定时每5秒调用一次发送数据函数sendTempAndHumi}void loop() {
delay(5000);
float h = dht.readHumidity();
float t = dht.readTemperature();
float f = dht.readTemperature(true);if (isnan(h) || isnan(t) || isnan(f)) {Serial.println(F("Failed to read from DHT sensor!\n"));return;}//可以让我们通过串口查看数据Serial.print(F("Humidity: "));        Serial.print(h);Serial.print(F("%  Temperature: "));Serial.print(t);Serial.print(F("℃  \n "));if (!WiFi.isConnected()) //先看WIFI是否还在连接{setupWifi();}if (!client.connected()) //如果客户端没连接ONENET, 重新连接{clientReconnect();delay(100);}client.loop(); //客户端循环检测}void sendTempAndHumi()
{if (client.connected()){//dht.readHumidity()snprintf(msgJson,75,dataTemplate,dht.readTemperature(),dht.readHumidity(),god); json_len = strlen(msgJson);                   //msgJson的长度msg_buf[0] = char(0x03);                       //要发送的数据必须按照ONENET的要求发送, 根据要求,数据第一位是3msg_buf[1] = char(json_len >> 8);              //数据第二位是要发送的数据长度的高八位msg_buf[2] = char(json_len & 0xff);            //数据第三位是要发送数据的长度的低八位memcpy(msg_buf + 3, msgJson, strlen(msgJson)); //从msg_buf的第四位开始,放入要传的数据msgJsonmsg_buf[3 + strlen(msgJson)] = 0;              //添加一个0作为最后一位, 这样要发送的msg_buf准备好了Serial.print("public the data:");Serial.print(msgJson);client.publish("$dp", (uint8_t *)msg_buf, 3+strlen(msgJson));//发送数据到主题delay(500);}
}//收到主题下发的回调, 注意这个回调要实现三个形参 1:topic 主题, 2: payload: 传递过来的信息 3: length: 长度
void callback(char *topic, byte *payload, unsigned int length)
{Serial.print("Message arrived [");Serial.print(topic);Serial.print("] ");//for (int i = 0; i < length; i++) {//Serial.print((char)payload[i]);//}Serial.println();if ((char)payload[0] == '0') {digitalWrite(led, LOW);   // god=0;} if ((char)payload[0] == '1') {digitalWrite(led, HIGH);  // god=1;}else{}}void clientReconnect()
{while (!client.connected()) //再重连客户端{Serial.print("reconnect MQTT...");if (client.connect(mqtt_devid, mqtt_pubid, mqtt_password)){Serial.print("connected");}else{Serial.print("failed");Serial.print(client.state());Serial.print("try again in 5 sec");delay(5000);}}
}

二、onenet平台

1.登录onenet平台。点击切换至旧版

2.点全部产品,选择多协议接入

3.点击添加产品,产品名称设置是英文,其他可自由选择,但设备接入协议必须选择MQTT

4.添加完产品后,添加设备,设备名称设置是英文,鉴权信息自己设定,(这个是代码中需要的)

5.添加完设备后,点击数据流模板,添加数据流

此处的temp与humi分别表示温湿度的数据流名称

6.设备列表中,点击设备详情 ,可查看设备的相关数据

三、结果

利用MQTT协议实现Arduino与onenet测温湿度相关推荐

  1. 手机控制的esp8266利用mqtt协议接入百度云智能插座

    手机控制的esp8266利用mqtt协议接入百度云智能插座 19年的春节,相信大家和我一样都待在家里,利用在家的时间现学现卖,制作了一款手机控制的智能插座,网上资料很多,我在查询资料中发现,esp82 ...

  2. 利用MQTT协议与阿里云数据交互的python程序

    利用MQTT协议与阿里云数据交互的python程序 设计目的 功能要求和关键问题 环境配置问题 本地程序如何连接云上设备 云上的数据交互问题 界面设计问题 阿里云相关操作 本地程序 设计目的 设计开发 ...

  3. 在VUE中利用MQTT协议实现即时通讯

    前言 建议先阅读: 在Node.js下运用MQTT协议实现即时通讯及离线推送 以前尝试在vue中用上mqtt,了解到mqtt实质上是基于websocket进行数据通信,所以上文中在node下实现的服务 ...

  4. STM32+果云GA6-GPRS/GSM模块+MQTT+HTTP协议连接中移OneNet上传GPS数据定位

    一.环境介绍 MCU:  STM32F103C8T6 GSM模块: GA6--果云 开发软件: Keil5 完整源码下载:  https://download.csdn.net/download/xi ...

  5. 一文带你了解 MQTT 协议(连接 ONE-NET平台)

    MQTT 协议连接 ONE-NET 详解 写在前面 ​  本文采用 网络调试助手 发送MQTT协议报文(16进制) 连接 ONE-NET 平台,采用的 为 MQTT v3.1.1 标准协议.带你直接 ...

  6. stm32利用mqtt与小程序通信

    stm32利用mqtt与小程序通信 stm32连接服务器端 小程序连接服务器 本项目实现的功能如下:通过stm32连接esp8266,然后利用mqtt协议连接到服务器,同时小程序端也连接到服务器,通过 ...

  7. (过程超详细)适合新手的ATK-ESP8266+STM32F103系列单片机通过MQTT协议直连阿里云的教程

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.所用到的硬件设备 二.调试步骤 1.固件的烧录 2.创造阿里云的产品 3.代码修改 4.最终的硬件连接及效果图 总 ...

  8. 微信小程序获取OneNet数据显示温湿度

    微信小程序获取OneNet数据显示温湿度 一.OneNet平台 ​ 1.我这里的设备是通过MQTT协议连接到OneNet平台的 ​ 2.微信小程序获取OneNet数据需要得到产品的api-key.设备 ...

  9. micropython mqtt_MicroPython使用MQTT协议接入OneNET云平台

    MicroPython使用MQTT协议接入OneNET云平台 [复制链接] 本帖最后由 hanyeguxingwo 于 2016-11-22 11:33 编辑 之前使用Arduino+ESP8266使 ...

最新文章

  1. 【原创 HadoopSpark 动手实践 1】Hadoop2.7.3 安装部署实践
  2. addr2line命令
  3. 直播实时转播软件_多群转播神器——转播小助手
  4. java里包含怎么算_java中怎么判断一个字符串中包含某个字符或字符串
  5. Eclipse中快速使代码对齐?1张图搞定!
  6. MySQL的Binlog与Redolog
  7. 2.Node.js access_token的获取、存储及更新
  8. Atitit cache缓存之道 attilax 艾提拉总结 1. 使用缓存的目的(使用缓存) 1 1.1. 1、实现目标减少数据库的负担 1 1.2. 加快查询的速度 2 2. 缓存的常见参数 过
  9. wxWindows入门
  10. 后缀为.vep文件转换成.mp4文件
  11. 敏捷培训: 如何使培训产生共鸣?
  12. python中util是哪个包_使用Python的package机制如何简化utils包设计详解
  13. MATLA 如何让保存的文件名随着参数的改变而改变
  14. 2022最新软件测试面试题(含答案)
  15. vmlinux 反汇编_看vmlinux的符号信息
  16. 多说最近访客通用代码使用方法
  17. 如何解决httpclient调用https请求报错
  18. 谷歌浏览器audio标签自动播放音乐问题解决
  19. OpenLayers 3自定义地图工具条(一)
  20. 【爬虫】小说筛选爬取模板

热门文章

  1. JWT,springboot整合JWT完成token的验证,token的使用,java架构师技术栈
  2. 如何使用python批量修改txt文档
  3. 电子对抗(雷达)发展现状
  4. python用复化梯形公式积分_复化梯形求积分——用Python进行数值计算
  5. 赋予金融科技人性化 易通贷召开品牌重塑发布会
  6. cartographer 用自己的机器人建图、保存地图
  7. Mybatis持久层开发
  8. 努力成为:自我燃烧型人
  9. 如何正确选择客流统计系统
  10. 为什么 Github 可以加分