admin 管理员组

文章数量: 1184232

基于小熊派的智慧路灯(WIFI连接)

前言

本文将讲解在使用小熊派官方例程中遇到的问题,以及实现用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+NQMGSchar *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,返回-1if(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连接)