协议已经剖析完了,但不再造轮子了,直接移植onenet写好的驱动

在官网下载的,同样会打包放在二楼
首先看下使用说明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初始化之后
烧录


已经连接上了
下篇写心跳
我要赚赏金
