Alink 协议解析 | 学习笔记

简介: 快速学习 Alink 协议解析

开发者学堂课程【物联网平台开发全栈教程Alink 协议解析学习笔记,与课程紧密联系,让用户快速学习知识。

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


Alink 协议解析


基本内容

一、  相关内容

二、  编译

三、  服务器模拟真实设备


一、  相关内容

1、在 WIFI.c 里面解析 MQTT 里面读取的信息;

//接收 MQTT 服努器友送辻来的数据,解析

void Analyze_ MQTT_ Read (void)

{

unsigned int Len=0,i=0;  

// i=0 是个临时的变量

unsigned char Dat[256] ;

// 缓冲区的大小不超过256

//如果用户觉得这个逻辑有问题,那就可以自己尝试去改变这个数值;

if(Get Mess Count_ WIFI() == 0)

return;

//首先会直接读取有没有信息过来如果没有信息那就直接退出。

// 如果说有数据,只要不是0那么它就直接读取缓冲区里所有的数据。

Len=0;

while(Get_ Byte_ WIFI (&Dat [Len++] ) ) ;

//获取接收缓冲区数据

Dat [Len] = 0;

// 这个做法其实是不科学的;

for(i=0;i

{

if((Dat[i] == 0XD0)& (Dat[i+1]==0x00) )

//检验此处是否包含 D0或者是00, 只要连续的两个是 D0或者是00, 那证明此处是回复的心跳。

send_ stzl

("\r\n收到 MQTT 服务器回复的心跳信号! \r\n");

if(Dat[i] == O)//把前面二进制传输时的0去掉 ;

// 二进制中的00有很多个含义; 服务器上面下发的数据里面很可能还包含着许多个00

//一旦碰到 Dat 里面有0,它的妙用则体现在 Compare_ strCompare_ str 这个子函数会认为 Buf 里面都是 ASCII 字符,其实“1”不是 ASCII 字符,但是它如果在比较的时候遇到了0,它就会直接退出。Dat 就是 buf

Dat [i] = 1;

// 所以在这里 有一个简单的处理,把0授予1, 观察有没有出现 D000结合的情况,如果存在这样的情况, 那么就回复一下心跳。

if (Compare_ str (Dat, "\"WorkSwitch\":1") != 255)

// 先来比较一下 WorkSwitch 里面有没有1;

//在定义产品的时候,产品-功能定义; 在功能定义里面有一个标志符, 这个标识符非常的重要, 标志符的布尔值不是0就是1;如下图光标存在点所示:

image.png

{

Relay = 1;

Send Strl ("\r\l平台下发命令:打开继电器! \r\n");

//比较之后,发现 WorkSwitch 的数值为1,那么接着打开继电器;

}

if (Compare str (Dat, ") "WorkSwitch":0") != 255)

{

Relay = 0;

Send Strl ("\r\l平台下发命令:关闭继电器! \r\n");

//比较之后,发现 WorkSwitch 的数值为0,那么接着将会关闭继电器;


二、 编译

编译时将它加入单片机,观察在日志里面它会输出什么内容?

WIFI 模组交互的程序一切正常;

TCP Connect OK; 证明服务器的 TCP 链接是成功的;

MQTT 连接成功;

发送心跳;

收到心跳信号;

服务器连接正常;


三、 服务器模拟真实设备

1、产品-在线调试-选择设备-如下图红色边框内所示:

image.png

2、向下翻页-调试功能:运行开关(WorkSwitch-方法设置

1)当 WorkSwitch=1时,可以看到日志上:平台下发命令:打开继电器;

2)当 WorkSwitch=0时,可以看到日志上:平台下发命令:关闭继电器;

image.png

如果想看一下平台发送了什么内容, 其实在之前使用 MQTT 的函数的时候,就已经知道它会发送一长串的内容,里面会包含 WorkSwitch =0或者 WorkSwitch =1;如果想看,就可以使用串口1Dat 的内容发出去,在串口1的窗口看到底发送了什么内容。

解析就是 Compare_str 这个子函数,有没有“0”或者“1”;它的做法其实并没有很科学,没有解析 json,也没有在 json 解析完之后再看哪一个字段到底是多少?这样做法是非常粗暴、非常直接的,就是简单的判断一下里面时候含有“WorkSwitch=1”、“ WorkSwitch=0”,本身学习编程就是为了简单的数据上报和简单的开关控制,所以说用粗暴的方法解决也是可以的,它本身的业务逻辑也没有那么复杂,需要学习的是在不同的场合去使用不同的思维做事情。

相关文章
|
5天前
|
缓存 中间件 测试技术
SOME/IP协议实践指南:精选开发与测试工具解析
SOME/IP协议实践指南:精选开发与测试工具解析
63 0
|
5天前
|
传感器 安全 中间件
深入浅出:SOME/IP协议中的服务发现机制解析
深入浅出:SOME/IP协议中的服务发现机制解析
94 0
|
5天前
|
存储 传感器 安全
【串口通信】使用C++和Qt设计和实现串口协议解析器(二)
【串口通信】使用C++和Qt设计和实现串口协议解析器
90 0
|
5天前
|
存储 开发框架 算法
【串口通信】使用C++和Qt设计和实现串口协议解析器(一)
【串口通信】使用C++和Qt设计和实现串口协议解析器
284 0
|
5天前
|
域名解析 网络协议
IP协议, TCP协议 和DNS 服务分别是干什么的?
IP协议, TCP协议 和DNS 服务分别是干什么的?
235 0
|
5天前
|
缓存 网络协议 安全
【网络工程师】<软考中级>解析协议ARP&路由协议RIP/OSPF/BGP
【1月更文挑战第27天】【网络工程师】<软考中级>解析协议ARP&路由协议RIP/OSPF/BGP
|
5天前
|
存储 网络协议 Java
【JavaEE】数据链路层-以太网协议-DNS
【JavaEE】数据链路层-以太网协议-DNS
11 1
|
5天前
|
监控 安全 网络虚拟化
|
5天前
|
域名解析 网络协议 Linux
TCP/IP协议及配置、IP地址、子网掩码、网关地址、DNS与DHCP介绍
TCP/IP协议及配置、IP地址、子网掩码、网关地址、DNS与DHCP介绍
|
5天前
|
存储 域名解析 缓存
网络原理(3)--以太网协议,DNS
网络原理(3)--以太网协议,DNS
31 0

推荐镜像

更多