ZIGBEE学习笔记五——读取温度电量信息
来源:互联网 发布:开淘宝店货源从哪里来 编辑:程序博客网 时间:2024/06/02 17:52
1、传感器节点sensor采集数据发往收集节点collector
什么时候传感器节点开始读取温度电池电量信息的?
从绑定成功后开始的,看下zb_BindConfirm()这个函数:
*********************************
void zb_BindConfirm( uint16 commandId, uint8 status )
{
if ( ( status == ZB_SUCCESS ) && ( myAppState == APP_START ) )
{
myAppState = APP_BOUND;
//Start reporting sensor values
myApp_StartReporting();
}
else
{
// Continue to discover a collector
osal_start_timerEx( sapi_TaskID, MY_FIND_COLLECTOR_EVT, myBindRetryDelay );
}
}
*********************************
可以看到如果绑定成功则调用 myApp_StartReporting()开始报告传感器的数据值.
看下myApp_StartReporting()这个函数:
*********************************
//周期性地读取传感器采集的数据
void myApp_StartReporting( void )
{
//温度
osal_start_timerEx( sapi_TaskID, MY_REPORT_TEMP_EVT, myTempReportPeriod );
//电池能量
osal_start_timerEx( sapi_TaskID, MY_REPORT_BATT_EVT, myBatteryCheckPeriod );
HalLedSet( HAL_LED_1, HAL_LED_MODE_ON );
}
*********************************
可以看到这里设定两个软定时器定时触发MY_REPORT_TEMP_EVT事件和MY_REPORT_BATT_EVT事件,即报告温度值事件和报告电池电量事件.注意这些事件属于ZB_USER_EVENTS,用户应用事件ZB_USER_EVENTS事件有以下这些:
// This must be the last event to be processed
/*
// Application osal event identifiers
// Bit mask of events ( from 0x0000 to 0x00FF )
#define MY_START_EVT 0x0001
#define MY_REPORT_TEMP_EVT 0x0002
#define MY_REPORT_BATT_EVT 0x0004
#define MY_FIND_COLLECTOR_EVT 0x0008
*/
//而ZB_USER_EVENTS = 0x00FF;以上应用事件和ZB_USER_EVENTS相与都不为0,因此会执行
SAPI_ProcessEvent()中以下程序:
*********************************
if ( events & ( ZB_USER_EVENTS ) ) /*用户应用事件*/
{
// User events are passed to the application
zb_HandleOsalEvent( events );
// Do not return here, return 0 later
}
*********************************
调用zb_HandleOsalEvent():
*********************************
//SENSOR_REPORT_CMD_ID命令信息带有两个字节的负载:第一个字节指示读取的类型(温度或
//电池电压);第二个字节为传感器指示值(温度或电压指示).
void zb_HandleOsalEvent( uint16 event )
{
uint8 pData[2];
if ( event & MY_START_EVT )
{
zb_StartRequest();
}
if ( event & MY_REPORT_TEMP_EVT )//温度报告
{
// Read and report temperature value
pData[0] = TEMP_REPORT; //0x01(用来指示这是温度数据)
pData[1] = myApp_ReadTemperature();//温度值
//0xFFFE = INVALID_NODE_ADDR = ZB_BINDING_ADDR
zb_SendDataRequest( 0xFFFE, SENSOR_REPORT_CMD_ID, 2, pData, 0, AF_ACK_REQUEST, 0 );
/*因为是周期性地读取温度电池值,则每次事件处理完后要为下一次读取而重新开启一个定时器*/
osal_start_timerEx( sapi_TaskID, MY_REPORT_TEMP_EVT, myTempReportPeriod );
}
if ( event & MY_REPORT_BATT_EVT )//电池电量报告
{
// Read battery value
// If battery level low, report battery value
pData[0] = BATTERY_REPORT; //0x02(用来指示这是电池能量数据)
pData[1] = myApp_ReadBattery();
zb_SendDataRequest( 0xFFFE, SENSOR_REPORT_CMD_ID, 2, pData, 0, AF_ACK_REQUEST, 0 );
osal_start_timerEx( sapi_TaskID, MY_REPORT_BATT_EVT, myBatteryCheckPeriod );
}
if ( event & MY_FIND_COLLECTOR_EVT )
{
// Find and bind to a collector device
zb_BindDevice( TRUE, SENSOR_REPORT_CMD_ID, (uint8 *)NULL );
}
}
*********************************
主要涉及三个函数:myApp_ReadTemperature();myApp_ReadBattery()和zb_SendDataRequest();
myApp_ReadTemperature():读取温度值
myApp_ReadBattery:读取电池电量值
zb_SendDataRequest():把所读取数据发往绑定设备collector.
- ZIGBEE学习笔记五——读取温度电量信息
- ZgiBee读取温度电量信息
- zigbee温度读取函数 (cc2530内部)
- ZigBee组网学习笔记(五)--无线数据传输
- zigbee学习笔记1——基本概念
- zigbee cc2530 AD 转换温度 学习总结
- Android学习笔记——读取通讯录信息
- 树莓派学习笔记——获取树莓派CPU温度
- 树莓派学习笔记——Python SQLite插入温度记录
- 树莓派学习笔记——Python SQLite查询历史温度
- IOS/Android 读取蓝牙设备电量信息
- zigbee学习笔记——四种地址绑定模式
- ZigBee学习笔记——ZStack的架构
- zigbee学习之ADC采集芯片内部的温度
- ZIGBEE AD 转换 片内温度学习总结
- zigbee networks 学习笔记
- zigbee学习笔记---入门
- ZigBee学习笔记_osal_int_disable()
- zigbee学习笔记---通信例程之GenericApp
- Struts,Hibernate,Spring经典面试题
- EPF与Myeclipse 增强代码自动智能提示
- 地理坐标与屏幕坐标转换(VC++)
- 图形界面 时钟表盘
- ZIGBEE学习笔记五——读取温度电量信息
- 大话设计模式笔记----简单工厂模式
- ant 自动上传
- 跟我一起写 Makefile
- 恢复Joomla管理员密码
- poj 1517 u Calculate e
- 骗子改电脑配置信息兜售垃圾,怕上当进来学习一下
- Android中如何做到Service被关闭后又自动启动
- poj 1962 Corporative Network