ESP8266WIFI模块——连接ONENET物联网云平台(二)
ESP8266WIFI模块——连接ONENET物联网云平台(二)
ESP8266WIFI模块——连接ONENET物联网云平台(二)
一、设备登录
1、在main中添加图片红框中的函数
//----------------------------------连接OneNET----------------------------------------------
while(OneNet_DevLink()) //接入OneNET
DelayXms(500);
//----------------------------------连接OneNET----------------------------------------------

2、修改下述值
修改为自己的产品ID、设备密钥、设备名称
产品ID、设备密钥、设备名称在下图中找到
开发者中心——设备接入管理——设备管理——详情
如果设备登录掉线太快可把下述值改长一点
记得修改报错:
在main.c中包含下述头文件:
3、问题及解决
问题:一直登录不上设备,Debug了很久,发现一直进不去图中的函数
解决:找到启动文件,将对应的栈改大(栈溢出)
经过上述操作,成功实现设备登录
二、上传数据到云平台
1、以上传温湿度数据为例子
1、读取温湿度数据,在main.c中添加下述红框中的代码
if(++timeCount >= 10) //发送间隔5s
{
DHT11_Read_Data(&temp,&humi);
UsartPrintf(USART_DEBUG, "OneNet_SendData\r\n");
OneNet_SendData(); //发送数据
timeCount = 0;
ESP8266_Clear();
}

上传到云平台的数据的变量存储在下述函数中:
在main.c中声明所要传输的数据
在Onenet.c中引用,声明是全局变量:
将全局变量替换在红框处:
注意上传的最后一个内容不用逗号,否则传输数据会出现错误:
下述红框中的值(位于OneNet_FillBuf函数中)对应第二张图中云平台设备中的标识符

2、问题
发现移植后的程序中esp8266上传不了数据到云平台
怀疑是esp8266的USART2中的PA2被我原来的程序中的LED引脚占用了,导致数据传输不出去
将LED2改为其它引脚后问题解决,成功上报数据
三、调试器下发控制消息控制LED亮灭
1、Main.c中需要添加下述函数(注意其位置位于while上方)

在while中添加下述函数:
//-----------------------------接收云平台数据源码----------------------------------------
dataPtr = ESP8266_GetIPD(100);
if(dataPtr != NULL)
{OneNet_RevPro(dataPtr);}
// else{UsartPrintf(USART_DEBUG, "NUllllllllllllllllllllllll\r\n");}
//-----------------------------接收云平台数据源码----------------------------------------

2、问题及解决
问题1:移植后没有接收到云平台下达的指令(led不会亮灭)
解决1:
移植后DataPtr一直为NULL,原因:ESP8266_GetIPD的实参太小,改大即可:
此处改为100了
解决2:
看看自己的代码中有没有用timecount来确定发送数据间隔
如果没有用timecount来确定发送数据间隔,会导致即使esp8266接收到云平台的控制消息后单片机仍然控制不了led灯亮灭,因为esp8266接收到云平台消息变量type被设置为MQTT_PKT_PUBLISH后又很快被置为发送数据给云平台成功的标志,没有办法进入到状态机中MQTT_PKT_PUBLISH的状态并执行相应的操作。(需看源代码才能明白)
上述过程的源代码(NET文件夹)位于我主页的ESP8266WIFI模块——连接ONENET物联网云平台(一)中,有需要可自行前往下载。本博客适用于你温湿度数据能正常读取的前提下,移植代码将数据上传到ONENET云平台中。
本博客参考B站UP主——壹知半解的代码进行移植,如果连接有问题可在评论区留言,我会尽量帮大家解决问题,后续有需要会更新APP从云平台获取传感器数据、APP下发命令消息控制LED灯等问题解决,有需要关注、点赞、收藏哦!
更多推荐



所有评论(0)