This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

蓝牙Bluetooth 技术集锦

Other Parts Discussed in Thread: TMP006

  • 对照相关文档:

    CC2541 SensorTag Quick Start Guide

    总结一下:
    SensorTag基于 CC2541 与 TI 的 TPS62730(降压转换器)配合工作。它包含 TI 的 TMP006 IR MEMS 温度传感器、湿度传感器、压力传感器、加速计、回转仪和磁力计。想来除了可用来体验低功耗蓝牙BLE性能,还有这么多传感器,如果时间充裕,对于学习来说一定很能富有乐趣。实际上TI官网也介绍说:SensorTag的多功能性意味着无限的应用可能性,其中包括健康与健身、医疗、教育工具、玩具、远程控制、移动电话附件、邻近和室内定位等领域的应用。
    四.使用BLE Device Monitor初试蓝牙连接
    为了使买的SensorTag能够充分体验价值,穷人我一冲动可是花了血本呀!
    在淘宝买了一套工具,没法呀,TI官网的太贵。
    没有iXX什么的,我就用平常的电脑,使用BLE Device Monitor软件!
    BLE Device Monitor软件下载:downloaded here
    使用BLE Device Monitor软件需要硬件CC2540 USB dongle
    先看指导手册:

    特别需要注意的是需要按照手册中的要求重新烧写CC2540 USB dongle的固件。然后插上CC2540 USB dongle,在电脑的设备管理器中查找记下对应的COM端口号。
    打开BLE Device Monitor软件,设置选择相应的端口号,在左下框里会出现蓝牙host,如图:

      


    在软件出现SCAN…提示框的时候(Autoscan默认是打开的)按一下下SensorTag的侧键使之进入广播状态,软件则会扫描到SensorTag并如下图显示在左下框网络列表里。如果错过了软件自动扫描时间,可以手动点击Scan按钮进行扫描。这时还没有连接,点击Connect按钮进行连接,连接如果成功在Status列显示Connected。




    右侧大框底部的Autodiscover默认是打开的,如果连接成功会列出发现的服务属性列表,如下图,也可以手动点击Discover按钮。

      



    在属性列表中按级别显示服务,特性和属性,暂不详述。


    作为第一次使用,当然是急着看看传感器啦,右侧框顶部切换到SensorTag标签,显示如下图:





    在“Test”模式,点击“Start”可以进行检测SensorTag功能是否正常,按照提示操作即可,不详述。
    在“Monitoring”模式,确定上方的传感器都选中,点击“Start”,就可以看到不断刷新的传感器数据啦。
    感觉还是比较准的,例如三个传感器片内温度,相差不大,气压和气象站网站的也差不多。
    这里提一下红外测温,初步测试,感觉好像弄不准,相差很大。
    可是看这个官方这个视频拍的真够煽情,测咖啡的温度,多酷呀:TI蓝牙低能耗SensorTag:开启无限应用可能



    顺手贴一下关于红外测温的介绍:

      依据测温原理的不同,红外测温仪的设计有三种方法,通过测量辐射物体的全波长的热辐射来确定物体的辐射温度的称为全辐射测温法;通过测量物体在一定波长下的单色辐射亮度来确定它的亮度温度的称为亮度测温法;如果是通过被测物体在两个波长下的单色辐射亮度之比随温度变化来定温的称为比色测温法。

    亮度测温法无需环境温度补偿,发射率误差较小,测温精度高,但工作于短波区,只适于高温测量。比色测温法的光学系统可局部遮挡,受烟雾灰尘影响小,测温误差小,但必须选择适当波段,使波段的发射率相差不大。本文选用全辐射测温法来计算被测量物体的温度,全辐射测温法是根据所有波长范围内的总辐射而定温,得到的是物体的辐射温度。选用这种方法是因为中低温物体的波长较大,辐射信号很弱,而且结构简单,成本较低,但它的测温精度稍差,受物体辐射率影响大。

    固定的予置为0.95的发射率。该发射率值是对于多数有机材料、油漆或氧化表面的表面温度,就要用一种胶带或平光黑漆涂于被测表面加以补偿。使胶带或漆达到与基底材料相同温度时,测量胶带或漆表面的温度,即为其真实温度。
    这里闲扯到校准的问题,有关详细请参看官网关于TMP006的文档:TMP006 User Guide,编号: sbou107

    但是SensorTag源代码中好像传输的不是计算过后的温度值,而是热电堆的电压或者芯片内置温度传感器的芯片温度,这样的话,需要在Central设备方计算?
    在源文件hal_irtemp.c中:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    /**************************************************************************************************
    * @fn          HalIRTempRead
    *
    * @brief       Read the sensor voltage and sensor temperature registers
    *
    * @param       Voltage and temperature in raw format (2 + 2 bytes)
    *
    * @return      TRUE if valid data
    **************************************************************************************************/
    bool HalIRTempRead(uint8 *pBuf)
    {
      uint16 v;
      uint16 t;
      bool success;
      if (irtSensorState != TMP006_DATA_READY)
      {
        return FALSE;
      }
      HalIRTempSelect();
      // Read the sensor registers
      success = HalSensorReadReg(TMP006_REG_ADDR_VOLTAGE, (uint8 *)&v,IRTEMP_REG_LEN );
      if (success)
      {
        success = HalSensorReadReg(TMP006_REG_ADDR_TEMPERATURE, (uint8 *)&t,IRTEMP_REG_LEN );
      }
      if (success)
      {
        // Store values
        pBuf[0] = HI_UINT16( v );
        pBuf[1] = LO_UINT16( v );
        pBuf[2] = HI_UINT16( t );
        pBuf[3] = LO_UINT16( t );
      }
      // Turn off sensor
      if (HalSensorWriteReg(TMP006_REG_ADDR_CONFIG, configSensorOff, IRTEMP_REG_LEN))
      {
        irtSensorState = TMP006_OFF;
      }
      HalDcDcControl(ST_IRTEMP,false);
      return success;
    }
    <span>上面代码中在SensorTag.c中直接调用了:</span>
    1
    2
    3
    4
    5
    6
    7
    8
    9
    static void readIrTempData( void )
    {
      uint8 tData[IRTEMPERATURE_DATA_LEN];
      if (HalIRTempRead(tData))
      {
        IRTemp_SetParameter( IRTEMPERATURE_DATA, IRTEMPERATURE_DATA_LEN, tData);
      }
    }

    而在在源文件hal_irtemp.c中有这样一段代码是注释掉的没有使用:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    /*  Conversion algorithm for die temperature
     *  ================================================
     *
    double calcTmpLocal(uint16 rawT)
    {
        //-- calculate die temperature [癈] --
        m_tmpAmb = (double)((qint16)rawT)/128.0;
        return m_tmpAmb;
    }
    *
    * Conversion algorithm for target temperature
    *
    double calcTmpTarget(uint16 rawT)
    {
        //-- calculate target temperature [癈] -
        double Vobj2 = (double)(qint16)rawT;
        Vobj2 *= 0.00000015625;
        double Tdie2 = m_tmpAmb + 273.15;
        const double S0 = 6.4E-14;            // Calibration factor
        const double a1 = 1.75E-3;
        const double a2 = -1.678E-5;
        const double b0 = -2.94E-5;
        const double b1 = -5.7E-7;
        const double b2 = 4.63E-9;
        const double c2 = 13.4;
        const double Tref = 298.15;
        double S = S0*(1+a1*(Tdie2 - Tref)+a2*pow((Tdie2 - Tref),2));
        double Vos = b0 + b1*(Tdie2 - Tref) + b2*pow((Tdie2 - Tref),2);
        double fObj = (Vobj2 - Vos) + c2*pow((Vobj2 - Vos),2);
        double tObj = pow(pow(Tdie2,4) + (fObj/S),.25);
        tObj = (tObj - 273.15);
        return tObj;
    }
    */
    这块的代码还没怎么看,不知道是不是这样。以后再学习钻研。


    而BLE Device Monitor软件好像没有源代码,不知道怎么处理的。各位使用iPAD什么的,里面有关于校准的选项么?

    三.上电
    按照手册装上包装盒里的CR2032纽扣电池,按下侧键,一个LED长时间闪烁后自动停止;分别按下顶部的两个按键,都是另外一颗LED闪烁一两秒钟。装上外壳,感觉一直受操作按键很方便,中指正好可以操作侧键,大拇指可以操作顶部的两个按键。顶部的两个按键尤其很有触摸感很容易不用看找到位置,据论坛中的一个帖子网友说顶部两个按键的外壳部位的几个凸点还是盲文,虽然一般人用不着盲文,但是感觉也有利于正常人操作。完整装上外壳后LED灯显得有点暗,但是还是能看到闪烁的。
    看来可以初步判断收到的SensorTag应该是能够工作没有损坏的,但是穷人我没有什么ipad什么iphone之类的,还需要想法试试蓝牙连接呀!
    五.低功耗的初步感觉
    匆匆看了一下传感器,体验了一下直接的功能,接下来要关心的才是最重要的吆,低功耗!到底怎样?看看资料,也要体验验证一下吆
    在上面第4节使用BLE Device Monitor软件过程中,我就实现按照如下图的接法接入了万用表测电流。
    这是没有连接或者断开连接一段时间后电流显示值,8.4uA

                                  
    连接状态,但是没有选择任何传感器,电流1.08mA,注意,是毫安不是微安
    选中监视所有传感器,电流跳动值在8mA~10mA。如果电池电压不够,容易到一定电压就掉线。
    陀螺仪传感器电流比较大,其它加在一起电流值在3mA左右以下。
    仅仅连接状态就达1mA,那么例如报道的防丢器可以几个月不换电池,是怎么实现的呢?不要着急,自己还不懂BLE就学嘛,先了解一下。
    大概看了一些资料朦朦胧胧了解了一下,再看一下官方的视频:BLE课程(三):蓝牙低功耗技术的链接参数设置
    原理时间关系就不细述了,还是睡觉舒服。
    官方有片关于功耗测试方法的应用笔记文档,现在官网搜索打不开,没法找到链接贴出来,反正文档编号名称是:AN092 -- Measuring Bluetooth Low Energy Power Consumption_swra347a,大家感兴趣的以后自己搜索下载。
    那么就自己简陋的方法先看看吧,还是如第4节中的硬件接法,还是使用BLE Device Monitor软件。
    打开BLE Device Monitor软件菜单Options—GAP settings,出现设定界面,例如改成如下图设置:

    那么在仅仅连接的情况下电流多大呢?由于是使用的万用表,没法避免抖动,只能大概体验一下,用20mA档,显示0.01mA,抖动到0.1mA(忘记了,好像我间隔设置的可能四1S),总之反正不是原来那么大啦。提高频率,万用表可能不抖,更利于较精确比较,时间关系就不再做了,感兴趣的自己可以试验一下,例如原来间隔20mS,改成40mS,这样对比就很直观了。当然用示波器之类的更好吧。
    因此,像防丢器那样不可思议的能够至少使用几个月不是吹嘘的。
  • 举人1941分

    作者:wangfuchong

    作品名称:SensorTag学习开发随笔1_1 --BLE概念

    我也是初接触,也只是自己的猜测,说出来大家共同学习。错误之处请不吝指出。

    我好像曾使用BLE4.0这样的称呼,主要为了方便随口这样叫。也许可能这样的称呼并不严格规范。

    肯定,看到BLE,首先想到的应该是BLE是什么的缩写?
    BLE,“Bluetooth LowEnergy”的缩写,汉译好像叫做“低功耗蓝牙”。

    那么低功耗蓝牙(BLE)和一般的统称“蓝牙”是个什么关系具有什么特点呢?

    蓝牙(Bluetooth),是一种无线个人局域网(Wireless PAN),最初由爱立信创制,后来由蓝牙技术联盟订定技术标准。来自古老北欧国王Harald Blåtand,借国王的姓“Blåtand”当名称,直接翻译成中文为“蓝牙”(Blå=蓝、Tand=牙)。
    蓝牙(Bluetooth)一词是古北欧语Blåtand/Blåtann的一个英语化变体,蓝牙的标志是 ᚼ (HagallRunic letter)和 BjarkanRunicletter)的组合。
    蓝牙的标志: 
    2006年,蓝牙技术联盟组织(www.bluetooth.org)已将全球中文译名统一改采直译为“蓝牙”。
    为什么当初起蓝牙这个名称呢?
    网传据说因为这个第十世纪的丹麦国王喜欢吃蓝莓,牙龈每天都是蓝色的,所以叫蓝牙。
    在行业协会筹备阶段,需要一个极具有表现力的名字来命名这项高新技术。行业组织人员,在经过一夜关于欧洲历史和未来无线技术发展的讨论后,有些人认为用 Blatand 国王的名字命名再合适不过了。Blatand 国王将现在的挪威,瑞典和丹麦统一起来;他的口齿伶俐,善于交际,就如同这项即将面世的技术,技术将被定义为允许不同工业领域之间的协调工作,保持着各个系统领域之间的良好交流,例如计算,手机和汽车行业之间的工作。名字于是就这么定下来了。
    作为一种技术标准规范,由于不断的发展,产生了版本衍进。
    蓝牙最早由爱立信公司(唉,我的第一个手机就是爱立信的,经典呀)于1994年始创。东芝、爱立信、IBM、Intel和诺基亚于1998年共同创立了蓝牙技术联盟(Bluetooth SIG)。
    目前,蓝牙已累计颁布了6个版本:V1.1/1.2/2.0/2.1/3.0/4.0,其标准规格不断得到更新和加强。

    版本区别:
    蓝牙1.1 为最早期版本,传输率约在748~810kb/S,因是早期设计,容易受到同频率之产品所干扰下影响通讯质量。

    蓝牙1.2  同样是只有 748~810kb/S 的传输率,但在加上了抗干扰跳频功能。版本Class A 是用在大功率/远距离的蓝牙产品上,但因成本高和耗电量大,不适合作个人通讯产品之用(手机/蓝牙耳机/蓝牙 Dongle 等等),故多用在部分商业特殊用途上. 版本Class B是最流行的制式,多用于手机内/蓝牙耳机/蓝牙 Dongle 的个人通讯产品上,耗电量和体积较细,方便携带。无论 1.1/1.2 版本的蓝牙产品,本身基本是可以支持 Stereo音效的传输要求,但只能够作(单工)方式工作,加上音带频率响应不太足够,并未算是最好之 Stereo 传输工具。

    蓝牙2.0 版本  蓝牙2.0 是 1.2 的改良提升版,其意义主要体现在用于 EDR(增强数据速率)扩展这个方面。(通常写成 BT2.0 +EDR)。如果使用 EDR,则可以增加带宽(比 BT 1.2 约高 3 倍)。传输率约在 1.8M/S~2.1M/S,可以有(双工)的工作方式。即一面作语音通讯,同时亦可以传输档案/高质素图片,2.0 版本当然也支持 Stereo 运作。虽然Bluetooth 2.0+EDR标准在技术上作了大量的改进,但从1.X标准延续下来的配置流程复杂和设备功耗较大的问题依然存在。

    蓝牙2.1   应用最为广泛的是Bluetooth2.0+EDR标准,虽然Bluetooth 2.0+EDR标准在技术上作了大量的改进,但从1.X标准延续下来的配置流程复杂和设备功耗较大的问题依然存在。为了改善蓝牙技术存在的问题,蓝牙SIG组织(Special Interest Group)推出了Bluetooth 2.1+EDR版本的蓝牙技术,对配对流程进行了简化,同时加入了减速呼吸(sniff subrating)模式,大幅度降低了蓝牙芯片的工作负载,增强了节能效果。

    蓝牙3.0 "(蓝牙核心规范3.0版 高速),蓝牙3.0的核心是"GenericAlternate MAC/PHY"(AMP),这是一种全新的交替射频技术,允许蓝牙协议栈针对任一任务动态地选择正确射频。蓝牙3.0的传输速度更高,而秘密就在IEEE 802.11无线协议上,是蓝牙2.0的八倍,可以轻松用于录像机至高清电视、PC至PMP、UMPC至打印机之间的资料传输。功耗方面,通过蓝牙3.0高速传送大量数据自然会消耗更多能量,但由于引入了增强电源控制(EPC)机制,再辅以802.11,实际空闲功耗会明显降低,蓝牙设备的待机耗电问题有望得到初步解决,高速蓝牙兼容传统蓝牙,程序可以在之间切换。

    蓝牙4.0是传统蓝牙、高速蓝牙技术和低功耗蓝牙三种规格合而为一,分别,这三个规格可以组合或者单独使用。蓝牙4.0的改进之处主要体现在三个方面,电池续航时间、节能和设备种类上。拥有低成本,跨厂商互操作性,3毫秒低延迟、超长连接距离、AES-128加密等诸多特色此外,蓝牙4.0的有效传输距离也有所提升。

    按照通信距离所有蓝牙可以分为两类:
      a)Class A 是用在大功率/远距离的蓝牙产品上,但因成本高和耗电量大,不适合作个人通讯产品之用(手机/蓝牙耳机 /蓝牙 Dongle 等等),故多用在部分商业特殊用途上,通讯距离大约在 80~100M 距离之间。
      b)Class B 是目前最流行的制式,通讯距离大约在 8~30M 之间,视产品的设计而定,多用于手机内/蓝牙耳机/蓝牙 Dongle 的个人通讯产品上,耗电量和体积较小,方便携带。

    根据蓝牙技术联盟组织(www.bluetooth.org)的声明,目前好像V1.1/1.2已经为作废标准,v2.0 +EDR正在作废处理中。

    蓝牙4.0以前的版本,都有在便携设备上因过于耗电而无法长时间使用的弊病。
    蓝牙低功耗技术是蓝牙 v4.0核心规范的组成部分,是其标志性组成功能。拥有以下特征:
    超低的峰值、平均值和待机能耗;
    使用标准纽扣电池足以运行数年;
    低成本;
    不同制造商的设备也能实现相互操作;
    射程有所加强。

    蓝牙低功耗使得蓝牙无线连接成为低成本、低容量电池即可操作需要数月甚至数年电池寿命的设备。蓝牙低功耗因而可使大量新的扩展应用能够从蓝牙无线技术中获益,包括手表、防盗钥匙扣、运动和健身传感器、医疗保健传感器和遥控器。根据蓝牙 SIG 指导原则,蓝牙低功耗技术可归为蓝牙智能标记类别。

    如前所述,蓝牙4.0实际上是三种规格的整合,也即传统蓝牙和低功耗蓝牙的结合,并且可以组合或单独使用。核心体系结构如下图所示:
    详细就不在本文中叙述了。
    因为可以组合或者单独使用,所以蓝牙4.0规范定义了两类设备:双模(dual mode)设备能够支持低功耗蓝牙以及蓝牙BR/EAR(传统蓝牙技术),而单模(simple mode)设备仅支持低功耗蓝牙。
    相应的芯片供应商如TI、CSR、Broadcom等相应的蓝牙4.0硬件芯片也分为两类。就TI来说,像CC2540/CC2541就是单模芯片,CC2560/2564就是双模芯片。SensorTag中使用的就是CC2541
    为了能够使用户快速识别蓝牙设备是否支持蓝牙4.0版本,蓝牙技术联盟组织(www.bluetooth.org)有增加了两个新的标志,所以蓝牙标志又多了两兄弟:
    根据蓝牙技术联盟(SIG)的报告中指出,凡是只要贴上Bluetooth Smart Ready标志的手机、平板计算机、笔记本电脑,甚至是电视机…等等,都是使用蓝牙4.0版本的「双模」无线标准。而另一个标志Bluetooth Smart则是用在低功耗的蓝牙4.0版本「单模」无线标准上,适用于使用钮扣式电池的装置,像是心跳监测器、器步器和收集特定信息的传感器电子设备。

    那么兼容关系是怎样的呢?
    如图:
    假如你的装置贴有表格左侧标志,那么它就能够与贴有右边标志的产品相链接。举例来说,现有装置上如果贴的是Bluetooth标志,就只能与贴有Bluetooth及Bluetooth SmartReady标志的装置做链接,无法与Bluetooth Smart装置链接哦!
    如果用蓝牙通讯协议的方式表示就是:

    现在回过头来看本人篇首提的那个链接的问题:http://bbs.eeworld.com.cn/thread-420509-1-1.html
    BLE,也许应该就是指蓝牙4.0中的单模模式,BLE4.0的提法似乎应该是不规范的说法,大家只要知道指什么就可以了,BLE应该只是指蓝牙4.0规范中的一部分而不能代替全指蓝牙4.0。
    至于帖子中涉及到的另外一个连接识别问题应该在深入的部分讨论,本文仅介绍BLE是什么。

    德州仪器(TI)公司推出的低功耗蓝牙开发套件SensorTag基于TI的低功耗蓝牙单模芯片CC2541,上面集成了6个常用传感器,包括压力传感器、湿度传感器、温度传感器、罗盘、加速计以及陀螺仪,可支持健康与保健、教育工具、玩具遥控以及手机附件等多种应用,是熟悉学习蓝牙4.0 BLE的有力工具。TI为套件开发了专门的App应用(支持iOS和Android系统),这样设计人员不需要专门的嵌入式软件知识,通过智能手机或者平板电脑就可对所有传感器进行单独控制;应用的源代码可从TI的网站上下载,同时TI还提供免专利费的BLE-Stack软件与SensorTag配套使用;而在参考软件部分,无论是和传感器的连接还是蓝牙协议栈都已在CC2541上做好,用户不需要花太多时间在CC2541的软件设计。这样用户可以根据实际应用场合的需要,对传感器功能进行组合,开发出各种不同的应用场景。SensorTag还包含了很多低功耗蓝牙无线设计,很多客户对无线设计特别是天线设计没有太多经验,SensorTag可以提供一个很好的参考。TI通过了FCC、IC、ETSI认证,用户未来要想通过这些认证可以直接复制TI的设计,不需要花很多时间设计天线,这样认证时就可以节省很多时间。

    欲进一步了解确切的概念定义规范,可参看官方的规范文档,蓝牙4.0的详细官方英文规范直接下载(目前地址):

  • 举人1941分

    作者:蓝雨夜

    作品名称:【SensorTag】BTool工具的使用

    BTool工具需要硬件支持

    方案1CC2540 USB dongle
    方案2SmartRF05EB  CC2541EM 评估板。
    方案3:USB转TTL232=》SensorTag 方案    http://bbs.eeworld.com.cn/thread-427983-1-1.html



    一、运行BTool工具
    根据自己的通讯端口选择相应的COM口,其他参数可以默认
    二、初始状态
    1、Derices Found:0  没有一个设备,并且Link Control 链路控制部分 Slave BDA:None  没有从机地址
    2、开启Sensor Tag侧边按钮,然后 点击扫描 Scan

    三、扫描完成
    1、Derices Found:1 一个从机,同时Slave BDA获取了从机地址 BC:6A:29:AC:14:BA
    左边 显示了所有通讯数据报文
    四、连接设置
    1、所有参数都按默认值
    2、连接建立  Establish
    3、断开连接 Terminate
    五、读写测试
    1、参考BLE_SensorTag_GATT_Server.pdf文件,见附件,了解配置表内容
    2、读“红外温度值” 对应的handle 0x0025,返回4个字节
    Sub-Procedure 选择 Read Characteristic Value / Descriptor
    Characteristic Value Handle 输入0x0025  点击Read ,返回 00 00 00 00
    六、读红外温度配置值
    对应的handle 0x0029,返回1个字节
    Sub-Procedure 选择 Read Characteristic Value / Descriptor
    Characteristic Value Handle 输入0x0029  点击Read ,返回 00 原来当前红外温度是关闭睡眠状态
    七、写红外温度传感器配置值
    Characteristic Value Handle 输入0x0029  
    Value 输入1
    点击Write  返回状态Success
    八、回读红外温度传感器配置值Characteristic Value Handle 输入0x0029 
    Value 显示 1  点击Read 返回状态Success
    九、再读红外温度值读“红外温度值” 对应的handle 0x0025,返回4个字节
    Sub-Procedure 选择 Read Characteristic Value / Descriptor
    Characteristic Value Handle 输入0x0025  点击Read ,返回 55 12 34 AA  

  • 探花5771分

    晕,谁呀,刚接触时不成熟的老帖子也拿来发,虽然作为不作为权威的参考介绍也许还可以看看。再说,其他人这样类似的帖子也多了去了。

    竟然称我为资深达人,叫我哪儿找条缝钻进去呀。

    能不能删掉此帖呀,起码修改一下标题呀

    http://www.wangfuchong.com

    我是学习者,不是德州仪器的 ,以免误导

  • 举人1941分

    作者:蓝雨夜

    作品名称:让SensorTag变身成开发工具! 

    在学习BLE少不了BLEDevice Monitor这个工具,可需要硬件工具配合才可以使用。
    方案1CC2540 USB dongle
    方案2SmartRF05EB  CC2541EM 评估板。
    现在我们自己通过改装SensorTag 实现方案2的功能!
    一、硬件连接说明
      
    上图是SmartRF05EB 评估板上的RS232转换成TLL232通过P5P6连接下图CC2541EM 评估板的P1P2
      
    这里可以搞明白了硬件连接了
    BLE Device Monitor CC2541的连接
    RXD<->TXDP0.3),
    TXD<->RXDP0.2),
    RTS<->CTSP0.4),
    CTS<->RTSP0.5
    我的硬件连接是PL-2303 连接CC2541
    这里需要把P0.2P0.3P0.4的硬件连接断开,然后连接到PL2303上。
      
    二、CC2541cc debug烧入专用hex
    BLE Device Monitor的安装目录下的firmware文件夹下的CC2541_SmartRF_HostTestRelease_All.hex
    C:\Program Files\Texas Instruments\BLEDevice Monitor\firmware
      

  • 举人1941分

    作者:southwolf1813

    作品名称:通过BLE Device Monitor连接SensorTag

    第一篇教程给大家介绍了手机App升级SensorTag OAD升级功能。现在来给大家讲一讲如何用USB Dongle来通过电脑连接SensorTag。
    今天需要用到的东西有: CC Debugger, USB Dongle,以及我们的SensorTag
      


    需要用到的软件包括 Flash Programmer, BLE Device Monitor 和 SensorTag 固件包

    首先 安装Flash Programmer 和 BLE Device Monitor,连接CC Debugger和USB Dongle(线做得丑,求别黑…)。按几下CC Debugger上的reset,指示灯绿了证明USB Dongle已经识别。打开Flash Programmer应该也能看到
      
      

    然后找到 BLE Device Monitor的固件(C:\Program Files (x86)\Texas Instruments\BLE Device Monitor\firmware\CC2540_USBdongle_HostTestRelease_All.hex) 下载之。

    下载完成之后 直接把USB Dongle插上,打开BLE Device Monitor。扫描的过程中,按下SensorTag的侧键,就可以搜索到了。在左下方窗格里 点击找到的设备。
    点击Connect,再次按侧键,就可以连接到SensorTag进行调试了!
      

  • 作品名称: 通过手机App给SensorTag OAD升级固件

    今天来说一下SensorTag的OAD(Over the Air Download) 无线下载升级固件功能

    大家都知道 单片机开发测试一般需要用JTAG下载器烧写固件,但如果是开发产品都会面临一个比较头疼的问题,如果产品已经投放市场,又需要增加新的功能,或者修改Bug,总不能把所有的产品全部召回,
    一个一个用JTAG重新烧吧? 所以,让用户能直接更新固件就非常重要了。

    实现固件更新的基本原理就是单片机内置一个Bootloader,可以提供Flash等内部存储的更新和引导,这样就可以通过外部接口(USB、蓝牙、web界面等)加载新固件。

    SensorTag的“芯”是TI CC2541,我们可以把它理解为一个带有蓝牙协议栈的51单片机。TI在SenorTag上实现的OAD功能,就是通过一个51的bootloader来控制固件的更新和加载。我们来看一下OAD升级固件的过程

    首先,从App Store或者Google Play下载 TI SensorTag app, 扫描并连接SensorTag——如果扫描不到,证明SensorTag没有开广播,需要按一下侧面的按钮即可。

    连接上SensorTag之后 APP会提示"检测到旧版固件,请使用OAD profile 更新":



    这时候我们需要点击进入Profile菜单,进行固件更新

    选择OAD,此时会提示其他profile都会停
    选择新的固件。固件A其实是SensorTag自带的固件 所以选择A会提示错误——版本号相同。选择B才是更新的固件
    然后固件就开始上传了。大概需要3分钟——蓝牙4.0BLE为了降低功耗,把数据传速度也拉低了……
     
    OK 固件更新完毕!


  • 大家都知道安卓系统是基于linux的,完全可以拿来做一台小电脑来用,甚至可以装个开发编译环境,但是安卓对 BLE 的支持实在是不理想,而iOS虽然对BLE支持很好,但是没有苹果电脑就没法开发程序,怎么办呢?

    前不久我找到了一款软件 techBASIC (收费的→_→),可以直接在iPad上开发一些简单的程序,包括BLE程序。对于像我这样有时候不方便开电脑的简直是神器啊…立马咬咬牙狠狠心掏出98大元买了一发。软件长得像这样:


       


    虽然是古董级别的BASIC语言,虽然软件还是很简陋,不过至少满足了我的需求:不开电脑,开发 SensorTag 应用。

    语法也比较简单,比如最简单的例子,扫描蓝牙设备并列出名称和RSSI信号强度

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    DIM tag AS BLEPeripheral
    discoveredPeripheral = 0
    BLE.startBLE
    DIM uuid(0) AS STRING
    BLE.startScan(uuid)
    // 回调函数,发现 BLE 从设备时需要进行的操作
    SUB BLEDiscoveredPeripheral(time AS DOUBLE, peripheral AS BLEPeripheral,
    services() AS STRING, advertisements(,) AS STRING, rssi AS SINGLE)
    IF NOT discoveredPeripheral THEN
    discoveredPeripheral = 1
    somePeripheral = peripheral
    PRINT "Device: "; peripheral.bleName

    看过techBASIC的手册之后,发现这个软件还是能够实现一些基本的BLE应用,比如扫描、连接、查看Service,测量信号强度,控制BLE设备等。

    我们来看一个操作 SensorTag LED的程序, 只用了100行左右的代码,实现了一个完整的BLE扫描、连接、Service/Characteristic操作和简单GUI界面,是不是方便多了!

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    // 指定 Test Service 的 UUID
    DIM sensorTag AS BLEPeripheral
    DIM servicesHeader AS STRING, testService AS STRING
    servicesHeader = "-0451-4000-B000-000000000000"
    testService = "F000AA60" & servicesHeader
    // 扫描 BLE 外设
    BLE.startBLE
    DIM uuid(0) AS STRING
    BLE.startScan(uuid)
    DIM testChar AS BLECharacteristic
    DIM LED1 AS Button, LED2 AS Button, quit AS Button
    // 显示界面
    setUpGUI
    // 发现外设的回调函数
    SUB BLEDiscoveredPeripheral (time AS DOUBLE, peripheral AS BLEPeripheral, services() AS STRING, advertisements(,) AS STRING, rssi)
    IF peripheral.bleName = "TI BLE Sensor Tag" THEN
      sensorTag = peripheral
      BLE.connect(sensorTag)
      BLE.stopScan
      PRINT "Discovered SensorTag."
    END IF
    END SUB
    // 查找服务
    SUB BLEPeripheralInfo (time AS DOUBLE, peripheral AS BLEPeripheral, kind AS INTEGER, message AS STRING, err AS LONG)
    IF kind = 1 THEN
      peripheral.discoverServices(uuid)
    ELSE IF kind = 2 OR kind = 3 THEN
      BLE.connect(sensorTag)
    ELSE IF kind = 4 THEN
      DIM availableServices(1) AS BLEService
      availableServices = peripheral.services
      FOR a = 1 TO UBOUND(availableServices, 1)
        IF testService = availableServices(a).uuid THEN
          PRINT "Test Service Found"
          peripheral.discoverCharacteristics(uuid, availableServices(a))
        END IF
      NEXT
    END IF
    END SUB
    // 查找特征值
    SUB BLEServiceInfo (time AS DOUBLE, peripheral AS BLEPeripheral, service AS BLEService, kind AS INTEGER, message AS STRING, err AS LONG)
    IF kind = 1 THEN
      DIM characteristics(1) AS BLECharacteristic
      characteristics = service.characteristics
      FOR i = 1 TO UBOUND(characteristics, 1)
        IF characteristics(i).uuid = ("F000AA62" & servicesHeader) THEN
          PRINT "Test Char Found"
          testChar = characteristics(i)
          DIM value(1) as INTEGER
          value = [$80]
          peripheral.writeCharacteristic(testChar, value, 0)
        END IF
      NEXT
    END IF
    END SUB
    // 设置界面
    SUB setUpGUI
    Graphics.setPixelGraphics(0)
    DIM title AS Label
    title = Graphics.newLabel(20, 20, Graphics.width - 40, 50)
    title.setText("TI Sensor Tag")
    title.setAlignment(2)
    title.setFont("Arial", 36, 1)
    LED1 = Graphics.newButton(Graphics.width / 2 - 200, Graphics.height / 2 - 40)
    LED1.setTitle("LED1")
    LED1.setBackgroundColor(1, 1, 1)
    LED1.setGradientColor(0.6, 0.6, 0.6)
    LED2 = Graphics.newButton(Graphics.width / 2 + 100, Graphics.height / 2 - 40)
    LED2.setTitle("LED2")
    LED2.setBackgroundColor(1, 1, 1)
    LED2.setGradientColor(0.6, 0.6, 0.6)
    quit = Graphics.newButton(Graphics.width - 92, Graphics.height - 57)
    quit.setTitle("Quit")
    quit.setBackgroundColor(1, 1, 1)
    quit.setGradientColor(0.6, 0.6, 0.6)
    System.showGraphics
    END SUB
    // 按键处理
    SUB touchUpInside (ctrl AS Button, time AS DOUBLE)
    IF ctrl = LED1 THEN
      DIM value(1) as INTEGER
      value = [$81]
      sensorTag.writeCharacteristic(testChar, value, 1)
    END IF
    IF ctrl = LED2 THEN
      DIM value(1) as INTEGER
      value = [$82]
      sensorTag.writeCharacteristic(testChar, value, 1)
    END IF
    IF ctrl = quit THEN
      DIM value(1) as INTEGER
      value = [0]
      sensorTag.writeCharacteristic(testChar, value, 1)
      STOP
    END IF
    END SUB

  • 举人1941分

    作者:qwqwqw2088

    作品名称:Sensor Tag搭建环境-安装IAR for 8051过程分享

    Sensor Tag活动遇到的麻烦太多了,除了收到Sensor Tag后,用的TI提供的APK,找了ipad mini平板演示了几个传感器,然后下载各种开发套件的硬件资料,CC2540DK-MIN的PDF,看TI的视频等等,,,,
    不能不说之初对各个具体过程提供的教程资料和开发工具了解的真是太少了,,误入歧途的人不知一个(之前比较熟悉的除外),当然有很多问题没有搞明白,之前是先把几个软件装了,今天有空把安装IAR for 8051过程分享一下吧,,
    编程环境的搭建要装的东西可不少,很多软件都可以在TI 官方下的到,,
    比如SmartRF Studio 7 ,SmartRF Flash Programmer,BLE DeviceMonitor,Packet Sniffer
    以上几个从TI官网下载最新版本安装即可。安装完后,直接连接CC Debugger 电脑会显示。
    IAR for 8051软件时开发TI Z-Stack协议栈应用程序的必备软件,所有程序的编译、仿真调试均需使用该软件,
    而IAR for 8051的下载需要到其他地方找,找到的是 V8.10估计是较新版本啦,,几经折腾安装成功,下面把安装的过程给大家分享,,,
    安装包目录下的 软件工具文件夹下,如下图:
      
    已经带有破解文件了,,开始安装过程,运行autorun.exe,然后再跳出的画面中选择第二项,Install IAR Embedded Workbench   
    接下来,根据提示一路next,到Enter UserInformation这一项,提示输入license之前先打开keygen_IAR.exe这个是个dos下运行的东西,,因为要用,就直接选a,,版本选 V8.10  
    把这个东西复制出来,,license号和license key,备用根据提示一路next,到Enter User Information这一项,提示输入license,,  
    把刚才的License number复制到IAR安装向导中的License#文本框内,单击next,然后再将License Key复制到IAR安装向导的License Key文本框内。然后一路next,直到软件安装结束。
      
      

    至此,其实以上过程跟安装编译msp430的基本一样,,,,下面就是有关的设置创建project 运行 IAR Embedded Workbench,单击菜单Project->Create New Project,出现下列对话框:选择“Empty project”,单击OK,然后会询问保存project,选择一个合适的目录,然后填入合适的工程名,然后单击OK  
    在左边的Workspace中右击保存的工程Project。在出现的对话框中,第一件事情就是选择该project所使用的Device,单击…按钮选择Device    

    在出现的对话框中,第一件事情就是选择该project所使用的Device,单击…按钮选择Device选择如上图中CC2541F256.i51,该文件位于IAR安装目录C:\Program Files\IAR Systems\Embedded Workbench 6.0\8051\config\devices\Texas Instruments(该路径为默认安装路径)。选择完后回到Device information中会出现设备列表,如上图  


    Z-Stack协议栈中,使用large memory model来支持CC2541F256 ,这样协议栈可以存储在XDATA区域,以上设置结束后,如图所示。以下设置是根据一些资料进行设置,基本上没有变化,先这样吧,,在Banked code model中,有一些额外的选项需要注意,选择Code Bank tab,如下图,CC2541使用7个code banks,为了访问整个256K的Flash空间,Number of必须设置为0x07,Register 0x9F是CC2541的FMAP寄存器,用来控制当前那个code bank映射到8051的地址空间,第三个Register未使用,最好设置0xFF。   
    要配置IDE怎样使用Linker来链接程序代码,,,
       

    在Debugger选项中,选择Texas Instruments为Driver。  

    简单编译一个工程sensortag2014315,编译一下,,  

    基本没有什么问题,,,接下来就可以连接仿真器到目标板,下载程序和仿真调试了,根据提示修改。并且给目标板上电。
  • 举人1941分

    作者:chuck_pz

    作品名称:基于sensorTag的EE智能家居系统

    先用TI提供的sensorTag工程编译烧写代码,装上TI给的参考APP,看下效果,不过android的App确实做得不怎么样。通过看资料和实际操作了解到sensorTag有6个传感器:IR温度,湿度,陀螺仪,加速度,气压计,3轴磁力计,考虑到时间不够和不需要这么多的传感器,我将sensorTag的工程做了修改。
      
        由于每个传感器都有一个GATT service,android会出现发现服务不了或不全的现象,所以我去掉所有的传感器服务,自定义了一个GATT service,保留了IR温度,湿度,加速度的值,通过通知(15bytes数据)的形式发给android app,通过监测各个传感器的值,来做了一个IR温度报警功能,本来可以加入更多的应用的,但没有这么多时间做了,就做了个简单的功能。这个就是传感器设备,在视频演示中可以更加清楚的认识和了解。
        智能蓝牙灯泡:通过手机端控制蓝牙设备发PWM波来实现对蓝牙灯泡的调色,开关等功能。
        首先是调PWM波,通过看cc2540的datasheet可以看出timer1,timer3,timer4都可以用来产生PWM波,这里我选用timer1来做,用得P0_4,P0_5,P0_6来控制RGB3种颜色,由于没有白色的灯,所以不能来调亮度,只能调色。
        通过看datasheet,我选用模模式来产生PWM波,T1CC0为PWM的周期,T1CCn值可用来调占空比,通过一段时间的调试,可以产生PWM波,通过手机修改其频率和占空比了。各位如果想要PWM波产生的代码的话,我可以给你们的。
      
        通过改变PWM频率和周期就可以设置RGB颜色了,这里就不多说了。
        下面介绍一下android的界面,其功能可以通过看视频了解了。
    1.专门为EEWORLD做的欢迎界面
      
    2.智能设备界面,做得有点戳,多包涵
      
    3.蓝牙灯泡的设置界面
      
    4.传感器界面
      

    视频展示链接,欢迎点击查看:http://v.youku.com/v_show/id_XNzA0MDc2ODA4.html

    总结:通过sensorTag创意活动可以让我们更加了解TI的蓝牙4.0芯片的使用,看到坛友们提出的各种创意,会有冲动,让我们做出更多更有创意贴近生活的智能蓝牙产品,也感谢phantom7给我这次机会去参加这样的活动,收货也颇多。没有做不到的,只有你想不到的,学到老学到老,只有不断的学习才能有更加强大的自己。

  • 举人1941分

    作者:蓝雨夜

    作品名称:基于TI Sensortag BLE的车库门控制

    一、简介
    通过身边的智能手持设备通过BLE来控制车库门,不用独立携带专用无线遥控器或下车手动开,关车库门。
      
    二、系统框图
      
    三、功能说明
    系统由市电模块与后备蓄电池提供电源,使系统一直连续工作,即使停电也可有蓄电池供电工作。有电供给状态下,BLE一直处于广播状态,等待智能手持设备的请求连接。SensorTag板载两按键,实现手动的开,关门作用。
    S2: 手动开门
    S3:手动关门
    门状态开到位限位开关检测输入:P1_5
    门状态关到位限位开关检测输入:P1_4
    输出门开:P1_3  兰色LED
    输出门关:P1_2  红色LED
    1、手动模式
    视频展示链接:
    当按下S2开门,门不是开到位状态,输出1有效,等待门开限位开关有效,停止输出开门信号,输出1无效。
    当按下S3关门,门不是关到位状态,输出2有效,等待门关限位开关有效,停止输出关门信号,输出2无效。
    2、BLE无线控制模式
    视频展示链接:
    测试工具:LightBlue
    扫描到广播信号
      
    输入配对密码123456
      
    找到对应UUID  AA60
    开,关门UUID AA62

      
    HEX:02  开门
    HEX:04  关门

      

  • 举人1941分

    作者:yueyuanque

    作品名称:运动评估系统——集思广益

    1. 建立连接

    【SensorTag】 BLE Device Monitor 测试

    Texas InstrumentsWiki 上面有一篇文章BLEDevice Monitor User Guide”写得挺好的,只是英文读起来有点,呵呵…

    不过文章思路挺清晰的,很容易上手,安装BLE Device Monitor软件,在设备管理器查看设备串口端口号(前提是你的USBdongle固件被更新为Monitor模式)

    打开启动BLE Device Monitor软件,按一下SensorTag的侧面按钮使其处于广播模式,在软件界面左下方可以看到如下画面

    双击查找到的设备即可建立连接

    下面介绍一下BLE Device Monitor的SensorTag tab,主要有两个功能,一个是测试(Test)功能,一个是实时显示(monitor)功能。

    选择界面下方的‘Test’模式,点击‘Start’,即开始测试,会看到各个传感器的值依次更新,LED依次闪烁...



    选择‘Montioring’模式,点击‘Start’即开始实时显示各个传感器的状态,这时转动一下SensorTag就会看到各个数值的变化了



    2. 轨迹记录
    手机里面有几个自认为很不错的小软件,今天就像大家介绍一下其中之一 :GPSLogger——GPS记录仪
    PS. 我要做的是基于蓝牙的室内运动记录仪和这个倒是挺像的

    先上几张图大家欣赏一下

    下图左侧是实时轨迹图,右侧是速度曲线及当前位置的经纬度、速度、前进方向

      

    再来一个夜间模式的图,这个是一段‘的士’的行车轨迹图,根据速度曲线可以看到
    红绿灯路口还是挺多的

      

    下面这个是我的一段登山轨迹,速度整体还是很平稳的哈! 高度也有记录的,这里就不展示了,大家可以根据经纬度猜猜看这是哪座山 

      

    上面这个图在我爬山的时候还是很有用的,上山走的是常规路线,没什么感觉,下山时选了一条人迹稀少的小道,有了这个图就知道和起点的相对位置了,也不至于迷失方向!喜欢出游的人可以下一个玩玩,我的手机是黑莓的GPS定位精度在5m之内,还是很好用的

     CC Debuger 与 USB Dongle建立连接
    收到CC Deburger 与 UsbDongle之后,一直没试着USB Dongle的第二功能,今天有空就弄了一下,过程很曲折。。。
    店家给的转接板预留了USB Dongle的下载接口,可是。。。没有连接线,而且还是2mm间距的,这个只能自己动手改造了
    下图是连到USB Dongle的样子,看起来还不错吧
    不要太高兴,虽然硬件连接上了,但是软件无法识别
    这时想起了一个图
    虽然说下载接口只需要 GND, DC, DD, RESETn 即可,但是pin2 是‘TargetVoltage Sense’,必须对该引脚加电CC debugger才能识别
    纠结,不想改动那块小板了。没办法,直接放弃那块转接板,直接自己做了一个跟转接线:一端是普通的14pin下载线,另外一端仅把GND, DC, DD, RESETn焊接到2mm的排座上面,另外一定记得把2脚和9脚短接(即默认USBdongle一直是上电状态,不过下载的时候USB dongle必须通过USB口供电才能正确下载)
    分别连接USB Dongle及CCdebugger,打开软件,bingo,成功识别,打开固件,烧录,顺利完成,分享一下喜悦,O(∩_∩)O哈哈哈~

    5.png
    3.  运动分析
        下面的这个图是我一次出行的汇总报表,还是很全面的,给大家分享一下(Come from Endondo PRO)
          

        下面的是速度及高度信息图表,一目了然!
          

    4. 总结
       Sensortag集成了多个传感器,强大功能为开发者提供了非常广阔的应用空间;BLE打破了有线的束缚,灵活度更高,同时也降低了功耗,小巧玲珑的设计很适合随身携带。不过对于擅长硬件而对蓝牙协议不甚了解的人来说,完成这个设计还是很困难的,这里姑且把我的畅想先记录下来,待自己或有识之士能够去补充完善,愿科技创造美好生活!