在官网下载的,同样会打包放在二楼
首先看下使用说明1.具体使用方法可参考:sample.c SDK使用的三种类型: 1.组包-发送-删包 只需要调用接口函数封装一包数据,成发送即可。 2.组包-发送-等待平台返回-删包 连接平台和心跳请求需要等待平台的返回结果。 3.数据点上传 数据点上传分5步:1.获取json格式数据流长度 2.根据长度封装协议头 3.封装一包数据 4.发送数据 5.释放内存 内存方案的三种方式 1.动态分配 只需要声明 EDP_PACKET_STRUCTURE edpPacket = {NULL, 0, 0, 0}; 然后调用组包函数即可。 2.全局数 声明一个全局数组,如 unsigned char dataMem[128] 然后再调用组包函数之前 edpPacket._data = dataMem; edpPacket._size = sizeof(dataMem); 即可。 3.局部数组 方式同2,数组为局部变量。
好吧,不想看,直接看例子
sample.c//========================================================== // 函数名称: OneNet_DevLink // // 函数功能: 与onenet创建连接 // // 入口参数: devid:创建设备的devid // proid:产品ID // auth_key:创建设备的masterKey或apiKey或设备鉴权信息 // // 返回参数: 无 // // 说明: 与onenet平台建立连接,成功或会标记oneNetInfo.netWork网络状态标志 //========================================================== void OneNet_DevLink(const char* devid, const char *proid, const char* auth_info) { MQTT_PACKET_STRUCTURE mqttPacket = {NULL, 0, 0, 0}; edpPacket._data = dataMem; //全局数组方式 edpPacket._size = sizeof(dataMem); //全局数组方式 //---------------------------------------------步骤一:组包--------------------------------------------- if(MQTT_PacketConnect(proid, auth_info, devid, 256, 0, MQTT_QOS_LEVEL0, NULL, NULL, 0, &mqttPacket) == 0) { //---------------------------------------------步骤二:发送数据----------------------------------------- NET_DEVICE_SendData(mqttPacket._data, mqttPacket._len); //---------------------------------------------步骤三:判断返回类型-------------------------------------- if(MQTT_UnPacketRecv(dataPtr) == MQTT_PKT_CONNACK) { //---------------------------------------------步骤四:解析返回结果-------------------------------------- switch(MQTT_UnPacketConnectAck(dataPtr)) { case 0: UsartPrintf(USART_DEBUG, "Tips: 连接成功\r\n"); oneNetInfo.netWork = 1; break; case 1:UsartPrintf(USART_DEBUG, "WARN: 连接失败:协议错误\r\n");break; case 2:UsartPrintf(USART_DEBUG, "WARN: 连接失败:非法的clientid\r\n");break; case 3:UsartPrintf(USART_DEBUG, "WARN: 连接失败:服务器失败\r\n");break; case 4:UsartPrintf(USART_DEBUG, "WARN: 连接失败:用户名或密码错误\r\n");break; case 5:UsartPrintf(USART_DEBUG, "WARN: 连接失败:非法链接(比如token非法)\r\n");break; default:UsartPrintf(USART_DEBUG, "ERR: 连接失败:未知错误\r\n");break; } } //---------------------------------------------步骤五:删包--------------------------------------------- MQTT_DeleteBuffer(&mqttPacket); } else UsartPrintf(USART_DEBUG, "WARN: MQTT_PacketConnect Failed\r\n"); }
很简单,组包 ,发包,接包,解析,删包
简单看下组包的函数怎么用说的明明白白,有兴趣的可以多看看源码
直接把文件到单片机的工程中直接模仿示例中写一个
void OneNet_DevLink(void) { MQTT_PACKET_STRUCTURE mqttPacket = {NULL, 0, 0, 0}; IPD ipd_rx = {0,NULL};; UsartPrintf("OneNet_DevLink\r\nPROID: %s\r\nTOKEN:%s\r\nDEVID:%s\r\n", PROID, TOKEN, DEVID); //---------------------------------------------步骤一:组包--------------------------------------------- if(MQTT_PacketConnect(PROID, TOKEN, DEVID, 256, 1, MQTT_QOS_LEVEL0, NULL, NULL, 0, &mqttPacket) == 0) { //---------------------------------------------步骤二:发送数据----------------------------------------- ESP8266_SendData(mqttPacket._data, mqttPacket._len); //---------------------------------------------步骤三:等待返回数据---------------------------------------- uint16_t delay_count = 5000; while(delay_count--) { HAL_Delay(1); if(usart1_rx.flag) { ipd_rx = ESP8266_GetIPD(); break; } } //---------------------------------------------步骤四:判断返回类型-------------------------------------- if(ipd_rx.IPD_buff != NULL) { //---------------------------------------------步骤五:解析返回结果-------------------------------------- switch(MQTT_UnPacketConnectAck(ipd_rx.IPD_buff)) { case 0: UsartPrintf("Tips: 连接成功\r\n"); break; case 1:UsartPrintf("WARN: 连接失败:协议错误\r\n");break; case 2:UsartPrintf("WARN: 连接失败:非法的clientid\r\n");break; case 3:UsartPrintf("WARN: 连接失败:服务器失败\r\n");break; case 4:UsartPrintf("WARN: 连接失败:用户名或密码错误\r\n");break; case 5:UsartPrintf("WARN: 连接失败:非法链接(比如token非法)\r\n");break; default:UsartPrintf("ERR: 连接失败:未知错误\r\n");break; } } //---------------------------------------------步骤六:删包--------------------------------------------- MQTT_DeleteBuffer(&mqttPacket); } else UsartPrintf("WARN: MQTT_PacketConnect Failed\r\n"); }
其中
对应着上篇中的三元组,复制过来即可
当然平台地址需要改一下
添加到esp初始化之后
烧录
已经连接上了
下篇写心跳