1.所用的资源
1.两个Zigbee透传模块 2.两块32板(我手上的是VET6和RCT6的两块板子),其它的板子也可以,不过注意一下启动文件对应 3.颗粒物传感器
2.Zigbee模块简介
DL-22无线串口模块
1.工作模式分为点对点和广播模式 点对点模式,要设置一个发送端,一个接收端,根据它说明书进行设置就好,还需要设置相同的信道,信道就是与传输数据的通道,不同的信道不会相互干扰 2.广播模式,所有的Zigbee模块都在同一个信道,任何一个模块发出的数据都可以被其它模块接收 我这里采用的是点对点模式,根据说明书已设置好发送与接收
3. STM32板上用到的资源
1.发送端32板:用到三个USART串口,串口1用于检验单独节点传感器数据是否采集成功,与串口助手通信,在确保传感器数据采集ok的情况下也可以不用,串口2用于与采集传感器数据,串口3用来连接Zigbee模块。 2.接收端32板:用到两个USART串口,串口1用于与串口助手通信,串口2用于连接Zigbee模块。 3.我这里串口对应的板子引脚 串口1:PA9 PA10 串口2: PA2 PA3 串口3: PB10 PB11
4.代码部分
1.在之前记录的串口通信博客的基础上。 2.Zigbee模块其实就是透传作用,发送端通过串口2采集颗粒物传感器数据到单片机内,通过串口3传给Zigbee模块,两个Zigebee模块通信,接收端Zigbee模块通过串口2将接收的数据传到板内,再通过串口1与串口助手进行通信。所以关键的地方就在发送端的串口2接收传感器数据完成后,把数据通过串口3发送到Zigbee模块,所以需要在串口二的中断函数里面加入串口3发送数据的命令。 3.发送端串口2中断
u8 USART_RX_BUF[10];
u8 USART_RX_STA=0;
static char start=0;
void USART2_IRQHandler(void)
{
u8 Res=0;
if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)
{
Res =USART_ReceiveData(USART2);
if(Res == 0xFF)
{
start=1;
}
if(start== 1)
{
USART_RX_BUF[USART_RX_STA] = Res ;
USART_RX_STA++;
if(USART_RX_STA >= 10 && (USART_RX_BUF[1]==0X01))
{
printf("PM2.5:%d\n",USART_RX_BUF[3]);
USART_SendData(USART3,USART_RX_BUF[3]);
USART_RX_STA=0;
USART_RX_BUF[0] = 0;
start=0;
}
}
}
}
4.接收端的代码就和之前串口采集传感器数据主动上传的差不多了,只是把采集传感器的数据换成了采集Zigbee获得的数据。 下面是发送端和接收端的完整代码: 百度网盘接:https://pan.baidu.com/s/1pVGY3GZsY5feTuPM7yQuqw 提取码: CCCC
|