zigbee協議棧應用(五)協議棧與溫溼度感測器DHT11
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並開啟串列埠,串列埠請選擇
自 己的埠號。終端連網成功後會向協調器發資料