ESP8266通过MQTT协议连接onenet云平台

news/2024/3/29 22:59:25/文章来源:https://blog.csdn.net/qq_51963216/article/details/130348729

中国移动onenet平台

文章目录

  • 中国移动onenet平台
  • 前言
  • 一、onenet平台
  • 二、ESP8266
    • 1.完整代码
    • 2.联网代码
    • 3.连云代码
    • 4.数据处理
  • 总结


前言

最近在弄onenet平台,用arduino结合esp8266,就是不知道怎么回事,一直连不上wifi,然后就用esp8266试了一下,没想到一下就在线了,先看一下图。
在这里插入图片描述

一、onenet平台

在这里插入图片描述
你就创建一个mqtt协议接入的设备就行了

二、ESP8266

怎么配置环境的就不讲了,直接附上源码,这个代码可以直接连

1.完整代码

const char *Device_ID = "";         //设备ID
const char *Product_ID = "";        //产品ID
const char *Api_KEY = "MQ";           //鉴权信息
const char *WiFi_SSID = "QCX";         //WiFi名称
const char *WiFi_Password = "88888888"; //WiFi密码
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
float Current = 0;
uint8_t Upload_Package[100];
uint32_t Last_Updata_Time = 0;
WiFiClient espClient;
PubSubClient client(espClient);
void WiFi_Init(void);
void MQTT_Init(void);
void MQTT_Reconnection(void);
void MQTT_Callback(char *MQTT_Topic, uint8_t *MQTT_Payload, uint16_t MQTT_Payload_Len);
void setup()
{Serial.begin(115200);WiFi_Init();MQTT_Init();
}void loop()
{if (!client.connected())MQTT_Reconnection();if (millis() - Last_Updata_Time >= 3000){Last_Updata_Time = millis();float ADC_Value = analogRead(A0);Current = (ADC_Value - 512) * 0.033783784;Serial.print("Current: ");Serial.print(Current);Serial.println("  A\r\n");memset(Upload_Package, 0, 100);String Json_Buffer = ",;Current,";Json_Buffer += String(Current);Json_Buffer += ";";Upload_Package[0] = 5;Upload_Package[1] = highByte(Json_Buffer.length());Upload_Package[2] = lowByte(Json_Buffer.length());for (int i = 0; i < Json_Buffer.length(); i++)Upload_Package[i + 3] = Json_Buffer.c_str()[i];client.publish("$dp", Upload_Package, Json_Buffer.length() + 3);}client.loop();
}
void WiFi_Init(void)
{Serial.print("\r\n\r\nConnecting to ");Serial.print(WiFi_SSID);WiFi.mode(WIFI_STA);WiFi.begin(WiFi_SSID, WiFi_Password);while (WiFi.status() != WL_CONNECTED){delay(500);Serial.print(".");}Serial.print("\r\nWiFi Connected.\r\nIP address: ");Serial.println(WiFi.localIP());
}void MQTT_Init(void)
{client.setServer("183.230.40.39", 6002);client.setCallback(MQTT_Callback);
}
void MQTT_Callback(char *MQTT_Topic, uint8_t *MQTT_Payload, uint16_t MQTT_Payload_Len)
{Serial.printf("Topic: %s[%d]:\r\n", MQTT_Topic, MQTT_Payload_Len);for (uint16_t i = 0; i < MQTT_Payload_Len; i++){Serial.print(MQTT_Payload[i] < 0x10 ? " 0x0" : " 0x");Serial.print(MQTT_Payload[i]);}Serial.println();
}
void MQTT_Reconnection(void)
{while (!client.connected()){Serial.println("MQTT Reconnection.");if (client.connect(Device_ID, Product_ID, Api_KEY))Serial.println("MQTT Connected");else{Serial.print("Connect Failed, Error Code = ");Serial.print(client.state());Serial.println(", Try again in 5 seconds.");delay(5000);}}
}

将A0口读取的模拟值上传到onenet,将接收到onenet下发信息时在串口打印
在这里插入图片描述

2.联网代码

下面是联网的代码,固件下载AT 4M固件

//首先要有WiFi参数
const char *WiFi_SSID = "*******";         //WiFi名称
const char *WiFi_Password = "***********"; //WiFi密码
//其次要有WiFi驱动库
#include <ESP8266WiFi.h>
//声明下函数
void WiFi_Init(void);
void setup()//setup只执行一次,联网放这里面就行
{//串口要初始化下,方便查看过程Serial.begin(115200);//开始WiFi初始化WiFi_Init();
}
void loop()
{}
void WiFi_Init(void)
{//打印下提示语Serial.print("\r\n\r\nConnecting to ");Serial.print(WiFi_SSID);//STA模式,传入wifi参数WiFi.mode(WIFI_STA);WiFi.begin(WiFi_SSID, WiFi_Password);Serial.print("\r\nWiFi Connected.\r\nIP address: ");Serial.println(WiFi.localIP());
}

3.连云代码

这个代码是连接onenet平台的

//首先要有参数
const char *Device_ID = "";       //设备ID
const char *Product_ID = "";         //产品ID
const char *Api_KEY = "";          //鉴权信息
//提供socket协议(MQTT基于TCP)
#include <ESP8266WiFi.h>
//提供MQTT协议
#include <PubSubClient.h>
//创建对象
WiFiClient espClient;
PubSubClient client(espClient);
//声明下函数
void MQTT_Init(void);
void MQTT_Reconnection(void);
void setup()
{Serial.begin(115200);MQTT_Init();//初始化MQTT
}void loop()//loop相当于其他单片机的while(1)
{//判断MQTT连接了没,没的话重新连接if (!client.connected())MQTT_Reconnection();//MQTT运行client.loop();
}
void MQTT_Init(void)
{client.setServer("183.230.40.39", 6002);//设置服务器IP地址和端口client.setCallback(MQTT_Callback);      //设置接收到信息的回调函数
}//MQTT重连函数
void MQTT_Reconnection(void)
{while (!client.connected())//循环到MQTT已连接{Serial.println("MQTT Reconnection.");if (client.connect(Device_ID, Product_ID, Api_KEY))//调用MQTT连接,传入对应的参数,返回1则连接成功Serial.println("MQTT Connected");else//否则就打印错误消息{Serial.print("Connect Failed, Error Code = ");Serial.print(client.state());Serial.println(", Try again in 5 seconds.");delay(5000);}}
}

4.数据处理


//在初始化MQTT时候,我们已经设置了回调函数client.setCallback(MQTT_Callback);
//所以,当收到信息时,会调用这个函数,传入参数含义如下
//MQTT_Topic       收到的消息的主题
//MQTT_Payload     收到的消息的内容
//MQTT_Payload_Len 收到的消息的内容的长度
void MQTT_Callback(char *MQTT_Topic, uint8_t *MQTT_Payload, uint16_t MQTT_Payload_Len)
{//此处只进行了打印,没有其余处理操作Serial.printf("Topic: %s[%d]:\r\n", MQTT_Topic, MQTT_Payload_Len);for (uint16_t i = 0; i < MQTT_Payload_Len; i++){Serial.print(MQTT_Payload[i] < 0x10 ? " 0x0" : " 0x");Serial.print(MQTT_Payload[i]);}Serial.println();
}
//若要上传数据,则使用发布函数发布
//$dp                      ONENT上传数据固定主题
//Upload_Package           上传的数据数组
//Json_Buffer.length() + 3 上传的数据长度,因为包含0,使用不能使用strlen计算长度client.publish("$dp", Upload_Package, Json_Buffer.length() + 3);

Upload_Package[0]为上传格式,可以参照ONENET文档,此处用的是5
数据示例:,;数据名称,数据值;
Upload_Package[1] * 256 + Upload_Package[2] 为 3~数据结束的长度

总结

ONENET的上传数据格式有点特殊,前3字节为固定格式,其后才是真正数据,所以我后面写了一个+3
ONENET的端口号是6002不是传统的1883
格式5即使是字符也不需要双引号(不同于JSON)

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

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

相关文章

Linux下使用Mysql 第一天

目录 安装mysql 更改账户名和密码 启动/关闭mysql mysql的基本操作 数据库CURD 创建数据库 查看数据库 修改数据库 删除数据库 表的CURD 创建表 查看表 修改表 删除表 表数据的CURD create数据 Retrieve数据 update数据 delete数据 DML和DDL的区别&#xf…

高分辨率光学遥感图像水体分类综述2022.03

本文是Water body classification from high-resolution optical remote sensing imagery: Achievements and perspectives的学习笔记。 相关资源被作者整理到&#xff1a;这里 文章目录 Introduction基本知识 挑战和机遇挑战1. 有限的光谱信息和小场景覆盖2. 形状、大小和分布…

【JAVA-模块五 数组】

JAVA-模块五 数组 一、数组&#xff08;一维&#xff09;1.1数组是什么&#xff1f;1.2java中数组静态初始化&#xff1a;&#xff08;存&#xff09;两种定义格式&#xff1a;数组初始化格式&#xff1a;静态初始化后&#xff0c;打印数组名&#xff1a; 1.3 数组元素访问&…

javaweb学生在线考试系统dzkf10程序

打分&#xff09;、系统管理&#xff08;数据备份&#xff09;等功能操作。 以学生的身份在登录页面输入账号和密码&#xff0c;经过数据库身份验证&#xff0c;验证成功后登录系统主页&#xff0c;可以使用个人资料管理、试卷查看、在线考试、在线答疑、个人考试成绩查询等功能…

Oracle的学习心得和知识总结(二十三)|Oracle数据库Real Application Testing之Database Replay相关视图

目录结构 注&#xff1a;提前言明 本文借鉴了以下博主、书籍或网站的内容&#xff0c;其列表如下&#xff1a; 1、参考书籍&#xff1a;《Oracle Database SQL Language Reference》 2、参考书籍&#xff1a;《PostgreSQL中文手册》 3、EDB Postgres Advanced Server User Gui…

LVS负载均衡-DR

1.DR模式中每台主机都有一个VIP地址 虚拟网址放在lo网卡上&#xff08;回环网卡&#xff09; arp_ignore1 Arp_announce2 系统不使用IP包的源地址来设置ARP请求的源地址&#xff0c;而选择发送接口的IP地址 2.内核参数修改 3.vim /etc/rc.conf 开机自启动 Chmod x /etc/rc.d…

【翻译一下官方文档】之uniapp的导航条设置

目录 uni.setNavigationBarTitle(OBJECT) uni.setNavigationBarColor(OBJECT) uni.hideHomeButton(OBJECT) uni.setNavigationBarTitle(OBJECT) 动态设置当前页面的标题。 OBJECT参数说明 参数类型必填说明titleString是页面标题successFunction否接口调用成功的回调函数fai…

卷积神经网络总结

1、卷积核 进行互相关运算。 卷积核的大小一般是奇数。 卷积核的本质类似于提取局部特征&#xff08;过滤器&#xff09;&#xff0c;当层层卷积核叠加后&#xff0c;卷积核的感受野变大&#xff0c;卷积核的作用逐渐向提取全局抽象特征靠近。最后一层的神经元应该对整个输入…

SpringBoot中@EnableAsync和@Async注解的使用

目录 1.EnableAsync 注解1.1 配置类使用示例1.2 复制请求上下文 2.用法1&#xff1a;Async 注解2.1 测试Controller2.2 测试Service2.3 测试ServiceImpl2.4.测试 4.用法2&#xff1a;直接使用 taskExecutor 做异步4.1 重新实现&#xff1a;测试ServiceImpl4.2 测试 5.Async异步…

ArcGIS三体阴影(影像三维)显示马赛克?

我们经常基于ArcGIS通过DEM来做山体阴影 但是有时候你一放大就会出现很强的马赛克的效果 还有我们在利用ArcScene建三维场景 即使数据分辨率很高也会出现马赛克效果 那怎么来解决这个问题呢 让我们的山体阴影显示更加细腻 三维没有马赛克的效果呢&#xff1f; 右键图层选择如…

地铁站人流检测硬件部分

目录 一、概述 二、驱动程序 2.1debug串口 2.2体重传感器HX711 2.3滴答定时器 2.4ESP8266 2.5人体检测 2.6 IIC的GPIO 2.7 OLED的IIC 2.8 LED 三、应用 四、中断 一、概述 使用STM32C8T6作为主控 A9 ---> tx&#xff08;调试串口&#xff09; A10 ---> …

android framework-ActivityManagerService(AMS)下

一、ActivityThread \frameworks\base\core\java\android\app\ActivityThread.java 1.1、main public static void main(String[] args) {Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, "ActivityThreadMain");// Install selective syscall interceptionAnd…

Hudi数据湖技术之核心概念

目录 1 基本概念1.1 时间轴Timeline1.2 文件管理1.3 索引Index 2 存储类型2.1 计算模型2.1.1 批式模型&#xff08;Batch&#xff09;2.1.2 流式模型&#xff08;Stream&#xff09;2.1.3 增量模型&#xff08;Incremental&#xff09; 2.2 查询类型&#xff08;Query Type&…

4.3调整基类成员在派生类中的访问属性的方法

同名成员 在定义派生类的时候&#xff0c;C语言允许派生类与基类中的函数名相同。如果在派生类中定义了与基类中相同的成员&#xff0c;则称派生类成员覆盖了基类的同名成员&#xff0c;在派生类中使用这个名字意味着访问在派生类中重新说明的成员。为了在派生类中使用基类的同…

C++ -4- 类和对象(下)

文章目录 1.初始化列表什么是初始化列表&#xff1f;初始化列表的 意义及使用 2.explicit关键字单参数构造函数&#xff08;C98&#xff09;多参数的构造函数&#xff08;C11&#xff09;&#xff08;了解&#xff09; 3.static静态成员静态成员变量与静态成员函数静态成员变量…

前端02:CSS选择器等基础知识

CSS基础选择器、设置字体样式、文本样式、CSS的三种引入方式、能使用Chrome调试工具调试样式 HTML专注做结构呈现&#xff0c;样式交给CSS&#xff0c;即结构&#xff08;HTML&#xff09;和样式CSS相分离 CSS主要由量分布构成&#xff0c;选择器以及一条或多条声明 选择器&…

18.Java泛型

目录 1. Java基本介绍 2. JDK下载安装及其环境配置 3. 一个简单的java程序 4. Eclipse基本使用、数据类型、运算符 5. 控制语句&#xff08;if、switch、for、while、foreach&#xff09; 6. Java数组 7. Java字符串对象(String|StringBuffer|StringBuilder|StringJoiner…

OFDM-LS信道估计 MMSE信道估计公式推导

假设ofdmN个子载波之间是完全正交的&#xff0c;即不考虑ICI影响&#xff0c;通过发送训练序列来实现信道估计。 其中&#xff0c;在推导6.8的时候&#xff0c;需要将6.6先拆解一下。 X − 1 Y X − 1 ( X H Z ) X − 1 X H X − 1 Z H X − 1 Z X^{-1}Y X^{-1}(XHZ)…

LeetCode213 打家劫舍 II 动态规划法

题目地址 https://leetcode.cn/problems/house-robber-ii/ 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋&#xff0c;每间房内都藏有一定的现金。这个地方所有的房屋都 围成一圈 &#xff0c;这意味着第一个房屋和最后一个房屋是紧挨着的。同时&#xff0c;相邻的房屋装…

【Hive实战】探索Hive 2.X以及更早版本的MetaStore

探索Hive 2.X以及更早版本的MetaStore 文章目录 探索Hive 2.X以及更早版本的MetaStore概述配置元数据服务和元数据存储库基础配置参数其他配置参数默认配置配置元服务数据库使用内嵌模式的Derby库使用远程数据存储库 配置元数据服务本地/内嵌服务配置远程服务配置 元数据服务配…