利用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 network
    Serial.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 retrying
            delay(5000);
        }
    }
}

void setup()
{
    pinMode(BUILTIN_LED, OUTPUT); // Initialize the BUILTIN_LED pin as an output, where do it esp32 get gpio21 as led
    Serial.begin(115200);
    setup_wifi();
    client.setServer(mqtt_server, 1883); //按OneNet开发文档设置端口为1883
    client.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);//按模板格式化上传数据到msgJson
        Serial.print("Publish message: ");
        Serial.println(msgJson);
        client.publish(outTopic, msgJson);//上传
                
    }
    h=h+2;    
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

docker安装elasticsearch+kibana

目录 1.安装es 2.安装kibana 3.kibana监控es 1.安装es 拉取镜像 docker pull elasticsearch:7.6.1 创建存放配置文件、数据、插件的各个文件夹 mkdir -p /home/docker/elasticsearch/config mkdir -p /home/docker/elasticsearch/data mkdir -p /home/docker/elasticsearch…

【每日一题】 2024年1月汇编

&#x1f525;博客主页&#xff1a; A_SHOWY&#x1f3a5;系列专栏&#xff1a;力扣刷题总结录 数据结构 云计算 数字图像处理 力扣每日一题_ 【1.4】2397.被列覆盖的最多行数 2397. 被列覆盖的最多行数https://leetcode.cn/problems/maximum-rows-covered-by-columns/ 这…

Websocket基本用法

1.Websocket介绍 WebSocket是基于TCP的一种新的网络协议。它实现了浏览器与服务器全双工通信——浏览器和服务器只需要完成一次握手&#xff0c;两者之间就可以创建持久性的连接&#xff0c;并进行双向数据传输。 应用场景&#xff1a; 视频弹幕网页聊天体育实况更新股票基金…

DVI接口如何连接HDMI接口显示器?DVI转HDMI转换器DHA

DVI转HDMI转换器DHA简介 DVI转HDMI转换器DHA能够将DVI信号和R/L音频信号输入转换成HDMI信号输出,独特的功能使其顺畅地整合到家庭影院中&#xff0c;并且播放出高品质的图像。主要用于数据监控中心、大型会议展示中心、学校及各个公司 DVI转HDMI转换器DHA特点 01.支持分辨率4K…

电子文件归档管理有哪些方法

电子文件归档管理有以下几种方法&#xff1a; 1. 按文件类型归档&#xff1a;将电子文件根据文件类型进行归档管理&#xff0c;如将所有的文档文件放在一个文件夹中&#xff0c;所有的图像文件放在另一个文件夹中&#xff0c;便于管理和查找。 2. 按时间归档&#xff1a;将电子…

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

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

(已解决)spingboot 后端发送QQ邮箱验证码

打开QQ邮箱pop3请求服务&#xff1a;&#xff08;按照QQ邮箱引导操作&#xff09; 导入依赖&#xff08;不是maven项目就自己添加jar包&#xff09;&#xff1a; <!-- 邮件发送--><dependency><groupId>org.springframework.boot</groupId><…

关于source批量处理sql命令建立数据库后发现中文乱码问题解决方案(Mysql)

今天在使用souce建表的时候发现自己表结构中的中文出现了乱码问题&#xff0c;那么具体的解决方案如下&#xff1a; 首先我们先使用命令行连接自己的数据库 mysql -u root -p 12345 然后使用show variables like "char%"; 如果说你的这个里面不是utf-8那么就是出现了…

vulnhub靶场之Matrix-Breakout 2 Morpheus

一.环境搭建 1.靶场描述 This is the second in the Matrix-Breakout series, subtitled Morpheus:1. It’s themed as a throwback to the first Matrix movie. You play Trinity, trying to investigate a computer on the Nebuchadnezzar that Cypher has locked everyone…

王道_数据结构 1.2_2_算法的时间复杂度

1.2_2_算法的时间复杂度 一、为什么要事先预估算法时间开销二、时间复杂度的计算与技巧1、化简“算法时间开销”的计算方式的依据2、常用技巧&#xff08;1&#xff09;加法、乘法规则&#xff08;2&#xff09;时间复杂度的数量级阶数排行 3、计算时间复杂度的结论与步骤&…

能耗在线监测系统在节能管理中的应用

上海安科瑞电气股份有限公司 胡冠楠 咨询家&#xff1a;“Acrelhgn”&#xff0c;了解更多产品资讯 摘要&#xff1a;开展能耗在线监测系统建设&#xff0c;对加强政府部门和企业节能管理中的应用前景&#xff0c;分析系统在能源消费预测分析、能效对标、节能监察、能源精细化…

使用“快速开始”将数据传输到新的 iPhone 或 iPad

使用“快速开始”将数据传输到新的 iPhone 或 iPad 使用 iPhone 或 iPad 自动设置你的新 iOS 设备。 使用“快速开始”的过程会同时占用两台设备&#xff0c;因此请务必选择在几分钟内都不需要使用当前设备的时候进行设置。 确保你当前的设备已连接到无线局域网&#xff0c;并…

十分钟学会用springboot制作微信小程序富文本编辑器

1.1 富文本模型设计 在构建富文本编辑器系统时&#xff0c;首先需要设计一个合适的富文本模型。 CREATE TABLE IF NOT EXISTS rich_texts (id INT PRIMARY KEY AUTO_INCREMENT,title VARCHAR(255),content TEXT,created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP );这个表包括…

Arcgis10.3安装

所需软件地址 链接&#xff1a;https://pan.baidu.com/s/1aAykUDjkaXjdwFjDvAR83Q?pwdbs2i 提取码&#xff1a;bs2i 1、安装License Manager 点击License Manager.exe&#xff0c;默认下一步。 安装完&#xff0c;点击License Server Administrator&#xff0c;停止服务。…

RK3588平台开发系列讲解(视频篇)RKMedia的VDEC模块

文章目录 一、 VDEC模块支持的编码标准介绍二、VDEC API的调用三、VDEC解码流程沉淀、分享、成长,让自己和他人都能有所收获!😄 📢RKMedia是RK提供的一种多媒体处理方案,可实现音视频捕获、音视频输出、音视频编解码等功能。 一、 VDEC模块支持的编码标准介绍 RK3688 V…

推荐系统|召回_Swing召回通道

召回_Swing 模型 swing模型是ItemCF的一种改造 ItemCF的原理 举个例子。 ItemCF的存在的问题 有可能两篇不同类型的物品/笔记被分享到同一个微信群&#xff0c;从而提高了两个不同类型的视频被同一组人打开的概率。 而这只能说明这两个物品/笔记具有相同的受众&#xff0c;…

Oracle 面试题 | 03.精选Oracle高频面试题

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

STM32G4 系列命名规则

STM32G4产品线 基础型系列STM32G4x1 具有入门级模拟外设配置&#xff0c;单存储区Flash&#xff0c;支持的Flash存储器容量范围从32到512KB。 增强型系列STM32G4x3 与基本型器件相比具有更多数量的模拟外设&#xff0c;以及双存储区Flash&#xff0c;Flash存储器容量也提高…

asdf安装不同版本的nodejs和yarn和pnpm

安装asdf 安装nodejs nodejs版本 目前项目中常用的是14、16和18 安装插件 asdf plugin add nodejs https://github.com/asdf-vm/asdf-nodejs.git asdf plugin-add yarn https://github.com/twuni/asdf-yarn.git可以查看获取所有的nodejs版本 asdf list all nodejs有很多找…

红队打靶练习:INFOSEC PREP: OSCP

目录 信息收集 1、arp 2、nmap WEB 信息收集 wpscan dirsearch ssh登录 提权 信息收集 1、arp ┌──(root㉿ru)-[~/kali] └─# arp-scan -l Interface: eth0, type: EN10MB, MAC: 00:0c:29:69:c7:bf, IPv4: 192.168.110.128 Starting arp-scan 1.10.0 with 256 ho…