ESP32S蓝牙03

继续ESP32S的经典蓝牙学习。经典的蓝牙告诉我们,蓝牙只能在两个设备握手连接中传递讯息,可是我们却偏偏想让多个蓝牙设备互相通讯,这次我准备了两部手机,一块ESP32S开发板,准备来个三方会谈。

一.ESP32S的经典蓝牙编程改造

在上一篇中,我们让两部手机用蓝牙握手连接,一部充当服务器被动接收连接,另一部则是客户端,负责主动发起连接请求,互相收发消息,负责主动断开连接。服务器接到客户端的断开连接请求后,也会断开连接,关闭服务广播。在客户端需要重新连接之前,我们需要在服务器端先开启服务广播,然后客户端才能重新选择蓝牙设备进行连接。

这次我们准备手机和开发板之间的进行连接,手机充当主动的客户端,开发板充当被动的服务器。

这样我们就需要让开发板工作在服务器模式,并且在接到客户端(手机)发来的“close”断开连接请求时,能断开连接,关闭服务器广播。在手机下一次重新连接之前,我们从串口给开发板发送“open”开启服务器广播的指令,然后手机就能重新连接开发板了。

这次的程序需要在Arduino IDE中进行编写了(米思齐只提供了最简单的程序积木,稍微灵活一点的程序编写,都需要到Arduino IDE中了。

#include "BluetoothSerial.h"

#if !defined(CONFIG_BT_ENABLED) ||!defined(CONFIG_BLUEDROID_ENABLED)

#error Bluetooth is not enabled! Please run `makemenuconfig` to and enable it

#endif

BluetoothSerial SerialBT;

uint8_t dat[32];

String inputString="";

boolean over=false;

int len=0;

void setup() {

Serial.begin(115200);

SerialBT.begin("ESP32test"); //Bluetooth device name

Serial.println("The device started");

over=true;

}

void loop() {

if(Serial.available()) {

delay(10);

inputString="";

len=0;

while(Serial.available()){

dat[len] =Serial.read();

inputString= inputString + char(dat[len]);

len++;

if(len>31) break;

}

if(inputString.indexOf("open") >= 0){

if(over ==false){

SerialBT.connect();

Serial.println("The device connect!");

over=true;

delay(2000);

}

}else{

if(over ==true){

SerialBT.write(dat,len);

}

}

}

if(SerialBT.available()) {

delay(10);

inputString="";

while(SerialBT.available())

inputString = inputString +char(SerialBT.read());

if(inputString.indexOf("close") >= 0){

SerialBT.disconnect();

Serial.println("The device disconnect!");

over=false;

delay(2000);

}

Serial.println(inputString);

}

delay(20);

}

关键代码解读:可以看到这个程序基本上就是从最基础的那个示例程序改动而来的。

SerialBT.connect(); 和 SerialBT.disconnect();分别控制开发板蓝牙设备的连接和断开。

为了读取用户从手机发送过来的“close”指令、从电脑串口发送过来的“open”指令,我们需要用把开发板接收到的数据转换成字符串,然后在字符串中查找比对。  开发板的收发数据都是一种叫 uint8_t类型的数组(8位的字节,表示的范围从0——255),所以我们会根据需要,有时候把字节数组转换成字符串,有时候有需要保留字节数组。

二.真机测试

现在我们就可以开始三方会谈了,我们的设计思路是这样的,中间的那部手机运行的是客户端,掌握主动的话语权。我们首先打开中间的那部手机的蓝牙,把右边的手机蓝牙信号配对,再和右边的ESP32S开发板的蓝牙信号配对(两个蓝牙设备都事先配对好)。右边的手机运行的是服务器APP,左边的开发板运行的也是服务器。

然后,当中间的那部手机需要和右边的手机对话时,就在中间的手机客户端APP中的蓝牙列表选择右边手机,打开右边手机的服务器APP,开启服务广播,客户端发出连接请求,连接成功后两部手机就可以通讯了。在中间手机客户端点击断开连接,就断开了和右边手机的连接。

把开发板连接到电脑,在电脑中打开串口监视器,这样开发板通电后就自动开启了服务器广播。在中间手机中重新选择列表中的开发板蓝牙,就可以和开发板连接通讯了。点击手机中的断开连接,也能断开手机和开发板之间的连接。

再往下,中间的那部手机可以选中与傍边的任意一个设备进行连接和通话了(通话之前记得先打开服务器端的广播)。

现在这个三方会谈虽然很憋足,操作起来也很麻烦,但是基本的思路已经对头了,按照这个思路进行设计,“一拖几”的蓝牙网络通讯就可以实现了。

ESP32S蓝牙03相关推荐

  1. ESP32S蓝牙05

    ESP32S蓝牙05 继续ESP32S的经典蓝牙学习.今天我们准备重做蓝牙手机客户端APP,不过今天不是用APPInventor积木式编程,而是使用Eclipse的代码编程,继续向着蓝牙通讯的底层探究 ...

  2. ESP32S蓝牙02

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

  3. 基于HUAWEI AppGallery Connect开发了一款App,我得出了这几点结论!

    点击"开发者技术前线",选择"星标????" 在看|星标|留言,  真爱 来自:开发者技术前线 作者:GC 1 背景介绍 最近,笔者开发了一款App,深刻体会到 ...

  4. spotify音乐下载_如何从Spotify下载音乐

    spotify音乐下载 Bring your music with you. Spotify Premium users can listen to the streaming service's e ...

  5. ESP32的BLE使用学习

    UUID生成网站: Online UUID Generator Tool 0.前言 什么是低功耗蓝牙? BLE之所以被称为低功耗蓝牙,就是需要通讯的时候才握手,数据传输完成后,就断开连接.在通讯过程中 ...

  6. 【微信小程序控制硬件16 】 安信可 ESP32-S 开发板实现移植腾讯物联开发平台蓝牙 llsync 协议,实现一键蓝牙快速配网+远程控制。(附带源码)

    文章目录 一.前言 二.源码目录说明 三.编译指导 四.常见问题 五.开源微信物联网控制一览表 另外,不要把我的博客作为学习标准,我的只是笔记,难有疏忽之处,如果有,请指出来,也欢迎留言哈! 微信物联 ...

  7. 蓝牙at指令与c语言怎么结合,立创商城ATK-HC05蓝牙模块AT指令集(03)

    指令详细说明 (AT指令不区分大小写,均以回车.换行字符结尾:\r\n) 25.从蓝牙配对列表中查找指定的认证设备(Authenticated Device): 指令 响应 参数AT+FSAD= 1. ...

  8. android蓝牙4.0(BLE)开发之ibeacon初步

    一个april beacon里携带的信息如下 ? 1 <code class=" hljs ">0201061AFF4C0002159069BDB88C11416BAC ...

  9. Android上成功实现了蓝牙的一些Profile

    前段时间做蓝牙方面的开发,Google的Android只实现了Handset/Handfree和A2DP/AVRCP等Profile,而其 它常用的Profile如HID/DUN/SPP/OPP/FT ...

最新文章

  1. linux fdisk 分区、格式化、挂载
  2. View绘制原理 —— 画在哪?
  3. UpdatePanel 后台注册脚本失效
  4. 从零入门 Serverless | Serverless 应用如何管理日志 持久化数据
  5. eclipse C/C++环境搭建
  6. java实现Hbase中的查询(一)Filter方式
  7. axios,vue-axios在项目中的应用
  8. android 项目部署,Android发布项目到JCenter
  9. [POJ2157]Maze(DFS)
  10. React开发(225):render中返回的值可以定义为一个方法
  11. 资源放送丨《Oracle中为什么没有Double Write?Oracle支持原子写吗?》PPT视频
  12. Swift高速入门之函数
  13. IP得到天气预报(3)———XML中CDATA的提取
  14. Eclipse中配置CORBA环境
  15. python学习day33 hmac模块 socketserver模块
  16. 在团队中我的索引卡任务
  17. 服务器自动访问iis,设置IIS服务器定时自动重启的方法以Windows Server 2008为例
  18. 做项目与做产品的区别详解
  19. 用JS制作表格的添加删除
  20. 微信小程序canvas 证件照制作

热门文章

  1. 通达信玄黄趋势波段指标源码
  2. 关于tlq的一些命令
  3. EXCEL导入商品资料时出错怎么办
  4. STM32无系统移植CanFestival小白教程
  5. 金蝶-增值税调整软件同步处理办法
  6. java 虚拟机设置 Xms Xmx PermSize MaxPermSize
  7. 系统环境变量Path 被删除了 Win10的环境变量 PATH 列表显示:
  8. java打印图片_java如何调用本地打印机进行图片打印
  9. 基于CNN-LSTM及深度学习的风电场时空组合预测模型
  10. osx平台电子取证仿真实验