日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

NBIOT 移远BC28模块+stm32开发板例程、教程(打通TCP、COAP协议)

發布時間:2025/6/15 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 NBIOT 移远BC28模块+stm32开发板例程、教程(打通TCP、COAP协议) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
為了開發者能夠快速入門BC28的開發,加快開發者的項目進度,開發出此款針對BC28的stm32開發板和完善的發送網絡數據的示例程序(TCP協議、COAP協議),程序流程邏輯清楚,注釋完善,上手就可以玩轉開發自己的BC28應用程序。 MUC使用STM32L051C8T6型號。這款型號小巧靈活,特別適合用作為產品開發的型號,價格相對偏低同時又可以滿足產品開發需求。我們的板子上使用stm32的低功耗串口(DMA傳輸)和BC28通信,有32.768kHz的RTC外部晶振,同時有一些常見的傳感器和蜂鳴器、LED指示燈可以提示程序運行狀態。預留出一路串口和很多IO口作為開發者擴展應用。使用SWD下載接口,支持STlink、Jlink下載調試工具。 大白為開發者提供680mA的可充電鋰電池,電池上自帶充電和短路保護電路,同時stm32板子上已經做好了電池的充放電管理程序。 1、供電說明:
在接入電池后,系統不會自動開機,需要短按key1(S1)按鍵才會開機。
在不接入電池時,可以直接用stm32板的MicroUSB線供電,插入MicroUSB線后,系統會自動上電開機。
2、開關機邏輯:
??開機:短按key1(S1)按鍵,系統會開機,蜂鳴器會響0.3s,5個LED燈全亮0.3s,隨后系統運行指示燈LED1以1Hz的頻率閃爍
??關機:長按key1(S1)按鍵1s以上,蜂鳴器會響1s左右,蜂鳴器鳴響結束后松開key1(S1)按鍵,系統會自動關機
3、電池管理任務:
??充電:充電的時候電量指示燈LED5會1s閃爍一次,充滿電后LED5常亮并且蜂鳴器鳴響5次提示
??放電:放電的時候
?????? 電池電量 >= 10% : LED5熄滅
??? 7% <= 電池電量 < 10%? : LED5以5Hz頻率閃爍,并且蜂鳴器以5Hz頻率報警
?????? 電池電量 < 7%?? : 蜂鳴器響1s后自動關機
4、傳感器:
?光敏:當g_lightValue > 700時(光線越暗g_lightValue數值越大),蜂鳴器響
?溫度:當溫度值g_Sht20Temp > 31攝氏度時(g_Sht20Temp的數值就是表示實際的溫度),蜂鳴器響
?濕度:當濕度值g_Sht20RH > 70時(濕度越大g_Sht20RH的數值就越大),蜂鳴器響
5、按鍵和燈接口:
?key4(S4)按鍵是MCU的復位按鍵。
?key1(S1)、key2(S2)、key3(S3)都可以作為MCU的按鍵輸入接口來使用
?當key2(S2)、key3(S3)不作為MCU的按鍵接口使用時,可當作普通的IO口來使用
?
?LED5作為電池電量和充電相關的指示燈,請勿用這個燈作為其他狀態的指示
?LED1、LED2、LED3、LED4用戶可以用來自定義狀態指示燈。
?當LED1、LED2、LED3、LED4不作為MCU的LED燈接口來使用時,可以當作普通的IO口來使用
6、TCP網絡連接:
?本例程提供的是:使用AT指令,讓BC28通過TCP協議連接大白的測試服務器,發送數據,
?服務器收到后返回發送出去的數據。
?網絡傳輸數據操作步驟:
?1、
BC28核心板插入NB物聯網卡,核心板插入STM32板底座。
?2、插入STM32板的MicroUSB線,電腦打開串口助手,選擇這個USB的串口號和波特率(115200bps),
?打開此串口,這個串口可以看到單片機向BC28核心板發送的數據和核心板返回的數據。
?3、系統開機后,短按一下key1(S1)按鍵,
??程序會自動初始化BC28模塊,并且自動進行以下流程的操作:
??(1)、讀取sim卡信息。?
????命令:AT+CIMI
??(2)、查看網絡附著狀態,如果沒有網絡信號,會每秒鐘自動查看網絡狀態,連續查看十次。
????命令:AT+CGATT?
??(3)、如果入網成功,下一步會自動查看信號強度。
????命令:AT+CSQ
??(4)、查看信號質量沒問題后,開始創建TCP Socket。
????命令:AT+NSOCR=STREAM,6,56000,1
??(5)、連接大白自己搭建的TCP服務器。
????命令:AT+NSOCO=1,123.206.108.227,9099
??(6)、發送TCP數據。? ???
????命令:AT+NSOSD=1,9,4461426169494F5400? ("DaBaiIOT"字符串的十六進制顯示為:4461426169494F5400)
??(7)、讀取發送的數據。
????命令:AT+NSORF=1,9
??(8)、關閉TCP連接。
???? 命令:AT+NSOCL=1 7、基于coap協議的網絡連接: 我們的Coap示例連接的是華為IOT平臺。 小貼士:華為的IOP平臺連接之前,需要將移遠模塊屏蔽罩上印的IMEI號綁定到華為的IOT平臺,平臺才會接收模塊發過來的數據。
????我們默認發貨都是幫親們綁定好的,并且測試沒問題的。
????
????1、在DaBai_rtc.c文件中的HAL_RTC_AlarmAEventCallback函數里設置了每隔10分鐘發送一次coap數據到IOT平臺。
????數據格式為:
?數據???? m_batVol? m_temp??? mRH?????? m_light?? m_longitude?? m_latitude?? g_USB_insert? Reserve
?數據類型? Uint8_t?? Int16_t?? Int16_t?? Uint16_t? Uint32_t????? Uint32_t???? Uint8_t?????? Uint8_t
?
?系統開機后,會自動建立coap的連接,然后每隔10分鐘上傳一次板子上的傳感器數據。
?(注意:剛開機的時候信號不是很穩定,需要等待幾十秒后才可能有信號,注冊到網絡。) 數據是上傳到華為的IOT平臺上的,大白在華為的IOT平臺上獲取到板子上的傳感器數據后,做了一個上位機軟件將傳感器信息描繪成實時變化的曲線。 下圖為stm32的microUSB接口上實時顯示單片機的串口操作和BC28的串口回復: 電池電量和溫度的實時變化曲線:

開發板詳細介紹點擊打開鏈接 下面是大白開發的主程序流程: [cpp]?view plain?copy
  • <code?class="language-cpp">int?main(void)??
  • {??
  • ????static??uint32_t?start_tick?=?0;??
  • ????static?uint32_t?cur_tick?=?0;??
  • ???
  • ??HAL_Init();??
  • ??SystemClock_Config();??
  • ????MX_TIM_Init();??
  • ????MX_GPIO_Init();??
  • ????MX_I2C2_Init();??
  • ????MX_ADC_Init();??
  • ????MX_USART1_UART_Init();??
  • ????MX_LPUART1_UART_Init();??
  • ????MX_RTC_Init();??
  • ??????
  • ????NBModule_open(&nb_config);??
  • ??//APP_STATE?=?NB_NONE;??
  • ????APP_STATE?=?NB_CoAP_SEVER;??
  • ????start_tick?=?HAL_GetTick();??
  • ????while((HAL_GetTick()-?start_tick)?<300)??
  • ????{??
  • ????????//?power?on?beep?remind??
  • ????}??
  • ??????/*?Configure?RTC?Alarm?*/??
  • ??RTC_AlarmConfig();??
  • ??????
  • ????LED1_OFF;??
  • ????LED2_OFF;??
  • ????LED3_OFF;??
  • ????LED4_OFF;??
  • ????CHG_LED5_OFF;??
  • ????printf("\r\nDaBai?Init?OK?\r\n");??
  • ??????
  • ??/*?Infinite?loop?*/??
  • ??while?(1)??
  • ??{???
  • ????????HAL_UART_Poll();??
  • ????????NBModule_Main(&nb_config);??
  • ????MX_TimerPoll();??
  • ??????????
  • ????????if(g_TaskTime10ms?>?TASKTIME_10MS)??
  • ????????{??
  • ????????????g_TaskTime10ms?=?0;??
  • ????????????DaBai_10msTask();??
  • ????????}??
  • ????????if(g_TaskTime100ms?>?TASKTIME_100MS)??
  • ????????{??
  • ????????????g_TaskTime100ms?=?0;??
  • ????????????DaBai_100msTask();??
  • ????????}??
  • ??????????
  • ????????if(g_TaskTime500ms?>?TASKTIME_500MS)??
  • ????????{??
  • ????????????g_TaskTime500ms?=?0;??
  • ????????????g_BeepFreq?=?0;??
  • ????????????DaBai_500msTask();??
  • ????????}??
  • ????????if(g_TaskTime1000ms?>?TASKTIME_1000MS)??
  • ????????{??
  • ????????????g_TaskTime1000ms?=?0;??
  • ????????????DaBai_1000msTask();??
  • ?????????????//RTC_TimeShow(aShowTime);??
  • ????????}??
  • ????????if(g_TaskTime1min?>?TASKTIME_1MIN)??
  • ????????{??
  • ????????????g_TaskTime1min?=?0;??
  • ????????????//DaBai_1MinTask();??
  • ????????}??
  • ??????????
  • ????????if(g_TaskTime10min?>?TASKTIME_10MIN)??
  • ????????{??
  • ????????????g_TaskTime10min?=?0;??
  • ????????????//DaBai_10MinTask();??
  • ????????}??
  • ????????if(g_RTCAlarmFlag?==?1)??
  • ????????{??
  • ????????????g_RTCAlarmFlag?=?0;??
  • ????????????APP_STATE?=?NB_CoAP_ST;??
  • ????????}??
  • ????????switch(APP_STATE)??
  • ????{??
  • ????case?NB_NONE:??
  • ??????{??
  • ??????????
  • ??????}??
  • ??????break;??
  • ????case?NB_INIT:??
  • ??????{??
  • ????????printf("\r\n<----BC28?Init---->\r\n");??
  • ????????NBModule_Init(&nb_config);??
  • ????????APP_STATE?=?NB_END;??
  • ??????}??
  • ??????break;??
  • ????case?NB_SIGN:??
  • ??????{??
  • ?????????printf("\r\n<----BC28?get?signal---->\r\n");??
  • ?????????NBModule_Sign(&nb_config);??
  • ?????????APP_STATE?=?NB_END;??
  • ??????}??
  • ??????break;??
  • ????case?NB_MODULE:??
  • ??????{??
  • ????????printf("\r\n<----Module?info?---->\r\n");??
  • ????????NBModule_Info(&nb_config);??
  • ????????APP_STATE?=?NB_END;??
  • ??????}??
  • ??????break;??
  • ????case?NB_TCP_CR:??
  • ??????{??
  • ????????printf("\r\n<----Create?tcp?---->\r\n");??
  • ????????NBModule_CreateTCP(&nb_config);??
  • ????????APP_STATE?=?NB_END;??
  • ??????}??
  • ??????break;??
  • ????case?NB_TCP_CL:??
  • ??????{??
  • ????????printf("\r\n<----Close?tcp?---->\r\n");??
  • ????????NBModule_CloseTCP(&nb_config);??
  • ????????APP_STATE?=?NB_END;??
  • ??????}??
  • ??????break;??
  • ????case?NB_TCP_CNT:??
  • ??????{??
  • ????????printf("\r\n<----?Connect?tcp?---->\r\n");??
  • ????????NBModule_ConnectTcp(&nb_config);??
  • ??????????
  • ????????APP_STATE?=?NB_END;??
  • ??????}??
  • ??????break;??
  • ????????case?NB_TCP_ST:??
  • ??????{??
  • ????????printf("\r\n<----?Send?tcp?---->\r\n");??
  • ????????char*?userPacket?=?"DaBaiIOT";??
  • ????????NBModule_SendTcpData(&nb_config,sizeof("DaBaiIOT"),userPacket);??
  • ??????????
  • ????????APP_STATE?=?NB_END;??
  • ??????}??
  • ??????break;??
  • ????case?NB_TCP_RE:??
  • ??????{??
  • ????????//do?nothing??
  • ????????APP_STATE?=?NB_END;???
  • ??????}??
  • ??????break;??
  • ????????case?NB_CoAP_SEVER:??
  • ????????????{??
  • ????????????????printf("\r\n<----?CoAP?Server?set?---->\r\n");??
  • ????????????????NBModule_CoAPServer(&nb_config,1,NULL);??
  • ????????????????APP_STATE?=?NB_END;??
  • ????????????}??
  • ????????break;??
  • ????case?NB_CoAP_ST:??
  • ??????{??
  • ????????????????uint8_t??m_batVol;??
  • ????????????????int16_t?m_temp,m_RH;??
  • ????????????????uint16_t?m_light;??
  • ????????????????uint32_t?m_longitude,m_latitude;??
  • ??????????????????
  • ????????????????m_batVol?=?g_BatVoltage;??
  • ????????????????m_temp?=?(int16_t)g_Sht20Temp;??
  • ????????????????m_RH???=?(int16_t)g_Sht20RH;??
  • ????????????????m_light?=?g_lightValue;??
  • ????????????????m_longitude?=?(uint32_t)g_longitude*1000000;??
  • ????????????????m_latitude??=?(uint32_t)g_latitude*1000000;???
  • ??????????????????
  • //??????????????m_batVol?=?1;??
  • //??????????????m_temp?=?-2;??
  • //??????????????m_RH???=?0x03;??
  • //??????????????m_light?=?0x04;??
  • //??????????????m_longitude?=?0x05;??
  • //??????????????m_latitude??=?0x06;??
  • ??????????????????
  • ????????????????userPacket[0]?=?m_batVol;??
  • ????????????????Fill_int16_To_int8(m_temp,&userPacket[1],&userPacket[2]);??
  • ????????????????Fill_int16_To_int8(m_RH,&userPacket[3],&userPacket[4]);??
  • ????????????????Fill_u16_To_u8(m_light,&userPacket[5],&userPacket[6]);??
  • ????????????????Fill_u32_To_u8(m_longitude,&userPacket[7],&userPacket[8],&userPacket[9],&userPacket[10]);??
  • ????????????????Fill_u32_To_u8(m_latitude,&userPacket[11],&userPacket[12],&userPacket[13],&userPacket[14]);???????
  • ????????????????userPacket[15]?=????g_USB_insert;??
  • ??????????????
  • ????????????????bc95_coapSendMsg(&nb_config,sizeof(userPacket),userPacket);??
  • ????????APP_STATE?=?NB_END;??
  • ??????}??
  • ??????break;??
  • ????case?NB_CoAP_RE:??
  • ??????{??
  • ??????????
  • ??????}??
  • ??????break;??
  • ????default:??
  • ??????{??
  • ??????????
  • ??????}??
  • ??????break;??
  • ????}??
  • ??????????
  • ????????SetBeepFreq(g_BeepFreq);??
  • ??
  • ??}??
  • ??????
  • }</code>
  • 總結

    以上是生活随笔為你收集整理的NBIOT 移远BC28模块+stm32开发板例程、教程(打通TCP、COAP协议)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。