Zigbee协议栈应用(一)——Zigbee协议栈介绍及简单例子[通俗易懂]

Zigbee协议栈应用(一)——Zigbee协议栈介绍及简单例子[通俗易懂]1、Zigbee协议栈简介  协议是一系列的通信标准,通信双方需要按照这一标准进行正常的数据发射和接收。协议栈是协议的具体实现形式,通俗讲协议栈就是协议和用户之间的一个接口,开发人员通过使用协议栈来使用这个协议,进而实现无线数据收发。  如图1所示:Zigbee协议分为两部分,IEEE802.15.4定义了PHY(物理层)和MAC(介质访问层)技术规范;Zigbee联盟定义了NWK(网络层)、A…

大家好,又见面了,我是你们的朋友全栈君。

1、Zigbee协议栈简介

  协议是一系列的通信标准,通信双方需要按照这一标准进行正常的数据发射和接收。协议栈是协议的具体实现形式,通俗讲协议栈就是协议和用户之间的一个接口,开发人员通过使用协议栈来使用这个协议,进而实现无线数据收发。

  如图1所示:Zigbee协议分为两部分,IEEE 802.15.4定义了PHY(物理层)和MAC(介质访问层)技术规范;Zigbee联盟定义了NWK(网络层)、APS(应用程序支持层)、APL(应用层)技术规范。Zigbee协议栈就是将各个层定义的协议都集合在一起,以函数的形式实现,并给用户提供API(应用层),用户可以直接调用。

Zigbee协议栈应用(一)——Zigbee协议栈介绍及简单例子[通俗易懂]

            图1 ZigBee无线网络协议层的架构图

 2、如何理解Zigbee协议栈

  协议栈是协议的实现,可以理解为代码,库函数,供上层应用调用,协议较底下的层与应用是相互独立的。商业化的协议栈只提供你接口(其实和互联网行业的API模式很像)。就像你调用地图API时不需要关心底层地图是怎么根据位置或坐标绘制的,你也不用关心协议栈底层的实现,除非你想做协议研究。每个厂家的协议栈是有区别的,比如TI的BLE协议栈和nordic的BLE协议栈就有很大的不同(多说一点,TI的BLE协议栈更像是安卓的BLE结构,所以会安卓蓝牙的人可能能看懂TI的代码)。

 3、如何使用Zigbee协议栈

  以简单的无线数据通信为例,其一般步骤为:

① 组网:调用协议栈组网函数、加入网络函数,实现网络的建立和节点的加入

② 发送:发送节点调用协议栈的发送函数,实现数据无线发送

③ 接收:接收节点调用协议栈的无线接收函数,实现无线数据接收

  由于协议栈都把这些函数都封装好了,因此我们用起来比较方便。下面是协议栈无线发送函数:

Zigbee协议栈应用(一)——Zigbee协议栈介绍及简单例子[通俗易懂]

  如果想更好的应用协议栈就需要对协议栈提供的这些函数及其参数的具体作用和意义进行细致的了解,这个在接下来中会详细介绍。

 4、安装Zigbee协议栈

  从我百度共享的所有本系列资料中下载004解压并安装:

Zigbee协议栈应用(一)——Zigbee协议栈介绍及简单例子[通俗易懂]

               图2 ZigBee协议栈下载路径

 安装好之后在win7开始按钮下会有如下文件结构:

Zigbee协议栈应用(一)——Zigbee协议栈介绍及简单例子[通俗易懂]

                  图3 ZigBee协议安装完成后的文件结构

  其中:

Zigbee协议栈应用(一)——Zigbee协议栈介绍及简单例子[通俗易懂]

 5、基于协议栈的无线收发控制LED工程讲解(一)

  从网盘下载ZStack-2.3.1a压缩文件:

Zigbee协议栈应用(一)——Zigbee协议栈介绍及简单例子[通俗易懂]

                             图4 工程源码所在云盘目录

    用IAR打开.. \ZStack-2.5.1a\Projects\zstack\Samples\SampleApp\CC2530DB目录下的工程文件,注意不要把001Stack-2.5.1a放在比较深的文件夹内,否则IAR打开工程时可能一直卡打不开,也最好不要有中文!打开后工程及结构如下:(有点眼花缭乱,不要紧,后面会结合源码一步步分析)

Zigbee协议栈应用(一)——Zigbee协议栈介绍及简单例子[通俗易懂]

                  图5 工程整体架构

 6、基于协议栈的无线收发控制LED工程讲解(二)

  在IAR中选择XXXXEB,第一遍要rebuild all,下载好协调器之后,再切换到EndDeviceEB编译下载到另一个板子做终端设备

Zigbee协议栈应用(一)——Zigbee协议栈介绍及简单例子[通俗易懂]

          图6 编译工程

 

两个节点程序下载好之后上电会看到:组网成功后D1闪烁。

Zigbee协议栈应用(一)——Zigbee协议栈介绍及简单例子[通俗易懂]

                图7 实验现象

 

7、基于协议栈的无线收发控制LED工程讲解(三)

main code:

复制代码
 1 int main( void )
 2 {
 3 osal_int_disable( INTS_ALL );// Turn off interrupts 关中断
 4     HAL_BOARD_INIT();// Initialization for board related stuff such as LEDs
 5     zmain_vdd_check();// Make sure supply voltage is high enough to run 检查芯片是否上电正常
 6     InitBoard( OB_COLD );// Initialize board I/O 初始化I/O,LED,Timer等
 7     HalDriverInit();// Initialze HAL drivers 初始化硬件抽象层驱动模块
 8     osal_nv_init( NULL );// Initialize NV System 初始化flash存储器
 9     znpTestRF();// Initialize and check the ZNP RF Test Mode NV items. 
10     ZMacInit();// Initialize the MAC 初始化MAC层
11     zmain_ext_addr();// Determine the extended address 确定IEEE64位地址
12 
13 #if defined ZCL_KEY_ESTABLISH
14     zmain_cert_init();// Initialize the Certicom certificate information.
15 #endif
16 
17     zgInit();// Initialize basic NV items  初始化非易失变量
18 
19 #ifndef NONWK
20     afInit();// Since the AF isn't a task, call it's initialization routine
21 #endif
22 
23  osal_init_system();// Initialize the operating system 初始化OS(重点介绍1)
24 osal_int_enable( INTS_ALL );// Allow interrupts 使能中断
25     InitBoard( OB_READY );// Final board initialization      最终板载初始化
26     zmain_dev_info();// Display information about this device     显示设备信息(这里有LCD屏幕)
27 
28 #ifdef LCD_SUPPORTED/* Display the device info on the LCD 将信息显示在LCD上*/
29     zmain_lcd_init();      
30 #endif
31 
32 #ifdef WDT_IN_PM1
33     WatchDogEnable( WDTIMX );/* If WDT is used, this is a good place to enable it. */
34 #endif
35 
36 osal_start_znp(); // No Return from here 执行操作系统(重点介绍2)
37 
38     return 0;  // Shouldn't get here.
39 } // main()
复制代码

代码有点难懂,核心是执行初始化工作,包括硬件抽象层、网络层、任务等。然后执行osal_start_znp() ,进入一个死循环,不断对任务进行遍历执行。这里我们需要重点了解两个函数:

Zigbee协议栈应用(一)——Zigbee协议栈介绍及简单例子[通俗易懂] 

 ① 操作系统初始化函数

Zigbee协议栈应用(一)——Zigbee协议栈介绍及简单例子[通俗易懂]

在操作系统初始化中需重点关注的是操作系统任务初始化osalInitTasks函数,操作系统初始化函数中主要来创建任务taskID任务ID,每增加一个任务ID++,同时ID越小表示该任务优先级越高!其中蓝框内的函数是要根据系统想完成的任务做修改的地方,其他都是官方提供的基本不用变的任务。

 ② 操作系统启动函数

Zigbee协议栈应用(一)——Zigbee协议栈介绍及简单例子[通俗易懂] 

执行OS的函数就是个大循环,不断取出当前优先级最高的待处理事件进行处理,处理的核心思想在osal_run_task函数内:通过调用一个函数指针来远程调用一个事件处理函数

 

8、小结

  至此,我们讲到任务如何建立、如何处理等,其中有一个环节没有讲——如何从events=(tasksArr[idx])(idx,event)关联到每个具体任务的事件处理函数的?这个其实我在CC2540/CC2541的前两篇中已有详细介绍:[接下来会针对具体通信梳理流程!]

1、CC2541蓝牙4.0芯片中级教程——基于OSAL操作系统的运行流程了解+定时器和串口例程了解

2、CC2541芯片中级教程-OSAL操作系统(进一步了解-OLED && 普通按键和5方向按键-中断!!!)这个系统驱动层和应用层不一样~

3、CC2541芯片中级教程-OSAL操作系统(ADC光敏电阻和修改串口波特率)

4、CC2541芯片中级教程-OSAL操作系统(简单AT指令实现+IIC软件和硬件实现驱动MPU6050)

5、CC2541芯片中级教程-OSAL操作系统(PWM+看门狗)

Zigbee协议栈应用(一)——Zigbee协议栈介绍及简单例子[通俗易懂]

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/140109.html原文链接:https://javaforall.net

(0)
上一篇 2022年5月28日 下午6:46
下一篇 2022年5月28日 下午7:00


相关推荐

  • 给你的网页添加看板娘(以给博客园博客添加看板娘为例)(保姆级图文)

    给你的网页添加看板娘(以给博客园博客添加看板娘为例)(保姆级图文)给你的网页添加看板娘 以给博客园博客添加看板娘为例 保姆级图文 解决了此处出现了不允许使用的标签 移动 link 的位置即可

    2026年3月17日
    2
  • python调用文心一言大模型代码

    python调用文心一言大模型代码

    2026年3月12日
    2
  • JS 字符串转Date类型

    JS 字符串转Date类型字符串转日期时间格式 getDate strDate vardate eval newDate strDate replace d function a returnparseI a 10 1 match d g returndate

    2026年3月19日
    1
  • pytest测试框架快速搭建

    pytest测试框架快速搭建一 介绍 pytest 是一个非常成熟的 Python 测试框架 能够支持简单的单元测试和复杂的功能测试 还可以用来做 selenium appnium 等自动化测试 接口自动化测试 pytest requests pytest 具有很多第三方插件 并且可以自定义扩展 比较好用的如 pytest selenium 集成 selenium pytest html 完美 html 测试报告生成 pytest rerunfailure 失败 case 重复执行 pytest xdist 多 CPU 分发 等

    2026年3月16日
    3
  • java mediatype属性_Java 如何获得文件的 Media Type「建议收藏」

    java mediatype属性_Java 如何获得文件的 Media Type「建议收藏」一般来说你可以使用ApacheTika来获得文件的类型。Tika是一个内容分析工具Maven设置maven的版本到你的POM文件中。org.apache.tikatika-core1.25测试代码例如,我们可以使用下面的测试代码。@TestpublicvoidwhenUsingTika_thenSuccess(){Filefile=newFile(“product.pn…

    2022年5月26日
    209
  • 从“做事用人”到“用人做事”[通俗易懂]

    从“做事用人”到“用人做事”[通俗易懂]阿里张勇:从“做事用人”到“用人做事”商业管理今年十一月底,阿里巴巴进行了一年一度的组织架构调整,在这次调整中,阿里云升级成为阿里云智能;天猫升级为“大天猫”,并形成了三个事业群。12月时,阿里巴巴集团CEO张勇,在阿里青年干部培训营上,谈了他对这次组织架构升级的思考。36氪发表了张勇的讲话全文,我们从中为你选取了他的5个观点。第一,从“做事用人”到“用人做事”。这是马云给张勇的…

    2025年6月16日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号