admin管理员组文章数量:1547079
前言
本文将讲解在使用小熊派官方例程中遇到的问题,以及实现用WIFI连接到华为云平台。
正文
一开始使用官方给的资料里面的智慧路灯demo,发现可以运行,数据能正常上传到云平台。但在过了一天以后,发现莫名连接不了,一直卡在如下这个界面。
根据输出,我们查找到对应的文件代码,这里对应着下面这个语句
在执行完nb_reboot()之后,尝试输出AT+CFUN?的信息,发现得到的结果是+CFUN:0,而我们的函数nb_hw_detect()检测期望的结果是+CFUN:1,这也难免程序会卡在这里,因为执行的是一个死循环的设备检测。
AT+CFUN=0 设置NBIoT模块最小功能
AT+CFUN=1 设置NBIoT模块最大功能
那么只要通过AT执行,设置CFUN=1即可退出该循环,从而继续执行下面的语句。
这段代码的意思是首先检测网络的状态(是否有激活或附着),通过AT+CGATT?,通过检测网络的强度csq,这里如果网络没有激活或者附着成功,那么返回的强度应该是CSQ:99,99(信号获取失败)。
解决的办法就是激活该网络,通过AT+CGATT=1,执行成功会返回如下信息。
那么此时就能够检测到网络的强度(信号能够获取成功)。
数据的发送
AT+NMGS=长度,数据
这命令用来向华为Iot平台发送数据,数据以十六进制字符串格式传输,最大长度512字节
AT+NMGS=3,AA11BB
OK
AT+NQMGS
该命令查询发送到华为物联网平台的上游消息的状态。
AT+NQMGS
PENDING=1,SENT=34,ERROR=0
OK
//PENDING=1,上游(云平台发送的消息数)
/**
@param buf 十六进制数据指针
@param len 长度
@return -1 失败
@return 0 成功
nb-iot 发送数据负载
*/
int32_t nb_send_payload(const char* buf, int len)
{
//向电信平台发送数据,AT+NMGS=<length>,<data>
//查询已发送消息,AT+NQMGS
char *cmd1 = "AT+NMGS=";
char *cmd2 = "AT+NQMGS\r";
int ret;
char* str = NULL;
int curcnt = 0;
int rbuflen;
static int sndcnt = 0;
if(buf == NULL || len > AT_MAX_PAYLOADLEN)
{
//如果发送的消息为空或者长度为最大负载
AT_LOG("payload too long");
return -1;
}
//memset(tmpbuf, 0, AT_DATA_LEN);
memset(wbuf, 0, AT_DATA_LEN);
//str_to_hex(buf, len, tmpbuf);
memset(rbuf, 0, AT_DATA_LEN);
//AT+NMGS=3,001234:“00”是数据头,根据平台上的定义修改“12”、“34”为要上传的数据
snprintf(wbuf, AT_DATA_LEN,"%s%d,%s%c",cmd1,(int)len,buf,'\r');
ret = at.cmd((int8_t*)wbuf, strlen(wbuf), "OK", NULL,NULL);
if(ret < 0)
return -1;
//回复:PENDING=0,SENT=317,ERROR=0
//cmd有个期待回答
ret = at.cmd((int8_t*)cmd2, strlen(cmd2), "SENT=", rbuf,&rbuflen);
//如果没有send,返回-1
if(ret < 0)
return -1;
//找到send的内容
str = strstr(rbuf,"SENT=");
if(str == NULL)
return -1;
//格式化输出,send=317,ERROR=0,那么curcnt = 317,wbuf="ERROR=0"
sscanf(str,"SENT=%d,%s",&curcnt,wbuf);
//长度相等,即没有接收到答复
//比如这次发送是100,那么下次就从100开始+字节数
if(curcnt == sndcnt)
return -1;
sndcnt = curcnt;
return ret;
}
使用WIFI连接
根据小熊派的教程,我们可以使用WIFI或者2G通信模块来连接上云平台。
1.修改网络类型
2.修改热点名称和密码
3.修改设备唯一标识符(连接上云平台使用)
执行过程
关于2G模块的联网过程和云平台的连接配置参数等等,会在下一次博客说明,包括如何在示例例程添加使用WIFI模块等。
参考
STM32学习笔记ESP8266(一)
Agent Tiny 是什么?
Arduino利用AT指令连接乐鑫ESP8266实现串口通讯、配网
Agent Lite SDK使用指南(C)
版权声明:本文标题:基于小熊派的智慧路灯(WIFI连接) 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dianzi/1727182621a1100802.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论