• 11、智石使用记录


    用了两天的时间,把这个称为智石的蓝牙模块熟悉了一下,现在整理一下。

    智石,英文名为brightBeacon,看字面意思,和apple的13年推出的iBeacon协议有点关系,事实确实如此。

    一、智石的特点如下:

    1、遵循iBeacon协议。

    遵循iBeacon协议的设备工作方式是:配备有 低功耗蓝牙(BLE)通信功能的设备使用BLE技术向周围发送自己特有的ID,接收到该ID的应用软件会根据该ID采取一些行动。比如,在店铺里设置iBeacon通信模块的话,便可让iPhone和iPad(现在android4.3以上且支持BLE的终端设备也支持Beacon协议)上运行一资讯告知服务器,或者由服务器向顾客发送折扣券及进店积分。此外,还可以在家电发生故障或停止工作时使用iBeacon向应用软件发送资讯。(摘自百度百科)

    大白话就是遵循iBeacon协议的蓝牙模块,会一直向外广播,智能设备靠近蓝牙模块的时候,通过商户支持的app来判断靠近的具体是哪个蓝牙模块(通过id来区分),然后app读取服务器中该id对应的相关数据,显示在app中。

    2、1颗纽扣电池,官方宣传可续航1-2年,实际使用估计在6个月左右

    3、智石官方的资料:

    ①sdk地址:https://github.com/BrightBeacon/BrightBeacon_Android_SDK(api文档、sdk)

    ②demo代码讲解:http://www.brtbeacon.com/home/docuemt_andriod.shtml(sdk中得demo的关键代码讲解)

    ③demo地址:http://www.brtbeacon.com/home/sdkdownload.shtml(官方做的一些体验demo,很烂)

    二、智石开发中大致流程

    1、扫描附近的支持IBeacon设备

    //设置扫描的回调函数

    beaconManager.setRangingListener(new RangingListener() {
    @Override
    public void onBeaconsDiscovered(RangingResult rangingResult) {
    //rangingResult.beacons为扫描到的Beacon集合;
    //rangingResult.sortBeacons为根据感应距离排序后的Beacon集合

    }

    });

    //开始扫描

    beaconManager.startRanging(ALL_BRIGHT_BEACONS);

    2、选择一个并连接IBeacon

    //连接的回调函数

    connection = new BRTBeaconConnection(splash.this,beacon, createConnectionCallback());

    //开始连接

    connection.connect();

    3、连接后可以进行设备信息(名称、发射功率等)的读写

    在上一步中的回调函数中:

    private com.brtbeacon.sdk.connection.ConnectionCallback createConnectionCallback() {

    CommonUtils.LogWuwei(tag, "开始连接。。。");

    return new ConnectionCallback() {

    @Override
    public void onAuthenticated(final BeaconCharacteristics beaconChars)
    {
    CommonUtils.LogWuwei(tag, "连接成功");
    StringBuilder sb = new StringBuilder()

    .append("1、电量: ").append(beaconChars.getBattery()).append("% ").

    append("2、名称").append(beaconChars.getName()).append("% ")

    .append("3、温度:".append(beaconChars.getTemperature()).append("℃").append("% ")

    .append("4、固件版本: ").append(beaconChars.getVersion()).append(" ");
    }

    @Override
    public void onAuthenticationError() 
    {
    CommonUtils.LogWuwei(tag, "连接失败");
    }

    @Override
    public void onDisconnected() 
    {
    CommonUtils.LogWuwei(tag, "连接断开");
    CommonUtils.showToast(getApplicationContext(), "状态: 连接断开");
    }

    };
    }

    4、发现进入或者离开区域的回调

    //设置扫描回调

    beaconManager.setMonitoringListener(new MonitoringListener() {

    @Override
    public void onEnteredRegion(BRTRegion arg0, List<BRTBeacon> arg1) {

    //进入感应区域

    }

    @Override
    public void onExitedRegion(BRTRegion arg0, List<BRTBeacon> arg1) {
    //离开感应区域
    }
    });

    //开始监控感应情况

    region = new BRTRegion("rid", beacon.getProximityUUID(),  beacon.getMacAddress(), beacon.getMajor(), beacon.getMinor());

    beaconManager.startMonitoring(region);

     

    三、问题

    1、感应的时候不太灵敏。官方说是空旷地区50米,稳定工作20米,但是如果两个蓝牙模块隔5米,这样去做判断的时候,没有去验证

    2、连接后更改设备名称,保存后,再次连接名称没有更改回来,官方demo也是如此,具体没有验证

     

    自己写的测试工程详见附件

    beaconTest.zip 

    测试工程功能:1、可以搜索到附近支持IBeacon的蓝牙模块 2、可以连接  3、读取设备信息   4、感应进入和离开区域

     

    That's all。

  • 相关阅读:
    聊聊Mysql索引和redis跳表 ---redis的有序集合zset数据结构底层采用了跳表原理 时间复杂度O(logn)(阿里)
    各种排序算法的时间复杂度和空间复杂度(阿里)
    HashMap默认加载因子为什么选择0.75?(阿里)
    深入分析Synchronized原理(阿里面试题)
    Gflags 简明使用
    析构函数 (C++)
    C++11学习
    Visual Studio Code 构建C/C++开发环境
    C++经典排序算法总结
    C++迭代器失效的几种情况总结
  • 原文地址:https://www.cnblogs.com/kunyashaw/p/4284783.html
Copyright © 2020-2023  润新知