linux实现coap协议,hwcoap:⼀个⾮常⾮常简单的对接华为
IoT平台coap组件。。。
hwcoap——A simple coap component for connecting to Huawei's IoT platform.
⼀个⾮常⾮常简单的对接华为IoT平台coap组件实现,使⽤者只需要实现UDP的收发函数和⼀个延时函数即可。
作者通过wireshark抓包分析了华为IoT COAP协议对接的过程,代码中只是通过UDP封包的形式简单实现了对接平台的功能,⼒求简单,略显粗糙,但也⾜够⼀般场景使⽤了。只要你的平台⽀持udp通信,那么就可以使⽤该代码来和华为IoT通信了,没必要⽤复杂且占⽤空间的MQTT协议。
代码运⾏中使⽤的发送和接送的缓存空间都是由⽤户先申请的,可根据⾃⼰的情况创建⼀个数据。我测试使⽤的只有1K的RAM,收发Buffer分别是512B,如果发送和接收的数据量不⼤,也可以将RAM设置为256B。如果发送和接收在同⼀个线程,那么可以将发送和接收Buffer设置为同⼀个,节省RAM。
华为IoT平台对接流程
下边通过两幅图⽚展⽰了华为IoT COAP协议对接的流程,本次代码也是根据该流程实现的。
具体分析过程可以csdn查看博客: 抓包分析华为IOT平台CoAP对接流程。
使⽤说明
⽂件说明
hwcoap.c 代码实现
hwcoap.h 头⽂件,⽤户程序中包含
test.c 在linux下实现的⼀个测试程序
testapplication 在树莓派上编译出来的应⽤程序
使⽤⽅法
将hwcoap.c加⼊⽤户⼯程中,在应⽤程序中包含头⽂件hwcoap.h。
在⽤户程序中实现hwcoap.h中定义的三个接⼝:udp的收发函数和⼀个延时函数。/*
brief: send data through udp.
paras: data: data to be sent
len: data length to be sent
return: 0-success , other -failed
*/
uint8_t UDP_Send(uint8_t *data,uint16_t len);
/*
华为linux系统下载
brief: receive data through udp.
paras: data,receive buffer
maxLen, max length of receiving buff.
return: receiving data length.
*/
uint16_t UDP_Receive(uint8_t *data,uint16_t maxLen);
/*
brief: delay some time. unit:ms
*/
void DelayMs(uint16_t ms);
⽤户程序调⽤cHWRegisterWithCoap(char *ep,uint8_t epLen)向平台发起注册,需要传⼊设备IMEI(需要现在IoT平台创建好profile并添加设备)和IMEI的长度;
通过cHWReportData(uint8_t *data,uint16_t len)接⼝向平台上报数据;
通过cuint16_t HWProcessRxData(uint8_t *data,uint16_t maxLen)接收平台下发的数据。
Demo使⽤
test.c是在linux下实现的⼀个测试程序,在linux环境下执⾏make即可⽣成testapp应⽤程序:
./testapp 868681049496159
其中868681049496159为我在平台上注册的设备的识别号(IMEI),需要根据⾃⼰的设备来进⾏修改。
testapplication 在树莓派上编译出来的应⽤程序,其运⾏效果如下图:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。