- 积分
- 284
- 下载分
- 分
- 威望
- 点
- 原创币
- 点
- 下载
- 次
- 上传
- 次
- 注册时间
- 2015-10-18
- 精华
|
2#
发表于 2015-12-19 11:43:13
|
只看该作者
来自: 山东聊城 来自 山东聊城
本帖最后由 Iemky 于 2015-12-19 11:51 编辑
diy zigbee模块制作温湿传感器
二、源代码解说
在网上下载ZIGBEE模块源代码。主要三个文件:SerialApp.c、DHT11.H、DHT11.C。
SerialApp.c是实现层,只要我们在这里调用相关的功能就可以。
DHT11.H、DHT11.C就是获取温湿度的(通过小修改还可以用在其它单片机上)
1、将DHT11.H、DHT11.C导入项目(这步源代码已经存在,可以不用操作)
然后直接“选择”再确定,就可以添加进来了!
2、在SerialApp.c引用DHT11.h。
添加:#include "DHT11.h"
3、设置获取温湿度间隔
#define INTERVAL 10000 //1000=1秒,获取温湿度间隔,建议大于10秒以上(采集越小耗能就越多)
4、在SerialApp_ProcessEvent启用:
osal_start_timerEx( SerialApp_TaskID, SERIALAPP_SAMPLE_EVT, INTERVAL); //定时采样数据(这里就是启动)
5、采集代码部份
if ( events & SERIALAPP_SAMPLE_EVT )
{
uint8 *sendBuf="SERIALAPP_SAMPLE_EVT\n";
HalUARTWrite(SERIAL_APP_PORT,sendBuf,osal_strlen(sendBuf));
osal_memset(SerialApp_TxBuf, 0, SERIAL_APP_TX_MAX);
//adc = GetAdc(); //设备自身湿度,可以不用
uint8 W[3]={0};//温度
uint8 S[3]={0};//湿度
DHT11_TEST();//获取温湿度
W[0]=wendu_shi+48;//转为字符
W[1]=wendu_ge+48;//转为字符
S[0]=shidu_shi+48;//转为字符
S[1]=shidu_ge+48;//转为字符
if(S[0]=='0' && S[1]=='0')
{
//如果获取不到则不处理
}
else
{
//将获取到的温湿度传到网关
uint8 SerialApp_Tx[SERIAL_APP_TX_MAX+1]={0};//声明发送字符串
sprintf(SerialApp_Tx, "{ck001002%s.%s}", S, W);//温湿度写入字符串 //%4.3fV DEVID, adc//%2d.%2d
HalUARTWrite(SERIAL_APP_PORT,SerialApp_Tx,osal_strlen(SerialApp_Tx));//在串口打印,方便我们自己调式
//使用无线发送到网关
SerialApp_TxAddr.addrMode =(afAddrMode_t) Addr16Bit;
SerialApp_TxAddr.addr.shortAddr = 0xFFFF;//0x0000
SerialApp_TxAddr.endPoint = SERIALAPP_ENDPOINT;
AF_DataRequest(&SerialApp_TxAddr, (endPointDesc_t *)&SerialApp_epDesc,
SERIALAPP_CLUSTERID1, osal_strlen(SerialApp_Tx), SerialApp_Tx,&SerialApp_MsgID,0,AF_DEFAULT_RADIUS);
//发送完毕
}
HAL_TOGGLE_LED1();//点亮或关闭LED1 P1.0针脚
osal_start_timerEx( SerialApp_TaskID, SERIALAPP_SAMPLE_EVT, INTERVAL);//等待间隔时间后,再使用定时器运行SERIALAPP_SAMPLE_EVT事件!
return ( events ^ SERIALAPP_SAMPLE_EVT );
}
6、点击编译
上面完成后,看到有绿色的调试,按F5就刷代码成功了!
|
|