精华内容
下载资源
问答
  • 2021-10-28 10:23:31

            本文章主要介绍物联网短距离无线通信的技术之一低功耗蓝牙技术BLE,主要应用领域为智能穿戴设备,一般情况下需要手机端实现BLE上位机(主机、客户端)。以下介绍基于HC05/BT05蓝牙串口透传模块+MCU(STM32F103VET6),当然对于TI的CC2541、乐鑫的ESP32,本工程同样适用!

            首先介绍两个重要概念,ServiceUUID(服务UUID)与CharacteristicUUID(特征UUID),ServiceUUID我们可以理解为一个班级,这个班级主要负责数据传输的工作,当然班级内部有许多学生,有的学生负责接收数据(特征值的通知功能),有的学生负责发送数据(写特征值),所以BLE进行一次数据传输时,我们需要指定一个班级(ServiceUUID)和若干学生(CharacteristicUUID),对于HC05/BT05蓝牙串口透传模块,由于其已经输入固件,所以CharacteristicUUID通常是一个人(也就是说接收数据与发送数据的是同一个同学);而对于CC2541、ESP32等我们可以直接编程的芯片通过需要指定两个CharacteristicUUID(特征值通知、写特征值)

     1、设置HC05/BT05

    通过串口调试助手或者MCU的串口配置HC05/BT05处于从机模式,设备名称任意设置,ServiceUUID为FFF0,CharacteristicUUID为FFF6        

    2、 Android代码中作相应的替换

    3、接收数据

     此处我通过STM32采集的温湿度数据,通过串口发送给HC05/BT05,所以接收数据时,要严格按照STM32中的数据进行。Android中程序如下:

    public void onCharacteristicChanged(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic) {
                byte[] desData = characteristic.getValue();
                String temp_str, humi_str;
                temp_str =  getStringSensorData(desData[0])+"."+getStringSensorData(desData[1])+" ℃";
                humi_str =  getStringSensorData(desData[2])+"."+getStringSensorData(desData[3])+" %";
                Log.i(TAG, " >>>>>温度为:" + temp_str);
                Log.i(TAG, " >>>>>湿度为:" + humi_str);
                temp.setText(temp_str);
                humi.setText(humi_str);
            }

     STM32中透传程序如下:

    void BLE_Printf()
    {
    	u8 sendbuf[4];
    	sendbuf[0] = (int)temp_int;
    	sendbuf[1] = (int)temp_deci;
    	sendbuf[2] = (int)humi_int;
    	sendbuf[3] = (int)humi_deci;
    	if(BLE_State()==1)
    	{
    		SendSensorData(sendbuf ,4);
    	}
    	else
    	{
    		
    	}
    }

    4、 发送数据(控制指令)

    此处我通过手机端发送控制指令控制STM32连接的LED灯,Android中代码如下:

    public void KeyEvent() {
            swh_led.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
    
    
                    if (swh_led.isChecked()) {
                      String  data = "LEDON";
                      sendLeData(data.getBytes());
                    } else {
                        String  data = "LEDOFF";
                        sendLeData(data.getBytes());
                    }
                }
            });
            btn_ble.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    if (mConnectionState) {
                        cancelDialog.show();
                        cancelDialog.setMessage(getString(list_disconnecting_ble));
                        mHandler.postDelayed(new Runnable() {
                            @Override
                            public void run() {
                                cancelDialog.dismiss();
                            }
                        }, 1000);
                        mConnectionState = false;
                        //btn_ble.setText(getString(R.string.list_connect_ble));
                        if (mBluetoothGatt != null) {
                            mBluetoothGatt.disconnect();
                        }
                    } else {
                        scanLeDevice(true);
                    }
    
    
                }
            });
        }

    STM32中的程序如下:

    void LED_Control(void)
    {
    		if(ReceiveState == 1)
    		{
    			RxCounter=0;
    			ReceiveState=0;
    			if(FindStr((char*)aRxBuffer,"LEDON")==1)
    			{
    				//printf("Receive Data:%s\n",aRxBuffer);
    				LED2(1);
    				LED3(1);
    				LED4(1);
    			}
    			else	if(FindStr((char*)aRxBuffer,"LEDOFF")==1)
    			{
    				//printf("Receive Data:%s\n",aRxBuffer);
    				LED2(0);
    				LED3(0);
    				LED4(0);
    			}
    			else
    			{
    			
    			}
    			memset(aRxBuffer,'\0', sizeof(aRxBuffer));
    			
    		
    	}
    	
    		
    }

    以上就是BLE模块与手机蓝牙进行双向通信的简单过程,有兴趣的可以下载Android工程的完整代码如下https://download.csdn.net/download/baidu_40311265/35088959

    更多相关内容
  • DA14580 BLE 主机(server)和从机(client)状态机

    一、从机状态(server)

    从机(server)状态机
    在这里插入图片描述从机(server)状态机
    在这里插入图片描述

    从机(server)状态流程表
    在这里插入图片描述

    一、主机状态(client)

    主机(client)状态机
    在这里插入图片描述
    主机(client)状态机

    在这里插入图片描述
    主机状态流程表
    在这里插入图片描述

    展开全文
  • RW007 高速 WiFi 模块使用BLE主机功能连接 BLE 从机设备示例 在本文档中将会从零开始说明如何使用 RW007 的 BLE 主机功能去连接一个BLE串口透传设备,实现数据交互的功能。 硬件准备 1.STM32F411-NUCLEO 开发板...

    RW007 高速 WiFi 模块使用BLE主机功能连接 BLE 从机设备示例

    在本文档中将会从零开始说明如何使用 RW007BLE 主机功能去连接一个BLE串口透传设备,实现数据交互的功能。

    硬件准备

    • 1.STM32F411-NUCLEO 开发板,RW007 EVB模块

    • 2.PC 电脑

    • 3.USB 数据线

    • 4.BLE 数据透传模块(如HC-08模块、KT6368A蓝牙模块等)

    • 5.USB-TTL 模块(如CH340等)

    • 6.杜邦线若干条

    软件准备

    • 1.RT-Thread Studio IDE软件

    • 2.串口调试软件(xshellSSCOM 等)

     

    步骤一:串口配置 KT6368A蓝牙模块

    在这里主要使用RW007高速 WIFI BLE模块,主要使用BLE的主机功能,所以需要一个BLE的从机设备(如HC-08模块、KT6368A蓝牙模块等都可以),因为手上刚好有KT6368A蓝牙BLE模块,所以这里简单说说怎样通过串口配置KT6368A蓝牙模块,下图是KT6368A蓝牙模块的控制指令说明.

    • 操作1:设置 BLE 蓝牙模块的名称

      AT+BMBLE_TEST

      输入上述命令后,会正常返回OK表示设置成功。 说明:这里设置 BLE 模块的名称为BLE_TEST

    • 操作2:设置 BLE 蓝牙模块的 MAC 地址

     AT+BNAACCEEFFDDEE

    输入上述命令后,会正常返回OK表示设置成功。 说明:这里设置 BLE 蓝牙模块的 MAC 地址为AACCEEFFDDEE

    • 操作3:设置芯片复位

    AT+CZ

    输入上述命令后,模块会正常重启,并打印下面的信息,说明配置成功了。

    郃T+VER1.6-20210114\0
    TM+BLE_TEST
    \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0
    TN+AACCEEFFDDEE
    TD+KT6368A-SPP-04\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0
    TS+123456
    • 操作4:手机通过BLE调试助手扫描附近的蓝牙设备 手机上需要自行安装BLE调试助手等蓝牙工具软件。

    从手机扫描的结果可以看到,前面步骤设置的BLE_TEST蓝牙设备,并且可以发现MAC地址并不是设置的AACCEEFFDDEE,关于这个问题,在蓝牙模块的说明手册上有提示,具体原因可以百度。

     

    • 操作5:手机通过BLE调试助手连接蓝牙设备进行通信 通过手机与蓝牙设备进行通信,验证蓝牙设备通信功能。

     

    到此,验证BLE从机设备通信功能,此时只需要把蓝牙设备的串口接在需要透传的设备上即可透传数据。

    步骤二:使用STM32F411-NUCLEO通过 RW007 BLE 功能测试BLE蓝牙模块数据传输功能

    可以分为以下 3 个步骤:

    • 步骤(1):参考相关文档创建使用RT-Thread Studio IDE 工程

    • 步骤(2):替换 RW007软件驱动包

    • 步骤(3):通过 BLE测试命令与BLE设备进行通信

    步骤(1):参考相关文档创建使用RT-Thread Studio IDE 工程

    由于使用RT-Thread Studio IDE如何创建使用RW007模块的工程,官方的文档中心有提供比较详细的文档,可以参考此文档进行创建,或可以直接使用官方提供的工程,在此进行详细的描述。

    步骤(2):替换 RW007软件驱动包

    可以把提供的RW007软件驱动包,替换到创建的RT-Thread Studio工程目录下。

    步骤(3):通过 BLE 测试命令与BLE设备进行通信

    当前面两个步骤完成后,可以在STM32F411-NUCLEO的调试串口上看到对应的BLE测试命令,此时BLE设备(这里使用KT6368A蓝牙模块进行演示)通过 USB-TTL串口与PC 进行连接。

    (1)查看RW007BLE 相关命令

    msh />rw
    rw007_ble
    msh />rw007_ble
    [rw007_ble command]
    ​
    rw007_ble help
    rw007_ble init central/peripheral                           Note: init ble mode
    rw007_ble get_addr                                          Note: get ble address
    rw007_ble update_params                                     Note: update connect parameters(no support)
    rw007_ble scan                                              Note: scan ble slave
    rw007_ble stop_scan                                         Note: stop scan
    rw007_ble connect xx:xx:xx:xx:xx:xx                         Note: use slave addr to connect
    rw007_ble disconnect [conn_handle]                          Note: disconnect slave
    rw007_ble get_server                                        Note: discover all server(no support)
    rw007_ble get_char                                          Note: discover all description(no support)
    rw007_ble get_disc                                          Note: discover all characteristic(no support)
    rw007_ble mtu_exch                                          Note: ble mtu exchange(no support)
    rw007_ble notify                                            Note: enable ble notify(no support)
    rw007_ble write                                             Note: ble write data(no support)
    rw007_ble read                                              Note: ble read data(no support)
    rw007_ble notify_change [conn_handle] [char_value] [UUID]   Note: ble notify configure by uuid
    rw007_ble write_uuid [conn_handle] [UUID] [data]            Note: ble write data by uuid
    rw007_ble read_uuid                                         Note: ble read data by uuid(no support)
    ​
    msh />
    ​

    (2) RW007 BLE 功能初始化 输入命令:

    rw007_ble init central

    测试示例:

    msh />rw007_ble init central
    263 - ble_cmd_init
    start ble central

    注意:目前仅支持central主机模式

    (3) RW007 扫描附近的BLE设备 输入命令:

    rw007_ble scan 

    测试示例:

    msh />rw007_ble scan 
    318 - ble_cmd_scan
    ​
    resp_type: 1, len: 59
    RW007_BLE_NTF_TYPE_DISCOVER
    received advertisement; event_type=0 rssi=-46 addr_type=0 addr=ee:dd:ff:ee:cc:aa
    mfg_data = 02 01 06 03 03 f0 ff 
    ​
    resp_type: 1, len: 83
    RW007_BLE_NTF_TYPE_DISCOVER
    received advertisement; event_type=4 rssi=-47 addr_type=0 addr=ee:dd:ff:ee:cc:aa
    mfg_data = 1e 09 42 4c 45 5f 54 45 53 54 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

    可以从扫描结果中看到mac地址为ee:dd:ff:ee:cc:aa的设备,这个设备为前面通过串口设置BLE模块的MAC地址,后面将以这个地址进行连接设备。

    (4)RW007连接BLE蓝牙设备 通过rw007_ble connect命令连接BLE设备 输入命令:

    rw007_ble connect ee:dd:ff:ee:cc:aa

    测试示例:

    msh />rw007_ble connect ee:dd:ff:ee:cc:aa
    341 - ble_cmd_connect
    str_addr: ee:dd:ff:ee:cc:aa
    mac addr: aa:cc:ee:ff:dd:ee
    msh />resp_type: 1, len: 52
    RW007_BLE_NTF_TYPE_CONNECT
    type: 0, status: 0, conn_handle: 1
    ​
    resp_type: 1, len: 44
    RW007_BLE_NTF_TYPE_CONNECT_DESC
    our_id_addr: c9:47:8c:42:00:48
    peer_id_addr: aa:cc:ee:ff:dd:ee
    ​

    (5)RW007向蓝牙设备发送数据 由于目前大部分BLE设备通过UUID进行数据的收发. 从上面的 UUID说明可知,特征 1 的UUID“FFF1”,特征是“WRITE”“NOTIFY”,这里可以直接使用FFF1作为测试的UUID. 输入命令:

    rw007_ble write_uuid 1 fff1 Hello,BLE_TEST

    测试示例:

    msh />rw007_ble write_uuid 1 fff1 Hello,BLE_TEST
    434 - ble_cmd_gattc_write_by_uuid
    write conn_hanle:1 uuid:fff1 data:Hello,BLE_TEST
    write rc:0
    msh />

    (6)RW007接收蓝牙设备的数据 输入命令:

    rw007_ble notify_change 1 1 0xfff1

    测试示例:

    msh />rw007_ble notify_change 1 1 0xfff1
    415 - ble_cmd_gatt_notify_change_by_uuid

     

    到此,使用STM32F411-NUCLEO通过 RW007 BLE 功能测试BLE蓝牙模块数据传输功能完成。

    展开全文
  • 用电脑串口AT命令控制蓝牙BLE主机
  • ** 前言: ** 1.主机端通过NRF Connect App连接蓝牙设备 ...主机read是在SD(softdevice)中获取数据的,而在APP层,是通过函数库sd_ble_gatts_value_set() 这个函数更新信息到SD的,read的动作并没有在APP

    **

    前言:

    **
    1.主机端通过NRF Connect App连接蓝牙设备
    2.芯片为NRF52840
    3.程序为Nordic官方提供程序

    1.问题描述:手机(主机)连接蓝牙从机后,需要读取从机的信息,在自定义服务/标准服务下,通过操作Characterstic 下“read”按键,读取从机端的信息。
    在这里插入图片描述

    2.原理介绍:
    主机read是在SD(softdevice)中获取数据的,而在APP层,是通过函数库sd_ble_gatts_value_set()
    这个函数更新信息到SD的,read的动作并没有在APP层上报信息/发生事件,
    所以在APP层找不到相关主机请求数据的事件。
    在这里插入图片描述
    3.应用:
    1).将不需要改变的值(例如硬件/软件版本号等)可以通过在初始化Characterstic的时候将其写入SD中,具体的操作示例如下:
    将APK版本号写到SD中
    在初始化Characterstic时赋值即可
    在这里插入图片描述

    #define CONFIG_APK_REVISION  "2.9.0"
    
    ble_add_char_params_t addCharParams;
    

    在这里插入图片描述
    2).需要读取从机实时的值给主机
    通过调用APIsd_ble_gatts_value_set()将值写到SD中
    在这里插入图片描述
    现象:读取到写入的值为08
    在这里插入图片描述

    展开全文
  • HCI上传输的5种数据: HCI Command packet : Host层发送给Controller的命令,只能由Host发出。...HCI Event packet: 发送给对端BLE的数据,双向的。Host和Controller都可以发出。 HCI ISO Data packe.
  • 最近使用CC2541做主机来连接CH573做测试,发现获取不到CH573的notify属性的特征值,后面发现,通过 GATT_ReadUsingCharUUID() 是搜索不到的,而通过 GATT_DiscCharsByUUID() 是可以搜索到的。 二、需要注意的点 ...
  • BLE主机之ATT和GATT

    2017-12-07 09:58:00
    属性协议定义了访问对端设备上的数据的一组规则,数据存储在属性服务器的属性里面,供属性客户端执行读写操作。...客户端可以使用这些请求在服务器上找到所有的属性并且读写这些属性。 属性协议定义了六种类型的消息:...
  • BLE主机之L2CAP层

    2017-12-07 09:48:00
    低功耗信令信道用于主机层级的信令。 信令信道传输的为 L2CAP 命令数据包。数据包结构在前面 L2CAP 数据报文部分已经描述。 下面通过不同命令数据包的用途分析来了解低功耗信令信道的用途。 不同的命令操作码...
  • 本期文章将分为5篇连载,前2篇将围绕模块功能详解展开,其后3篇将为大家讲解基于RW007相关DEMO的实现,文章目录如下: 步骤1:更新 “RW007” 模块的固件 由于默认RW007模块的固件不支持BLE主机功能,所以需要使用...
  • 在Nordic产品开发中,有遇到主机和从机之间建立绑定,以及当某一方(主/从机)的绑定信息丢失后出现连接失败问题,有以下几种应用场景。针对不同的场景需修改或添加部分代码,以下代码是基于nRF5_SDK_15.3.0_59ac345...
  • ESP32 BLE Client(主机扫描)

    千次阅读 2021-08-10 10:53:08
    ESP32作为主机进行扫描并连接ble server,参考文章,此文章的内容是需要四个设备,一个作为主机进行搜索其他设备做ble server等待连接,连接之后设置MTU,本文将修改成只需要两个设备进行连接通讯。 实施程序 GATT ...
  • BLE蓝牙主机和从机的区别

    万次阅读 2019-05-16 10:27:43
    BLE蓝牙的角色有以下几种:广播者(Advertise)、扫描者(Scanner)、从设备(Slave)、主设备(Master)、发起者(Initiator),其中主设备是由发起者、扫描者转化而来,从设备则是由广播者转化而来;蓝牙模块通信是...
  • BLE主机主动扫描和被动扫描

    千次阅读 2017-07-19 11:57:59
     在实际中如果需要获得扫描响应,需要主机设置为主动扫描。如果仅仅是需要广播数据则设置为被动扫描。主动扫描和被动扫描的区别在于:主动扫描可以获得广播数据和扫描回应数据。而被动扫描只能获得广播数据不能获得...
  • BLE主机之SM层

    2017-12-07 09:51:00
    安全管理器定义了一个简单的配对和密钥分发协议,配对是一个获取对方设备信任的过程,通常采取认证的方式实现,配对之后,接着是链路加密和密钥分发过程。在密钥分发过程中从设备把密钥共享给主设备。...
  • RTL8762DK 主从模式,电池服务读取示例
  • 1、这个代码是在ble_app_uart 的基础上改的, 改动很小,基本上就是把nus 服务改成自己项目的scp 服务,很多只是改了下名字。 2、其他无关代码可以忽略,懒得改了 3、附带一个其他作者的资料,新的sdk不能照着改,...
  • esp32例程 esp32蓝牙做主机https://github.com/espressif/esp-idf/blob/8e3e65a/examples/bluetooth/bluedroid/ble/gatt_client/tutorial/Gatt_Client_Example_Walkthrough.md ESP32 GATTC修改UUID 16bit和32bit ...
  • 所谓从机设备广播,就是BLE从机设备角色,以一定的时间间隔(即广播间隔),向空中发送特定格式的广播数据包,以便对端设备(通常是主机角色或扫描者角色)能够发现从机的存在。 从机设备通常有四种广播方式:...
  • 复习一遍加深对整体的记忆。 1. PHY 层(Physicallayer 物理层)。PHY 层用来指定 BLE 所用的无线频段,调制解调方式和方法...LL 层是整个 BLE 协议栈的核心,也是 BLE 协议栈的难点和重点。LL 层要做的事情非常多...
  • 详解BLE的数据传输过程

    千次阅读 2021-12-25 15:31:05
    我们从BLE的本质出发,搞清楚它是如何实现数据交互的,也就真正搞清楚了BLE的工作原理。 下面从3个方面,逐步讲解BLE的数据收发过程。 本文结合nordic的代码和蓝牙核心规范5.2来进行介绍。本文认为你对BLE协议栈的...
  • 压缩包含有BLE手机作为从机,nrf51822做主机通信实验的文档,内附实验代码(基于SDK10.0)
  • 为什么要更新连接参数? 从设备一般是电池供电的,要想让从设备的电池使用寿命更长,就可以更新连接,减少...可以看出:由从机发起连接参数更新请求(Connection Parameter Update Request)(L2CAP层),主机返回连
  • BLE连接简介

    千次阅读 2021-10-13 20:14:15
    如果广播设备接收了连接, 两个设备会进入连接状态, 发起方会称为 Master(主机),而广播方会称为 Slave(从机)。 七、BLE 连接参数   通道映射, 指示连接使用的频道。   调频增量, 一个 5~16 之间的随机,...
  • BLE流程概述

    2021-10-25 11:47:54
    对讲机在与手机蓝牙的连接过程中,对讲机充当从机,手机充当主机,对讲机每10s发起一次广播, 如果手机开启扫描,并且扫描在对讲机广播时对应的通道扫描到对讲机,手机发起连接请求,对讲机端确认连接或者拒绝连接...
  • else if ( simpleBLEDiscState == BLE_DISC_STATE_CHAR ) { // Characteristic found, store handle if ( pMsg->method == ATT_READ_BY_TYPE_RSP && pMsg->msg.readByTypeRsp.numPairs > 0 ) { ...
  • 深入理解蓝牙BLE之“多主多从”

    千次阅读 2022-04-23 22:36:15
    前言: 在蓝牙4.2协议中是有5个链路层状态机的,而蓝牙5.2协议里面是有7个状态机(为ble audio扩展了两个状态机),ble audio不是本文介绍的重点,因此仍然以4.2的5个状态机为基础进行介绍。 4.2 Core Spec协议的5个...
  • BLE技术知识点大全

    千次阅读 多人点赞 2020-12-07 13:12:53
    BLE是低功耗蓝牙的英文缩写(Bluetooth Low Energy),是蓝牙4.0版本起开始支持的新的、低功耗版本的蓝牙技术规范。 蓝牙技术联盟(Bluetooth SIG)在2010年发布了跨时代的蓝牙4.0,它并不是蓝牙3.0的简单升级版本...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,874
精华内容 1,549
关键字:

ble主机