看了大概有一周,做一个温度传感器实验试试手。
传感器采用18b20,十分常见,网上模块化的程序很多,就不做介绍了。
主要是目的是记录下怎么加入ZIGBEE工程的过程。
1、将12b20函数文件和头文件放入SampApp/source文件下
2、在工程里添加这两个文件入APP目录下
3、在SampleApp文件下,添加#include "ds18b20.h"
4、添加管脚初始化语句
void SampleApp_Init( uint8 task_id )
{
SampleApp_TaskID = task_id;
SampleApp_NwkState = DEV_INIT;
SampleApp_TransID = 0;
P0SEL & =0X7F; //18b20管脚
5、添加协调器程序 添加到SampleApp.c中,这个函数需要自行添加并申明。
void SampleApp_Send_P2P_Message(void)
{
byte str[5]
char strTemp[10]
byte temp;
temp=ReadDs18b20();
str[0]=temp/10+48;
str[1]=temp%10+48;
str[0]='';
str[0]='c';
str[0]='/0';
osal_memcpy(strTemp,"TEMP:",5);
osal_memcpy(&strTemp[5],str,5);
HalLcdWriteString(strTemp,HAL_LCD_LINE_3);//LCD显示数据
//将无线数据发送给协调器(插有18b20的主机)
if(AF_DataRequest(&SampleApp_P2P_DstAddr,
&SampleApp_epDesc,
SAMPLEAPP_P2P_CLUSTERID,
4,
str,
&SampleApp_TransID,
AF_DISCV_ROUTE,
AF_DEFAULT_RADIUS)==afStatus_SUCCESS)
{
}
else
{
}
}
6、添加从机接受程序,在SampleApp_MessageMSGCB进行修改即可
void SampleApp_SendFlashMessage( uint16 flashTime )
{
uint8 buffer[3];
buffer[0] = (uint8)(SampleAppFlashCounter++);
buffer[1] = LO_UINT16( flashTime );
buffer[2] = HI_UINT16( flashTime );
if ( AF_DataRequest( &SampleApp_Flash_DstAddr, &SampleApp_epDesc,
SAMPLEAPP_FLASH_CLUSTERID,
3,
buffer,
&SampleApp_TransID,
AF_DISCV_ROUTE,
AF_DEFAULT_RADIUS ) == afStatus_SUCCESS )
{
}
else
{
// Error occurred in request to send.
}
}
7、因为传感器延时要求比较高,所以,移植过来的传感器驱动,需要把延时都改为系统的精确延时。
asm("nop");
8、分别烧入协调器和从机。