开发者学堂课程【物联网平台开发全栈教程:订阅主题】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/562/detail/7702
订阅主题
一、单片机订阅主题
1.单片机订阅主题
(1)通过单片机里面 CLI 的方法,将各种各样的数据,尤其是 MQTT 报文数据存储到了单片机里面。
(2)报文数据是通过阿里云平台以及 MQTT 中文手册来计算的。
(3)重新计算一下报文数据:
先连接一下单片机,读一下单片机现在里面的参数到底是什么
然后再复制 DeviceName
此时计算完了之后就生成了一个头文件。
这个框是最新的串口数据内容,可以作为简单的日志打印。
(4)刚才生成了一个头文件 MQTT_Messaage.h,双击打开,里面计算出来的参数就出来了。打开小工具,点击写入数据到单片机,就会将这些数据一个字节一个字节的发送给单片机,完了之后,单片机会把这些数据存储到内部 flash里面,就是在 CLI 这里实现的。
2.这里面有 Write_key、Write_key_HEX、Read_key、Read_key_HEX。
(1)Write_key 和 Write_key_HEX 是有区别的。
(2)Write_key:就只是 ASCII 字符。这个子函数是写 SSID 和密码写域名用的。因为它是很纯粹的 ASCII 字符。
(3)Write_key_HEX:写入某 Key 到 Flash 不过是上位机下发的二进制消息,除去 KEY 后的前两个字节是后续的长度。这个是写连续报文的,在传输的时候,小工具会先读这些报文数据,读一下他们有多长,在前面加两个字节,加两个字节是它的长度,就可以通过 Write 直接把它写进去。写完之后就会发一个数据出去。
(4)Read_key:单片机有一个唯一的 ID,唯一 ID 也是通过手册得来的,只不过又写了一个子函数,把 ID 变成了ASCII 字符。读出来之后小工具就放到了单片机 SN 的这个位置,这是 ASCII 字符。单片机存的时候是一系列十六进制。这样就能保证读一下计算参数每个单片机都是不一样的,因为他们的 SN 就不一样,
3.订阅主题程序:
(1)订阅主题:
Read Flash Message (MQTT_Sub_Addr,DataBuf,&DataLen);
//读取 MQTT 报文,
for (i=0;i<DataLen;i++)
//等待服务器返回
{
WIFI Send Byte (DataBuf [i]) ;
}
Delaylms (2000) ;
//获取接收缓冲区数据
Dat=0;
while (Get Byte_ WIFI (&DataBuf [Dat++]));
if((DataBuf [0]==0X90)&(DataBuf[1]==0X03))
("\r\n订阅属性成功!\r\n");
{
Send str1
}
("\r\n 订阅属性失败!\r\n");
else
{
Send str1
for (i=0;i<DataLen;i++)
WIFI Send Byte (DataBuf[i]) ;
}
Delay1ns (2000) ;
}
}
DataBuf 里面的内容就是订阅主题,订阅的是以下的十六进制,这些十六进制表示的是要订阅的这个主题。把这些数据上报给服务器之后,服务器如果正确,就会返回90,03,00,7B,01,在程序里面就可以简单检测一下。如果 ok就成功。
(2)如果想取消订阅,就要发这些东西过去;
小工具没有把取消订阅这一堆数据扔出去,如果真想那样做,就用之前生成的头文件,可以直接包含这个头文件,在头文件里发对应的数组就可以了。