CC2530+ESP8266使用MQTT协议上传阿里云的问题

news2024/11/26 5:44:25
AT+MQTTPUB=<LinkID>,<"topic">,<"data">,<qos>,<retain>

LinkID: 当前只支持 0
topic: 发布主题, 最长 64 字节
data: 发布消息, data 不能包含 \0, 请确保整条 AT+MQTTPUB 不超过 AT 指令的最大长度限制
qos: 发布服务质量, 参数可选 0,1,2, 默认为 0
retain: 发布 retain
主要对这个数据上传的命令问题,这个命令用串口调试助手发给ESP8266可以成功上传,但是CC2530去发给ESP8266的时候对data长度有一定的限制,太长了是发送不出去,甚至没有任何响应报错都没有。
要是选择阿里云的AlinkJSON数据格式创建的产品,按照它这种方式在编程里会变得很长例如下面这种

sprintf(strTemp,"AT+MQTTPUB=0,\"/sys/i2u8FoillVa/coordinator/thing/event/property/post\",\"{\\\"meth od\\\":\\\"thing.service.property.set\\\"\\\,\\\"id\\\":\\\"2012934117\\\"\\\,\\\"params\\\":{\\\"co2\\\":51}\\\,\\\"version\\\":\\\"1.0.0\\\"}\",1,0\r\n");

各种转义"”和,的看着也累,这样就导致data过长发送不成功。
我的解决方法是不采用阿里云定义的这种AlinkJSON数据格式,选择透传自定义
在这里插入图片描述
选择这种上传格式后需要我们自己去解析消息。
在这里插入图片描述
这里就是将消息转换成AlinkJSON格式完成物模型数据的上传,主要就是编写一个JavaScript脚本,下面贴一下我写的

var ALINK_PROP_SET_METHOD="thing.event.property.post"; //AlinkJSON的method属性 thing.service.property.set


/**
 * 将设备自定义topic数据转换为json格式数据, 设备上报数据到物联网平台时调用
 * 入参:topic   string 设备上报消息的topic
 * 入参:rawData byte[]数组 不能为空
 * 出参:jsonObj JSON对象 不能为空
 */
function transformPayload(topic, rawData) {
    var jsonObj = {};
    return jsonObj;
}

function ascll2String(array) {
  let result = "";
  for (let i = 0; i < array.length; i++) {
    result += String.fromCharCode(array[i]);
  }
  return result;
}

function toParams(str){
    //str =str.substring(1,str.length-1);
    let arr = str.split(",");
    let params = {};
    for(let i =0;i<arr.length;i++){
        let map = arr[i].split(":");
        params[map[0]]= parseInt(map[1]);
    }
    return params;
}

/**
 * 将设备的自定义格式数据转换为Alink协议的数据,设备上报数据到物联网平台时调用
 * 入参:rawData byte[]数组 不能为空
 * 出参:jsonObj Alink JSON对象 不能为空
 */
function rawDataToProtocol(rawData) {
    var byteString = ascll2String(rawData);
    var data = toParams(byteString);
    var jsonObj = {params:data,method:ALINK_PROP_SET_METHOD,version:"1.0.0"};
    //var jsonObj = {params:rawData}
    return jsonObj;
}

/**
 *  将Alink协议的数据转换为设备能识别的格式数据,物联网平台给设备下发数据时调用
 *  入参:jsonObj Alink JSON对象  不能为空
 *  出参:rawData byte[]数组      不能为空
 *
 */
function protocolToRawData(jsonObj) {
    let result={};
    result.id = jsonObj.id;
    result.code = jsonObj.code;
    result.data = jsonObj.data;
    let jsonStr = JSON.stringify(result);
    
    var rawdata = [];
    //rawdata.push(jsonObj)
    rawdata = strToAscll(jsonStr);
    return rawdata;
}
function strToAscll(jStr){
    let res = [];
    let arry = jStr.split("");
    for(let i =0;i<arry.length;i++){
        res.push(arry[i].charCodeAt());
    }
    return res;
}

rawDataToProtocol();这个函数就是将消息转换成AlinkJSON,这里要主要入参的rawData 是一个ASCLL码数组,但是你测试的时候需要在下方输入的是16进制的数据比如这条 在这里插入图片描述

636f323a35312c74656d70657261747572653a3135

对应的字符串

co2:51,temperature:15

转换后的结果就是
在这里插入图片描述
在这里插入图片描述
这样就符合AlinkJSON格式了,可以成功上传物模型数据。
这里的疑惑点是在设备端我们不需要将信息转换成16进制,阿里云会帮我们转换吃16进制的。我们只要正常传消息 co2:51,temperature:15就可以了。
protocolToRawData();这个函数主要是设备上传数据以后会有一个reply返回给设备说上传成功还是失败的消息。透传自定义的设备默认是不订阅这个topic的,需要你自己订阅。
这个函数在测试的时候主要主要传入的是一个object不是它写的16进制很坑!
在这里插入图片描述
在这里插入图片描述
其实这个函数你只要不订阅那个replay的topic就不用管,只不过设备日志里会报错,直接用这个就可以处理。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

项目管理软件排行榜!盘点前十名!

项目管理软件排行榜&#xff01;盘点前十名&#xff01; 如今企业规模不断扩大&#xff0c;业务逐渐复杂化&#xff0c;项目管理已经成为现代企业管理中不可或缺的一环。作为协调管理者、团队成员和客户之间交流的工具&#xff0c;项目管理软件不仅可以提高工作效率&#xff0…

数据结构入门--时间 空间复杂度

数据结构入门 时间 空间复杂度解析 目录 一. 算法效率 二. 时间复杂度 2.1 时间复杂度的概念 2.2 大O的渐进表示法 2.3 题目练习 题目一 题目二 题目三 题目四 题目五 题目六 题目七 三. 空间复杂度 3.1 题目练习 题目一 题目二 题目三 一. 算法效率 算法效率…

Vim常用命令汇总

目录1 普通模式2 插入模式3 可视模式4 命令行模式4 文件操作5 动作命令1 普通模式 命令操作符合命令作用等同命令.重复上次修改x删除光标下的字符dd删除整行>G从当前行到文档末尾处的缩进层级a在当前光标之后添加内容i在当前光标之前添加内容A在当前行的结尾添加内容$aI在当…

Docker之安装redis

下面记录一下在docker中安装redis过程 1.查看redis镜像 docker search redis2.拉去镜像到Linux //指定拉取redis版本 docker pull redis:6.0 //不指定版本默认拉取最新 docker pull redis3.查看镜像是否拉取成功 docker images4.启动redis //2f66aad5324为redis的image id do…

驾驭云安全:2023年云安全展望

由于其的良好的可扩展性和优质的事件处理效率&#xff0c;云技术已成为现代企业的必备的管理技术之一&#xff0c;目前他已经成为所有行业及企业的热门选择。然而&#xff0c;攻击面积的增加以及不针对云技术衍生出来的多类攻击方式&#xff0c;使许多企业更容易受到威胁和数据…

Docker学习总结

1、镜像操作 1.1 拉取、查看镜像 步骤一&#xff1a; 首先去镜像仓库搜索nginx镜像&#xff0c;比如[DockerHub]( Docker Hub Container Image Library | App Containerization ) : 步骤二&#xff1a; 根据查看到的镜像名称&#xff0c;拉取自己需要的镜像 通过命令&…

代码随想录 NO54 |单调栈_leetcode 503.下一个更大元素II 42. 接雨水

单调栈_leetcode 503.下一个更大元素II 42. 接雨水单调栈第二天&#xff0c;也是本轮刷题任务倒数第二天&#xff0c;加油&#xff01; 503.下一个更大元素II 这道题和739. 每日温度几乎如出一辙。在遍历的过程中模拟走了两遍nums。 class Solution:def nextGreaterElements(…

算法设计与分析——十大经典排序算法一(1--5)

目录 算法设计与分析——十大经典排序算法 第1关&#xff1a;冒泡排序 参考代码 第2关&#xff1a;选择排序 参考代码 第3关&#xff1a;插入排序 参考代码 第4关&#xff1a;希尔排序 参考代码 第5关&#xff1a;归并排序 参考代码 作者有言 一个不知名大学生&#x…

软考信息系统监理师备考建议

用好备考方法&#xff0c;两三个月就可以过的。信息系统监理师备考最好以教材和历年真题为主&#xff0c;教学视频模拟题为辅。考试介绍与复习建议&#xff1a;考试设置的科目包括&#xff1a;&#xff08;1&#xff09;信息系统工程监理基础知识&#xff0c;考试时间150分钟&a…

回顾1-idea创建Java项目

创建Java项目 创建项目和模块的区别 环境前置 IDEA开发工具JDK及配置环境变量 创建项目/工程 新建项目 选择Java模块 > SDK( 已配置的JDK ) > 下一步 直接下一步 填写项目信息 QQ游戏工程 里的 叫项目 所以 QQgame目录下 可以放 > 斗地主项目 / 美女来找茬等… …

Java调用C++方法(Linux下)

最近的项目中用到了java调用C的部分&#xff0c;记录一下&#xff0c;还是比较简单的。 所有需要的文件都放在同一个目录下。 java代码 public class NativeDemo {{System.load("/opt/java_c/src/NativeDemo.so");//这里必须用绝对路径}public native void SayHell…

Linux 进程:程序地址空间 与 虚拟内存

目录一、程序地址空间二、虚拟地址空间1.虚拟内存的原理2.使用虚拟内存的原因&#xff1f;3.如何实现虚拟空间&#xff1f;4.使用虚拟内存的好处本文主要介绍程序地址空间和虚拟地址空间的概念&#xff0c;理解了虚拟地址空间&#xff0c;才可以更好的理解物理内存和进程pcb之间…

scratch潜水 电子学会图形化编程scratch等级考试一级真题和答案解析2022年12月

目录 scratch潜水 一、题目要求 1、准备工作 2、功能实现 二、案例分析

# Redis 实战读书笔记(一)

Redis 实战读书笔记&#xff08;一&#xff09; 初始Redis ​ Redis是一个远程内存数据库&#xff0c;它不仅性能强劲而且还具有复制特性以及为解决问题而生的独一无二的数据模型。Redis提供了5中不同类型的数据库&#xff0c;初次之外通过复制持久化和客户端分片等特性用户可…

Android 项目必备(四十三)-->Android 开发者的 new 电脑

前言 作为 Android 开发者&#xff0c;当你新入职一家公司&#xff0c;拿到新发的电脑&#xff0c;你会对电脑干点啥&#xff1f; 安装开发环境&#xff1f;装软件&#xff1f;你是否还会铺天盖地到处找之前电脑备份的东西&#xff1f;又或者还想不起来有什么上一台电脑好用的…

一个9个月测试经验的人,居然在面试时跟我要18K,我都被他吓到了····

2月初我入职了深圳某家创业公司&#xff0c;刚入职还是很兴奋的&#xff0c;到公司一看我傻了&#xff0c;公司除了我一个测试&#xff0c;公司的开发人员就只有3个前端2个后端还有2个UI&#xff0c;在粗略了解公司的业务后才发现是一个从零开始的项目&#xff0c;目前啥都没有…

Mac iTerm2 rz sz

1、安装brew&#xff08;找了很多&#x1f517;&#xff0c;就这个博主的好用&#xff09; Mac如何安装brew&#xff1f;_行走的码农00的博客-CSDN博客_mac brew 2、安装lrzsz brew install lrzsz 检查是否安装成功 brew list 定位lrzsz的安装目录 brew list lrzsz 执…

【linux】:进程概念

文章目录 冯诺依曼体系结构一&#xff1a;操作系统二: 进程总结冯诺依曼体系结构 我们常见的计算机&#xff0c;如笔记本。我们不常见的计算机&#xff0c;如服务器&#xff0c;大部分都遵守冯诺依曼体系。 冯诺依曼体系如下图&#xff1a; 那么输入设备有哪些呢&#xff1f…

时间复杂度和空间复杂度(1)

目录 1、算法效率 2、时间复杂度 1、定义 2、大O的渐进表示法 3、常见时间复杂度计算举例 3、空间复杂度 4、练习 例1、消失的数字 例2、旋转数组 1、算法效率 算法在编写成可执行程序后&#xff0c;运行时需要耗费计算机的时间资源和空间(内存)资源。因此衡量一个算法…

第八届蓝桥杯省赛——4承压计算(二维数组,嵌套循环)

题目&#xff1a;X星球的高科技实验室中整齐地堆放着某批珍贵金属原料。每块金属原料的外形、尺寸完全一致&#xff0c;但重量不同。金属材料被严格地堆放成金字塔形。7 5 8 7 8 8 9 2 7 2 8 1 4 9 1 8 1 8 8 4 1 7 9 6 1 4 5 4 5 6 5 5 6 9 5 6 5 5 4 7 9 3 5 5 1 7 5 7 9 7 4…