1.所用的資源
1.兩個(gè)Zigbee透傳模塊
2.兩塊32板(我手上的是VET6和RCT6的兩塊板子),其它的板子也可以,不過注意一下啟動文件對應(yīng)
3.顆粒物傳感器
2.Zigbee模塊簡介
DL-22無線串口模塊
1.工作模式分為點(diǎn)對點(diǎn)和廣播模式
點(diǎn)對點(diǎn)模式,要設(shè)置一個(gè)發(fā)送端,一個(gè)接收端,根據(jù)它說明書進(jìn)行設(shè)置就好,還需要設(shè)置相同的信道,信道就是與傳輸數(shù)據(jù)的通道,不同的信道不會相互干擾
2.廣播模式,所有的Zigbee模塊都在同一個(gè)信道,任何一個(gè)模塊發(fā)出的數(shù)據(jù)都可以被其它模塊接收
我這里采用的是點(diǎn)對點(diǎn)模式,根據(jù)說明書已設(shè)置好發(fā)送與接收
3. STM32板上用到的資源
1.發(fā)送端32板:用到三個(gè)USART串口,串口1用于檢驗(yàn)單獨(dú)節(jié)點(diǎn)傳感器數(shù)據(jù)是否采集成功,與串口助手通信,在確保傳感器數(shù)據(jù)采集ok的情況下也可以不用,串口2用于與采集傳感器數(shù)據(jù),串口3用來連接Zigbee模塊。
2.接收端32板:用到兩個(gè)USART串口,串口1用于與串口助手通信,串口2用于連接Zigbee模塊。
3.我這里串口對應(yīng)的板子引腳
串口1:PA9 PA10
串口2: PA2 PA3
串口3: PB10 PB11
4.代碼部分
1.在之前記錄的串口通信博客的基礎(chǔ)上。
2.Zigbee模塊其實(shí)就是透傳作用,發(fā)送端通過串口2采集顆粒物傳感器數(shù)據(jù)到單片機(jī)內(nèi),通過串口3傳給Zigbee模塊,兩個(gè)Zigebee模塊通信,接收端Zigbee模塊通過串口2將接收的數(shù)據(jù)傳到板內(nèi),再通過串口1與串口助手進(jìn)行通信。所以關(guān)鍵的地方就在發(fā)送端的串口2接收傳感器數(shù)據(jù)完成后,把數(shù)據(jù)通過串口3發(fā)送到Zigbee模塊,所以需要在串口二的中斷函數(shù)里面加入串口3發(fā)送數(shù)據(jù)的命令。
3.發(fā)送端串口2中斷文章來源:http://www.zghlxwxcb.cn/news/detail-404860.html
//功能:串口2中斷服務(wù)程序,接收到數(shù)據(jù)會進(jìn)入這個(gè)函數(shù)
//參數(shù):無
//返回:無
u8 USART_RX_BUF[10];//定義接收數(shù)組,看傳感器返回的有多少字節(jié)數(shù)據(jù)
u8 USART_RX_STA=0;//數(shù)組標(biāo)志位,如第0位、第一位
static char start=0; //開始接收數(shù)據(jù)標(biāo)志位
void USART2_IRQHandler(void)
{
u8 Res=0;//定義一個(gè)數(shù)來接收每次讀取的數(shù)據(jù)
if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET) //接收中斷,每一個(gè)字節(jié)都會中斷一次
{
Res =USART_ReceiveData(USART2); //讀取接收到的字節(jié)數(shù)據(jù)
//接收數(shù)據(jù)時(shí)不要隨便加入占用時(shí)間的命令,如串口打印,會影響下面數(shù)據(jù)字節(jié)的接收
if(Res == 0xFF) //如果接收的第一位數(shù)據(jù)是0XFF(這個(gè)是查看傳感器的手冊得知的,這里相當(dāng)于進(jìn)行校驗(yàn))
{
start=1; //開始接收數(shù)據(jù)標(biāo)志位,一旦第一個(gè)接收正確,就就繼續(xù)向下接收
}
if(start== 1)
{
USART_RX_BUF[USART_RX_STA] = Res ; //把接收到的數(shù)據(jù)存到數(shù)組里面
USART_RX_STA++;//數(shù)組標(biāo)志位加1
if(USART_RX_STA >= 10 && (USART_RX_BUF[1]==0X01))//這里還校驗(yàn)了接收的第二個(gè)數(shù)據(jù)
{
printf("PM2.5:%d\n",USART_RX_BUF[3]);//通過 串口1打印接收數(shù)組里的數(shù)據(jù)
USART_SendData(USART3,USART_RX_BUF[3]); //將數(shù)據(jù)通過串口3發(fā)出 uart3_send_buff(USART_RX_BUF,10);
USART_RX_STA=0;//重新開始接收
USART_RX_BUF[0] = 0;
start=0;
}
}
}
}
4.接收端的代碼就和之前串口采集傳感器數(shù)據(jù)主動上傳的差不多了,只是把采集傳感器的數(shù)據(jù)換成了采集Zigbee獲得的數(shù)據(jù)。
發(fā)送端和接收端的完整代碼:放評論區(qū)了文章來源地址http://www.zghlxwxcb.cn/news/detail-404860.html
到了這里,關(guān)于STM32+Zigbee模塊實(shí)現(xiàn)串口通信獲取傳感器數(shù)據(jù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!