ESP32S蓝牙03
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相关推荐
- ESP32S蓝牙05
ESP32S蓝牙05 继续ESP32S的经典蓝牙学习.今天我们准备重做蓝牙手机客户端APP,不过今天不是用APPInventor积木式编程,而是使用Eclipse的代码编程,继续向着蓝牙通讯的底层探究 ...
- ESP32S蓝牙02
ESP32S蓝牙02 继续ESP32S的经典蓝牙学习 经典蓝牙的工作模式 在上一篇中,我们认识了一个非常简单的经典蓝牙程序.所谓的经典蓝牙,指的是传统的蓝牙工作模式.蓝牙设备的工作模式有这样的特点: ...
- 基于HUAWEI AppGallery Connect开发了一款App,我得出了这几点结论!
点击"开发者技术前线",选择"星标????" 在看|星标|留言, 真爱 来自:开发者技术前线 作者:GC 1 背景介绍 最近,笔者开发了一款App,深刻体会到 ...
- spotify音乐下载_如何从Spotify下载音乐
spotify音乐下载 Bring your music with you. Spotify Premium users can listen to the streaming service's e ...
- ESP32的BLE使用学习
UUID生成网站: Online UUID Generator Tool 0.前言 什么是低功耗蓝牙? BLE之所以被称为低功耗蓝牙,就是需要通讯的时候才握手,数据传输完成后,就断开连接.在通讯过程中 ...
- 【微信小程序控制硬件16 】 安信可 ESP32-S 开发板实现移植腾讯物联开发平台蓝牙 llsync 协议,实现一键蓝牙快速配网+远程控制。(附带源码)
文章目录 一.前言 二.源码目录说明 三.编译指导 四.常见问题 五.开源微信物联网控制一览表 另外,不要把我的博客作为学习标准,我的只是笔记,难有疏忽之处,如果有,请指出来,也欢迎留言哈! 微信物联 ...
- 蓝牙at指令与c语言怎么结合,立创商城ATK-HC05蓝牙模块AT指令集(03)
指令详细说明 (AT指令不区分大小写,均以回车.换行字符结尾:\r\n) 25.从蓝牙配对列表中查找指定的认证设备(Authenticated Device): 指令 响应 参数AT+FSAD= 1. ...
- android蓝牙4.0(BLE)开发之ibeacon初步
一个april beacon里携带的信息如下 ? 1 <code class=" hljs ">0201061AFF4C0002159069BDB88C11416BAC ...
- Android上成功实现了蓝牙的一些Profile
前段时间做蓝牙方面的开发,Google的Android只实现了Handset/Handfree和A2DP/AVRCP等Profile,而其 它常用的Profile如HID/DUN/SPP/OPP/FT ...
最新文章
- linux fdisk 分区、格式化、挂载
- View绘制原理 —— 画在哪?
- UpdatePanel 后台注册脚本失效
- 从零入门 Serverless | Serverless 应用如何管理日志 持久化数据
- eclipse C/C++环境搭建
- java实现Hbase中的查询(一)Filter方式
- axios,vue-axios在项目中的应用
- android 项目部署,Android发布项目到JCenter
- [POJ2157]Maze(DFS)
- React开发(225):render中返回的值可以定义为一个方法
- 资源放送丨《Oracle中为什么没有Double Write?Oracle支持原子写吗?》PPT视频
- Swift高速入门之函数
- IP得到天气预报(3)———XML中CDATA的提取
- Eclipse中配置CORBA环境
- python学习day33 hmac模块 socketserver模块
- 在团队中我的索引卡任务
- 服务器自动访问iis,设置IIS服务器定时自动重启的方法以Windows Server 2008为例
- 做项目与做产品的区别详解
- 用JS制作表格的添加删除
- 微信小程序canvas 证件照制作