发新帖本帖赏金 80.00元(功能说明)我要提问
返回列表
打印
[STM32G4]

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

[复制链接]
731|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 gaoyang9992006 于 2022-8-1 17:08 编辑

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

之前发过类似主题的帖子,只是蓝牙模块通信距离近,为了实现远距离手机控制远端设备,我让蓝牙跟手机通信,蓝牙跟单片机通信,单片机再去I2C控制一个Lora去跟远端单片机上的Lora通信,这听起来就很绕了,无非就是因为手机默认都有蓝牙,没有Lora,所以就这么绕了。最近看到有模块厂商推出了最远支持视线"主从600米远距离BLE5.1蓝牙模块",这一下震惊到我了,蓝牙可以这么牛了吗?
于是我买来帮大家测评一下,到底牛不牛,为了充分发挥效果,我还买了两根天线,主机模式模块,从机模式模块各买了一个。
先晒图,如下所示,第1个是我以前买的通信距离只有80米的BT24,第2个和第3个是新买的BT24-PA主机模式模块和从机模式模块。

再看反面的接口备注,发现接口跟原来的是一样的,可以直接替换。

外接天线如下图所示

先不考虑通信和远距离测试,先测试穿墙能力。用STM32开发板给从机模式模块通电。打开手机APP(厂家有提供,另外我自己有开源的蓝牙BLE上位机APP,后面给提供源码),很容易连接上,如下所示。

在没有使用外接天线的情况下:在办公室内,可视距离下,是没问题的。信号强度几乎不变。当我出阳台的钢化玻璃门后并关闭玻璃门,发现信号丢失,断开连接。
在使用外接天线的情况下:在钢化门外关闭玻璃门,发现信号仍然很强,然后我拿着手机上楼,发现在上的办公室仍然保持连接,断开后重新连接也可以轻松连接上。看来是真的很强,由于这两天天气热,我先不测试户外距离600米了。等月底忙完再测,近几天有事忙。
接下来实现NUCLEO-STM32G431RB开发板通信。
使用STM32CubeMX配置工程,先选择该开发板的默认工程配置。
这里我们使用USART3与蓝牙模块通信,并根据蓝牙模块的默认通信频率设置该串口波特率为9600bps

经过测试,模块可以与单片机正常通信。后续继续更新该帖。
这里先分享一下手机APP的源码

变量 服务UUID 为 文本型
变量 通道UUID 为 文本型        
变量 设备地址 为 文本型


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

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

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

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

事件 搜索按钮.被单击()
        如果 搜索按钮.标题 = "开始搜索" 则
                位置传感器1.开始监测()
                BLE蓝牙1.开始搜索()
                时钟1.时钟周期 = 10*1000
                搜索按钮.标题 = "停止搜索"
        否则        
                BLE蓝牙1.停止搜索()
                时钟1.时钟周期 = 0
                搜索按钮.标题 = "开始搜索"
        结束 如果
结束 事件

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

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

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

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

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

结束 事件

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



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

        结束 如果
结束 事件

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

        i = 0

        判断循环首 i < 服务信息.取项目总数()
                信息数组 = 服务信息.取项目(i)
                j = 0
                判断循环首 j < 取数组成员数(信息数组)
                        如果 j >0 则
                                如果 BLE蓝牙1.是否可读(信息数组(0),信息数组(j)) = 真 且 BLE蓝牙1.是否可写(信息数组(0),信息数组(j)) =真 且 BLE蓝牙1.是否可通知(信息数组(0),信息数组(j)) =真 则
                        服务UUID = 信息数组(0)
                                        通道UUID = 信息数组(j)         
                                                'BLE蓝牙1.读取数据(服务UUID,通道UUID)
                                                '接收框.内容 = 服务UUID &"\n"& 通道UUID
                                                时钟2.时钟周期 = 1000
                                结束 如果
                        结束 如果
                        j = j + 1
                判断循环尾               
                i = i + 1
        判断循环尾        
结束 事件

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

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

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

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

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

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




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



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

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

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

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


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

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

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



走出大概50米测试,秒连


走出将近300米测试,秒连。
最后的测试距离约300米

测试视频放到B站。
https://www.bilibili.com/video/BV13F411A7hW/


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

使用特权

评论回复

打赏榜单

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

评论
21小跑堂 2022-7-21 17:54 回复TA
串口蓝牙模块以其易用而闻名,但是一直存在通信距离短的弊端,随着技术的发展,蓝牙的通信距离已经大大提升,从开始的10米,百米,到现在的600米。通信技术的提升带来更多的无线设备设计方案。作者使用开发板与手机通信,蓝牙模块作为桥接,实现短距离的穿墙测试,实现效果较好。 
沙发
海滨消消| | 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 | 只看该作者
真的假的,上百米都很难吧?这会不会很贵?

使用特权

评论回复
5
oufuqiang| | 2022-7-26 09:26 | 只看该作者
再搞个抛物面天线是不是5km都可以了

使用特权

评论回复
6
gaoyang9992006|  楼主 | 2022-7-29 22:55 | 只看该作者
oufuqiang 发表于 2022-7-26 09:26
再搞个抛物面天线是不是5km都可以了

使用特权

评论回复
7
wanduzi| | 2022-8-10 16:21 | 只看该作者

使用特权

评论回复
8
dongnanxibei| | 2022-8-10 18:28 | 只看该作者
这么好的模块是在哪儿买的,分享一下购买地址,我要弄一个玩玩。

使用特权

评论回复
9
dengdc| | 2022-8-10 21:46 | 只看该作者
会不会很贵?

使用特权

评论回复
10
gaoyang9992006|  楼主 | 2022-8-11 08:38 | 只看该作者

十几块包邮。

使用特权

评论回复
发新帖 本帖赏金 80.00元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:西安公路研究院南京院
简介:主要工作从事监控网络与通信网络设计,以及从事基于嵌入式的通信与控制设备研发。擅长单片机嵌入式系统物联网设备开发,音频功放电路开发。

1961

主题

15933

帖子

208

粉丝