【技能大赛笔记01】Zigbee点对点按键控制程序开发
【技能大赛笔记01】Zigbee点对点按键控制程序开发
--2017年“物联网物联网技术应用与维护”任务五题1(中职组)
广东职业技术学院 欧浩源 2017-12-20
1、题目要求
2、工程文件
在比赛中,提供了一个基于BasicRF的工程项目和一份函数说明文档,参赛选手需要在这个工程项目中编写合适的代码以实现题目的功能。在工程项目中有“rf_set.c”和"slave_node.c"这两个代码文件,分别是主节点和从节点的应用代码,参赛选手需要在这两个文件中编写合适的代码。
<1> 主节点“rf_set.c”的代码如下:
<2> 从节点"slave_node.c"的代码如下:
3、关键知识点
<1> 对题目的理解非常关键。
刚看到题目的时候我也懵B了。四个LED怎么表示8个数据位呢?
主节点和从节点分别有4个LED,一共8个LED分别表示8个数据位。
1:用LED亮表示,
0:用LED灭表示。
数据依次从高到低排列:
主节点的D4 D3 D6 D5,从节点的D4 D3 D6 D5
例如:1110 0100用二进制表示,就是:
主节点的D4:亮
主节点的D3:亮
主节点的D6:亮
主节点的D5:灭
从节点的D4:灭
从节点的D3:亮
从节点的D6:灭
从节点的D5:灭
理解这个很重要,不然题目是做不出来的。
<2> 补码与原码的换算关系
对于正数,原码 = 补码。
对于负数,原码 = 补码(除了符号位)的各个位取反,加1。
补码1001 1100的原码为:1110 0100
补码1010 0110的原码为:1101 1010
补码1011 0000的原码为:1101 0000
<3> 点对点通信的数据发送和数据接收的两个函数的应用。
//将数据mode的一个字节发送到目标地址为0x0002的板子上。
basicRfSendPacket(0x0002, mode, );
//将板子接收到的数据读取1个字节放到Rx数组中。
basicRfReceive(Rx,,NULL);
4、代码实现
<1> 主节点“rf_set.c”的代码编写如下:
- //↓↓↓↓↓↓↓请在选手此区域内补充代码↓↓↓↓↓↓↓
- void RFInit()
- {
- rf.myAddr=0x0001; //本机地址
- rf.panId=0x1000; //网络ID
- rf.channel=10; //通信信道
- rf.ackRequest=1; //应答信号
- while(basicRfInit(&rf)==1);
- basicRfReceiveOn();
- }
- void main()
- {
- Init();
- RFInit();
- while(1)
- {
- if(key1==0)
- {
- DelayMS(10);
- if(key1==0)
- {
- while(key1==0);
- P1=0x00;
- mode[0]++;
- switch(mode[0])
- {
- case 0x30: break;
- P1=0x00;
- //补码1001 1100的原码为:1110 0100
- case 0x31:
- LED4 = 1;
- LED3 = 1;
- LED6 = 1;
- LED5 = 0;
- break;
- //补码1010 0110的原码为:1101 1010
- case 0x32:
- LED4 = 1;
- LED3 = 1;
- LED6 = 0;
- LED5 = 1;
- break;
- //补码1011 0000的原码为:1101 0000
- case 0x33:
- LED4 = 1;
- LED3 = 1;
- LED6 = 0;
- LED5 = 1;
- break;
- }
- basicRfSendPacket(0x0002, mode, 1);
- if(mode[0]>=0x34)
- {
- mode[0]=0x30;
- }
- }
- }
- }
- }
- //↑↑↑↑↑↑↑请在选手此区域内补充代码↑↑↑↑↑↑↑
<2> 从节点"slave_node.c"的代码编写如下:
- //↓↓↓↓↓↓↓请在选手此区域内补充代码↓↓↓↓↓↓↓
- void RFInit()
- {
- rf.myAddr=0x0002; //本机地址
- rf.panId=0x1000; //网络ID
- rf.channel=10; //通信信道
- rf.ackRequest=1; //应答信号
- while(basicRfInit(&rf)==1);
- basicRfReceiveOn();
- }
- void main()
- {
- Init();
- RFInit();
- while(1)
- {
- if(basicRfPacketIsReady())
- {
- uint8 Rx[5]=0x00;
- //basicRfReceive(Rx,5,NULL);
- basicRfReceive(Rx,1,NULL);
- P1=0x00;
- switch(Rx[0])
- {
- case 0x30:
- P1=0x00;
- break;
- //补码1001 1100的原码为:1110 0100
- case 0x31:
- LED4 = 0;
- LED3 = 1;
- LED6 = 0;
- LED5 = 0;
- break;
- //补码1010 0110的原码为:1101 1010
- case 0x32:
- LED4 = 1;
- LED3 = 0;
- LED6 = 1;
- LED5 = 0;
- break;
- //补码1011 0000的原码为:1101 0000
- case 0x33:
- LED4 = 0;
- LED3 = 0;
- LED6 = 0;
- LED5 = 0;
- break;
- }
- }
- }
- }
- //↑↑↑↑↑↑↑请在选手此区域内补充代码↑↑↑↑↑↑↑
在编译和烧写代码的时候要注意,主节点的要把"slave_node.c"代码文件移除出工程,在把“rf_set.c”添加进来,然后编译、烧写。从节点也需要做相应的移除和添加代码文件。当代码分别烧写到两个Zigbee模块上,上电就可以实现题目的功能了。
<注1>:完整工程代码下载(百度云盘):https://pan.baidu.com/s/1bpxxNqf
<注2>:关于BasicRF更详细的资料,可以参考网络中《基于BasicRF的点对点无线双向控制LED灯案例分析》一文。
【技能大赛笔记01】Zigbee点对点按键控制程序开发的更多相关文章
- OpenCV2学习笔记01:Linux下OpenCV开发环境的搭建
个人已经厌倦了Windows下的开发方式,于是决定转到Linux平台上来,当然我也知道这个转变会很艰辛,但是我还是要坚持.所以,后面的所有开发我都会基于Linux和Qt,先从开发环境的搭建开始做起,当 ...
- PHP 学习笔记 01
例子: 为什么要学PHP 主观原因: 前段时间在学校处理了毕业的一些事情,回到上海后开始了找工作的旅程.意向工作是WPF开发或者ASP.NET 作为后端的WEB开发. 陆陆续续一直在面试,其中有一家公 ...
- 2018工业信息安全技能大赛华东赛区初赛 第2题 writeup
2018工业信息安全技能大赛华东赛区初赛 第2题 解题思路 本题主要考察点是对常见工控协议的理解(modbus/tcp和s7comm),题目目标是寻找出报文中某条异常报文流量.很让人疑惑的是,题目中并 ...
- 软件测试之loadrunner学习笔记-01事务
loadrunner学习笔记-01事务<转载至网络> 事务又称为Transaction,事务是一个点为了衡量某个action的性能,需要在开始和结束位置插入一个范围,定义这样一个事务. 作 ...
- 《30天自制操作系统》笔记(01)——hello bitzhuwei’s OS!
<30天自制操作系统>笔记(01)——hello bitzhuwei's OS! 最初的OS代码 ; hello-os ; TAB=4 ORG 0x7c00 ; 指明程序的装载地址 ; 以 ...
- 《The Linux Command Line》 读书笔记01 基本命令介绍
<The Linux Command Line> 读书笔记01 基本命令介绍 1. What is the Shell? The Shell is a program that takes ...
- JS自学笔记01
JS自学笔记01 1.开发工具 webstorm 2.js(javascript) 是一门脚本.解释性.动态类型.基于对象的语言 含三个部分: ECMAScript标准–java基本语法 DOM(Do ...
- 《30天自制操作系统》笔记(01)——hello bitzhuwei’s OS!【转】
转自:http://www.cnblogs.com/bitzhuwei/p/OS-in-30-days-01-hello-bitzhuwei-OS.html 阅读目录(Content) 最初的OS代码 ...
- ASP.NET Identity 2集成到MVC5项目--笔记01
Identiry2是微软推出的Identity的升级版本,较之上一个版本更加易于扩展,总之更好用.如果需要具体细节.网上具体参考Identity2源代码下载 参考文章 在项目中,是不太想直接把这一堆堆 ...
随机推荐
- 【开源】【前后端分离】【优雅编码】分享我工作中的一款MVC+EF+IoC+Layui前后端分离的框架——【NO.1】框架概述
写博客之前总想说点什么,但写的时候又忘了想说点什么,算了,不说了,还是来送福利吧. 今天是来分享我在平时工作中搭建的一套前后端分离的框架. 平时工作大多时候都是在做管理类型的软件开发,无非就是增.删. ...
- node多版本管理--nvmw
最近要搭建koa2+node环境,发现需要node较高版本,不然ES6.7中的语法使用不了.就像安装多个版本的node,发现了nvmw. 1.下载nvmw https://github.com/ha ...
- js数组遍历some,foreach,map,filter,every对比
1. [...].some(ck)函数 ---- 某个一个为true,则为true 对数组中每个元素执行一次ck函数,知道某个元素返回true,则直接返回true.如果都返回f ...
- HTML学习笔记 域元素(form表单、textarea文本域、fieldset域集合、input使用) 案例 第四节 (原创)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- C#3.0中的扩展方法
在实际应用中,开发者完成代码的编译后,除非重新编译更改后的代码,否则开发者很难在原有代码中添加新的功能. 在C#3.0中,提供了一个扩展方法的新特性,可以使得开发者在编译后的程序集里边添加相关的方法, ...
- C#模拟登录总结
/// <summary> 登录 /// </summary> /// <param name="url">< ...
- 冒泡排序-Python与PHP实现版
Python实现 import random a=[random.randint(1,999) for x in range(0,33)] # 冒泡排序,python中数组是按引用传递的,会直接在原数 ...
- MVC中提交包含HTML代码的页面处理方法(尤其是在使用kindeditor富文本编辑器的时候)
针对文本框中有HTML代码提交时,mvc的action默认会阻止提交,主要是出于安全考虑.如果有时候需求是要将HTML代码同表单一起提交,那么这时候我们可以采取以下两种办法实现: 1.给Control ...
- 移动端h5拍照压缩即时上传后台并预览
项目经理让迭代一个功能,实时预览并上传到后台的功能,听到这立马想起了几个第三方插件去实现,mui 和api cloude万万没想到的是这个app前面使用ios 和安卓原生写的,然后mui和api c ...
- SQL1
这是社团的题目,我现在就写出来吧,总共两种方法,一种手注,一种用工具(sqlmap). 一.手注(盲注) 1,我们打开题目,可以看到一个登陆页面,这是我们在输入框里面输入万能密码: ' and '1 ...