1.创建工程文件
工程文件需要嵌套式创建(提高文件的归一性)创建完后如下所示:
zigbee5.6sensor-->CC2530_lib和project
CC2530_lib里包含
project里包含
2.环境配置
三步走
3.创建Group
Group的创建需要和CC2530_lib的内容一致。不添加moudle文件,需多添加一个app文件。创建完的结果如下所示:
4.添加files
添加内容均与CC2530_lib里的文件夹中的.c文件相互对应。添加完的结果如下所示:
5.添加相对路径
6.添加main.c文件
在app里添加两个文件分别为collect.c和sensor.c文件。以collect.c文件添加为例,sensor.c同理
Rebuild All工程。出现两个报错(此报错为main文件中未添加代码,属于正常现象)
7.实现文件collect.c和sensor.c文件的切换
点击Workspace中的collect时,将文件app中的sensor.c文件进行隐藏(将文件app中的collect.c文件进行隐藏同理)
8.代码的编写
collect.c的代码
#include "hal_defs.h"
#include "hal_cc8051.h"
#include "hal_int.h"
#include "hal_mcu.h"
#include "hal_board.h"
#include "hal_led.h"
#include "hal_rf.h"
#include "basic_rf.h"
#include "hal_uart.h"
#define MAX_SEND_BUF_LEN 128
#define MAX_RECV_BUF_LEN 128
static uint8 pTxData[MAX_SEND_BUF_LEN]; //定义无线发送缓冲区的大小
static uint8 pRxData[MAX_RECV_BUF_LEN]; //定义无线接收缓冲区的大小
#define MAX_UART_SEND_BUF_LEN 128
#define MAX_UART_RECV_BUF_LEN 128
uint8 uTxData[MAX_UART_SEND_BUF_LEN]; //定义串口发送缓冲区的大小
uint8 uRxData[MAX_UART_RECV_BUF_LEN]; //定义串口接收缓冲区的大小
uint16 uTxlen = 0;
uint16 uRxlen = 0;
/*****点对点通讯地址设置******/
#define RF_CHANNEL 21 // 1频道 11~26
#define PAN_ID 0x1378 //2网络id
#define MY_ADDR 0x1234 //3本机模块地址
#define SEND_ADDR 0x5678 //4发送地址
/**************************************************/
static basicRfCfg_t basicRfConfig;
/******************************************/
void MyByteCopy(uint8 *dst, int dststart, uint8 *src, int srcstart, int len)
{
int i;
for(i=0; i<len; i++)
{
*(dst+dststart+i)=*(src+srcstart+i);
}
}
/****************************************************/
uint16 RecvUartData(void)
{
uint16 r_UartLen = 0;
uint8 r_UartBuf[128];
uRxlen=0;
r_UartLen = halUartRxLen();
while(r_UartLen > 0)
{
r_UartLen = halUartRead(r_UartBuf, sizeof(r_UartBuf));
MyByteCopy(uRxData, uRxlen, r_UartBuf, 0, r_UartLen);
uRxlen += r_UartLen;
halMcuWaitMs(5); //这里的延迟非常重要,因为这是串口连续读取数据时候需要有一定的时间间隔
r_UartLen = halUartRxLen();
}
return uRxlen;
}
/**************************************************/
// 无线RF初始化
void ConfigRf_Init(void)
{
basicRfConfig.panId = PAN_ID; //zigbee的ID号设置
basicRfConfig.channel = RF_CHANNEL; //zigbee的频道设置
basicRfConfig.myAddr = MY_ADDR; //设置本机地址
basicRfConfig.ackRequest = TRUE; //应答信号
while(basicRfInit(&basicRfConfig) == FAILED); //检测zigbee的参数是否配置成功
basicRfReceiveOn(); // 打开RF
}
/********************MAIN START************************/
void main(void)
{
uint16 len = 0;
halBoardInit();
ConfigRf_Init();
halLedSet(1);
halLedSet(2);
while(1){
if(basicRfPacketIsReady()){
halLedToggle(4);
len = basicRfReceive(pRxData,MAX_RECV_BUF_LEN,NULL);
halUartWrite(pRxData,len);
}
}
}
/************************MAIN END ****************************/
sensor.c的代码
#include "hal_defs.h"
#include "hal_cc8051.h"
#include "hal_int.h"
#include "hal_mcu.h"
#include "hal_board.h"
#include "hal_led.h"
#include "hal_rf.h"
#include "basic_rf.h"
#include "hal_uart.h"
#include "UART_PRINT.h"
#include "TIMER.h"
#include "get_adc.h"
#include "sh10.h"
#include <string.h>
#define MAX_SEND_BUF_LEN 128
#define MAX_RECV_BUF_LEN 128
static uint8 pTxData[MAX_SEND_BUF_LEN]; //定义无线发送缓冲区的大小
static uint8 pRxData[MAX_RECV_BUF_LEN]; //定义无线接收缓冲区的大小
#define MAX_UART_SEND_BUF_LEN 128
#define MAX_UART_RECV_BUF_LEN 128
uint8 uTxData[MAX_UART_SEND_BUF_LEN]; //定义串口发送缓冲区的大小
uint8 uRxData[MAX_UART_RECV_BUF_LEN]; //定义串口接收缓冲区的大小
uint16 uTxlen = 0;
uint16 uRxlen = 0;
/*****点对点通讯地址设置******/
#define RF_CHANNEL 21 // 1频道 11~26
#define PAN_ID 0x1378 //2网络id
#define MY_ADDR 0x5678 //3本机模块地址
#define SEND_ADDR 0x1234 //4发送地址
/**************************************************/
static basicRfCfg_t basicRfConfig;
uint8 APP_SEND_DATA_FLAG;
/******************************************/
/**************************************************/
// 无线RF初始化
void ConfigRf_Init(void)
{
basicRfConfig.panId = PAN_ID; //zigbee的ID号设置
basicRfConfig.channel = RF_CHANNEL; //zigbee的频道设置
basicRfConfig.myAddr = MY_ADDR; //设置本机地址
basicRfConfig.ackRequest = TRUE; //应答信号
while(basicRfInit(&basicRfConfig) == FAILED); //检测zigbee的参数是否配置成功
basicRfReceiveOn(); // 打开RF
}
/********************MAIN************************/
void main(void)
{
uint16 sensor_val;
uint16 len = 0;
halBoardInit();
ConfigRf_Init();
halLedSet(1);
halLedSet(2);
Timer4_Init();
Timer4_On();
while(1){
APP_SEND_DATA_FLAG = GetSendDataFlag();
if(APP_SEND_DATA_FLAG == 1){
#if defined (GM_SENSOR)
sensor_val = get_adc();
printf_str(pTxData,"光照传感器电压:%d.%02dV\r\n",sensor_val/100,sensor_val%100);
#endif
#if defined (QT_SENSOR)
sensor_val = get_adc();
printf_str(pTxData,"气体传感器电压:%d.%02dV\r\n",sensor_val/100,sensor_val%100);
#endif
halLedToggle(3);
basicRfSendPacket(SEND_ADDR,pTxData,strlen(pTxData));
Timer4_On();
}
}
}
/************************main end ****************************/
9.进行代码编译
均未出现代码的报错
10.标志位的添加
切换到sensor.c文件中,进行Defined symbols的添加,添加内容为GM_SENSOR。
11.打印串口信息
将collect.c文件烧录的zigbee板,连接到串口。打印信息为 "光照传感器电压"。
当修改代码为如下所示时
#if defined(TEM_SENSOR)
call_sht11(&sensor_tem,&sensor_val);
printf_str(pTxData,"温湿度传感器,温度:%d.%d,湿度:%d.%d\r\n",
sensor_tem/10,sensor_tem%10,sensor_val/10,sensor_val%10);
#endif
打印信息为如下所示(zigbee未接入传感器所打印的数据)
感谢各位读者的阅读!希望大家给出一键三连,多多支持原创。有错误和不解的地方,欢迎各位读者在评论区讨论,我也会不断学习不断改进,做出更加优质的作品!!!
最后相关代码已传入资源中,可根据需求自行获取。