STM32通过NB(BC35-G)连接华为云IOT

第一步:注册并绑定NB

注册账号之类的直接省略......直接从主题说起!
1.在自己已经建好的项目里面绑定NB模组;

第一步
在这里插入图片描述
== *设备标识必须是NB模块的IMEI号(IMEI在芯片的丝印上)==

第二步 写代码连接华为云平台

说明:NB初始化,一定要等到STM32收到来自模块的指令“+QLWEVTIND:3”之后,再发送有关指令。

nb.c
    /**
  *@brief  NB初始化
  *@param  none
  *@retval none
  *@note   none
  */
void NB101_inital(void)
{
		Strx=strstr((const char*)Usart1_rx_buffer,(const char *)"+QLWEVTIND:3");
		while(Strx==NULL)
		{
			Strx=strstr((const char*)Usart1_rx_buffer,(const char *)"+QLWEVTIND:3");
		}
		clear_buff();
		Uart_SendStr("AT\r\n");
		HAL_Delay(50);
		Strx=strstr((const char*)Usart1_rx_buffer,(const char *)"OK");
		while(Strx==NULL)
		{
			Strx=strstr((const char*)Usart1_rx_buffer,(const char *)"OK");
		}
		clear_buff();
		Uart_SendStr("AT+CFUN?\r\n");
		HAL_Delay(50);
		Strx=strstr((const char*)Usart1_rx_buffer,(const char *)"+CFUN:1");
		while(Strx==NULL)
		{
			Strx=strstr((const char*)Usart1_rx_buffer,(const char *)"+CFUN:1");
		}
		clear_buff();
		Uart_SendStr("AT+CEREG?\r\n");
		HAL_Delay(50);
		Strx=strstr((const char*)Usart1_rx_buffer,(const char *)"+CEREG:0,1");
		while(Strx==NULL)
		{
			Strx=strstr((const char*)Usart1_rx_buffer,(const char *)"+CEREG:0,1");
		}
		clear_buff();
		Uart_SendStr("AT+CGATT?\r\n");
		HAL_Delay(50);
		Strx=strstr((const char*)Usart1_rx_buffer,(const char *)"+CGATT:1");
		while(Strx==NULL)
		{
			Strx=strstr((const char*)Usart1_rx_buffer,(const char *)"+CGATT:1");
		}
		clear_buff();
		Uart_SendStr("AT+NCDP=xxxxxxxxxxxxx\r\n");//连接CoAP进行通信
		HAL_Delay(50);
		Strx=strstr((const char*)Usart1_rx_buffer,(const char *)"OK");
		while(Strx==NULL)
		{
			Strx=strstr((const char*)Usart1_rx_buffer,(const char *)"OK");
		}
		clear_buff();
}

AT常用指令集

指令:AT
功能:测试AT指令功能是否正常
示例

AT 
OK

指令:AT+CSQ
功能:返回从 UE 接收到的信号强度指示 和信道误码率 ,其中第一个值rssi应当在0-31之间,如果为99则表示信号无法检测,第二个参数ber因为模组当前不支持,所以始终为99。

+CSQ:26,99
OK

指令:AT+CEREG?
功能:查询当前 EPS 网络注册状态,该指令返回的第一个参数为0则表示禁止网络注册URC,第二个参数表示网络注册状态,1表示已注册本地网,5表示已注册漫游网络,其余值则表示注册失败。
示例:

+CEREG:0,1

指令:AT+CGATT?
功能:该命令用于查询当前是否将 UE 附着于 PS 域,返回值为1则表示已附着,即网络激活成功。
示例:

+CGATT:1
OK

指令:AT+CGPADDR
功能:该命令用于查询模组当前的ip地址。
示例:

+CGPADDR:0,10.44.108.10
OK

。。。。。。

第三步 发送数据

说明:每个固定时间循环发送(根据自己的实际情况而定)

    /*
	  *@brief  发送数据
	  *@param  none
	  *@retval none
	  *@note   none
	 */
void Send_maincontrol_Data(void)
{
   char Send_data[75]={0};
	Send_data[0]='A';
	Send_data[1]='T';
	Send_data[2]='+';
	Send_data[3]='N';
	Send_data[4]='M';
	Send_data[5]='G';
	Send_data[6]='S';
	Send_data[7]='=';
	Send_data[8]='3';
	Send_data[9]='1';
	Send_data[10]=',';
	ASCII_To_Char(&Send_data[11],BoatStatus_Val.func=0,1);                      //标志位
	ASCII_To_Char(&Send_data[13],(BoatStatus_Val.longitude_now*10000000),4);    //经度
	ASCII_To_Char(&Send_data[21],(BoatStatus_Val.latitude_now*10000000),4);     //纬度
    ASCII_To_Char(&Send_data[29],BoatStatus_Val.elect,1);                       //电量
	#ifdef Stytle2
	ASCII_To_Char(&Send_data[31],BoatStatus_Val.systle=2,1);                    //类型
	ASCII_To_Char(&Send_data[33],(int)(WaterSensor_Val.data_1*10),2);           //数据1--温度
	ASCII_To_Char(&Send_data[37],(int)(WaterSensor_Val.data_2*10),2);           //数据2--深度
	ASCII_To_Char(&Send_data[41],(int)(WaterSensor_Val.data_3*100),2);          //数据3
	ASCII_To_Char(&Send_data[45],(int)(WaterSensor_Val.data_4*100),2);          //数据4
	ASCII_To_Char(&Send_data[49],(int)(WaterSensor_Val.data_5*100),2);          //数据5
	ASCII_To_Char(&Send_data[53],(int)(WaterSensor_Val.data_6*100),2);          //数据6
	ASCII_To_Char(&Send_data[57],(int)(WaterSensor_Val.data_7*100),2);          //数据7
	ASCII_To_Char(&Send_data[61],(int)(WaterSensor_Val.data_8*100),2);          //数据8 
	ASCII_To_Char(&Send_data[65],(int)(WaterSensor_Val.data_9*1000),2);         //数据9
	ASCII_To_Char(&Send_data[69],(int)(WaterSensor_Val.data_10*1),2);           //数据10--电流
	#endif
	#ifdef Stytle3 
    ASCII_To_Char(&Send_data[31],BoatStatus_Val.systle=3,1);                    //类型
	ASCII_To_Char(&Send_data[33],(int)(WaterSensor_Val.data_1*10),2);           //数据1--水温
	ASCII_To_Char(&Send_data[37],(int)(WaterSensor_Val.data_2*10),2);           //数据2--浊度
	ASCII_To_Char(&Send_data[41],(int)(WaterSensor_Val.data_3*1),2);            //数据3--PH
	ASCII_To_Char(&Send_data[45],(int)(WaterSensor_Val.data_4*100),2);          //数据4--船速
	ASCII_To_Char(&Send_data[49],(int)(WaterSensor_Val.data_5*1),2);            //数据5--氨氮
	ASCII_To_Char(&Send_data[53],(int)(WaterSensor_Val.data_6*1),2);            //数据6--溶解氧
	ASCII_To_Char(&Send_data[57],(int)(WaterSensor_Val.data_7*100),2);          //数据7--化学需氧量
	ASCII_To_Char(&Send_data[61],(int)(WaterSensor_Val.data_8*1),2);            //数据8--电导率
	ASCII_To_Char(&Send_data[65],(int)(WaterSensor_Val.data_9*1000),2);         //数据9--信号质量
	ASCII_To_Char(&Send_data[69],(int)(WaterSensor_Val.data_10*1),2);           //数据10--电流
	#endif	
	Send_data[73]='\r';
	Send_data[74]='\n';
	//上传到NB
	HAL_UART_Transmit(&huart1,(uint8_t*)Send_data,sizeof(Send_data),0xffff); 
}

完结

华为云平台那边只识别字符,所以这边用了一个ASCII_To_Char()函数。

版权声明:本文为CSDN博主「Super—Zhang」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_43012692/article/details/120970351

生成海报
点赞 0

Super—Zhang

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

4路红外循迹模块使用教程

4路红外循迹模块使用教程 个人原创博客:点击浏览模块详细信息: 工作电压:DC 3.3V~5V 工作电流:尽量选择1A以上电源供电 工作温度:-10℃~50℃ 安装孔

HAL库串口中断

一,配置串口初始化 void MX_USART1_UART_Init(void) {huart1.Instance USART1;huart1.Init.BaudRate 115200;huart1.Init.WordLen

拉绳位移传感器在接线时需要注意哪几点?

拉绳位移传感器在接线时需要注意哪几点? 1、拉绳位移传感器在接线时务必确认在电源关闭的情况下进行接线,接线应采用锡焊工艺,各引脚应焊接牢固,避免虚焊情况发生。焊接各引脚时应严格按照传感器厂