ESP32S蓝牙02

ESP32S蓝牙02

继续ESP32S的经典蓝牙学习

  • 经典蓝牙的工作模式

在上一篇中,我们认识了一个非常简单的经典蓝牙程序。所谓的经典蓝牙,指的是传统的蓝牙工作模式。蓝牙设备的工作模式有这样的特点:

1. 点对点模式。蓝牙设备要通讯(互相收发数据)的时候,两个设备必须先建立连接,而且这两个设备一旦建立了连接,就互相占据了对方的全部蓝牙资源。用通俗一点的话来讲,两个蓝牙设备一旦牵手,就再也不考虑其他设备了,互相为对方负责任,第三者根本没有机会插足。

2. 主从模式。在蓝牙的握手连接,是一个请求、响应的过程。首先应该是一个蓝牙设备(ESP32S开发板)初始化成为服务器端,并不停地向外广播服务的消息(通俗地理解,就是有一个ESP32S开发板拿着一个扩音喇叭,不停地告诉周围的人,我是蓝牙服务器,我已经准备好了,你们如果有需要就可以和我牵手啦)。

然后手机APP通过搜索、配对,并发送一个握手连接的请求。开发板接到手机APP的请求后,发现条件也行,就答应了牵手的请求,这样就完成了连接,再往下就可以互相收发消息了。再这个过程中,是手机APP主动发起连接请求的,手机是客户端;是开发板答应手机的握手请求,这个就是响应,开发板是服务器。

3. 实时模式。蓝牙设备一旦握手成功,就要一直的保存连接的状态。除非是客户端或者服务器有一方提出了分手的要求,这样才能断开连接。而连接一旦断开,所有的通讯也就断了,除非重新再连接,否则双方都不能互相收发消息了。两个设备只有断开了连接,才能重新连接到其他的设备。

     二.手机客户器端APP的改造
     
首先我们需要对前面的那个手机蓝牙客户端进行改造,改造的重点是可以主动断开与服务器的连接。
      我们增加了一个断开连接的按钮。当用户选中蓝牙列表中的某个蓝牙设备时,客户端APP会发出握手连接的请求;连接成功后,就可以收发消息了;当用户点击断开连接时,会向服务器发送一条“close”的消息,并断开连接,服务器端收到这个消息后,也会作出相应的断开操作。

  • 手机服务器端APP制作

再前面的示例中,手机APP是主动发起握手请求的,手机APP是客户端BlueToothClient。

为了验证这种主从模式,我们这次准备在做一个服务器端的手机APP,这样我们需要准备两部手机,一部运行蓝牙服务器,一部运行蓝牙客户端,然后让两部手机用蓝牙握手连接,并互相收发数据。(是不是有点费手机,幸好现在手机已经太普通了,谁的手里没有几把用旧了的手机)

手机的服务器端APP的制作方法和客户端差不多,我们登录网站,新建一个BlueToothServer项目,最大的区别是这次我们使用的是蓝牙服务器。

在逻辑代码方面,我们在程序窗口Screen1初始化的时候,“调用蓝牙服务器接收连接”。这个是什么意思呢?其实是告诉手机,当用户打开这个APP的时候,让手机的蓝牙充当服务器,并且不断地对外广播:我是蓝牙服务器,我已经准备好了,我可以接收你们的连接了。

然后接下来就是接收连接时的代码,当周围有一个蓝牙设备(手机或其他)发送握手连接的请求时,服务器接受连接,连接成功的时候发一个消息给客户端。

然后就是发送消息,用定时器自动接收消息的代码了。
    在接收消息的时候,我们做了一个判断,如果客户端传来了“close”的断开连接请求时,服务器端会断开连接,并停止广播服务(关闭服务器)。用户只有重新点击开启服务按钮,蓝牙服务器才能重新被打开。

编写完逻辑程序后,就可以把这个APP下载到手机中运行了。我们选“打包——显示二维码”菜单,然后准备一把手机,在手机中预先安装一个叫AI伴侣的APP,然后用AI伴侣一扫,就能把我们编写的这个程序下载到手机中安装了。(让手机和电脑连接在同一个网络)

  • 真机测试

接下来我们需要准备两部手机,然后一部下载安装客户端,一部下载安装服务器端。

两部手机都打开蓝牙(为了连接顺利,可以先把之前的配对蓝牙都取消配对,然后两部手机的蓝牙都重新互相配对)

先打开服务器APP。然后打开客户端APP。在客户端APP选择连接的蓝牙,这样两部手机就能连接成功,就能互相收发消息了。我们也可以从客户端APP主动发起断开连接、重新连接的请求(断开连接后,服务器端也会相应关闭服务。在重新连接之前,必须先打开服务器端的开启服务)

    从这边来看,其实掌握主动的还是客户端,客户端可以主动发出连接、断开的请求,服务器端只能被动地相应客户端的要求而已。

ESP32S3是一款由Espressif Systems公司生产的基于Arm Cortex-M4的单片机,它集成了蓝牙功能,使得开发人员能够在物联网应用中实现设备间的无线通信。ESP32S3支持低功耗蓝牙(BLE)和经典蓝牙(BR/EDR),这对于数据传输非常有用。 要使用ESP32S3进行蓝牙数据传输,通常会遵循以下步骤: 1. **初始化蓝牙模块**:首先,需要通过API(如ESP_BLE_API或ESP_GAP_CONFIG_API)初始化蓝牙功能,并配对或建立连接到其他蓝牙设备。 2. **创建服务和特性(GATT)**:ESP32S3支持GATT(Generic Attribute Profile),通过定义服务(如Characteristics)来组织数据。你可以创建数据发送和接收的服务以及相应的特性,比如Characteristic Value UUID。 3. **数据发送**:当你想要发送数据时,可以将数据写入某个Characteristic,使用`esp_ble_gatt_write()`等函数。确保你选择的特性支持写操作(Write Without Response或Write With Response)。 4. **数据接收**:对于接收数据,监听Characteristic的值改变事件(如`ESP_GATTS_EVT_WRITE`)。当接收到数据时,可以从Characteristic的值中读取。 5. **错误处理和回调**:确保为可能出现的错误和事件处理设置恰当的回调函数,以便于处理异常情况。 6. **断开连接后重连**:如果需要在设备间维持长连接,可能需要实现连接断开后的自动重连机制。 相关问题: 1. 如何在ESP32S3上设置BLE服务和特性? 2. 蓝牙传输过程中如何保证数据的安全性和可靠性? 3. 如果连接不稳定,应该如何优化ESP32S3的蓝牙通信?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

tongyue

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值