使用ESP32-DevKitC_V4作为蓝牙服务端,需要刷AT固件。
iPhone12手机作为蓝牙客户端,手机上需要安装nRF Connect或Easy BLE
1.开启蓝牙服务端
用串口工具(勾选 发送新行)执行以下命令
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 码,可通过在线转换获得。
2.连接蓝牙服务端
运行AT+BLEADVSTART 指令后,手机上用nRF Connect搜索蓝牙设备,不运行此指令是搜索不到的。
3.服务端给客户端(即手机端)发送数据
(1)发送Notify数据
首先手机上开启Notify (即1,6)
串口端发送数据
+BLEGATTSNTFY=0,1,6,8//这句命令需要勾选【发送新行】,1为Service编号,6为Characteristic编号,8为数据长度
12345678//这句不需要勾选【发送新行】为发送数据
接收到的数据
(2)发送Indicate数据
手机端先开启Indicate,串口端发送数据
AT+BLEGATTSIND=0,1,7,10
1234567890
(3)发送透传数据
首先手机上开启Notify(即1,6),用于接收蓝牙服务端发送消息。
(1,5)的属性为Write,可以回发数据
AT+BLESPPCFG=1,1,6,1,5//这句命令需要勾选【发送新行】
AT+BLESPP//这句命令需要勾选【发送新行】
aabbcc//不勾选
手机接收到的数据
手机发送数据
退出透传
+++//不勾选发送新行
客户端
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//发送数据