文章目錄
- 1 簡介
- 2 NBIOT 簡介
-
- 2.1 NBIOT 的特點
- 2.2 NBIOT 的優點
- 2.3 NBIOT能做什麼
- NBIOT 子產品使用
- 4 實作效果
- 5 STM32 驅動NBIOT子產品
- 6 最後
1 簡介
Hi,大家好,這裡是丹成學長,NBIOT是近幾年不比較火的遠端通信子產品,是物聯網的重要技術,今天學長向大家詳細介紹什麼是NBIOT,NBIOT子產品能做什麼,以及但單片機如何使用NBIOT子產品
單片機與NBIOT通信子產品
大家可用于 課程設計 或 畢業設計
技術解答
畢設幫助:<Q>746876041
2 NBIOT 簡介
基于蜂窩的窄帶物聯網(Narrow Band Internet of Things, NB-IoT)成為萬物網際網路絡的一個重要分支。NB-IoT建構于蜂窩網絡,隻消耗大約180KHz的帶寬,可直接部署于GSM網絡、UMTS網絡或LTE網絡,以降低部署成本、實作平滑更新。
NB-IoT是IoT領域一個新興的技術,支援低功耗裝置在廣域網的蜂窩資料連接配接,也被叫作低功耗廣域網(LPWAN)。NB-IoT支援待機時間長、對網絡連接配接要求較高裝置的高效連接配接。據說NB-IoT裝置電池壽命可以提高至至少10年,同時還能提供非常全面的室内蜂窩資料連接配接覆寫。
重點:NBIOT是一種通信技術,是用于通信的!單片機通過該子產品可以與外接網際網路進行資料互動!
2.1 NBIOT 的特點
- 頻譜窄:200kHz;
- 終端發射窄帶信号提升了信号的功率譜密度,提升了信号的覆寫增益,并且提升了頻譜利用效率;
- 相同的資料包重複傳輸也可獲得更好的覆寫增益;
- 另外該技術降低了終端的激活比,降低了終端基帶的複雜度。
- NB-IOT四大能力:廣覆寫,海量連接配接,更低功耗,更低晶片成本。
- NB-IOT基于現有蜂窩網絡的技術,可以通過更新現網來快速支援行業市場需求,成為GUL網絡上的第四種模式。
2.2 NBIOT 的優點
- NB-IOT與其他的LPWA技術LoRa,Sigfox的比較優勢
- 可以重用現網資源,支援廣覆寫
- 标準化技術,支援切換移動性好。産業鍊豐富
- 20dB+增益(vs GSM)
- 授權頻譜,抗幹擾性好
2.3 NBIOT能做什麼
- 智能水表
- 智能停車
- 寵物智能跟蹤
- 智能自行車
- 智能煙霧檢測器
- 智能馬桶
- 智能售貨機
- 等等等等
NBIOT 子產品使用
這裡以市面上常見的NB260子產品為例:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiNx8FesU2cfdGLwczX0xiRGZkRGZ0Xy9GbvNGLwQzXlpXazxSP4U1UFJVMVRXTFJVQClGVF5UMR9Fd4VGdsATNfd3bkFGazxycykFaKdkYzZUbapXNXlleSdVY2pESa9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnLlV2MhhzN4UjMlljN5MjZ5YzMkRDOxMGMjF2YwUTN1Y2Lc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
NB260是基于移遠NB-IOT子產品:BC26的小系統闆,闆載了IPEX射頻天線座,5V轉3.3V LDO穩壓電源,MicroSIM卡座,ESD防護電路,開機電路等,即插即用。
NB260小系統闆采用2.54标準間距排針,引出BC26子產品的全部可用GPIO口,整闆尺寸僅 25mm*33.02mm,便于嵌入到客戶産品中。
支援的頻段
引腳信号
NB260引腳排列如下圖所示。
CON1(P1)右側一列信号為:GND,VIN,TXD,RXD,PEN,RST,EINT,NRI(NRI電壓域1.8V,若用作喚醒MCU,可以簡單串聯1K電阻然後上拉後與MCU的GPIO口相連。),該列信号還與NB101,NB200相容,可以互相替換。
SIM卡槽
NB260采用自彈式MicroSIM卡槽,注意SIM卡插入方向為:卡缺口朝外。
工作模式
4 實作效果
(以下為學長作品)
stm32 + NBIOT子產品建構的家庭煙霧報警系統(智能家居的一部分)
NBIOT指紋簽到系統:
5 STM32 驅動NBIOT子產品
#include"nbiot.h"
/***************************************************************************************
函數名:send_NB_IoT
功 能:發送資料到NB子產品
參 數:cmd 要發送的資料或者指令
傳回值:
例 子:
說 明:
作 者:丹成學長,q746876041
****************************************************************************************/
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); //清空數組
作 者:丹成學長,q746876041
****************************************************************************************/
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
功 能:自動附着網絡
參 數:
傳回值:
例 子:
說 明:
作 者:丹成學長,q746876041
****************************************************************************************/
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連接配接
參 數:
傳回值:
例 子:
說 明:
作 者:丹成學長,q746876041
****************************************************************************************/
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初始化
參 數:
傳回值:
例 子:
說 明:
作 者:丹成學長,q746876041
****************************************************************************************/
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");
}
6 最後
技術解答
畢設幫助:<Q>746876041
單片機畢設項目大全:
https://blog.csdn.net/huawei123444/article/details/119822845