目前这个NB-IoT在国内仍是比较火的,最近恰好使用了一款NB-IoT模块。将驱动程序贡献给你们。但愿能对用到的朋友有点帮助。web
本次采用的是有人物联网公司的WHNB75模块。(支持电信网络)WH-NB75 是基于 WH-NB73 模块开发出来的 DIP 封装的模块产品,该产品可以更方便的嵌入到客户产品中。WH-NB75 是咱们 NB75 模块系列的一个总称,针对不一样运营商网络有不一样的模块型号对应。请在选购模块时注意选择支持当地运营商的模块。稳恒正在基于海思 Hi2115 芯片打造支持全频段的 NB 模组 WH-NB71,到时候能够一款模块支持多家运营商的网络。下表为不一样型号产品对应的运营商。
详细NB-IoT介绍能够看一下我写的这边介绍:初识NB-IoT(NB-IoT背景,简介,标准化过程,技术优点,与其余无线技术对比)数组
相对来讲经过AT命令控制仍是比较简单的。网络
#include"nbiot.h" /*************************************************************************************** 函数名:send_NB_IoT 功 能:发送数据到NB模块 参 数:cmd 要发送的数据或者命令 返回值: 例 子: 说 明: 做 者:贺远 日 期:2019.05.04 ****************************************************************************************/ void send_NB_IoT(u8 *cmd) { while(*cmd!='\0') { USART_SendData(USART2,*cmd++); while(USART_GetFlagStatus(USART2,USART_FLAG_TXE)==Bit_RESET); //发送数据结束 } } /*************************************************************************************** 函数名:NB_IoT_ack_chack 功 能://检查NB模块应答是否符合预期 参 数: 返回值: 例 子: 说 明: memset(a, 0, sizeof a); //清空数组 做 者:贺远 日 期:2019.05.04 ****************************************************************************************/ u8 NB_IoT_ack_chack(u8 *str) { delay_ms(10); if(USART2_RX_STA!=0) { USART2_RX_STA=0; if(strstr((const char*)USART2_RX_BUF,(const char*)str))//符合预期 { memset(USART2_RX_BUF,0, sizeof USART2_RX_BUF); return 0; } else //不符合预期 { memset(USART2_RX_BUF,0, sizeof USART2_RX_BUF); return 1; } } else { memset(USART2_RX_BUF,0, sizeof USART2_RX_BUF); //清空数组 return 1; } } u8 NB_IotConect() { u8 x=1; cmd1:send_NB_IoT("AT\r\n");// 指令测试 if(!NB_IoT_ack_chack("OK")) x=0; else goto cmd1; return x; } /*************************************************************************************** 函数名:NB_IoT_ZDFW 功 能:自动附着网络 参 数: 返回值: 例 子: 说 明: 做 者:贺远 日 期:2019.05.04 ****************************************************************************************/ u8 NB_IoT_ZDFW() { u8 x=0; cmd1: send_NB_IoT("AT+NCONFIG=AUTOCONNECT,TRUE\r\n") ; if(!NB_IoT_ack_chack("OK")) x++ ; else goto cmd1; cmd2: send_NB_IoT("AT+CFUN=1\r\n") ; if(!NB_IoT_ack_chack("OK")) x++ ; else goto cmd2; cmd3: send_NB_IoT("AT+NRB\r\n") ; if(!NB_IoT_ack_chack("REBOOTING")) x++ ; else goto cmd3; //确认自动附网 cmd4: send_NB_IoT("AT+NBAND?\r\n"); if(!NB_IoT_ack_chack("+NBAND:5")) x++ ; else goto cmd4; cmd5: send_NB_IoT("AT+CFUN?\r\n"); if(!NB_IoT_ack_chack("+CFUN:1")) x++ ; else goto cmd5; cmd6: send_NB_IoT("AT+CIMI\r\n"); if(!NB_IoT_ack_chack("460113007651563")) x++ ; else goto cmd6; cmd7:send_NB_IoT("AT+CSQ\r\n"); //确认信号质量第一个参数应该 1-30 之间 delay_ms(10); if(USART2_RX_BUF[7]>'0'&&USART2_RX_BUF[7]<'3') { memset(USART2_RX_BUF,0, sizeof USART2_RX_BUF); USART2_RX_STA=0; x++ ; } else { memset(USART2_RX_BUF,0, sizeof USART2_RX_BUF); USART2_RX_STA=0; goto cmd7; } cmd8: send_NB_IoT("AT+CGATT?\r\n"); if(!NB_IoT_ack_chack("+CGATT:1")) x++ ; else goto cmd8; cmd9:send_NB_IoT("AT+CEREG?\r\n"); if(!NB_IoT_ack_chack("+CEREG:0,1")) x++ ; else goto cmd9; cmd10:send_NB_IoT("AT+CSCON?\r\n"); if(!NB_IoT_ack_chack("+CSCON:0")) x++ ; else goto cmd10; cmd11:send_NB_IoT("AT+CGPADDR\r\n"); if(!NB_IoT_ack_chack("+CGPADDR:0,10.")) x++ ; else goto cmd11; if(x==11) return 0;//自动附着网络成功 else return 1;//自动附网失败 } /*************************************************************************************** 函数名:NB_IoT_conect_COAP 功 能:COAP链接 参 数: 返回值: 例 子: 说 明: 做 者:贺远 日 期:2019.05.04 ****************************************************************************************/ u8 NB_IoT_conect_COAP() { u8 x=0; cmd1: send_NB_IoT("AT+CGSN=1\r\n") ; if(!NB_IoT_ack_chack("+CGSN:356566078248721")) x++ ; else goto cmd1; cmd2: send_NB_IoT("AT+NCDP=180.101.147.115,5683\r\n") ; if(!NB_IoT_ack_chack("OK")) x++ ; else goto cmd2; cmd3: send_NB_IoT("AT+NRB\r\n") ; if(!NB_IoT_ack_chack("REBOOTING")) x++ ; else goto cmd3; cmd4: send_NB_IoT("AT+NCDP?\r\n"); if(!NB_IoT_ack_chack("+NCDP:180.101.147.115,5683")) x++ ; else goto cmd4; cmd5: send_NB_IoT("AT+NSMI=1\r\n"); if(!NB_IoT_ack_chack("OK")) x++ ; else goto cmd5; cmd6: send_NB_IoT("AT+NNMI=2\r\n"); if(!NB_IoT_ack_chack("OK")) x++ ; else goto cmd6; cmd7: send_NB_IoT("AT+NMGS=3,000102\r\n"); if(!NB_IoT_ack_chack("OK")) x++ ; else goto cmd7; if(x==7) return 0;//COAP链接成功 else return 1; //COAP链接失败 } /*************************************************************************************** 函数名:NBIoTInit 功 能:NBIoT初始化 参 数: 返回值: 例 子: 说 明: 做 者:贺远 日 期:2019.05.04 ****************************************************************************************/ void NBIoTInit() { NB_IotConect(); NB_IoT_ZDFW(); NB_IoT_conect_COAP(); // send_NB_IoT("AT+NMGS=10,53544d33325f4e423735\r\n"); //发送设备名字:STM32_NB75 // POINT_COLOR=BLUE; //设置字体为蓝色 // LCD_ShowString(50,80 ,250,16,16,"NBIoT conecting..."); // if (!NB_IotConect()) LCD_ShowString(50,80 ,250,16,16,"NB_IotConect success!"); // else LCD_ShowString(50,80 ,250,16,16,"NB_IotConect error!!"); // LCD_ShowString(50,100 ,250,16,16,"NBIoT Net conecting..."); // if(!NB_IoT_ZDFW()) LCD_ShowString(50,100,250,16,16,"NBIoT ZDFW success! "); //自动附着网络 // else LCD_ShowString(50,100,250,16,16,"NBIoT ZDFW error! "); // LCD_ShowString(50,120 ,250,16,16,"NBIoT COAP conecting..."); // if(!NB_IoT_conect_COAP()) LCD_ShowString(50,120,250,16,16,"NBIoT COAP success! ");//COAP链接 // else LCD_ShowString(50,120,250,16,16,"NBIoT COAP error! "); // send_NB_IoT("AT+NMGS=2,0005\r\n"); }