【Zigbee技术入门教程-号外】基于Z-Stack协议栈的抢答系统

广东职业技术学院  欧浩源

一、引言
    2017年全国职业院校技能大赛“物联网技术应用”赛项中任务三题2的“抢答器开发”是一个非常优秀的题目。本人对题目进行了适当的改造和完善,剔除了和技能大赛中特别设备高度相关的内容,使其成为一个通用的Zigbee无线组网技术应用入门学习的综合实训案例。不管是自我学习,还是专业教学,甚至是在技能大赛训练中,这个题目都适合使用。

二、硬件资源需求
    要进行本“抢答系统”的实训案例,你需要5块具有无线数据通信能力的CC2530开发模块,其中一个板子有串口通信能力,另外的板子上至少有2个LED灯和1个按键,只要满足这些硬件资源即可开展该综合实训。

本“抢答系统”实训案例中采用TI公司的2.5.1版Z-Stack协议栈,其在网络上随时随地都能下载到。在该版本Z-Stack协议栈的硬件驱动中支持了3个LED灯和1个按键,它们分别是:
    HAL_LED_1:      P1_0(即D3)
    HAL_LED_2:      P1_1(即D4)
    HAL_LED_3:      P1_3(即D6)
    HAL_KEY_SW_6:   P0_1(即SW2)
   <注:括号中为全国职业院校技能大赛中新大陆国赛设备对应的资源>
    根据“抢答系统”案例的需求,对上面的指示灯和按键做了相应的定义:
    HAL_LED_1:      数据接收灯
    HAL_LED_2:      抢答指示灯
    HAL_LED_3:      网络状态灯
    HAL_KEY_SW_6:   操作键
    在本“抢答系统”案例中只需要使用“数据接收灯”和“抢答指示灯”,“网络状态灯”被Z-Stack协议栈占用了,当无线组网成功后,该Zigbee开发板的这个灯会点亮,如果不亮,说明该Zigbee开发板组网失败。
    在进行本实训案例开发的时候,您使用的CC2530开发模块上的端口定义最好和这个版本协议栈原有的一致,不然可要进行底层的移植工作了。

三、项目应用需求
    在为“抢答系统”准备好的5块基于CC2530的Zigbee无线组网开发板中,根据功能需求,分为以下三类设备:
    1块为显示节点
    1块为主持人板
    3块为抢答器板
    显示节点通过串口连接到电脑,在电脑端有一个“抢答器信息显示终端”的上位机软件。该上位机软件是一个接收并显示“抢答系统”运行状态和抢答结果信息的软件。实际上,你可以根据本实训案例的通信规约自行设计一个合适的上位机显示软件。在没有该上位机软件的情况下也是可以进行“抢答系统”实训案例的开发的,你可以打开“串口助手”这种能过接收串口数据的小软件,监测系统传送过来的原始数据,然后对照系统的通信规约,从而判断“抢答系统”的运行状态和抢答结果。“抢答器信息显示终端”的参考界面如下:

在“抢答系统”的无线网络数据传输中,数据流以帧的形式进行交互,并遵循一个简单的通信规约
    <1> 该数据帧有四个字节,其格式如下:
    帧头<0xFA>   命令域   参数域    帧尾<0xAF>
    <2> 主持人板复位指令:
    帧头<0xFA>   0xA0      0x00     帧尾<0xAF>
    <3> 抢搭器板抢答指令:
    帧头<0xFA>   0xB1   抢答板ID号  帧尾<0xAF>
    <4> 主持人板确认指令:
    帧头<0xFA>   0xA1   抢答板ID号  帧尾<0xAF>
    <5> 串口波特率为:9600
    <6> Zigbee的通道为:17
    <7> Zigbee的PAN ID为:0x2017
    <8> Zigbee通信方式广播

在协议栈“ZStack-CC2530-2.5.1a”中的适当的位置添加相应工程代码,实现抢答系统的如下功能:
   【步骤1】:所有的Zigbee开发板上电后,“抢答指示灯”闪烁3下,然后等待“网络状态灯”点亮,即全部Zigbee开发板组网成功,每个Zigbee开发版在成功接收到无数据帧的时候,“数据指示灯”快速闪烁2下。
   【步骤2】:单击主持人板的“操作键”时,主持人板抢答器板的“抢答指示灯”均点亮,此时,显示节点的“抢答指示灯”熄灭,“抢答器信息显示终端”里显示“Ready!!!”,这时三个抢答器板可以开始抢答,在主持人板的“抢答指示灯”未亮之前,抢搭无效。

【步骤3】:当主持人板抢答器板的“抢答指示灯”点亮后,单击抢答器板中的“操作键”可进行问题抢答。当有人抢答成功后,主持人板及所有的抢答器板的“抢答指示灯”熄灭,显示节点上的“抢答指示灯”点亮,“抢答器信息显示终端”里显示“X号抢答成功!”。此时,3块抢答器板再次抢答无效。

【步骤4】:重复步骤2、步骤3,完成下一题抢答。

四、项目设计概述
    在我们下载的Z-Stack协议栈中有一个用户自定义任务SampleApp,本“抢答系统”案例将利用该协议栈的现有用户任务,将对其工程代码进行适当的添加和修改,以“抢答系统”的业务功能。
    抢答系统中的5块Zigbee开发板分为三种设备类型:显示节点、主持人板和抢答器板。因此,需要设计三个不同的工程代码。实际上,这个三个不同工程中的代码,绝大部分是相同的。你可以用三个协议栈工程来实现,你也可以用一个协议栈工程,通过三个不同的任务代码文件来实现,你还可以用条件编译来对三个设备类型,编译三种不同的工程代码。对应入门的初学者来说,建议使用第一种办法。在本案例分析过程中,介绍的是第二种方法。
    本抢答系统的设计关键在于,有一个系统的模型,有一个清晰的思路,有一个明确的方向,有一颗强大的内心。本项目案例的实现难点,不是设计程序,而是调试程序,而且还是多终端无线联调
    要完成实现“抢答系统”要求的功能,除了要求掌握CC2530底层硬件基础和Z-Stack协议栈基础操作之外,还需要你不但有程序设计的能力,还要有代码调试的经验,不但能把代码跑起来,还能有锁定BUG的办法

[注]:[题目详解及实现思路,可见百度付费文档!]

【Zigbee技术入门教程-号外】基于Z-Stack协议栈的抢答系统的更多相关文章

  1. 【Zigbee技术入门教程-02】一图读懂ZStack协议栈的基本架构和工作机理

    [Zigbee技术入门教程-02]一图读懂ZStack协议栈的基本架构和工作机理 广东职业技术学院  欧浩源  ohy3686@foxmail.com Z-Stack协议栈是一个基于任务轮询方式的操作 ...

  2. 【Zigbee技术入门教程-01】Zigbee无线组网技术入门的学习路线

    [Zigbee技术入门教程-01]Zigbee无线组网技术入门的学习路线 广东职业技术学院  欧浩源 一.引言    在物联网技术应用的知识体系中,Zigbee无线组网技术是非常重要的一环,也是大家感 ...

  3. 【Zigbee技术入门教程-02】一图读懂ZStack协议栈的核心思想与工作机理

    [Zigbee技术入门教程-02]一图读懂ZStack协议栈的核心思想与工作机理 广东职业技术学院  欧浩源   Z-Stack协议栈是一个基于任务轮询方式的操作系统,其任务调度和资源分配由操作系统抽 ...

  4. CTF必备技能丨Linux Pwn入门教程——stack canary与绕过的思路

    Linux Pwn入门教程系列分享如约而至,本套课程是作者依据i春秋Pwn入门课程中的技术分类,并结合近几年赛事中出现的题目和文章整理出一份相对完整的Linux Pwn教程. 教程仅针对i386/am ...

  5. CTF丨Linux Pwn入门教程:针对函数重定位流程的相关测试(下)

    Linux Pwn入门教程系列分享已接近尾声,本套课程是作者依据i春秋Pwn入门课程中的技术分类,并结合近几年赛事中出现的题目和文章整理出一份相对完整的Linux Pwn教程. 教程仅针对i386/a ...

  6. ABP入门教程1 - 开篇

    点这里进入ABP入门教程目录 基于DDD的现代ASP.NET开发框架 - ABP ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)”的简称. ASP.NET ...

  7. C#入门教程(一)–.Net平台技术介绍、C#语言及开发工具介绍-打造C#学习教程

    一.什么是.Net平台? .Net平台是微软搭建的技术平台,技术人员在此平台上进行应用的搭建与开发.它提供了运行所必须的环境.NET Framework类库以及CLR(公共语言运行时).好比我们人类的 ...

  8. 基于DDD的现代ASP.NET开发框架--ABP系列之2、ABP入门教程

    基于DDD的现代ASP.NET开发框架--ABP系列之2.ABP入门教程 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)”的简称. ASP.NET Boi ...

  9. 基于Spring Cloud的微服务入门教程

    (本教程的原地址发布在本人的简书上:http://www.jianshu.com/p/947d57d042e7,若各位看官有什么问题或不同看法请在这里或简书留言,谢谢!) 本人也是前段时间才开始接触S ...

随机推荐

  1. jquery提供的插件无法删除cookie的解决办法

    之前使用jquery的cookie插件提供的 $.cookie("key",null)方法删除cookie,结果发现代码中的cookie一直无法删除,导致后面的种种问题. 经过各种 ...

  2. 程序猿的日常——HashMap的相关知识

    背景知识 哈希冲突 哈希是指通过某种方法把数据转变成特定的数值,数值根据mod对应到不同的单元上.比如在Java中,字符串就是通过每个字符的编码来计算.数字是本身对应的值等等,不过就算是再好的哈希方法 ...

  3. 前端学习_01_css网页布局

    引子 之前也自己陆陆续续地学了一些web方面的知识,包括前段和后端都有涉及到,自己也比较感兴趣,感谢peter老师,愿意无偿提供从零开始的教学,之前也看过peter老师的一些视频,节奏非常适合我,决心 ...

  4. 未能解析此远程名称: 'www.***.com' 解决办法

    今天发布网站的时候在本机IIS上调试完全没问题,但发布到远程服务器上却出现了如下错误: 原因:远程服务器的DNS解析失败,不能对类似于'www.***.com' 的网站解析,所以我们要进行手动解析. ...

  5. Swift语言中与C/C++和Java不同的语法(四)

    这一节,我们将会讨论一下Swift中的函数相关的基本内容 首先是函数的创建: func sayHello (name:String) -> String { return "Hello ...

  6. iOS微信运动 刷分

    修改 iOS微信运动的数据  很简单,这里记录下实现步骤. 首先要安装Theos,具体安装步骤就不说了.网上很多. 大体安装步骤: sudo brew install dpkg sudo brew i ...

  7. python检测404页面

    某些网站为了实现友好的用户交互,提供了一种自定义的错误页面,而不是显示一个大大的404 ,比如CSDN上的404提示页面如下: 这样虽然提高了用户体验,但是在编写对应POC进行检测的时候如果只根据返回 ...

  8. 如何搞定SVN目录的cleanup问题和lock问题

    最近在使用SVN的时候碰到一个问题,就是操作时由于粗心大意,在更新的过程中点击取消,使得该目录出现cleanup的操作提示. OK,按照cleanup提示操作后,又提示目录被lock... 网上有解决 ...

  9. islider结合react的简单实用

    我用islider都是结合react来使用,主要运用在移动端,做首页轮播图,或者是手机图片预览,左右滑动 首先需要 npm install islider.js --save 让后在jsx文件头部引入 ...

  10. 微信小程序之获取验证码js

    在微信小程序中怎样实现获取验证码的倒计时功能捏,倒计时的原理是一样一样的,就是某些地方需要注意. 第一步:结构 <view class='get-code' wx:if="{{!isS ...