1.实现点播通讯
1.1实现步骤
(1)添加点播函数声明
(2)搜索 afAddrGroup,在它下增加对 SampleApp_P2P_DstAddr 配置,可直接复制广播的配
置 修改即可,增加后如下:
(3)增加点播发送函数
//点播发送函数
void SampleApp_Send_P2P_Message( void )
{
byte i, temp[3], humidity[3], strTemp[7];
DHT11(); // 获取温湿度
// 将温湿度的转换成字符串 , 供 LCD 显示
temp[0] = wendu_shi+0x30;
temp[1] = wendu_ge+0x30;
temp[2] = '\0';
humidity[0] = shidu_shi+0x30;
humidity[1] = shidu_ge+0x30;
humidity[2] = '\0';
// 将数据整合后方便发给协调器显示
osal_memcpy(strTemp, temp, 2);
osal_memcpy(&strTemp[2], " ", 2);
osal_memcpy(&strTemp[4], humidity, 3);
// 获得的温湿度通过串口输出到电脑显示
HalUARTWrite(0, "T&H:", 4);
HalUARTWrite(0, strTemp, 6);
HalUARTWrite(0, "\n",1);
/*
// 输出到 LCD 显 示
for(i=0; i<3; i++) // 输出温度、湿度提示字符
{
if(i==0)
{
LCD_P16x16Ch(i*16,4,i*16);
LCD_P16x16Ch(i*16,6,(i+3)*16);
}
else
{
LCD_P16x16Ch(i*16,4,i*16);
LCD_P16x16Ch(i*16,6,i*16);
}
}
LCD_P8x16Str(44, 4, temp); //LCD 显示温度值
LCD_P8x16Str(44, 6, humidity); //LCD 显示湿度值*/
if ( AF_DataRequest( &SampleApp_P2P_DstAddr, &SampleApp_epDesc,
SAMPLEAPP_P2P_CLUSTERID,
6,
strTemp,
&SampleApp_TransID,
AF_DISCV_ROUTE,
AF_DEFAULT_RADIUS ) == afStatus_SUCCESS )
{
}
else
{
// Error occurred in request to send.
}
}
(4)搜索 SampleApp_ProcessEvent,找到 if ( events &
SAMPLEAPP_SEND_PERIODIC_MSG_EVT ) 修改成如下代码:
if ( ( events & & SAMPLEAPP_SEND_PERIODIC_MSG_EVT ) )
{ {
// Send the periodic message
//SampleApp_SendPeriodicMessage(); // 注释原来的发送函数
SampleApp_Send_P2P_Message(); // 增加点播的发送函数
// Setup to send message again in normal period (+ a a little jitter)
osal_start_timerEx( SampleApp_TaskID, SAMPLEAPP_SEND_PERIODIC_MSG_EVT,
(SAMPLEAPP_SEND_PERIODIC_MSG_TIMEOUT + + (osal_rand() & & 0x00FF)) );
// return unprocessed events
return (events ^ ^ SAMPLEAPP_SEND_PERIODIC_MSG_EVT);
} }
(5)协调器不需要周期发数据,注释协调器的周期事件
case ZDO_STATE_CHANGE:
SampleApp_NwkState = (devStates_t)(MSGpkt->hdr.status);
if ( //(SampleApp_NwkState == DEV_ZB_COORD) ||
(SampleApp_NwkState == DEV_ROUTER)
|| (SampleApp_NwkState == DEV_END_DEVICE) )
{
// Start sending the periodic message in a regular interval.
osal_start_timerEx( SampleApp_TaskID,
SAMPLEAPP_SEND_PERIODIC_MSG_EVT,
SAMPLEAPP_SEND_PERIODIC_MSG_TIMEOUT );
}
else
{
// Device is no longer in the network
}
break;
2.实现无线温湿度传感
2.1添加文件
在协议栈的 APP 目录树下点击右键--Add--添加 DHT11.c和 DHT11.h文件。并在
SampleApp.c
文件中包含 DHT11.h头文件。
2.2初始化串口与IO口
//------------------------配置串口---------------------------------
MT_UartInit(); //串口初始化
MT_UartRegisterTaskID(task_id); //注册串口任务
P0SEL&=0x7f;//设置P_7为通用IO
HalUARTWrite(0,"UartInit OK\n", sizeof("UartInit OK\n"));
2.3DH11 .c 文件还需要修改一个地方。打开文件将原来的延时函数改成协议栈自带的延时函
数,保证时序的正确。同时要包含 #include"OnBoard.h"
1.选择 CoodinatorEB, 下载到板 A;作为协调器,通过 USB 线跟电脑连接.
2.选择 EndDeviceEB, 下载到板 B;作为终端设备无线发送数据给协调器,也通过
USB 线跟电脑连接.
3.给两块开发板上电,打开串口调试助手,设为:115200 8N1并打开串口,串口请选择
自 己的端口号。终端连网成功后会向协调器发数据