利用onenet mqtt协议 ,ESP32上传温湿度数据流成功(arduinoIDE)

目标:开发esp32通过onenet平台远程控制LED、继电器等其它设备,并利用onenet可视化功能开发出一个简单的控制页面。

原以为能够快速完成,没想到接入mqtt协议、数据流上传、可视化按键都不同程度遇到了问题,还好经过一番查找和修改,终于初步完成了前两个功能,可视化按键是因为我需要远程控制继电器,刚开始时,一直无数据流可选择。没想到需要通过数据流来进行,所以需要在代码创建一个数据3laig流,虽然我在onenet平台也创建数据流,但在可视化界面一直不显示。明天在尝试一下新的方法。

发现有许多网友其实也不太清楚怎么连接onenet,我也是站在前人的基础上摸索了好久。

这几天一直在上班,没有太多来深入,一直利用下班时间来完成,续更中。。。。。。

 

 

1、参考链接:ESP32+MQTT+OneNet上报数据点+平台命令控制LED - Arduino专区 - OneNET设备云论坛 (10086.cn)

2、参考代码: 

#include <Arduino.h>
#include <WiFi.h>
#include <PubSubClient.h>
//#include <ArduinoJson.h>
#include "DHT.h"#define DHTPIN 5      // Digital pin connected to the DHT sensor
#define DHTTYPE DHT11 // DHT 11
#define BUILTIN_LED 21// Update these with values suitable for your network.const char *ssid = "Oppo-Xu";        //wifi名
const char *password = "123456ABC";      //wifi密码
const char *mqtt_server ="183.230.40.96"; //onenet 的 IP地址const char *clientid = "smartlight";//OneNet注册设备的“设备名称”
const char *userid = "ze3xOCB42t";//OneNet 注册的MQTT产品的“产品ID”
const char *mqtt_password ="version=2018-10-31&res=products%2Fze3xOCB42t%2Fdevices%2Fsmartlight&et=1923199463&method=md5&sign=uG4snxEt7s%2Bqi55uPtCtxA%3D%3D";//OneNet 注册的MQTT产品的“产品ID”char outTopic[] = "$sys/ze3xOCB42t/smartlight/dp/post/json";//数据上传的Topic,格式为“$sys/userid/clientid/dp/post/json”
char inTopic[] = "$sys/ze3xOCB42t/smartlight/dp/post/json/+";//数据返回的Topic,格式为“$sys/userid/clientid/dp/post/json/+”
char cmdTopic[] = "$sys/ze3xOCB42t/smartlight/cmd/#";//接收平台命令的TOPIC,格式为“$sys/userid/clientid/cmd/#”
int switch0 = 0;//开关状态DHT dht(DHTPIN, DHTTYPE);
WiFiClient espClient;
PubSubClient client(espClient);
long lastMsg = 0;
//数据上报格式模板,按网上例程的不成功,只能按下列格式,有Temperatrue、Humidity、switch0三个数据点
char dataTemplete[] = "{\"id\":1,\"dp\":{\"Temperatrue\":[{\"v\":%5.1f}],\"Humidity\":[{\"v\":%d}],\"switch0\":[{\"v\":%d}]}}";
char msgJson[100];//上传的数据
int h = 10;void setup_wifi()
{delay(10);// We start by connecting to a WiFi networkSerial.println();Serial.print("Connecting to ");Serial.println(ssid);WiFi.begin(ssid, password);while (WiFi.status() != WL_CONNECTED){delay(500);Serial.print(".");}randomSeed(micros());Serial.println("");Serial.println("WiFi connected");Serial.println("IP address: ");Serial.println(WiFi.localIP());//  digitalWrite(BUILTIN_LED, HIGH);
}//收到订阅Topic信息的回调处理
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();// 平台发来命令“1”时开灯if ((char)payload[0] == '1'){switch0 = 1;//digitalWrite(BUILTIN_LED, HIGH);}else{switch0 = 0;//digitalWrite(BUILTIN_LED, LOW);}digitalWrite(BUILTIN_LED, switch0);
}void reconnect()
{//循环连接while (!client.connected()){Serial.print("Attempting MQTT connection...");if (client.connect(clientid, userid, mqtt_password)){ Serial.println("connected");//订阅inTop的消息,上报数据后平台自动发来的//client.unsubscribe (inTopic);        client.subscribe(cmdTopic); //订阅平台发来命令消息}else{Serial.print("failed, rc=");Serial.print(client.state());Serial.println(" try again in 5 seconds");// Wait 5 seconds before retryingdelay(5000);}}
}void setup()
{pinMode(BUILTIN_LED, OUTPUT); // Initialize the BUILTIN_LED pin as an output, where do it esp32 get gpio21 as ledSerial.begin(115200);setup_wifi();client.setServer(mqtt_server, 1883); //按OneNet开发文档设置端口为1883client.setCallback(callback);//dht.begin();
}void loop()
{if (!client.connected()){reconnect();}client.loop();long now = millis();if (now - lastMsg > 2000){float t = 15.5;lastMsg = now;sprintf(msgJson, dataTemplete, t, h, switch0);//按模板格式化上传数据到msgJsonSerial.print("Publish message: ");Serial.println(msgJson);client.publish(outTopic, msgJson);//上传}h=h+2;    
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/249063.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android 使用高德地图

一、获取高德平台key 【1】基于application包名&sha1值在高德控制台获取key值&#xff0c;详情参考&#xff1a; 获取Key-创建工程-开发指南-Android 地图SDK | 高德地图API 【2】在manifest中声明权限 【3】将拿到的key值在manifest中进行声明 <!--允许程序打开网络…

HTTPS实现原理

1 为什么需要HTTPS&#xff1f; HTTP 在进行数据传输时采用明文传输&#xff0c;数据包中的用户信息等隐私数据可以被第三方通过抓包等方式窃取&#xff0c;是不安全的。 如果客户端使用 MD5 加密算法对数据进行加密&#xff0c;由于加密后的结果是不可逆的&#xff0c;服务器…

adf4159 直接调制/快速波形产生13 GHz小数N分频频率合成器

优势和特点 RF带宽达13 GHz高速和低速FMCW斜坡发生25位固定模数可提供次赫兹频率分辨率PFD频率最高达110 MHz归一化相位噪底&#xff1a;−224 dBc/HzFSK和PSK功能锯齿波、三角波和抛物线波形发生斜坡与FSK叠加具有2种不同扫描速率的斜坡斜坡延迟、频率回读和中断功能可编程相…

Blender教程(基础)-面的细分与删除、挤出选区-07

一、Blender之面的细分 新建一个立方体&#xff0c;在编辑模式下、选中一个面。 在选中的面上单击右键弹出细分选项&#xff0c;选择细分。 在选中细分后、会默认细分1次。修改细分次数在左下角 二、Blender之面的删除 选择中需要操作的面&#xff0c;在英文状态下按X键弹…

【计算机视觉】万字长文详解:卷积神经网络

以下部分文字资料整合于网络&#xff0c;本文仅供自己学习用&#xff01; 一、计算机视觉概述 如果输入层和隐藏层和之前一样都是采用全连接网络&#xff0c;参数过多会导致过拟合问题&#xff0c;其次这么多的参数存储下来对计算机的内存要求也是很高的 解决这一问题&#x…

linux 04 进程管理

02.进程管理 ps 在命令行输入ps后按回车键就能查看当前系统中正在运行的进程。 第一. 查看进程ps 进程的状态STAT 进程的周期 fork&#xff0c;产生一个新进程 第二.排序进程表 ps aux --sort -%cpu 降序cpu %cpu 增序cpu 第三.父子关系 ps ef 第四.自定义 五.动态查看…

FileZilla 的安装与使用

目录 一. FileZilla 是什么二. FileZilla 的安装1. 下载 FileZilla2. 安装 三. FileZilla 的使用 一. FileZilla 是什么 FileZilla 是一个免费的开源 FTP&#xff08;文件传输协议&#xff09;客户端软件&#xff0c;用于在计算机之间传输文件。它提供了一个直观的用户界面&am…

轮转数组[中等]

优质博文&#xff1a;IT-BLOG-CN 一、题目 给定一个整数数组nums&#xff0c;将数组中的元素向右轮转k个位置&#xff0c;其中k是非负数。 示例 1: 输入: nums [1,2,3,4,5,6,7], k 3 输出: [5,6,7,1,2,3,4] 解释: 向右轮转 1 步: [7,1,2,3,4,5,6] 向右轮转 2 步: [6,7,1,2,…

VueFire:一个一流的 Vue 和 Firebase 体验,包括对 Nuxt 的支持,现在已经稳定了

VueFire&#xff0c;一个一流的 Vue 和 Firebase 体验 — 包括对 Nuxt 的支持&#xff0c;现在已经稳定了。 Vue 和 Firebase 现在比以往任何时候都更好了。 构建更好的VueFire 去年&#xff0c;我们宣布与 Eduardo San Martin Morote 合作&#xff0c;构建一个成熟的 Vue 和…

蓝桥杯嵌入式第七届真题(完成) STM32G431

蓝桥杯嵌入式第七届真题(完成) STM32G431 题目 相关文件 main.c /* USER CODE BEGIN Header */ /********************************************************************************* file : main.c* brief : Main program body**********************…

我的创作纪念日和前端碎碎念

机缘 作为一个前端开发者&#xff0c;我一直热衷于将设计和技术相结合&#xff0c;尽可能提升用户体验。我最初成为创作者的初心源于学习记录&#xff0c;把创作当作一个笔记&#xff0c;希望把自己遇到的问题&#xff0c;以及学习到的实用技巧记录下来&#xff0c;方便学习回…

第九节HarmonyOS 常用基础组件22-Marquee

1、描述 跑马灯组件&#xff0c;用于滚动展示一段单行文本&#xff0c;仅当文本内容宽度超过跑马灯组件宽度时滚动。 2、接口 Marquee(value:{start:boolean, step?:number, loop?:number, fromStart?: boolean ,src:string}) 3、参数 参数名 参数类型 必填 描述 st…

智能指针——浅析

智能指针 本人不才&#xff0c;只能将智能指针介绍一下&#xff0c;无法结合线程进行深入探索 介绍及作用 在异常产生进行跳转时&#xff0c;通过栈帧回收进行内存释放&#xff0c;防止内存泄漏 基于RAII思想可以创建出只能指针 RAII(Resource Acquisition Is Initializatio…

备战蓝桥杯---数据结构与STL应用(入门4)

本专题主要是关于利用优先队列解决贪心选择上的“反悔”问题 话不多说&#xff0c;直接看题&#xff1a; 下面为分析&#xff1a; 很显然&#xff0c;我们在整体上以s[i]为基准&#xff0c;先把士兵按s[i]排好。然后&#xff0c;我们先求s[i]大的开始&#xff0c;即规定选人数…

Neo4j介绍

1.Neo4j概述 Neo4j是一个开源的 无Shcema的 基于java开发的 图形数据库&#xff0c;它将结构化数据存储在图中而不是表中。它是一个嵌入式的、基于磁盘的、具备完全的事务特性的Java持久化引擎。程序数据是在一个面向对象的、灵活的网络结构下&#xff0c;而不是严格、静态的表…

计算机网络-物理层设备(中继器 集线器)

文章目录 中继器中继器的功能再生数字信号和再生模拟信号同一个协议 集线器&#xff08;多口中继器&#xff09;不具备定向传输的原因集线器是共享式设备的原因集线器的所有接口都处于同一个碰撞域&#xff08;冲突域&#xff09;内的原因 小结 中继器 中继器的功能 中继器的…

Qt 5.9.4 转 Qt 6.6.1 遇到的问题总结(三)

1.QSet: toList 中的toList 函数已不存在&#xff0c;遇到xx->toList改成直接用&#xff0c;如下&#xff1a; 2.开源QWT 图形库中QwtDial中的 setPenWidth 变成 setPenWidthF函数。 3.QDateTime 中无setTime_t 改为了setSecsSinceEpoch函数。 4.QRegExp 类已不存在 可以用Q…

给定n个结点的树,u,v两个结点可以配对当且仅当u不是v的祖先且v不是u的祖先,每个结点最多与一个结点配对,求最大配对个数

题目 思路: #include <bits/stdc++.h> using namespace std; #define int long long typedef long long ll; #define pb push_back #define lson p << 1 #define rson p << 1 | 1 #define fi first #define se second const int maxn = 1e6 + 5, maxm = 5e…

免费的ChatGPT网站(7个)

还在为找免费的chatGPT网站或者应用而烦恼吗&#xff1f;博主归纳总结了7个国内非常好用&#xff0c;而且免费的chatGPT网站&#xff0c;AI语言大模型&#xff0c;我们都来接触一下吧。 免费&#xff01;免费&#xff01;免费&#xff01;...&#xff0c;建议收藏保存。 1&…

简单高效 Learn LaTeX 013 - LaTex FloatingBody Tables (44 mins) 浮动体表格

浮动体是LaTex中的一个重要概念&#xff0c;这个视频演示了以浮动体为载体的表格的排版应用。 https://www.douyin.com/user/self?modal_id7305874487138913574&showTabpost