4.1设备的注册
在进行OneNET平台开发者账号注册之后,进入开发者中心,进行项目应用以及设备的新建、添加数据流等操作。
4.2应用的编辑
使用OneNET云平台所配备的应用编辑器功能,可以自定义的生成开发者所需要的应用。
4.3触发器的使用
触发器功能同时也是该平台所赋予的功能,实现当数据超过阈值时,发出邮件提醒用户。
4.4 与OneNET云平台交互控制程序(部分)
//==========================================================
// 函数名称: ESP8266_GetIPD
//
// 函数功能: 获取平台返回的数据
//
// 入口参数: 等待的时间(乘以10ms)
//
// 返回参数: 平台返回的原始数据
//
// 说明: 不同网络设备返回的格式不同,需要去调试
// 如ESP8266的返回格式为 "+IPD,x:yyy" x代表数据长度,yyy是数据内容
//==========================================================
unsigned char *ESP8266_GetIPD(unsigned short timeOut)
{
char *ptrIPD = NULL;
do
{
if(ESP8266_WaitRecive() == REV_OK) //如果接收完成
{
ptrIPD = strstr((char *)esp8266_buf, "IPD,"); //搜索“IPD”头
if(ptrIPD == NULL) //如果没找到,可能是IPD头的延迟,还是需要等待一会,但不会超过设定的时间
{
//UsartPrintf(USART_DEBUG, "\"IPD\" not found\r\n");
}
else
{
ptrIPD = strchr(ptrIPD, ':'); //找到':'
if(ptrIPD != NULL)
{
ptrIPD++;
return (unsigned char *)(ptrIPD);
}
else
return NULL;
}
}
DelayXms(5); //延时等待
} while(timeOut--);
return NULL; //超时还未找到,返回空指针
}
//==========================================================
// 函数名称: OneNet_RevPro
//
// 函数功能: 平台返回数据检测
//
// 入口参数: dataPtr:平台返回的数据
//
// 返回参数: 无
//
// 说明:
//==========================================================
void OneNet_RevPro(unsigned char *cmd)
{
EDP_PACKET_STRUCTURE edpPacket = {NULL, 0, 0, 0}; //协议包
char *cmdid_devid = NULL;
unsigned short cmdid_len = 0;
char *req = NULL;
unsigned int req_len = 0;
unsigned char type = 0;
short result = 0;
char *dataPtr = NULL;
char numBuf[10];
int num = 0;
type = EDP_UnPacketRecv(cmd);
switch(type) //判断是pushdata还是命令下发
{
case CMDREQ: //解命令包
result = EDP_UnPacketCmd(cmd, &cmdid_devid, &cmdid_len, &req, &req_len);
if(result == 0) //解包成功,则进行命令回复的组包
{
EDP_PacketCmdResp(cmdid_devid, cmdid_len, req, req_len, &edpPacket);
UsartPrintf(USART_DEBUG, "cmdid: %s, req: %s, req_len: %d\r\n", cmdid_devid, req, req_len);
}
break;
case SAVEACK:
if(cmd[3] == MSG_ID_HIGH && cmd[4] == MSG_ID_LOW)
{
UsartPrintf(USART_DEBUG, "Tips: Send %s\r\n", cmd[5] ? "Err" : "Ok");
}
else
UsartPrintf(USART_DEBUG, "Tips: Message ID Err\r\n");
break;
default:
result = -1;
break;
}
ESP8266_Clear(); //清空缓存
if(result == -1)
return;
dataPtr = strchr(req, ':'); //搜索':'
if(dataPtr != NULL) //如果找到了
{
dataPtr++;
while(*dataPtr >= '0' && *dataPtr <= '9')//判断是否是下发的命令控制数据
{
numBuf[num++] = *dataPtr++;
}
num = atoi((const char *)numBuf); //转为数值形式
if(strstr((char *)req, "button")) //搜索"button"
{
if(num == 1) //控制数据如果为1,代表开
{
relay_on();
}
else if(num == 0) //控制数据如果为0,代表关
{
relay_off();
}
}
}
if(type == CMDREQ && result == 0) //如果是命令包 且 解包成功
{
EDP_FreeBuffer(cmdid_devid); //释放内存
EDP_FreeBuffer(req);
//回复命令
ESP8266_SendData(edpPacket._data, edpPacket._len); //上传平台
EDP_DeleteBuffer(&edpPacket); //删包
}
}
在此感谢OneNET云平台所给与的强大的开发平台。