任务九 基于BasicRF的无线传感网络应用

Slides:



Advertisements
Similar presentations
我国国有银行 资本构成及资本充足率变化 小组成员:金融 尹佳裕 王淼 刘钰 金融 吴昱.
Advertisements

While 迴圈 - 不知重複執行次數
单元二:面向对象程序设计 任务二:借书卡程序设计.
河內塔(Hanoi)問題.
针灸治疗学讲稿 山东中医药大学 高树中.
计算学科的基本问题 本章首先介绍一个对问题进行抽象的典型实例——哥尼斯堡七桥问题。然后,通过“梵天塔”问题和“停机问题”分别介绍学科中的可计算问题和不可计算问题。从“梵天塔”问题再引出算法复杂性中的难解性问题、P类问题和NP类问题,证比求易算法,P=NP是否成立的问题。
校园信息管理系统 河北科技大学网络中心 2000/4/10.
农业银行网上签约流程 宁夏金溢投资 内部资料 1.
“八皇后”问题 崔萌萌 吕金华.
廉政會報專題報告 農地重劃工程 施工常見缺失 報告:吳東霖 製作:張昌鈴 日期:103年12月23日.
專案製作經驗談.
徵收苗栗市福全段147、1588及文心段10、11地號等4筆土地之
请将手机调整到静音状态 实验网站:program3.ccshu.net 资源网站:class.ccshu.org/ /
讲 义 大家好!根据局领导的指示,在局会计科和各业务科室的安排下,我给各位简要介绍支付中心的工作职能和集中支付的业务流程。这样使我们之间沟通更融洽,便于我们为预算单位提供更优质的服务。 下面我主要从三方面介绍集中支付业务,一是网上支付系统,二是集中支付业务流程及规定等,
中国人民公安大学经费管理办法(试行) 第一章总则 第四条:“一支笔” “一支笔”--仅指单位主要负责人。负责对本 单位的经费进行审核审批。
金門縣重大空難應變機制-消防局 壹、消防搶救、滅火、緊急救護 一、派遣作為:
補充: Input from a text file
第8章 字元與字串處理 8-1 C語言的字元檢查函數 8-2 C語言的字串 8-3 字串的輸入與輸出 8-4 指標與字串
Linked List Operations
第4章 串 串的基本概念和C语言的串函数 串的存储结构 动态数组实现的顺序串 串的模式匹配算法——BF算法 主要知识点.
高级语言程序设计 主讲人:陈玉华.
選擇排序法 通訊一甲 B 楊穎穆.
C的發展史 C程式初體驗 C程式設計基本注意事項 上機實習課程
补充内容 结构体 概述 定义结构体类型和定义结构体变量 结构体变量的引用 结构体变量的初始化 指针与结构体 用typedef定义类型的别名.
Chap 10 函数与程序结构 10.1 函数的组织 10.2 递归函数 10.3 宏定义 10.4 编译预处理.
If … else 選擇結構 P27.
C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.
任务八 温湿度传感器模块.
授课老师:龚涛 信息科学与技术学院 2018年3月 教材: 《Visual C++程序员成长攻略》 《C++ Builder程序员成长攻略》
Function.
程序设计期末复习 黎金宁
NO.3.1 SOPC技术 第5章 Nios II 系统的外围设备.
程序设计专题一 结构化程序设计与递归函数 主讲教师: 刘新国.
第2章 线性表 线性表抽象数据类型 顺序表 主要知识点 单链表 循环单链表 循环双向链表 静态链表 设计举例.
第7章 编译预处理 本章要求: 本章重点: 本章难点: 掌握用#define定义无参数宏和带有参数宏定义和调用方法;
作弊是否很有诱惑性? 上堂课已经讲了 作业不一定在两个小时里都能完成 答疑没有一个人? 作弊是有记录的 心理系很多同学集体作弊,让人震惊
6 使用者函數 6.1 函數定義 宣告函數 呼叫函數 呼叫多個函數 6-6
C语言 程序设计基础与试验 刘新国、2012年秋.
多维数组与指针 用指针变量可以指向一维数组中的元素,也可以指向多维数组中的元素。但在概念上和使用上,多维数组的指针比一维数组的指针要复杂一些。 1. 多维数组元素的地址 先回顾多维数组的性质,可以认为二维数组是“数组的数组”,例 : 定义int a[3][4]={{1,3,5,7},{9,11,13,15},{17,19,21,23}};
南瑞学堂 学员简明操作指南 上海时代光华教育发展有限公司 2013年.
任务十三 基于Z-Stack的串口透传.
計數式重複敘述 for 迴圈 P
第七章 函数及变量存贮类型 7.1 函数基础与C程序结构 7.2 函数的定义和声明 7.3 函数的调用 7.4 函数的嵌套与递归
電子音樂 通訊系 B 楊穎穆.
程式結構&語法.
LEGO 講義3 1. Hitechnic 紅外線sensor介紹 2. Hitechnic 顏色sensor介紹
第一章 程序设计和C语言 主讲人:高晓娟 计算机学院.
使用服务平台办理离校 操作指南.
Oop8 function函式.
Chap 5 函数 5.1 计算圆柱体积 5.2 使用函数编写程序 5.3 变量与函数.
7.1 C程序的结构 7.2 作用域和作用域规则 7.3 存储属性和生存期 7.4 变量的初始化
微信商城系统操作说明 色卡会智能门店.
<编程达人入门课程> 本节内容 为什么要使用变量? 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ:
学年第一学期领取教材明细查询的通知 学年第一学期学生使用的教材均在网上平台公示。现将有关事项通知如下:
项目1 C程序设计起步 学习目标: 通过该项目你可以知道: C语言的用途。 C语言的基本符号和关键字。 C语言程序的结构及特点。
第7章 程序的结构 四、生存期与存储属性 五、extern关键字与外部连接属性 六、static关键字与内部连接属性.
第二章 类型、对象、运算符和表达式.
陣列 東海大學物理系‧資訊教育 施奇廷.
单片机原理及应用 实践部分 主讲人:刘 强 四川工商学院单片机教学团队 单片机原理及应用 实践部分 主讲人:刘 强
本节内容 函数嵌套调用的内存布局 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
挑戰C++程式語言 ──第9章 函數.
#include <iostream.h>
第二章 Java基本语法 讲师:复凡.
单片机应用技术 (C语言版) 第4章 C51程序设计入门
大綱 一.受試者之禮券/禮品所得稅規範 二.範例介紹 三.自主管理 四.財務室提醒.
判斷(選擇性敘述) if if else else if 條件運算子.
Chap 10 函数与程序结构 10.1 圆形体积计算器 10.2 汉诺塔问题 10.3 长度单位转换 10.4 大程序构成.
实验三 Linux文件目录操作 一、目的 二、要求 了解并掌握Linux文件目录结构。 了解Linux文件系统与目录操作:
第三章 流程控制 程序的运行流程 选择结构语句 循环结构语句 主讲:李祥 时间:2015年10月.
Presentation transcript:

任务九 基于BasicRF的无线传感网络应用

目 录 一、实训目的 二、实训内容 三、实训原理 四、实训步骤

实训目的 通过本实训,使学生掌握开关量、模拟量、逻辑量三种传感器的工作原理,熟悉这三种传感器的信号采集方法;熟悉BasicRF参数配置;掌握基于BasicRF的无线采集与网络组建方法。

目 录 一、实训目的 二、实训内容 三、实训原理 四、实训步骤

实训内容 在实训上,采用人体红外传感器和ZigBee模块组成开关量采集节点A;采用光敏传感器和ZigBee模块组成模拟量采集节点B;一氧化碳传感器和ZigBee模块组成模拟量采集节点C;采用温湿度传感器模块和ZigBee模块组成逻辑量采集节点D。A、B、C、D四个节点实时采集传感器的信号,每隔2s将采集的传感器信号通过无线网络传给ZigBee网关模块(网关模块通过串口与PC机相连),并在PC机串口调试软件上显示。

目 录 一、实训目的 二、实训内容 三、实训原理 四、实训步骤

实训原理 在开关量采集系统、模拟量采集系统和逻辑量采集系统的基础上,通过ZigBee无线发送给网关模块,网关通过串口把无线接收的数据上传给PC机,从而实现无线传感网络的数据采集与处理。

目 录 一、实训目的 二、实训内容 三、实训原理 四、实训步骤

实训步骤 第一步,新建各传感器节点工程、配置工程相关设置。 1. 选择菜单栏【Project】->【Edit Configuration……】命令,新建gm_sensor、qt_sensor、hw_sensor、tem_sensor和collect五个工程,如图9.1所示。 图9.1 新建工程

实训步骤 2. 各传感器节点工程配置,具体参照实训3操作。 第三步,编写各传感器节点程序。 1. sensor.c文件代码如下: #include "hal_defs.h" #include "hal_cc8051.h" #include "hal_int.h" #include "hal_mcu.h" #include "hal_board.h" #include "hal_led.h" #include "hal_rf.h" #include "basic_rf.h"

实训步骤 #include "hal_uart.h" #include "UART_PRINT.h" #include "TIMER.h" #include "get_adc.h" #include "sh10.h" #include <string.h> #define MAX_SEND_BUF_LEN 128 #define MAX_RECV_BUF_LEN 128 static uint8 pTxData[MAX_SEND_BUF_LEN]; //定义无线发送缓冲区的大小

实训步骤 static uint8 pRxData[MAX_RECV_BUF_LEN]; //定义无线接收缓冲区的大小 #define MAX_UART_SEND_BUF_LEN 128 #define MAX_UART_RECV_BUF_LEN 128 uint8 uTxData[MAX_UART_SEND_BUF_LEN]; //定义串口发送缓冲区的大小 uint8 uRxData[MAX_UART_RECV_BUF_LEN]; //定义串口接收缓冲区的大小 uint16 uTxlen = 0; uint16 uRxlen = 0;

实训步骤 /*********************点对点通讯地址设置*********************/ #define RF_CHANNEL 20 // 频道 11~26 #define PAN_ID 0x1379 //网络id #define MY_ADDR 0xacef // 本机模块地址 #define SEND_ADDR 0x1234 //发送地址 /******************************************************************/ static basicRfCfg_t basicRfConfig; uint8 APP_SEND_DATA_FLAG; /*****************************************************************/

实训步骤 void ConfigRf_Init(void) // 无线RF初始化 { basicRfConfig.panId = PAN_ID; //ZigBee的ID号设置 basicRfConfig.channel = RF_CHANNEL; //ZigBee的频道设置 basicRfConfig.myAddr = MY_ADDR; //设置本机地址 basicRfConfig.ackRequest = TRUE; //应答信号 while(basicRfInit(&basicRfConfig) == FAILED); //检测ZigBee的参数是否配置成功 basicRfReceiveOn(); // 打开RF }

实训步骤 /***************************MAIN*********************/ void main(void) { uint16 sensor_val,sensor_tem; uint16 len = 0; halBoardInit(); //模块相关资源的初始化 ConfigRf_Init(); //无线收发参数的配置初始化 halLedSet(1); halLedSet(2); Timer4_Init(); //定时器初始化 Timer4_On(); //打开定时器

实训步骤 while(1) { APP_SEND_DATA_FLAG = GetSendDataFlag(); if(APP_SEND_DATA_FLAG == 1) //定时时间到 { #if defined (GM_SENDOR) //光敏传感器 sensor_val=get_adc(); //取模拟电压 //把采集数据传化成字符串,以便于在串口上显示观察 printf_str(pTxData,"光照传感器电压:%d.%02dV\r\n",sensor_val/100, sensor_val%100); #endif

实训步骤 #if defined (QT_SENDOR) //气体传感器 sensor_val=get_adc(); //取模拟电压 //把采集数据传化成字符串,以便于在串口上显示观察 printf_str(pTxData,"气体传感器电压:%d.%02dV\r\n",sensor_val/100, sensor_val%100); #endif #if defined (HW_SENDOR) //红外传感器 sensor_val=get_swsensor(); //取红外传感器检测结果

实训步骤 //把采集数据传化成字符串,以便于在串口上显示观察 if(sensor_val) { printf_str(pTxData,"红外传感器电平:%d\r\n",sensor_val);} else { printf_str(pTxData,"红外传感器电平:%d\r\n",sensor_val); } #endif #if defined (TEM_SENDOR) //温湿度传感器 call_sht11(&sensor_tem,&sensor_val); //取温湿度数据

实训步骤 //把采集数据传化成字符串,以便于在串口上显示观察 printf_str(pTxData,"温湿度传感器,温度:%d.%d, 湿度:%d.%d\r\n", sensor_tem/10,sensor_tem%10,sensor_val/10,sensor_val%10); #endif halLedToggle(3); // 绿灯取反,无线发送指示 //把数据通过ZigBee发送出去 basicRfSendPacket(SEND_ADDR, pTxData,strlen(pTxData )); Timer4_On(); //打开定时 } /*【传感器采集、处理】 结束*/ } }

实训步骤 第四步,编写协调器程序 #include "hal_defs.h" #include "hal_cc8051.h" #include "hal_int.h" #include "hal_mcu.h" #include "hal_board.h" #include "hal_led.h" #include "hal_rf.h" #include "basic_rf.h" #include "hal_uart.h"

实训步骤 #define MAX_SEND_BUF_LEN 128 #define MAX_RECV_BUF_LEN 128 static uint8 pTxData[MAX_SEND_BUF_LEN]; //定义无线发送缓冲区的大小 static uint8 pRxData[MAX_RECV_BUF_LEN]; //定义无线接收缓冲区的大小 #define MAX_UART_SEND_BUF_LEN 128 #define MAX_UART_RECV_BUF_LEN 128 uint8 uTxData[MAX_UART_SEND_BUF_LEN]; //定义串口发送缓冲区的大小

实训步骤 uint8 uRxData[MAX_UART_RECV_BUF_LEN]; //定义串口接收缓冲区的大小 uint16 uTxlen = 0; uint16 uRxlen = 0; /*****点对点通讯地址设置******/ #define RF_CHANNEL 20 // 频道 11~26 #define PAN_ID 0x1379 //网络id #define MY_ADDR 0x1234 // 本机模块地址 #define SEND_ADDR 0x55aa //发送地址

实训步骤 static basicRfCfg_t basicRfConfig; void MyByteCopy(uint8 *dst, int dststart, uint8 *src, int srcstart, int len) { int i; for(i=0; i<len; i++) *(dst+dststart+i)=*(src+srcstart+i); }

实训步骤 uint16 RecvUartData(void) { uint16 r_UartLen = 0; uint8 r_UartBuf[128]; uRxlen=0; r_UartLen = halUartRxLen(); while(r_UartLen > 0) r_UartLen = halUartRead(r_UartBuf, sizeof(r_UartBuf));

实训步骤 MyByteCopy(uRxData, uRxlen, r_UartBuf, 0, r_UartLen); uRxlen += r_UartLen; halMcuWaitMs(5); //这里的延迟非常重要,因为这是串口连续读取数据时候需要有一定的时间间隔 r_UartLen = halUartRxLen(); } return uRxlen; );

实训步骤 // 无线RF初始化 void ConfigRf_Init(void) { basicRfConfig.panId = PAN_ID; //ZigBee的ID号设置 basicRfConfig.channel = RF_CHANNEL; //ZigBee的频道设置 basicRfConfig.myAddr = MY_ADDR; //设置本机地址 basicRfConfig.ackRequest = TRUE; //应答信号 while(basicRfInit(&basicRfConfig) == FAILED); //检测ZigBee的参数是否配置成功

实训步骤 basicRfReceiveOn(); // 打开RF } /********************MAIN START************************/ void main(void) { uint16 len = 0; halBoardInit(); //模块相关资源的初始化 ConfigRf_Init(); //无线收发参数的配置初始化 halLedSet(1); halLedSet(2);

实训步骤 while(1) { if(basicRfPacketIsReady()) //查询有没收到无线信号 halLedToggle(4); // 红灯取反,无线接收指示 //接收无线数据 len = basicRfReceive(pRxData, MAX_RECV_BUF_LEN, NULL); halUartWrite(pRxData,len); //把接收到的无线发送到串口 } } }

实训步骤 第五步,编译、烧录程序,测试系统功能。 1. 为传感器节点编译、烧录程序。 (1)在Workspace栏下选择“gm_sensor”,然后在预定义栏输入“GM_SENDOR”,再编译程序,无误后烧录到该模块中。 (2)在Workspace栏下选择“qt_sensor”,然后在预定义栏输入“QT_SENDOR”,再编译程序,无误后烧录到该模块中。 (3)在Workspace栏下选择“hw_sensor”,然后在预定义栏输入“HW_SENDOR”,再编译程序,无误后烧录到该模块中。 (4)在Workspace栏下选择“tem_senso”,然后在预定义栏输入“TEM_SENDOR”,再编译程序,无误后烧录到该模块中。

实训步骤 2. 为协调器编译、烧录程序。 3. 测试系统功能,如图9.2所示。 图9.2 基于BasicRF的无线传感网络应用系统测试效果

谢谢!