整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

低功耗蓝牙(BLE)和传感器的使用

低功耗蓝牙(BLE)和传感器的使用

、低功耗蓝牙的使用

Android中关于蓝牙的开发文档,可以参考Google提供的官方蓝牙文档:https://developer.android.google.cn/guide/topics/connectivity/bluetooth.html

在Android开发中,应用可通过官方提供的蓝牙API执行以下操作:

  • 扫描其他蓝牙设备
  • 查询本地蓝牙适配器的配对蓝牙设备
  • 建立 RFCOMM 通道
  • 通过服务发现连接到其他设备
  • 与其他设备进行双向数据传输
  • 管理多个连接

蓝牙

一个近距离无线通信技术,最早是由爱立信研发出来。蓝牙 Bluetooth 这个词是一个丹麦的国王的绰号,当时研发它的工程师正在看一个关于这个国王的书,就起了这个名字。蓝牙的技术特点是:

  • 近距离通信:典型距离是 10 米以内;
  • 传输效率:传输速度最高可达 24 Mbps
  • 多连接:蓝牙技术支持多设备连接、安全性高

蓝牙从被发明到目前,经过了几个版本的变化:

  • 1.0版本:99年发布
  • 2.1版本:使用范围最广泛,经典蓝牙
  • 3.0版本:高速蓝牙,最高传输速度达到24Mbps
  • 4.0/4.1版本:新增低功耗蓝牙
  • 5.0版本:物联网

低功耗蓝牙

低功耗蓝牙全称为Bluetooth Low Energy,简称为BLE,最大特点就是低功耗,另外低功耗蓝牙还具备成本低,连接速度快,安全性高的特点。当然,低功耗蓝牙也相应的会有一些不足,比如说:低功耗对应的是低传输效率,因此低功耗蓝牙主要用来传输少量数据,结合低功耗的特点,非常适合用在移动智能设备上。

低功耗蓝牙分为两种模式:单模和双模。

  • 单模:只能执行低功耗协议栈,即只支持BLE。
  • 双模:既支持传统蓝牙又支持BLE蓝牙。

注意:需要在Android 4.3及以上版本才能支持具备低功耗功能的蓝牙4.0。

BLE协议栈

首先来看一下使用蓝牙的基本流程:

先简单来了解一下低功耗蓝牙的协议框架,在BLE协议栈中,大致分为三个部分,从下到上依次为:控制器(Controller) 、主机(Host)、应用(Applications)。

  • 控制器:协议栈的最底层,直接与硬件相关,由厂商直接实现。
  • 主机:硬件层的抽象层,与具体的硬件和常见无关,可以理解为接口。
  • 应用层:使用Host层提供的API,进而开发的应用。

协议层从下往上,依次包含如下协议:

  • Attribute Protocol:简称为 ATT,属性协议,Host层的一个协议,是BLE通信的基础。ATT 把数据封装,向外暴露为“属性”,提供“属性”的为服务端,获取“属性”的为客户端。ATT 是专门为低功耗蓝牙设计的,结构非常简单,数据长度很短。每个属性都有一个唯一的UUID,属性以characteristics and services的形式传输。
  • Generic Attribute Profile:简称为GATT,通用属性配置文件,建立在前面说的 ATT 的基础上,对 ATT 进行进一步的逻辑封装,定义数据的交互方式和含义。GATT 按照层级定义了三个概念:
    • Service:服务,一个 Service 包含若干个 Characteristic。
    • Characteristic:特征,一个 Characteristic 可以包含若干 Descriptor。
    • Descriptor:描述,数据的读写操作。
  • Generic Access Profile:简称为GAP,通用访问控制配置文件,用来控制设备连接和广播,GAP使你的设备被其他设备可见,并决定了你的设备是否可以或者怎样与合同设备进行交互。

Android BLE API

  • Android SDK 中 BLE 相关的 API 都在 android.bluetooth.* 中。
  • 5.0版本中:android.bluetooth.le*

权限

  • 要在 APP 中使用蓝牙功能,需要在 Manifest 中申请蓝牙相关的权限。
  • Android 6.0及以上版本:蓝牙 + 定位权限。为什么会有定位权限?BLE有定位的功能和能力。

BLE核心API

  • BluetoothManager:蓝牙管理服务。在Android基本框架中可以发现蓝牙属于最底层的驱动模块中,可以公国context.getSystemService(Context.BLUETOOTH_SERVICE) 来进行获取。
  • BluetoothAdapter:本地设备蓝牙适配器。BluetoothAdapter可以完成:启动设备发现,查询已绑定(配对)设备的列表,使用已知MAC地址实例化 BluetoothDevice,并创建一个 BluetoothServerSocket 以监听来自其他设备的连接请求,并启动扫描蓝牙LE设备等操作,该类属于核心中的核心。
  • BluetoothAdapter.LeScanCallback:BLE扫描结果回调接口,在 Android 5.0以上 使用抽象类 ScanCallback。
  • BluetoothLeScanner:蓝牙LE设备执行扫描相关操作类,使用该API要求Android 5.0(API21)以上。
  • BluetoothDevice:远程蓝牙设备,BluetoothDevice允许创建与相应设备的连接或关于它的查询信息,例如名称,地址,类和绑定状态等。
  • BluetoothProfile:配置文件代理。每个公共配置文件实现这个接口。它有几个直接子类,每个子类再不同场景中使用,如 BluetoothA2dp, BluetoothGatt, BluetoothGattServer, BluetoothHeadset, BluetoothHealth。在当前例子中使用到的是 BluetoothGatt。
  • BluetoothGatt:提供蓝牙GATT功能,以实现与蓝牙智能或智能就绪设备的通信。使用该类做连接、断开、关闭等操作。
  • BluetoothGattCallback:设备连接时的回调接口。

UUID

UUID 是全局唯一标识,是128bit的值,为了便于识别和阅读,一般标示成:8-4-4-12 的16进制格式。

Android 中提供了 UUID.randomUUID() 来生成一个随机的 UUID。

在低功耗蓝牙中,长度为128bit的UUID数据长度是受限的,因此蓝牙中又产生出来了16bit和32bit的UUID,本质上和128bit的UUID一样。

Android 中BLE的操作步骤

  • ① 获取到BluetoothAdapter:代表设备自己的蓝牙适配器,整个系统只有一个蓝牙适配器,应用程序可以使用此对象与其交互。获取方法是通过 BluetoothManager 获取。
  • ② 启用蓝牙设备:isEnable() 查看是否启用,通过 BluetoothAdapter.ACTION_REQUEST_ENABLE 来启动
  • ③ 查找BLE设备:通过startLeScan(callBack); 方法来开启扫描;另外还可以使用BluetoothLeScanner来扫描。

与Android BLE设备通信

开发BLE应用,主要有两大类:

  • 基于非连接的通信应用:使用的是BLE的广播机制,又称作是Beacon。共有两个角色:发送方负责发送广播,称之为Boradcaster,另外一方为监听方,监听广播信号,称之为Observer。
  • 基于连接的通信应用:基于连接的通信是通过建立GATT连接,让后进行数据的收发。也有两个角色:连接发起方,称之为中心设备(Central),另外一方是被连接的设备,称之为外设Peripheral。

本篇文章中,我们来讨论面向连接的通信的情况。如果要与另外一个BLE设备进行通信,需要经过连接,确认状态,然后再通信的过程。首先是开启连接,然后会触发对应的连接回调,然后发现服务,触发发现服务回调,获取服务内部的特征值,对其读写命令(和 BLE 共同约束的规范),就是这么一个过程,比较简单。

  • 连接到GATT服务器:如果要与BLE进行通信,第一步就是要连接到该设备的 GATT 服务。使用connectGatt方法链接,有三个参数,最后一个参数为连接的回调函数,表是处理链接的状态,所有交互均从回调中进行处理。
  • 读 BLE 属性:一旦Android设备连接到GATT的服务器并且发现了BLE服务,则可以读取或者写入相关的属性,执行相关的操作了。
  • 释放GATT:当操作完成后,要记得关闭设备bluetoothGatt.close()。

二、WIFI的使用

每个移动智能设备几乎都带有WIFI连接功能,在Android系统中,同样也提供了WIFI开发的相关的API。

WIFI API

Android系统提供的WIFI API,主要包含在两个包中:

  • android.net.wifi包
  • android.net.wifi.p2p包

和wifi相关的核心API主要有以下几个内容:

  • WifiManager:提供管理WiFI连接的大部分API
  • ScanResult:已经检测出的接入点(包括接入点的地址、名称、身份认证、频率、信号强度)
  • WifiConfiguration:WiFi连接的网络配置(包括安全配置等)
  • WifiInfo:WiFi无线连接的描述,主要包括接入点、网络连接状态、隐藏的接入点、IP地址、连接速度、MAC地址、网络ID、信号强度等等信息。
  • WifiManager.WifiLock:通常情况下当用户在一段时间内没有任何操作的时候,WiFi网络会自动关闭。我们使用WifiLock来锁定WiFi网络,使其一直保持连接,直到这个锁被释放。多个应用程序可能有多个锁,当多有的应用程序的锁都被释放的时候,WiFi才被关闭。

WIFI 使用说明

  • WifiManager:context.getSystemService(Context.WIFI_SERVICE);
  • 打开WiFi:mWifiManager.setWifiEnabled(true); 关闭wifi为false
  • 创建一个WifiLock:mWifiManager.createWifiLock("lock_name");
  • 锁定WifiLock:mWifiLock.acquire();
  • 释放WifiLock:mWifiLock.release();
  • WiFi连接:
public void addNetworkAndConn(WifiConfiguration wcg) {
    int netId=mWifiManager.addNetwork(wcg);
    mWifiManager.enableNetwork(netId, true);
}
  • 断开一个指定ID的WiFi:
public void disconnectWifi(int netId) {
    mWifiManager.disableNetwork(netId);
    mWifiManager.disconnect();
}
  • 扫描可接入的WiFi:
public void startScan() {
    mWifiManager.startScan();
    // 得到扫描结果
    List<ScanResult> wifiList=mWifiManager.getScanResults();
    // 得到配置好的网络连接
    List<WifiConfiguration> wifiConfigList=mWifiManager.getConfiguredNetworks();
}

WIFI 权限

在进行wifi开发时,既要用到网络,也要用到硬件资源,因此需要申请一些必要的权限,而且涉及到的还比较的多,主要的权限如下:

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission> 
<uses-permission android:name="android.permission.ACCESS_CHECKIN_PROPERTIES"></uses-permission> 
<uses-permission android:name="android.permission.WAKE_LOCK"></uses-permission> 
<uses-permission android:name="android.permission.INTERNET"></uses-permission> 
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission> 
<uses-permission android:name="android.permission.MODIFY_PHONE_STATE"></uses-permission>

WIFI直连

WIFI Direct 意为通过 WIFI 直接建立连接。允许无线网络中的设备无须通过无线路由器即可相互连接。这种标准支持 WIFI 的无线设备像蓝牙那样以点对点的形式互连,但是在传输速度与传输距离方面都比蓝牙有大幅提升。

WIFI Direct 提供 WifiP2pManager 类,其功能主要分为以下三部分:

  • WifiP2pManager 类提供相关 API 用于发现可连接的点,并进行请求和建立连接。
  • 每个 WifiP2pManager 的方法都要求传入对应的监听器,用于监听对该方法是否成功运行。
  • 当检测到特定事件,如可连接的点减少或者发现了新的可连接的点,WIFI Direct 框架会通过 Intent 通知用户。

WifiP2pManager的核心API用法说明如下所示:

  • initialize:为应用程序注册 WIFI 框架。该方法必须在任何其他 WIFI Direct 方法被调用前调用,常放在Application中调用。
  • connect:与具有指定配置的 WIFI 设备建立点对点连接
  • cancelConnect:断开连接
  • requestConnectInfo:获取设备的连接信息
  • createGroup:以当前设备为拥有者创建一个点对点组
  • removeGroup:删除当前的点对点组
  • requestGroupInfo:获取点对点组的信息
  • discoverPeers:初始化发现对等点设备服务
  • requestPeers:获取当前已发现的对等点设备列表

在WifiP2pManager使用时,同样支持使用各种监听回调接口:

  • ActionListener:Wifi连接过程中的某个动作监听。主要包括:connect、cancelConnect、createGroup、removeGroup、discoverPeers等回调函数
  • ChannelListener:initialize初始化的回调
  • ConnectionInfoListener:请求连接的回调,回传连接信息
  • GroupInfoListener:点对点组的监听信息
  • PeerListListener:点对点设备的监听回调接口

三、传感器

Android 传感器属于虚拟设备,可提供来自以下各种物理传感器的数据:

  • 加速度计
  • 陀螺仪
  • 磁力计、
  • 气压计
  • 湿度传感器
  • 压力传感器
  • 光传感器
  • 近程传感器
  • 心率传感器

以上的这些均可以归纳为传感器类别,在Android中,这些传感器有一个相同的定义文件,存在一个 sensors.h文件,其中定义了Android系统支持的每一种传感器。格式为:ENSOR_TYPE_传感器名称。


该图为Android系统中传感器的的架构和分层。可以看出,几乎和Android系统整体的架构一样。从上层到下层,从应用层到底层内核层。

传奇器核心API

Android传感器框架放在android.hardware包中,核心的API如下所示:

  • SensorManager:用于创建传感器服务实例。该类提供了访问和罗列传感器的各种方法,用于注册和注销传感器事件监听器并获取方向信息。该类也提供了几个常量,用于报告传感器的精度、数据获取率和校正传感器。
  • Sensor:用作创建某个特定传感器的实例。该类提供了用于确定传感器能力的各种方法。
  • SensorEvent:创建传感器事件对象。传感器事件对象包含传感器事件的相关信息,包括原始的传感器数据、传感器类型、产生的事件、事件精度以及事件发生的时间戳等。
  • SensorEventListener:是一个接口,包含两个回调方法。当传感器的值发生改变或者传感器的精度发生改变时,相关方法就会自动被调用。

传感器核心操作

无论如何变化,其实通过上面的描述和介绍,我们看到,传感器是底层系统提供的,数据也是相关的API返回获取的。因此,在涉及到传感器开发时,开发者的核心操作只有两个:

  • 分析需求,明确使用哪个一个类别的传感器,明确要获取的传感器数据。
  • 调用系统的API方法,监听传感器的的回调时间,获取数据。

因此,Android中的传感器部分的应用开发,重点不是在于传感器的使用,是开发者自己特定的应用,在获取到数据后,对数据的处理和挖掘,是重中之重。

Android传感器分类

Android中支持的传感器分为很多类别,主要有:

  • TYPE_ACCELEROMETER:运动探测传感器,硬件传感器
  • TYPE_AMBIENT_TEMPERATURE:环境温度传感器,硬件传感器
  • TYPE_GRAVITY:运动探测,软件或者硬件传感器
  • TYPE_GYROSCOPE:旋转,硬件传感器
  • TYPE_LIGHT:屏幕亮度传感器,属于硬件传感器
  • TYPE_LINEAR_ACCELERATION:加速度传感器,软件或者硬件都有
  • TYPE_ORIENTATION:方向传感器,属于软件传感器
  • TYPE_PRESSURE:空气压力传感器,属于硬件传感器
  • TYPE_PROXIMITY:距离传感器,用于监测打电话时手机与耳朵的距离,属于硬件传感器

四、SystemService

经过本篇文档的介绍,结合之前的课程内容,我们可以总结出一个规律。在Android开发时,很多情况下我们都可以直接通过某个上下文,获取xxxManager,往往是某个管理者。这些管理者是Android系统提供的系统服务,我们可以统称为SystemService,现在我们了解一下SystemService有关的内容,并做个总结。

SystemService

SystemService是系统提供给开发者的调用系统层的控制接口,应用层的开发者只需要了解这些接口的使用方式,就可以非常方便的进行系统控制,完成自己想要的功能操作,获取系统的相关信息,而不需要了解接口的具体内部实现方式。这些SystemManager是在framework层或者更底层进行实现的。

相反的对于Framework层的开发者而言,需要了解XXXManager服务的实现细节和方式,并维护Manager接口,扩展或者实现新接口等。

我们可以列举一下我们在学习过程中遇到的Manager,比如:

  • WindowManager:窗口操作的窗口管理服务
  • NotifacationManager:通知管理
  • AudioManager:Android系统的音频管理者
  • LocationManager:GPS定位服务管理
  • StatusBarManager:状态栏的管理者

除此以外,还有很多很多,以上这些管理者,其实背后都是有一个系统服务SystemService。

getSystemService

getSystemService是Android很重要的一个API,它是Activity的一个方法,根据传入的NAME来取得对应的Object,然后转换成相应的服务对象。

O.1前置准备

电脑端Chrome浏览器在地址栏打开以下网址,修改配置

chrome://flags/

把以下4个属性开启

找不到的话可以在顶部搜索栏搜索关键字

Experimental Web Platform features

Bluetooth


NO.2Web Bluetooth

Web Bluetooth文档

https://developer.mozilla.org/zh-CN/docs/Web/API/Bluetooth

注意以下几点:

  1. chrome版本需要>=53
  2. 需要部署到HTTPS的网页进行测试和使用
  3. 需要用户手势出发,也就是真实的鼠标点击之类的操作,才能出发蓝牙扫描和连接

体验网站Demo效果,需要对应的ESP32代码

https://bluetooth.dsx2020.com/

效果如图

ESP32会收到对应的测试字符串

网页代码

那其中的service_uuid和receive_uuid换成你自己的蓝牙广告ID就可以了

如果不确定,就继续参考ESP32蓝牙广播对应的代码





<html lang="en">
    <head>
        <meta charset="UTF-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title>BL</title>
    </head>
    <body>
        <!-- 只有通过真实点击才能连接蓝牙 -->
        <div onclick="blList()">blue</div>
    </body>
    <script>
        // let uuid=// 定义连接蓝牙方法
        async function blList() {  
            navigator.bluetooth
                .requestDevice({
                    // 蓝牙名称前缀
                    filters: [{ name: "ESP32" }],
                    // 蓝牙uuid
                     optionalServices: ["ae25a5c1-4601-143c-12bb-8bc45a18749c"], 
                })
                .then(async (device)=> {
                    console.log("Name: " + device.name, device);
                    // 连接设备
                    let server=await device.gatt.connect();
                    console.log(`server`, server);
                    // 获取蓝牙uuid相关内容
                    let service=await server.getPrimaryService("ae25a5c1-4601-143c-12bb-8bc45a18749c");
                    console.log(`service`, service);
                    // 获取可以读写字符流的服务
                    let characteristic=await service.getCharacteristic(
                        "ae25a5c2-4601-143c-12bb-8bc45a18749c"
                    );
                    // 写入字节(括号中的方法为把字符串转为字符流,传输给蓝牙)
                    characteristic.writeValue(
                        new Uint8Array(
                            new TextEncoder("utf-8").encode("str")
                        )
                    );
                    alert("已发送字符")
                })
                .catch(function (error) {
                    // 监听错误
                    console.log("Something went wrong. " + error);
                    alert(error)
                });
        }
        // blList();
</script>
</html>



NO.3ESP32 Bluetooth

参考上一篇文章

《MicroPython[ESP32]物联网开发-Bluetooth蓝牙通信-002》

这里贴上完整的代码

# 引入依赖
import ubluetooth
# 实例化蓝牙
class BLE():
    def __init__(self, name):   
        # 蓝牙名称
        self.name=name
        # 创建蓝牙实例
        self.ble=ubluetooth.BLE()
        # 开启蓝牙
        self.ble.active(True)
        # 蓝牙事件回调
        # 参考文档
        # https://docs.micropython.org/en/latest/library/bluetooth.html?highlight=irq
        self.ble.irq(self.ble_irq)
        # 配置蓝牙UUID
        self.register()
        # 特征和描述符的默认最大大小为 20 个字节,修改允许为100个字节(蓝牙数据的发送和接收字节大小限制)
        self.ble.gatts_write(self.rx, bytes(100))
        # 蓝牙广播
        self.advertiser()
        print("已开启蓝牙广播")
        
    # 蓝牙连接成功后回调
    def connected(self):        
        print("connected")
    # 蓝牙断开连接后回调
    def disconnected(self):        
        print("disconnected")  


    # 蓝牙事件回调函数
    def ble_irq(self, event, data):
        #蓝牙已连接
        if event==1:
            print("蓝牙已连接")
            # 连接后的执行函数
            self.connected()
        #蓝牙已断开连接
        elif event==2:
            print("蓝牙已断开连接")
            # 断开连接后的执行函数
            self.advertiser()
            self.disconnected()
        #蓝牙已发送数据
        elif event==3 :
            print("蓝牙已接收到数据")        
            # 读取二进制数据
            buffer=self.ble.gatts_read(self.rx)
            # 使用UTF-8格式把二进制数据转为字符串
            message=buffer.decode('UTF-8').strip()
            # 打印收到的字符数据
            print("message",message)    
            # 对指定的数据做处理并蓝牙返回数据        
            if message=='test':
                print('test')
                ble.send('test')
            if message=='str':
                print('str')
                ble.send('str')
    # 注册蓝牙UUID
    def register(self):        
        # 自定义UUID
        # 蓝牙服务UUID service_uuid(后续蓝牙建议连接会用到)
        NUS_UUID='AE25A5C1-4601-143C-12BB-8BC45A18749C'
        # 蓝牙接收特征UUId receive_uuid
        RX_UUID='AE25A5C2-4601-143C-12BB-8BC45A18749C'
        # 蓝牙发送特征UUId transmit_uuid
        TX_UUID='AE25A5C3-4601-143C-12BB-8BC45A18749C'
        # UUID组合(一个包含UUID和特征列表的二元元组)
        BLE_NUS=ubluetooth.UUID(NUS_UUID)
        BLE_RX=(ubluetooth.UUID(RX_UUID), ubluetooth.FLAG_WRITE)
        BLE_TX=(ubluetooth.UUID(TX_UUID), ubluetooth.FLAG_NOTIFY)
        BLE_UART=(BLE_NUS, (BLE_TX, BLE_RX,))
        SERVICES=(BLE_UART, )
        # 使用指定的服务配置外围设备
        # 文档地址:
        # https://docs.micropython.org/en/latest/library/bluetooth.html?highlight=irq#peripheral-role
        ((self.tx, self.rx,), )=self.ble.gatts_register_services(SERVICES)
    # 发送数据
    def send(self, data):
        # 向连接的客户端发送通知请求
        # 文档地址:
        # https://docs.micropython.org/en/latest/library/bluetooth.html?highlight=irq#gatt-client
        self.ble.gatts_notify(0, self.tx, data + '\n')
    # 蓝牙广播配置
    def advertiser(self):
        name=bytes(self.name, 'UTF-8')
        # 以指定的时间间隔(以微秒为单位)开始广播
        # 文档地址
        # https://docs.micropython.org/en/latest/library/bluetooth.html?highlight=irq#broadcaster-role-advertiser
        self.ble.gap_advertise(100, bytearray('\x02\x01\x02') + bytearray((len(name) + 1, 0x09)) + name)
        
# 创建一个名为ESP32的蓝牙广播
ble=BLE("ESP32")

NO.4Tips

目前Web Bluetooth只支持安卓和Windows上的Chrome浏览器

不支持MacOS和Iphone上Chrome浏览器

使用安卓手机Chrome浏览器同样可以测试网页蓝牙通信,但是也要设置前置权限

手机权限

  1. 在系统设置中打开蓝牙
  2. 应用设置中允许开启或者关闭蓝牙
  3. 允许桌面快捷方式
  4. 允许锁屏显示
  5. 允许后台弹出界面
  6. 允许常驻通知
  7. 允许读写手机存储

因为网页蓝牙扫描和配对时,会以弹框的形式展示,所以需要一些显示和通知的应用权限,确保能展示蓝牙提示弹框

相比APP和微信小程序的蓝牙开发和调试,显然网页相对方便一些

可以用来测试简单的字符通信,测试蓝牙广播是否被正常扫描,以及特定字符的发送和接收逻辑处理等

本文的网页蓝牙UUID默认是固定的,后期有时间再改为动态输入

END.

35蓝牙模块升级款B35S首发上架,B35S不仅支持BLE5.2蓝牙+2.4G WiFi,还支持低功耗模式,功耗最低200uA。


B35S资料文档:

https://h.hlktech.com/Mobile/download/fdetail/267.html



蓝牙WiFi模块优势


蓝牙技术大多用来做短距离的设备间通信,例如无线耳机和智能手环等产品,WiFi技术则为产品提供了相对更高速的长距离数据传输能力,适用于连接互联网和局域网。


在各种场景的实际应用中,会经常出现需要多个设备之间进行快速连接以及数据传输,因而用户经常要同时使用蓝牙和WiFi,这可能使得频繁多次、资源浪费和用户体验不佳等问题的出现。


为了解决上述问题,蓝牙WiFi二合一的概念正式产生。蓝牙WiFi模块由于在实际应用中可以给用户提供更便利的无线连接选项,被广泛使用。



产品功能特点


01

BLE5.2蓝牙+2.4G WiFi二合一

HLK-B35S蓝牙模块支持WiFi 802.11b/g/n 和 BLE5.2 基带/MAC 设计,主频支持从 1MHz 到 160MHz,内置 32 位 CPU,288KB RAM,2M 嵌入式 Flash 闪存。


HLK-B35S蓝牙模块支持BLE 协助实现 Wi-Fi 快速配网,支持 AP/STA 和 BLE 共存模式,其中 WiFi 安全支持:WPS/WEP/WPA/WPA2 Personal/WPA2。B35S输出功率 0~10dBm,接收灵敏度 -98dBm。


(串口转 WIFI STA)


(串口转 WIFI AP)



02

微安级超低功耗

B35S蓝牙模块相较于B35蓝牙模块,不仅仅将BLE5.0蓝牙协议升级为BLE5.2,更重要在低功耗方案上的再进化。B35S蓝牙模块接收模式30mA,低功耗待机模式功耗低至200uA。


B35S微安级的超低功耗,再加上模块体积小巧,尺寸仅24x16x2mm,非常适用于水电水表以及可穿戴产品等对模块体积和功耗有严苛要求的产品。



03

传输距离40-100米

B35S蓝牙模块自带BLE5.2蓝牙,传输距离更远,传输距离可达40-100米。相比蓝牙4,蓝牙5.2协议的覆盖范围将是它的4倍。


同时,B35S蓝牙模块传输速率 9600-921600bps,传输速率相比BLE4.0蓝牙协议提高2倍,传输速度更快。




04

测试简单性价比高

B35S蓝牙模块支持直插安装,安装简单易拆卸。首次使用B35S可购买配套测试底板,便于快速测试验证。


与此同时,超低功耗蓝牙模块B35S,支持BLE5.2蓝牙+2.4G WiFi二合一,性能优越,单价低至个位数,低功耗低成本,应用场景广泛。


应用场景

在工业、智能家居等领域中,蓝牙WiFi模块的作用大多用来控制某个智能设备或者被放置在某个智能设备内,一般用纽扣电池供电,然后通过无线端进行数据传输和数据控制。这些智能设备往往需要有长时间续航能力,因而对功耗有着较为严苛的要求,B35S这类低功耗的蓝牙WiFi模块正好满足其需求。


01

超低功耗蓝牙在工业自动化中的应用

在工业自动化中,传感器网络对于实时监测和控制生产过程至关重要。


B35S这类低功耗蓝牙模块用于工业自动化场景中,主要是为了让传感器节点之间的数据传输更加高效,实现实时采集和传递数据,进而在一定程度上提高了工业系统应对不同生产环境变化的灵敏度。




02

超低功耗蓝牙在仪器仪表中的应用

B35S应用于可穿戴医疗设备中,可以让医疗设备实现与手机或者其他智能终端的实时连接,进而实时输出数据,更好地监控患者的健康情况。心率监测、睡眠追踪等数据可以实时传输到医疗专业人士,支持远程监测和诊断。


常见的医疗健康设备有:蓝牙手环、血糖计、血压计、活动传感器等产品。



03

超低功耗蓝牙在穿戴产品中的应用


B35S这类低功耗蓝牙WiFi模块是很多智能设备的配件之一,通过蓝牙模块实现数据的传输和交换。


常见是的智能运动手环、智能眼镜以及智能项链,通过蓝牙模块以低成本低功耗实现短距离的通信,提高产品的使用寿命和运行时间。


B35S模块数据

无线子系统包含 2.4G 无线电,Wi-Fi 802.11b/g/n 和 BLE5.2 基带/MAC 设计

主频支持从 1MHz 到 160MHz

内置 32 位 CPU,288KB RAM,2M 嵌入式 Flash 闪存

工作电压 支持 2.7-3.6V,典型值为 3.3V

BLE 协助实现 Wi-Fi 快速配网

支持 AP/STA 和 BLE 共存模式,其中 WiFi 安全支持:WPS/WEP/WPA/WPA2 Personal/WPA2

集成 balun,PA/LNA

丰富的外设接口,1*SPI 主/从,2*UART,6*PWM,18*GPIO,1*IIC 主/从

广泛应用于物联网

接收模式:30mA,低功耗待机模式:200uA