




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、无锡谷雨电子NB-IOT 开发板2018/1/31目录.2更改简介3硬件连接4按键触发 NB 网络附着4代码介绍4实验现象12按键触发 UDP 协议数据14代码介绍16实验现象19按键触发 CoAP 协议数据25代码介绍26实验现象29附录 1:.32第 1 页 共 32 页更改第 2 页 共 32 页版本日期描述V1.020180227文档初始版本简介NB-EK-L476 是谷雨物联网推出的NB-IOT 开发板,基于简单易用的STM32L476,板载GPS 模块,温湿度传感器,环境光传感器等诸多实用的硬件外设,可帮助客户快速设计出基于NB 网络的产品,抢先占领市场。尤其现阶段,NB-IOT
2、是个日新月异的领域,所以分秒必争!本文是 NB-EK-L476 开发板的硬件说明书开发指导。有关开发板硬件的说明,请阅读NB-EK-L476有关板载的 NB 小系统模块 NB101 的信息,请阅读NB10 x 使用说明书。第 3 页共 32 页硬件连接具体的硬件连接详细说明,开发者可以查看根目录下谷雨 NB 开发板 NB-EK-L476 硬件说明书-V0.1.PDF。谷雨 NB10 x 模块说细说明,开发者可以查看根目录下谷雨 NB 小系统 NB10 x 使用说明书-V1.3.pdf1 按键触发 NB 网络附着从本节开始,详细说明 NB 模块操作,让它实现网络信息传输。在 NB_EK_L476
3、评估板上,使用的NB-IOT 组件是谷雨公司(自己的)的 NB10 x 组件。开发者可以查看资料根目录下谷雨 NB 小系统 NB10 x 使用说明书-V1.3.pdf详细了解 NB10 x 模块硬件。注:本节将不再详细说明 IAR 与 KEIL 工程的操作,如果开发者不清楚相关的操流程,可以查看谷雨 NB 开发板 NB-EK-L476 基础例程说明.PDF第一小节LED 点灯实验中关于 IAR 或 KEIL 的编程,编译,调试,配置仿真器等操作。1.1 代码介绍NB10 x 模块操作接口是串口,所以所有与 NB 有关的操作都是基于串口的操作。在下面代码分析部分,将不再描述与串口有关的内容。根据
4、NB10 x 模块操作 AT 指令特点,可以将其分成不同过程,每个过程抽象为用户的函数接口。这样开发者只要关注自己的操作顺序,不用关心底层的 AT 指令。但是有些 AT 指令或状态需要时间,为了提高程序的执行效率,为此应用层需要转入一些回调函数。在开发 NB 操作驱动时,采用异步方式。第 4 页 共 32 页/NB-IOT 相关回调函数配置externNB_MsgreportCb(msg_types_t,char*);/ 串口操作函数指针com_fxnTable com_fxn =.openFxn = HAL_UARTDMA_Init,.sendFxn = HAL_UART_Write,.cl
5、oseFxn = HAL_UART_Close;/ 时间函数指针,time_fxnTable time_fxn =上述的结构体,是开发者把自己实现的功能函数指针与接收 NB 组件消息的回调函数指针传入到NB组件内,以便驱动在运行期间调用相应的功能函数。例如,串口发送函数,超时重传,出错重传等。为了让开发者,方便使用NB 异步驱动。NB 操作归纳为几种操作流程,如下。在不同的分支下,调用NB 接口函数执行相应的操作。例如 main 函数中代码。第 5 页 共 32 页main(void).typedef enumNB_NONE,NB_INIT,/ 初始化操作NB_MODULE,/ 获取 NB 模
6、块厂商及固件,频段等信息NB_SIGN,NB_UDP_CR,/ 创建 UDPNB_UDP_CL,/ 关闭 UDPNB_UDP_ST,/ 利用已经创建的 UDP 发送数据 NB_UDP_RE,/ UDP 接收信息 NB_CoAP_SEVER,/ CoAP地址设置与获取 NB_CoAP_ST, / 利用 CoAP 发送消息 NB_CoAP_RE, / CoAP 返回信息NB_RESET,/ 复位 NB NB_ENDNB_SE_e;.initTimerFxn = MX_TIM_Set,.startTimerFxn = MX_TIM_Start,.stopTimerFxn = MX_TIM_Stop;
7、/ 填充 nb 组件结构hw_object_t HWAtrrs_object =.baudrate = 9600,.uart_fxnTable = &com_fxn,.timer_fxnTable = &time_fxn;NB_Config nb_config =.fxnTablePtr = NULL,.object = (void*)&HWAtrrs_object,.AppReceCB = NB_MsgreportCb, /应用层回调函数.log = NULL;第 6 页 共 32 页.dispHandle = Display_open(0,NULL); /打开 LCD/设置 LCD 前景色
8、Display_control(dispHandle,CMD_FRONT_COLOR,&fontColor);/显示测试信息Display_pr0(dispHandle,0,2,Ghostyu NB); Display_pr0(dispHandle,1,0,Net:OFF); Display_pr0(dispHandle,1,8,-dbm);Display_pr0(dispHandle,LCD_Pr(),0,S1 to Init NB);/按键回调函数KEY_RegisterCb(AppKey_cb);/打开 NB NBModule_open(&nb_config);/复位 NB 操作状态变量
9、APP_SE = NB_NONE;while (1)/* USER CODE END WHILE */* USER CODE BEGIN 3 */HAL_UART_Poll(); KEY_Poll(); HAL_Led_poll(); NBModule_Main(&nb_config); MX_Timoll(); switch(APP_SE)case NB_NONE:break;case NB_INIT:/执行 NB10 x 初化操作及附着网络prf(rnrn);Display_pr0(dispHandle,LCD_Pr(),0,Init start. );NBModule_Init(&nb_
10、config); APP_SE = NB_END;第 7 页 共 32 页break;case NB_SIGN:/获取网络信号强度prf(rnrn);NBModule_Sign(&nb_config); APP_SE = NB_END;break;case NB_MODULE: /获取 NB 模块器件信息prf(rnrn);Display_pr0(dispHandle,LCD_Pr(),0,Module info. );NBModule_Info(&nb_config); APP_SE = NB_END;break;case NB_UDP_CR:/do nothingAPP_SE = NB_E
11、ND;break;case NB_UDP_CL:/do nothingAPP_SE = NB_END;break;case NB_UDP_ST:/do nothingAPP_SE = NB_END;break;case NB_UDP_RE:/do nothingAPP_SE = NB_END;break; default:在程序中引入状态变量,根据状态变量的值不同,执行不同的操作,类似一个状态机结构。而这种结构非常适合异步事件结构。开发者只要通过在按健回调函数中更改状态变量的值,便可以控制程序执行的流程。在操作 NB 模块过程中,会有一些信息通过回调函数上报。如果开发者对信息感,则可以回调函数
12、中进行保存。但在本例程中只是执行简单的打印和显示操作。在NB 驱动中,每个流程执行完成后,都会将结果通过回调函数上报。如果成功执行,则上报英文大写字符 “S”;如果失败,则是英文大写字符“F”。第 8 页 共 32 页/*/ fn : AppKey_cb/ brief : 处理按键事件/ param : key - 按钮按下标识/ return : nonevoid AppKey_cb(u8_t key)/闪烁 LED,增加交互性 HAL_LED_SET(LED_INDEX_2,1);if(key & KEY_UP)prf(key_up pressrn);APP_SE = NB_INIT;/按
13、下 S1,执行 NB 初始化操作。if(key & KEY_LEFT)prf(key_left pressrn);APP_SE = NB_MODULE;/按下 S2,执行 NB器件信息if(key & KEY_DOWN)prf(key_down pressrn);if(key & KEY_RIGHT)prf(key_right pressrn);break;/* USER CODE END 3 */第 9 页 共 32 页/*/ fn : NB_MsgreportCb/ brief : NB 模块消息上报回调/ param :/ return : noneNB_MsgreportCb(msg_
14、types_t types,len,char* msg)switch(types)case MSG_INIT:/ 打印初始化操作结果prf(rnINIT=%srn,msg);Display_pr1(dispHandle,LCD_Pr(),0,Init=%s,msg); if(*msg = S)HAL_LED_SET(LED_INDEX_1,0);Display_pr0(dispHandle,1,0,NET=ON); APP_SE = NB_SIGN;Display_pr0(dispHandle,LCD_Pr(),0,S2 to get info);break;case MSG_IMSI:/打印
15、 IMSI 码prf(rnIMSI=%srn,msg);Display_pr0(dispHandle,LCD_Pr(),0,msg);break;case MSG_REG:/打印设备网络情况Display_pr1(dispHandle,1,0,NET=%s,(*msg) = 1 ?ON:0FF);break;case MSG_SIGN:/打印网络信号强度Display_pr1(dispHandle,1,8,%sdbm,msg);第 10 页 共 32 页break;case MSG_MODULE_INFO:/ 打印获取 NB 模块信息结果,S 或 F prf(rnMinfo=%srn,msg)
16、;Display_pr1(dispHandle,LCD_Pr(),0,Info=%s,msg);break;case MSG_MID:/ 设备 IDprf(rnMID=%srn,msg);Display_pr0(dispHandle,LCD_Pr(),0,msg);break;case MSG_MM:/ 型号prf(rnM=%srn,msg);Display_pr0(dispHandle,LCD_Pr(),0,msg);break;case MSG_MREV:/ 固件版本prf(rnREV=%srn,msg);Display_pr0(dispHandle,LCD_Pr(),0,msg);bre
17、ak;case MSG_BAND:/ 频带prf(rnFreq=%srn,msg);Display_pr1(dispHandle,LCD_Pr(),0,Freq=%s,msg);break;case MSG_IMEI:/ 设备 IMEI 码prf(rnIMEI=%srn,msg);Display_pr0(dispHandle,LCD_Pr(),0,msg);break;case MSG_UDP_CREATE:第 11 页 共 32 页prf(rnUDP_CR=%srn,msg);break;case MSG_UDP_CLOSE:prf(rnUDP_CL=%srn,msg);break;case
18、 MSG_UDP_SEND:prf(rnUDP_SEND=%srn,msg);break;case MSG_UDP_RECE:prf(rnUDP_RECE=%srn,msg);break;case MSG_COAP:prf(rnCOAP=%srn,msg);break;case MSG_COAP_SEND:prf(rnCOAP_SENT=%srn,msg);break;case MSG_COAP_RECE:prf(rnCOAP_RECE=%srn,msg);break; default :break;return 0;1.2 实验现象开发者可以利用 IDE(IAR 或 KEIL)对工程代码进行
19、编译,。接下来将 NB_EK_L476评估板的 SW3 拔到 MCU 一侧,SW2 拔到 MCU 一侧,SW1 拔到 USB 一侧。最后记得将电信卡安装在NB10 x 的座中(注意方向)。通过 USB 线,连接电脑与NB_EK_L476 MiniUSB 接口,打开电脑上的串口调试助手。波特率为 115200,8,N,1。运行程序后,LCD 会打印相应的信息,如下图所示。LCD 显示消息当开发者按下 S1 按钮时,程序将执行 NB 网络初始化,及附着 NB 网络。并在串口助手中打印 AT 指令执行情况,在 LCD 上显示结果。如下图所示。如果发现 NB 操作过程老是失败可以通过串口助手查好具体指
20、令执行情况,以便定位问题所在。第 12 页 共 32 页在初始化成功之后,可以按下按钮 S2,执行器件信息获取操作。如下图所示。第 13 页 共 32 页2 按键触发 UDP 协议数据本节将在 1 节按键触发 NB 网络附着基础之上,实现 NB 网络 UDP 通信。在 UDP 通信之前,需要做一些准备工作。首先要以 NB 设备的 IMEI 码,在谷雨的云服务上NB 设备。 如 果 开 发 者 不 清 楚 可 以 查 看 谷 雨ht/thread-82-1-1.html,其中有中 的 描 述 , 其 描 述 所 在 地 址 为描述。本例程中,UDP 数据也是对接谷雨云,所以相关的操作与演示一样,
21、需要先发送包,然后再发送数据等。下面详细介绍两种方法获取 NB_EK_L476 评估板上 NB10 x 模块的 IMEI 码。在此之前,需要将 NB_EK_L476 评估板上 SW3 拔到 USB 一侧,SW2 拔到 MCU 一侧,SW1 拔到 DBG 一侧,插上 USB 线连接电脑与 NB_EK_L476。NB Tool 调试工具获取NB Tool 是谷雨公司开发一款调试 NB10 x 模块上位机。双击打开NB Tool,点击 Connect to moduler 按钮。如果没有有效的串口选择,则会弹出串口选择框,开发者只要选择与NB_EK_L476 评估板相连的串口,并点击确定即可。此时只
22、要再一次点击 Connect to moduler 按钮,就会自动对NB10 x 模块进行相应操作。如下图所示。其中红色圈中的信息就是设备的 IMEI 码。第 14 页 共 32 页AT 指令打开电脑上的串口调试助手,选择与NB_EK_L476 评估板相连的串口(默认格式为 9600,8,N,1)。在发送框中输入 AT+CGSN=1,并构选加回车换行。点击发送按钮,串口助手会收到设备的 IMEI 码。如下图所示。通过上述步骤在云上创建好设备后,记得将 SW 开关恢复。即 SW1 拔到 DBG 一侧,SW2拔到 MCU 一侧,SW3 拔到 MCU 一侧。创建好云设备信息如下图所示。第 15 页
23、共 32 页测试演示云设备注:本节将不再详细说明 IAR 与 KEIL 工程的操作,如果开发者不清楚相关的操流程,可以查看谷雨 NB 开发板 NB-EK-L476 基础例程说明.PDF第一小节LED 点灯实验中关于 IAR 或 KEIL 的编程,编译,调试,配置仿真器等操作。2.1 代码介绍例程中代码是在实验 1 的基础上进行修改的。只是在实验 1 的基础上增加了 UDP Socket创建过程,包发送,普通数据发送和接收云下发的数据。所以下面只介绍与实验 1不同地方,其他完全相同。在按键的回调函数中增加了,UDP 相关的状态值的设置。在 S3(KEY_DOWN)分支下,增加判断初始化操作结果,
24、如果成功完成了初始化操作之后,才能进行 UDP Socket 创建。在 S4(KEY_RIGHT)分支中,增加了判断 UDP Socket 创建是否成功,如果 socket 创建成功,则会执行设备在云服务上所发送操作。,即通知云上线了。之后再一次按下 S3,将执行 UDP数第 16 页共 32 页/*/ fn : AppKey_cb/ brief : 处理按键事件/ param : key - 按钮按下标识/ return : nonevoid AppKey_cb(u8_t key)/闪烁 LED,增加交互性 HAL_LED_SET(LED_INDEX_2,1);if(key & KEY_UP
25、)prf(key_up pressrn); APP_SE = NB_INIT;if(key & KEY_LEFT)按钮回调函数中使用的 seq_record 变量,在程序中是用来它用到了三个事件标志。NB10 x 每个操作的结果。第 17 页 共 32 页/NB 模块初始化流程顺序prf(key_left pressrn); if(seq_record & NB_SEQ_INIT)APP_SE = NB_MODULE;if(key & KEY_DOWN)prf(key_down pressrn);if(seq_record & NB_SEQ_INIT) /只有初始化成功,才能进行 UDP 创建
26、工作if(seq_record & NB_SEQ_UDP_CR)if(seq_record & NB_SET_UDP_REG )APP_SE = NB_UDP_ST;elseAPP_SE = NB_UDP_CR;if(key & KEY_RIGHT)prf(key_right pressrn); if(seq_record & NB_SEQ_UDP_CR)/表示 UDP 已经创建好,可以进行数据收发工作APP_SE = NB_UDP_REG;else/给出提示LCD_Pr(S3 Create UDP,NULL);如果在执行初始化操作成功,则会将 seq_record 变量 0 位置 1。如果创
27、建 UDP Socket 成功,则会将 seq_record 变量 1 位置 1。第 18 页 共 32 页case MSG_UDP_CREATE:prf(rnUDP_CR=%srn,msg); LCD_Pr(UDP=%s,msg);if(*msg = S) /S 表示创建成功,F表示失败seq_record |= NB_SEQ_UDP_CR; /初始化成功prf(S4 to register iotxx Cloudrn); LCD_Pr(S4 reg Packet,NULL);elseprf(Please, recreate udprn); LCD_Pr(Recreate UDP,NULL)
28、;break;case MSG_INIT:prf(rnINIT=%srn,msg); LCD_Pr(Init=%s,msg); if(*msg = S)HAL_LED_SET(LED_INDEX_1,0);Display_pr0(dispHandle,1,0,NET=ON); APP_SE = NB_SIGN;seq_record |= NB_SEQ_INIT; /初始化成功LCD_Pr(S2 to get info,NULL); LCD_Pr(S3 to Create UDP,NULL);elseprf(Reinit NB with S1rn); LCD_Pr(Reinit NB.,NULL
29、);break;#define NB_SEQ_INIT0 x01#define NB_SEQ_UDP_CR0X02 #define NB_SET_UDP_REG 0 x042.2 实验现象开发者可以利用 IDE(IAR 或 KEIL)对工程代码进行编译,。接下来将 NB_EK_L476评估板的 SW3 拔到 MCU 一侧,SW2 拔到 MCU 一侧,SW1 拔到 USB 一侧。最后记得将电信卡安装在NB10 x 的座中(注意方向)。通过 USB 线,连接电脑与NB_EK_L476 MiniUSB 接口,打开电脑上的串口调试助手。波特率为 115200,8,N,1。运行程序后,LCD 会打印相应
30、的信息,如下图所示。LCD 显示消息当开发者按下 S1 按钮时,程序将执行 NB 网络初始化,及附着 NB 网络。并在串口助手中打印 AT 指令执行情况,在 LCD 上显示结果。如下图所示。如果发现 NB 操作过程老是失败可以通过串口助手查好具体指令执行情况,以便定位问题所在。第 19 页 共 32 页此时用户按下 S3,将执行创建 UDP socket 操作。串口提示第 20 页 共 32 页当创建 UDP 成功之后,程序提示开发者按下 S4 按钮执行包发送。此时云控制台还没有任务消息提示。如果发送包成功之后,云控制台提示设备上线,如下图所示。此时串口助手与LCD 屏都会打印云服务发送的成功
31、信息。如下图所示。设备上线通知第 21 页 共 32 页串口助手提示LCD 提示此时开发者再次按下 S3 按钮,将会向程序设定的内容发送到云控制台,当云控制台收到数据后,也可以下发数据。NB_EK_L476 评估板上发数据截图所下。第 22 页 共 32 页串口助手提示LCD 提示第 23 页 共 32 页云接收消息云控制台下发数据,串口助手,LCD,云控制台情况截图如下。串口接收云数据第 24 页 共 32 页LCD 显示收到数据云下发数据3 按键触发 CoAP 协议数据在 NB10 x 模块中,支持两种数据方式,一个是上文描述的 UDP 数据,还有一个就是本节将要描述 CoAP 数据。对于
32、使用 NB10 x 模块的上层应用,是不需要明白它是如何实现的,只要使用它提供的接口或 AT 指令进行数据收发就可以了。本节的实验代码也是实验 1的基础之上进行修改的,如果开发者想了解关于代码的内容,可以向前查看一下实验 1章节内容。第 25 页 共 32 页注:本节将不再详细说明 IAR 与 KEIL 工程的操作,如果开发者不清楚相关的操流程,可以查看谷雨 NB 开发板 NB-EK-L476 基础例程说明.PDF第一小节LED 点灯实验中关于 IAR 或 KEIL 的编程,编译,调试,配置仿真器等操作。3.1 代码介绍CoAP 数据发送不需要成功之后,就可以对状态值的修改。发送包(但仍然要在
33、云设备),只要初始化发送数据。所以与实验 2 相比,只是在按钮回调函数中,更改了第 26 页 共 32 页/*/ fn : AppKey_cb/ brief : 处理按键事件/ param : key - 按钮按下标识/ return : nonevoid AppKey_cb(u8_t key)/闪烁 LED,增加交互性 HAL_LED_SET(LED_INDEX_2,1);if(key & KEY_UP)prf(key_up pressrn); APP_SE = NB_INIT;if(key & KEY_LEFT)prf(key_left pressrn); if(seq_record &
34、NB_SEQ_INIT)APP_SE = NB_MODULE;if(key & KEY_DOWN)prf(key_down pressrn);if(seq_record & NB_SEQ_INIT) /只有初始化成功,才能进行 CoAP 工作if(seq_record & NB_SEQ_COAP_SERVER)在 S3(KEY_DOWN)下,会判断 NB10 x 设备是否成功初始化过,如果初始化成功,将会进行 CoAP以绑定谷雨云服务器地址设定。可设的服务器地址与有关。谷雨配置的可(6),电信,。而在 S4(KEY_RIGHT)下,会判断 CoAP 远端服务器地址设定是否成功,如果成功将设定,
35、将设定状态为 CoAP 发送状态,此时 NB_EK_L476 就会将程序设定的消息发送到云上(本例是使用谷雨云进行演示)。在 CoAP 发送状态值被设定后,程序将会进入如下代码下,会将“NB_EK_L476”通过NB 网络发送到目的地。如果发送消息给 NB10 x,NB10 x 在接收到消息后通过回调函数,将消息上传给应用层。代码如下。第 27 页 共 32 页/*/ fn : NB_MsgreportCb/ brief : NB 模块消息上报回调case NB_CoAP_ST:char* usacket = NB_EK_L476; bc95_coapSendMsg(&nb_config,sizeof(NB_EK_L476),usacket);APP_SE = NB_END;break;elseAPP_SE = NB_CoAP_SEVER; /设定远端服务器
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025的标准合同协议范本
- 财务管理专题讲座
- 课程故事大班自主签到
- 急救生存链步骤
- 二零二五学校聘用教师劳动合同书
- 二零二五人事委托代理协议书
- 部队感染控制管理制度
- 食品加工全程管理制度
- 门诊处方登记管理制度
- 餐饮前厅管理制度意义
- 2023-2024学年河南省安阳市殷都区八年级(下)期末数学试卷(含答案)
- 国家粮食和物资储备局湖北局三三八处招聘笔试参考题库含答案解析2024
- 江苏省苏州市昆山、太仓、常熟、张家港市2023-2024学年七年级下学期语文期末试卷
- 家族办公室公司章程
- 敲墙搬运合同范本
- (高清版)JTGT 5190-2019 农村公路养护技术规范
- 浙江省强基联盟联考2023-2024学年高一下学期5月联考语文试题(含答案)
- 质量通病防治指引(二次结构)
- 2024年辅警招聘考试试题库含完整答案(各地真题)
- 《工程建设标准强制性条文电力工程部分2023年版》
- 【真题】2023年淮安市中考道德与法治试卷(含答案解析)
评论
0/150
提交评论