700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 基于Basic RF的智能家居控制系统---智能照明功能(照明端)

基于Basic RF的智能家居控制系统---智能照明功能(照明端)

时间:2019-02-17 14:48:28

相关推荐

基于Basic RF的智能家居控制系统---智能照明功能(照明端)

通过两个cc2530的点对点功能来实现—智能照明功能 两个cc2530分为照明节点和中控节点

要实现的功能:

1–照明节点每隔0.5秒将灯的亮灭情况上报给中控节点

2–用户可以通过中控节点的按键1可远程控制照明节点上灯的状态翻转

3–中控节点使用本地的led灯来指示远程照明灯的亮灭情况,即远程照明灯亮则本地灯亮,反之亦然。

在做这个项目之前,我们必须要有cc2530的基础,这里博主就默认你们已经了解并学习过cc2530了。然后,去找一个点对点的原始代码包,这边博主也默认你们准备好了,,如果没有,私聊我发给你。

首先

我们了解一下点对点这个包的内容,我们刚打开文件会是这样子的:

在这之后

我们要设置频道,网络id,本机模块地址,发送地址,

两个设备进行通信时,我们的频道和网络id必须相同,然后设置一个本机地址是照明端的,发送地址是中控端,在初始化中,在初始化(一定是初始化照明端地址)。

初始化完后:

地址可以随便写的,可以不用完全抄我的,只不过两个板子的频道和id要一样。

然后,我们来认识一下主要的函数:在basic_rf.h中:

uint8 basicRfInit(basicRfCfg_t *pRfConfig);(这个是初始化基本射频数据结构)我们上面初始化的结构体就是它的参数,这里要注意的是:在调用此函数前,必须先调用HAL层的halBoardInit()函数初始化板载外设和射频硬件,

发送数据至目标数据的节点

destAddr—目标地址

pPayload—要发送的数据缓存区地址

length----发送的数据长度

uint8 basicRfSendPacket(uint16 destAddr, uint8 *pPayload, uint8 length)

//判断Basic RF层是否已经准备好接收数据

//准备好返回true,否则返回false

uint8 basicRfPacketIsReady(void)

//将Basic RF层接收到的数据和RSSI值存入预先分配好的缓冲区

//pRxData—存放接收数据的缓冲区地址

//len-------接收数据长度

//pRssi-----存放RSSI值变量地址

//返回值:实际写入缓冲区的数据字节数

uint8 basicRfReceive(uint8 *pRxData, uint16 len, int16 *pRssi)

//打开数据接收器

void basicRfReceiveOn(void);

//关闭数据接收器

void basicRfReceiveOff(void);

这些就是主要的内容,我们大部分的内容都可以用这些函数解决。

接下来就是通过这些函数,结合基础的cc2530知识,完成照明端的编写,

这里我采用板载led灯作为照明灯,

这是给出我的主循环内容仅供参考:如果要源码评论区

while(1){/* user code start */led_count++; //LED发送间隔增加if(basicRfPacketIsReady()) //如果准备好接收{if(basicRfReceive(pRxData,APP_PAYLOAD_LENGTH,NULL)>0) //如果接收数据长度大于0{if(rcvdata_process(pRxData,&masterCMD,&slaveCMD1,&slaveCMD2)){//接收内容错误}else //接收内容正确{if(masterCMD==MCMD_CTRL_LIGHT) //如果接收到控制灯的指令{if(slaveCMD1==0x01) //如果是开灯命令{LED1=0;led_state=1;}else if(slaveCMD1==0x02) //如果是关灯命令{LED1=1;//高电平熄灭led_state=0;}}}memset(pRxData,0,7);}}if(led_count>=10) //如果时间间隔大于500ms{led_count=0;//时间间隔清零if(led_state==0) //如果LED状态为灭{build_payload(pTxData,MCMD_LIGHT_STATUS,SCMD_CLOSE,0x00); //构建发送函数,主指令为照明灯状态,副指令1为开/关 }if(led_state==1){build_payload(pTxData,MCMD_LIGHT_STATUS,SCMD_OPEN,0x00);}basicRfSendPacket(CONTROL_ADDR,pTxData,APP_PAYLOAD_LENGTH); //发送数据包}halMcuWaitMs(50);/* user code end */}

照明端的主要功能就编写完成了。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。