使用ESP32-DevKitC_V4作为蓝牙服务端,需要刷AT固件。

iPhone12手机作为蓝牙客户端,手机上需要安装nRF Connect或Easy BLE

1.开启蓝牙服务端

ESP32蓝牙驱动安装 esp32蓝牙例子_ESP32

用串口工具(勾选 发送新行)执行以下命令

AT+BLEINIT=2 //将esp32设置成蓝牙SERVER
AT+BLEGATTSSRVCRE  //GATTS创建服务, 建议初始化后就建立GATTS, 建立连接在创建会报错 
AT+BLEGATTSSRVSTART //GATTS 开启全部服务。
AT+BLEGATTSCHAR? //GATTS 发现服务特征 
AT+BLEADVDATA="0201060A09657370726573736966"   //广播设备名称espressif  
AT+BLEADVSTART   //打开广播

注意,不支持 AT+BLENAME=“123” 命令改 BLE 名称。可通过AT+BLEADVDATA=“0201060303F0AB0409313233” 改设备名称为 123,其中前 7 位(0201060303F0AB)固定,04 表示后四位长度,09 表示数据类型(固定),313233 则表示设备名称 123 对应的 ASCII 码,可通过在线转换获得。

ESP32蓝牙驱动安装 esp32蓝牙例子_蓝牙_02

 

2.连接蓝牙服务端

运行AT+BLEADVSTART 指令后,手机上用nRF Connect搜索蓝牙设备,不运行此指令是搜索不到的。

ESP32蓝牙驱动安装 esp32蓝牙例子_服务端_03

 

ESP32蓝牙驱动安装 esp32蓝牙例子_蓝牙_04

3.服务端给客户端(即手机端)发送数据

(1)发送Notify数据 

首先手机上开启Notify (即1,6)

ESP32蓝牙驱动安装 esp32蓝牙例子_ESP32_05

串口端发送数据

+BLEGATTSNTFY=0,1,6,8//这句命令需要勾选【发送新行】,1为Service编号,6为Characteristic编号,8为数据长度
12345678//这句不需要勾选【发送新行】为发送数据

 接收到的数据

ESP32蓝牙驱动安装 esp32蓝牙例子_BLE_06

 (2)发送Indicate数据 

手机端先开启Indicate,串口端发送数据

AT+BLEGATTSIND=0,1,7,10
1234567890

 (3)发送透传数据

 首先手机上开启Notify(即1,6),用于接收蓝牙服务端发送消息。

(1,5)的属性为Write,可以回发数据

ESP32蓝牙驱动安装 esp32蓝牙例子_ESP32_07

AT+BLESPPCFG=1,1,6,1,5//这句命令需要勾选【发送新行】
AT+BLESPP//这句命令需要勾选【发送新行】
aabbcc//不勾选

手机接收到的数据 

ESP32蓝牙驱动安装 esp32蓝牙例子_ESP32蓝牙驱动安装_08

 手机发送数据

ESP32蓝牙驱动安装 esp32蓝牙例子_ESP32蓝牙驱动安装_09

 

ESP32蓝牙驱动安装 esp32蓝牙例子_ESP32_10

 退出透传

+++//不勾选发送新行

客户端

AT+BLEINIT=1//客户端
AT+BLESCAN=1,3,2,"espressif"//过滤蓝牙名称,此步可省

//连接第1个服务端
AT+BLECONN=0,"84:f7:03:6d:97:6e",0,10//通过MAC地址连接蓝牙Server
AT+BLEGATTCPRIMSRV=0//获取第0个连接的服务列表
AT+BLEGATTCCHAR=0,3//获取第0个连接第3(从1开始算)服务列表
AT+BLEGATTCWR=0,3,5,8//第0个连接第3个服务第5个Characteristic 为Notify
12345678//发送数据

//连接第2个服务端
AT+BLECONN=1,"08:3a:8d:14:97:72",0,10//通过MAC地址连接蓝牙Server
AT+BLEGATTCPRIMSRV=1//获取第0个连接的服务列表
AT+BLEGATTCCHAR=1,3//获取第0个连接第3(从1开始算)服务列表
AT+BLEGATTCWR=1,3,5,8//第0个连接第3个服务第5个Characteristic 为Notify
11223344//发送数据