返回列表 发新帖我要提问本帖赏金: 80.00元(功能说明)

[STM32G4] NUCLEO开发板驱动传说中最远通信600米的串口BLE蓝牙模块

[复制链接]
 楼主| gaoyang9992006 发表于 2022-7-20 17:00 | 显示全部楼层 |阅读模式
<
本帖最后由 gaoyang9992006 于 2022-8-1 17:08 编辑

#申请原创#测评贴@21小跑堂 @21ic小管家

之前发过类似主题的帖子,只是蓝牙模块通信距离近,为了实现远距离手机控制远端设备,我让蓝牙跟手机通信,蓝牙跟单片机通信,单片机再去I2C控制一个Lora去跟远端单片机上的Lora通信,这听起来就很绕了,无非就是因为手机默认都有蓝牙,没有Lora,所以就这么绕了。最近看到有模块厂商推出了最远支持视线"主从600米远距离BLE5.1蓝牙模块",这一下震惊到我了,蓝牙可以这么牛了吗?
于是我买来帮大家测评一下,到底牛不牛,为了充分发挥效果,我还买了两根天线,主机模式模块,从机模式模块各买了一个。
先晒图,如下所示,第1个是我以前买的通信距离只有80米的BT24,第2个和第3个是新买的BT24-PA主机模式模块和从机模式模块。
7648962d7b29de79c1.png
再看反面的接口备注,发现接口跟原来的是一样的,可以直接替换。
5293662d7b39b54a92.png
外接天线如下图所示
7123162d7b4883b65c.png
先不考虑通信和远距离测试,先测试穿墙能力。用STM32开发板给从机模式模块通电。打开手机APP(厂家有提供,另外我自己有开源的蓝牙BLE上位机APP,后面给提供源码),很容易连接上,如下所示。
9736462d7b3fa79109.jpg
在没有使用外接天线的情况下:在办公室内,可视距离下,是没问题的。信号强度几乎不变。当我出阳台的钢化玻璃门后并关闭玻璃门,发现信号丢失,断开连接。
在使用外接天线的情况下:在钢化门外关闭玻璃门,发现信号仍然很强,然后我拿着手机上楼,发现在上的办公室仍然保持连接,断开后重新连接也可以轻松连接上。看来是真的很强,由于这两天天气热,我先不测试户外距离600米了。等月底忙完再测,近几天有事忙。
接下来实现NUCLEO-STM32G431RB开发板通信。
使用STM32CubeMX配置工程,先选择该开发板的默认工程配置。
这里我们使用USART3与蓝牙模块通信,并根据蓝牙模块的默认通信频率设置该串口波特率为9600bps
1155362d7b62fdf12c.png
经过测试,模块可以与单片机正常通信。后续继续更新该帖。
这里先分享一下手机APP的源码
2293262d7c01b6fd20.png
  1. 变量 服务UUID 为 文本型
  2. 变量 通道UUID 为 文本型        
  3. 变量 设备地址 为 文本型


  4. 事件 主窗口.创建完毕()
  5.         '安卓6.0以上的系统需要动态申请权限,否则app可能无法正常运行
  6.         如果 权限操作1.取系统版本号()>=23 则
  7.                 权限操作1.申请全部权限()
  8.         结束 如果        
  9.         变量 结果 为 逻辑型
  10.         结果 = BLE蓝牙1.初始化()
  11.         弹出提示("初始化结果:" & 结果)        
  12. 结束 事件

  13. 事件 权限操作1.申请完毕(权限数组 为 文本型(),申请结果 为 整数型())
  14.         '可以把需要特殊权限的代码写在此处,当申请权限成功后再执行相关代码
  15. 结束 事件

  16. 事件 接收框.创建完毕()
  17.         接收框.置多行模式(真)
  18. 结束 事件

  19. 事件 图片框_返回.被单击()
  20.         BLE蓝牙1.释放资源()
  21.         结束程序()        
  22. 结束 事件

  23. 事件 搜索按钮.被单击()
  24.         如果 搜索按钮.标题 = "开始搜索" 则
  25.                 位置传感器1.开始监测()
  26.                 BLE蓝牙1.开始搜索()
  27.                 时钟1.时钟周期 = 10*1000
  28.                 搜索按钮.标题 = "停止搜索"
  29.         否则        
  30.                 BLE蓝牙1.停止搜索()
  31.                 时钟1.时钟周期 = 0
  32.                 搜索按钮.标题 = "开始搜索"
  33.         结束 如果
  34. 结束 事件

  35. 事件 时钟1.周期事件()
  36.         BLE蓝牙1.停止搜索()
  37.         搜索按钮.标题 = "开始搜索"
  38.         时钟1.时钟周期 = 0
  39. 结束 事件

  40. 事件 BLE蓝牙1.发现设备(名称 为 文本型,地址 为 文本型,MajorID 为 整数型,MinorID 为 整数型,配对状态 为 整数型)
  41.         '        如果 名称 = "BT24-PA" 则
  42.         如果 名称 = 对象名称框.内容 则
  43.         '屏蔽掉没有名称的蓝牙设备

  44. '                弹出提示("发现设备")
  45.                 列表框1.添加项目("名称:" & 名称 & "\n地址:" & 地址)
  46.                 列表框1.置项目标记(列表框1.取项目数()-1,地址)        
  47.         结束 如果
  48. 结束 事件

  49. 事件 BLE蓝牙1.信号强度改变(名称 为 文本型,地址 为 文本型,信号强度 为 整数型)
  50.         如果 名称 = "BT24" 则
  51.                 列表框1.置项目内容(0,"名称:" & 名称 & "\n地址:" & 地址 & "\n信号:" & 信号强度)
  52.         结束 如果                        
  53. 结束 事件

  54. 事件 列表框1.表项被单击(项目索引 为 整数型)
  55.         设备地址 = 列表框1.取项目标记(项目索引)
  56.         BLE蓝牙1.连接设备(设备地址)
  57.         'BLE蓝牙1.连接设备(列表框1.取项目标记(项目索引))
  58. '        弹出提示("正在连接")
  59.         连接状态.标题 = "正在连接"

  60. 结束 事件

  61. 事件 连接状态.被单击()
  62.         如果 连接状态.背景颜色 = 绿色 则
  63.                 BLE蓝牙1.断开连接()
  64.                 连接状态.标题 = "正在断开"               
  65.         否则
  66.                 连接状态.标题 = "正在连接"
  67.                 BLE蓝牙1.连接设备(设备地址)        
  68.         结束 如果
  69. 结束 事件



  70. 事件 BLE蓝牙1.连接状态改变(状态 为 整数型)
  71.         如果 状态 = 1 则
  72.                 连接状态.标题 = "已连接"
  73.                 连接状态.背景颜色 = 绿色
  74.         否则
  75.             连接状态.标题 = "已断开"
  76.                 连接状态.背景颜色 = 红色

  77.         结束 如果
  78. 结束 事件

  79. 事件 BLE蓝牙1.发现服务(服务信息 为 集合)
  80.         如果 服务信息.取项目总数() < 0 则
  81.                 退出
  82.         结束 如果
  83.         
  84.         变量 i 为 整数型
  85.         变量 j 为 整数型
  86.         变量 信息数组 为 文本型()

  87.         i = 0

  88.         判断循环首 i < 服务信息.取项目总数()
  89.                 信息数组 = 服务信息.取项目(i)
  90.                 j = 0
  91.                 判断循环首 j < 取数组成员数(信息数组)
  92.                         如果 j >0 则
  93.                                 如果 BLE蓝牙1.是否可读(信息数组(0),信息数组(j)) = 真 且 BLE蓝牙1.是否可写(信息数组(0),信息数组(j)) =真 且 BLE蓝牙1.是否可通知(信息数组(0),信息数组(j)) =真 则
  94.                         服务UUID = 信息数组(0)
  95.                                         通道UUID = 信息数组(j)         
  96.                                                 'BLE蓝牙1.读取数据(服务UUID,通道UUID)
  97.                                                 '接收框.内容 = 服务UUID &"\n"& 通道UUID
  98.                                                 时钟2.时钟周期 = 1000
  99.                                 结束 如果
  100.                         结束 如果
  101.                         j = j + 1
  102.                 判断循环尾               
  103.                 i = i + 1
  104.         判断循环尾        
  105. 结束 事件

  106. 事件 时钟2.周期事件()
  107.         BLE蓝牙1.读取数据(服务UUID,通道UUID)
  108.         接收框.内容 = 服务UUID &"\n"& 通道UUID
  109.         时钟2.时钟周期 = 0
  110. 结束 事件

  111. 事件 清空接收按钮.被单击()
  112.         接收框.内容 = 空
  113. 结束 事件

  114. 事件 BLE蓝牙1.读取数据完毕(结果 为 整数型,服务UUID 为 文本型,通道UUID 为 文本型,数据 为 字节型())
  115.         如果 结果 = 1 则
  116. '                弹出提示("读取数据成功:" & 通道UUID & "\n数据:" & 字节集到十六进制(数据))
  117.                
  118.         否则        
  119. '                弹出提示("读取数据失败:" & 通道UUID & "\n数据:" & 字节集到十六进制(数据))
  120.         结束 如果        
  121. 结束 事件

  122. 事件 BLE蓝牙1.通道数据改变(服务UUID 为 文本型,通道UUID 为 文本型,数据 为 字节型())
  123. '        弹出提示("通道数据改变" & 通道UUID & "\n数据:" & 字节集到十六进制(数据))
  124.         接收框.加入文本(字节到文本(数据,"GBK"))
  125. 结束 事件

  126. 事件 发送按钮.被单击()
  127.         BLE蓝牙1.写入数据(服务UUID,通道UUID,文本到字节(发送框.内容,"GBK"))
  128. 结束 事件

  129. 事件 BLE蓝牙1.写入数据完毕(结果 为 整数型)
  130.         如果 结果 = 1 则
  131. '                弹出提示("写入数据成功")
  132.         否则        
  133. '                弹出提示("写入数据失败")
  134.         结束 如果
  135. 结束 事件




  136. 事件 读取按钮.被单击()
  137.         BLE蓝牙1.读取数据(服务UUID,通道UUID)
  138. 结束 事件



  139. 事件 按钮上.被单击()
  140.                 BLE蓝牙1.写入数据(服务UUID,通道UUID,文本到字节("{AT:ABCD1234UP}\r\n","GBK"))        
  141. 结束 事件

  142. 事件 按钮下.被单击()
  143.                 BLE蓝牙1.写入数据(服务UUID,通道UUID,文本到字节("{AT:ABCD1234DN}\r\n","GBK"))        
  144. 结束 事件

  145. 事件 按钮左.被单击()
  146.                 BLE蓝牙1.写入数据(服务UUID,通道UUID,文本到字节("{AT:ABCD1234LF}\r\n","GBK"))        
  147. 结束 事件

  148. 事件 按钮右.被单击()
  149.                 BLE蓝牙1.写入数据(服务UUID,通道UUID,文本到字节("{AT:ABCD1234RT}\r\n","GBK"))        
  150. 结束 事件


  151. 事件 三角按钮上.被单击()
  152.                 BLE蓝牙1.写入数据(服务UUID,通道UUID,文本到字节("{AT:ABCD1234T0}\r\n","GBK"))        
  153. 结束 事件

  154. 事件 三角按钮下.被单击()
  155.                 BLE蓝牙1.写入数据(服务UUID,通道UUID,文本到字节("{AT:ABCD1234V0}\r\n","GBK"))               
  156. 结束 事件

  157. 事件 停止按钮.被单击()
  158.                 BLE蓝牙1.写入数据(服务UUID,通道UUID,文本到字节("{AT:ABCD1234S0}\r\n","GBK"))        
  159. 结束 事件
发布版_MyCar.zip (574.14 KB, 下载次数: 2)
今天天气不太热了,户外测试。这里采用太阳能电池供电,已经没有太阳光直射这里了,都是散热光。仍然能供电,LED显示亮着。
9972562e795a80ec8d.jpg

558462e795dc213fb.jpg
走出大概50米测试,秒连
5241562e795f4d91eb.jpg
705862e7960fe5b63.jpg
走出将近300米测试,秒连。
685562e7961cd7194.jpg 最后的测试距离约300米
127062e797795be2f.png
测试视频放到B站。
https://www.bilibili.com/video/BV13F411A7hW/


点评:如果有金属设施屏蔽,信号会大大减弱,若视线距离无遮挡,则真的可以至少300米起步。非常的nice,很适合手机在可视范围内遥300米左右远的设备。

打赏榜单

21小跑堂 打赏了 80.00 元 2022-07-21
理由:恭喜通过原创文章审核!请多多加油哦!

评论

串口蓝牙模块以其易用而闻名,但是一直存在通信距离短的弊端,随着技术的发展,蓝牙的通信距离已经大大提升,从开始的10米,百米,到现在的600米。通信技术的提升带来更多的无线设备设计方案。作者使用开发板与手机通信,蓝牙模块作为桥接,实现短距离的穿墙测试,实现效果较好。  发表于 2022-7-21 17:54
海滨消消 发表于 2022-7-21 10:57 来自手机 | 显示全部楼层
大神的作品不管怎样先必须支持一下
 楼主| gaoyang9992006 发表于 2022-7-23 20:53 | 显示全部楼层
海滨消消 发表于 2022-7-21 10:57
大神的作品不管怎样先必须支持一下

我这两天回家了,月底我会继续更新,户外实测,根据现在在建筑物内可以穿越楼层的通信情况看,通信距离户外300米肯定是没问题的。后续我将会进行300米,400米,500米,600米实测。
xinxianshi 发表于 2022-7-23 21:38 | 显示全部楼层
真的假的,上百米都很难吧?这会不会很贵?
oufuqiang 发表于 2022-7-26 09:26 | 显示全部楼层
再搞个抛物面天线是不是5km都可以了
 楼主| gaoyang9992006 发表于 2022-7-29 22:55 | 显示全部楼层
oufuqiang 发表于 2022-7-26 09:26
再搞个抛物面天线是不是5km都可以了

wanduzi 发表于 2022-8-10 16:21 | 显示全部楼层
dongnanxibei 发表于 2022-8-10 18:28 | 显示全部楼层
这么好的模块是在哪儿买的,分享一下购买地址,我要弄一个玩玩。
dengdc 发表于 2022-8-10 21:46 | 显示全部楼层
会不会很贵?
 楼主| gaoyang9992006 发表于 2022-8-11 08:38 | 显示全部楼层

十几块包邮。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:如果你觉得我的分享或者答复还可以,请给我点赞,谢谢。

2046

主题

16351

帖子

222

粉丝
快速回复 在线客服 返回列表 返回顶部
个人签名:如果你觉得我的分享或者答复还可以,请给我点赞,谢谢。

2046

主题

16351

帖子

222

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