Alink 格式报文发送 | 学习笔记

简介: 快速学习 Alink 格式报文发送

开发者学堂课程【物联网平台开发全栈教程Alink 格式报文发送学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/562/detail/7704


Alink 格式报文发送


基本内容

前言

一、理论基础

二、上报属性的内容


前言

这节课的内容主要学习怎么组建符合 Alink 的协议的数据,是用符合二进制的方法。如下图所示:(图1

image.png

一、理论基础

1、首先是理论基础,MQTT 是基于十六进制的数据、通信协议,在理论基础上绑定的是 MQTT 的报文,不论是collect、订阅主题、发送、属性上报,它们的操作方法都是相同的。最后通过一个小工具将数据转移到了单片机的flash 里面,

所以说: 在生成属性上报的时候, 在生成数据的时候,会根据 key value 这样的字段来操作

注意:在上报温度的时候必须要将“12345”这五个字节填充上 ASCII 字符,一个都不能少、一个都不能多;必须要填充好,因为将这些数据存入 flash 里面,它的长度是不会改变的,是固定的;

问:比如说需要上报零下1摄氏度?应该怎样操作?

答:应该上报“- 01.0”

2、此时就需要对“温度的读取和存储”这样的子函数做一个简单的处理。在 Get Temp 里面:

//计算温度,传感器型号是 MCP9700。出来的温度数据直接是 ASCII 格式

void Get Temp (unsigned char  *Val)

//传递参数的形式是以地址的形式传参;

//目的是:获取温度;

{  

float temp;

unsigned int adc value;

float Tem;

temp = Get Vol(4) ;

Tem = temp;

Tem -=500;

Tem *= 10; //根据公式计算出温度;

if(Tem>0)

{

Val [0] = '+';   // +

// 这是第一个字节,但是它的序号是0

//第一个字节是“+”或者是“-”必须要有;

adc value = Tem;

}

else

{

Tem*=-1;

Val[0] = '-';   //-

adc value = Tem;

}

Val[1] = adc value/1000 + 0x39;

// 这里是三个0或者是三个1或者是三个2,翻译成 Alink 字符就是“01234567”

Val[2] = adc value/100810 + 0х30;

Val[3] = 0X2E;   //.

Val[4] = adc value/10%10 + 0х30;

Val[5] = 0x00;

// 最后的这个零表示的是字符串的结尾, 因为地址含参数, 一致认为 一个字符串都是由 ASCII 字符组成的,一旦遇到了00,那么就说明该程序已经到了结尾。

// 05共六个字节, 所以在标题“二” 中定义的“//七个字节”肯定不会溢出;

//Send strl (Val);

//串口发送出去,调试时候使用。


二、上报属性的内容

1、定时上报温度数据

void Pub_ Temperature (void)

{

unsigned char DataBuf [256] ;

unsigned int DataLen=0, i=0; //长度;

unsigned char Temperature [7]; //七个字节;

//存放温度信息

if (MQTT PUB Count > 1000)

// 大约10秒的时间会上报一次温度;

{

MQTT PUB Count = 0;

Get_ Temp (Temperature) ;

// 此时存储温度时按照(图2中红色边框的内容)所存储

Send Strl("\r\n主动上报温度\r\n ") ;

Send Strl (Temperature) ;

Send Strl("摄氏度\r\n") ;

LED4 = ~LED4;

// 如果此时执行了一次子函数,那么 LED4就会翻转一次; 大概10秒翻转一次,ReadFlashMessage(MQTT_Post_Addr,DataBuf,&DataLen);

//属性上报报文, 将图一中的内容加入到 Buf 里面, DataLen 长度就是图一里面的内容有多长;

for(i=0;i<132;i++)  

//发送前132个字节的报文

{  // 先发送132个字节的部分

WIFI_ Send_ Byte (DataBuf [i]) ;

}

for(i=0;i<5;i++)  //发送5个字节的温度

{  //再发送五个字节的部分;

WIFI_ Send_ _Byte (Temperature [i]) ;

}

for(i=137;I < DataLen;i++) //发送剩下的内容;

{  //最后发送剩下的内容

WIFI_ Send Byte (DataBuf [i]) ;

}

}

}

为什么这样做呢?很明显会发现分为的三个字节,第一字节是132前面的,中间的一截是最新的5部分,后面这一字节是137后面的;

首先132,可以查每一行都是十个字节,下图小于180个字节,在图2上的温度是+15.5,那么31 35 3e 35就是“15.5”2b 就是“+”,将这五个词替换掉,如下图所示:

image.png

最后查询它们的位置。可以知道132是前面的132个字节, 5 是“+15.5”,从第137字节开始是最后的一部分

2、假设

假设不是 IndoorTemerature 而是其他的内容,在计算参数的时候一定要从平台产品-功能定义中完整(必须是一模一样,大小写有区别)的复制

问:标志符复制完成之后,在标志符后面填上数据的数据最长是多长?

答:一个“+”或“-”;一个“., 这是数据最长的位数;其实,“+15.5”是不符合json的规范,json的规范是不能“-”所以变成了“+”; 所以说在属性上报的时候是有一定的局限性的, 但是使用这个方法确实能够解决一小部分的问题,。

讲解到这里,整个设备上物联网的开发课程基本上要结束了, 首先讲解了一下平台,接着讲解了一下硬件设计,讲解了软件的基本思路, 以及小工具的原理是怎样来的、接收了 Alink 的数据、上报了温度的属性, 那么下一节课就会利用平台可视化的功能来制作一个网页。

相关实践学习
快速体验阿里云云消息队列RocketMQ版
本实验将带您快速体验使用云消息队列RocketMQ版Serverless系列实例进行获取接入点、创建Topic、创建订阅组、收发消息、查看消息轨迹和仪表盘。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
8月前
|
数据采集 人工智能 JSON
Crawl4AI:为大语言模型打造的开源网页数据采集工具
随着大语言模型(LLMs)的快速发展,高质量数据成为智能系统的关键基础。**Crawl4AI**是一款专为LLMs设计的开源网页爬取工具,可高效提取并结构化处理网页数据,突破传统API限制,支持JSON、HTML或Markdown等格式输出。
676 3
Crawl4AI:为大语言模型打造的开源网页数据采集工具
|
2月前
|
人工智能 Java Nacos
基于 Spring AI Alibaba + Nacos 的分布式 Multi-Agent 构建指南
本文将针对 Spring AI Alibaba + Nacos 的分布式多智能体构建方案展开介绍,同时结合 Demo 说明快速开发方法与实际效果。
2207 63
|
消息中间件 存储 Java
《RabbitMQ》| 解决消息延迟和堆积问题
本文主要介绍 RabbitMQ的常见问题
1164 1
|
C++ 开发者 Python
实现Python日志点击跳转到代码位置的方法
本文介绍了如何在Python日志中实现点击跳转到代码位置的功能,以提升调试效率。通过结合`logging`模块的`findCaller()`方法记录代码位置信息,并使用支持点击跳转的日志查看工具(如VS Code、PyCharm),开发者可以从日志直接点击链接定位到出错代码,加快问题排查。
|
机器学习/深度学习 编解码 自然语言处理
YOLOv8改进 | 2023 | CARAFE提高精度的上采样方法(助力细节长点)
YOLOv8改进 | 2023 | CARAFE提高精度的上采样方法(助力细节长点)
969 2
|
监控 安全 物联网
阿里云mqtt简介和使用流程
本文介绍了阿里云MQTT的准备工作、简介和使用流程。首先,用户需要注册阿里云账号并完成实名认证。接着,通过阿里云物联网平台创建产品和设备,获取连接所需的Broker Address、Port、Username和Password。然后,使用MQTT客户端(如MQTTX)配置这些信息进行连接,并激活设备。最后,创建并订阅/发布自定义Topic,实现设备间的通信。阿里云MQTT是一个适用于物联网设备的轻量级通信协议,提供高并发、高可靠性的服务,广泛应用于各种物联网场景。
阿里云mqtt简介和使用流程
|
JavaScript 数据库
Vue数据操作:如何在对象拷贝中正确选择深拷贝或浅拷贝?
Vue数据操作:如何在对象拷贝中正确选择深拷贝或浅拷贝?
259 0
|
缓存 Java 测试技术
探讨Java中遍历Map集合的最快方式
探讨Java中遍历Map集合的最快方式
375 1
Simulink|局部遮荫下光伏组件多峰值PSO-MPPT控制
Simulink|局部遮荫下光伏组件多峰值PSO-MPPT控制
|
存储 关系型数据库 MySQL
c#关于Mysql MySqlBulkLoader 批量上传
c#关于Mysql MySqlBulkLoader 批量上传
424 0