[其他ST产品] 蓝牙模块实现数据的远程传输

[复制链接]
4618|34
 楼主| 雨果喝水 发表于 2023-5-30 16:58 | 显示全部楼层 |阅读模式
项目场景
本人在做STM32硬件开发项目中,传输数据这一块的通信模块基本都是ZigBee或者蓝牙HC-05模块,这两个模块引脚上都有TX/RX进行数据的输出与输入;在开发前会以为通信这方面应该会非常的难,但其实数据传输的原理在代码上非常的简单,本文主要以ZigBee模块进行详细解释。

硬件准备
本项目前期需要准备的硬件有:
STM32开发板(我这边主要用的是STM32F103ZET6精英版,后续的代码在STM32F1都是通用的):

445126475ba9ac388f.png
ZigBee模块(两个):

789406475baa8e192e.png
USB-TTL模块:
355486475bab56eb6a.png


 楼主| 雨果喝水 发表于 2023-5-30 16:59 | 显示全部楼层
实现过程
实现缘由
代码链接:https://pan.baidu.com/s/1b4SwmOc-bZfcHyeL5mNzLw
提取码:adeh
本项目使用的是正点原子的代码模板,打开工程后,可以看到在HAREWARW文件里多了timer.c和usart3.c两个C语言文件,而SYSTEM文件中本身也有一个usart.c文件。


860636475bae78bfd3.png
 楼主| 雨果喝水 发表于 2023-5-30 16:59 | 显示全部楼层
而usart3.c就是ZigBee模块进行通信的关键。
在原本的代码中,我们可以直接通过prinf();函数将数据以串口1的方式通过USB_232接口传入到电脑中,通过串口调试助手直接打印显示,并且打印的数据中英文都可以适用(中文可能会有传输损耗)。
然而这个串口接口很多时候也可以用来烧录代码,有很多功能的复用。因此我们大多情况下不能通过这个串口1接入ZigBee/蓝牙模块实现数据的远程传输
470606475bb0225192.png
 楼主| 雨果喝水 发表于 2023-5-30 16:59 | 显示全部楼层
而且prinf();这个应该是C语言自带的函数方法,在keil5编程软件中是找不到源头的。
479236475bb0d8dd46.png
 楼主| 雨果喝水 发表于 2023-5-30 17:00 | 显示全部楼层
因此我们需要启用其他的串口接口,参考串口1的传输方式,采用串口3的接口,自己另写一个新的u3_printf();使得数据能够通过串口3,接入ZigBee模块,使得数据能够打印到电脑的串口调试助手中,实现数据的远程传输。
 楼主| 雨果喝水 发表于 2023-5-30 17:00 | 显示全部楼层
原理展现
在usart3.c中有这样一段代码:
6996475bb1eded47.png
 楼主| 雨果喝水 发表于 2023-5-30 17:00 | 显示全部楼层
是对串口3的初始化,对应的引脚为PB10和PB11;我们首先通过USB-TTL模块进行引脚连接,连接方式如下:

  1. PB10-RX
  2. PB11-TX
 楼主| 雨果喝水 发表于 2023-5-30 17:00 | 显示全部楼层
主函数代码如下所示:
  1. int main(void)
  2. {               
  3.         delay_init();                     //延时函数初始化          
  4.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先
  5.        
  6.         usart3_init(9600);       
  7.         uart_init(115200);         //串口初始化为115200
  8.        
  9.         while(1)
  10.         {                                  
  11.                 delay_ms(300);
  12.                 printf("\r\n串口1发出消息");//串口1发出消息 通过(正常RS232串口)引线
  13.                 delay_ms(300);
  14.                 u3_printf("\r\n串口3发出消息");//串口3发出消息 通过(PB10输出 PB11输入  连接USB-TTL模块)引线
  15.                 delay_ms(300);
  16.   }
  17. }
 楼主| 雨果喝水 发表于 2023-5-30 17:01 | 显示全部楼层
可以看到有两个printf进行数据打印;其中u3_printf();的代码原理体现在uasrt3.c中的:

  1. void u3_printf(char* fmt,...)  
  2. {  
  3.         u16 i,j;
  4.         va_list ap;
  5.         va_start(ap,fmt);
  6.         vsprintf((char*)USART3_TX_BUF,fmt,ap);
  7.         va_end(ap);
  8.         i=strlen((const char*)USART3_TX_BUF);                //此次发送数据的长度
  9.         for(j=0;j<i;j++)                                                        //循环发送数据
  10.         {
  11.           while(USART_GetFlagStatus(USART3,USART_FLAG_TC)==RESET); //循环发送,直到发送完毕   
  12.                 USART_SendData(USART3,USART3_TX_BUF[j]);
  13.         }
  14. }


通过这样的写法,就可以将数据通过串口3进行展现了,代码为了突出效果,将串口1和串口3数据同步输出,进行展现。
 楼主| 雨果喝水 发表于 2023-5-30 17:02 | 显示全部楼层
成果展现
USB-TTL模块有线数据展示
首先按之前串口3的连接方式连接硬件,如下图所示:

983316475bb8a36bdd.png

 楼主| 雨果喝水 发表于 2023-5-30 17:02 | 显示全部楼层
另一端连接到电脑,若烧录好代码后,该模块中的TXD附近的LED等会不断的闪烁:

524006475bb9c1c803.png

由于本人用的是串口烧录,因此串口1也可以输出数据,打开两个串口调试助手,分别设置对应的串口和波特率,打开后数据接收情况如下图所示:
378356475bbb69de85.png
可以看到数据能够同步在两个串口中进行显示。
 楼主| 雨果喝水 发表于 2023-5-30 17:20 | 显示全部楼层
ZigBee模块远程传输数据展示
将两个ZigBee模块通过以下方式进行对应的配置:
590756475bfc1e769b.png
 楼主| 雨果喝水 发表于 2023-5-30 17:21 | 显示全部楼层
接下来将其中一个ZigBee模块同之前的USB-TTL模块连接STM32板子的方式对应连接(USB-TTL模块在连接时可以不连接电源和地 但是Zigbee必须连接电源和地);

  1. PB10-RX
  2. PB11-TX
 楼主| 雨果喝水 发表于 2023-5-30 17:21 | 显示全部楼层
另一个ZigBee模块和USB-TTL模块连接到电脑,呈现样式如下:
132526475c00ad30cb.png
 楼主| 雨果喝水 发表于 2023-5-30 17:21 | 显示全部楼层
本人是将STM32一方的ZigBee模块设为A端(呈现为双红色),接入电脑的一端为B端(呈现为双绿色);
两边连接成功之后,STM32一方的ZigBee模块会变成一红一绿,并且图中两个标红框位置的地方会同步闪烁红光,说明数据正在实时传输。
全文到这个地方,便基本实现了添加串口接口来接入ZigBee模块实现数据的远程传输。
 楼主| 雨果喝水 发表于 2023-5-30 17:22 | 显示全部楼层
最后总结
至此,我们就基本完成了再STM32上搭建ZigBee/蓝牙模块来实现数据的远程传输,可以结合之前STM32——两个模块代码的合并的博客对传感器采集到的数据进行整合,通过这里的传输方式上传到电脑中!
loutin 发表于 2023-6-7 13:39 | 显示全部楼层
将蓝牙模块的TXD、RXD、GND等引脚连接到STM32芯片上,并设置相应的串口参数。
MessageRing 发表于 2023-6-7 23:14 | 显示全部楼层
串口可以远距离通信吗
fengm 发表于 2023-6-8 13:35 | 显示全部楼层
在STM32芯片中,可以通过连接蓝牙模块实现数据的远程传输。
loutin 发表于 2023-6-8 15:28 | 显示全部楼层
基于STM32的两个蓝牙(HC-05)之间的相互通信。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

90

主题

1213

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部