低功耗蓝牙4.0模块开发板

低功耗SensorTag蓝牙智能套件解决设计难题-通讯网络技术
&&&&&|&&|&&&|&&|&&|&&|&&|&&|&&|&
作者: 发布时间: 来源: 
  CC2541($2.2900) SensorTag 是首款蓝牙智能开发套件,专门用于无线传感器应用,同时也是唯一面向智能手机应用开发人员的开发套件。SensorTag 可用作各种智能手机附件的参考设计和开发平台。TI 使用基于 CC2541 的
  CC2541($2.2900) SensorTag 是首款蓝牙智能开发套件,专门用于无线传感器应用,同时也是唯一面向智能手机应用开发人员的开发套件。SensorTag 可用作各种智能手机附件的参考设计和开发平台。TI 使用基于 CC2541 的 SensorTag 简化并加快了蓝牙低耗能应用的开发。SensorTag 将所有的常用传感器集中在一块单板上,可快速进行评估和演示。SensorTag 可与 TI 的 TPS62730($0.6190)(降压转换器)协同工作,包括 TI 的 TMP006($1.6875) IR MEMS 温度传感器、湿度传感器、压力传感器、加速计、回转仪和磁力计。SensorTag 的多功能性意味着无限的应用可能性,其中包括健康与健身、医疗、教育工具、玩具、远程控制、移动电话附件、邻近和室内定位等领域的应用。CC2541 SensorTag 套件将蓝牙低能耗应用开发的设计时间从数月缩短到数小时,且无需嵌入式软件的设计知识。SensorTag 预编程有开始开发智能手机应用所需的 FW,并且 TI 在应用商店里提供了 SensorTag 应用,方便开发人员获取所需的工具和软件示例。   SensorTag 现在支持 iBeacon& 技术   SensorTag 现在支持 iBeacon 技术,iBeacon 可用于在智能手机或平板电脑上定制定位应用:定位功能可供许多零售店、博物馆和餐厅用于向用户显示相关信息。iBeacon 技术可集成于移动应用附件、资产追踪器、家庭自动化系统、警报和安全系统、销售点器件、汽车、工业应用以及广泛的消费类电子产品和电器。有关如何结合使用 Sensortag 与 iBeacon 的更多信息,请观看下方视频部分中的视频或访问 SensorTag Wiki。可以作为一个供电接口,但不能作为uart口(sensorTag固件是没有串口程序的)。即使是供电也需要焊接增加如下图的连接件。      从蓝牙4.0开始,低功耗蓝牙(BLE)的协议开始逐渐取代ANT协议,它允许用比较低的速率传输数据,同时功耗也更低,电池寿命得到了很大的提升。特别是从iphone 5到Android 4.3都开始包含低功耗蓝牙(BLE)的协议栈,这样就代表了后面主要的智能手机都会支持低功耗蓝牙的标准。包括医疗器械、鼠标、键盘,手机控制的玩具,以及灯具,汽车电子等越来越多的客户开始将把低功耗蓝牙放到产品里去。由于驱动已经包含在操作系统中,用户不再需要找蓝牙芯片厂商提供相应的驱动,或者自己来做驱动开发,对于蓝牙开发者来说,这节省了大量的时间。      低功耗蓝牙针对的不同市场   尽管低功耗蓝牙拥有很多优点,但对于大多数厂商来说,如果自己要开发低功耗蓝牙产品的话,要面临很多显现实的问题,包括:   1.自己开发IOS、Android的APP需要花费大量时间。2.很多客户对于天线设计部分没有太多经。3.低功耗蓝牙无法支持大数据的传输,也无法兼容传统的蓝牙协议。   针对以上的情况,德州仪器(TI)近日推出了一款简单易用BLE的开发工具SeneorTag给客户,希望能帮助客户和应用开发者解决以上问题。SeneorTag 实际上是一款整合了多种传感器以及低功耗蓝牙芯片CC2541的开发板。通过SeneorTag,TI提供完整的硬件参考设计、APP参考设计(可以在 IOS、Android市场直接下载)、还有开发工具包。可帮助开发者进一步的缩短研发周期,不需要花很多时间来进行软硬件设计。另外TI还提供软件的完整代码,供应用开发者进行定制化开发。另外在CC2541上,许多的软件都已经做好,不管是跟传感器的连接上面,还是蓝牙的协议栈,都是在IC里面。所以用户不需要花太多时间在软件部分,只需要花多点时间在APP设计上。      SensorTag开发板,让低功耗蓝牙产品开发更简单   针对客户的不同需求,TI可以不同的解决方案。以前一般软件升级都是把USB接到PC上升级,现在TI可以通过蓝牙无线升级,这个好处是在设计上可以做到更轻薄,也可以做防水。但是USB还有一个供电的功能,所以TI还可以提供一套无线充电的解决方案。针对兼容性和数据传输量的问题,TI提供不同的解决方案。如果软件升级是简单的数据的话,TI提供低功耗蓝牙的方案;如果是比较大数据的传输,TI也可以提供CC2560($2.6240)双模蓝牙,就是普通的蓝牙和低功耗蓝牙都支持。基本上目前最新的旗舰智能手机都是双模的,内置蓝牙4.0协议栈,之所以用双模就是要跟以前的蓝牙产品进行连接,兼容性和传输速率、功耗可以兼顾。除了不同蓝牙版本之间的兼容性,对于不同厂商之间的兼容,SeneorTag已通过蓝牙技术联盟的认证,通过调试已完美支持多款上市旗舰手机。   此外,近年来各种传感器的应用层出不穷,手机、平板和各种可穿戴式设备中也开始集成越来越多的传感器。SeneorTag中包含了温湿度、红外、压力、加速、指南针等传感器。通过集成不同的传感器,可以满足客户不同的需求,客户也可根据不同的需要选择减少某一类传感器。这块开发板可以通过低功耗蓝牙跟IOS和Android的产品连接,它的好处是可以让用户很方便、快速的设计一些利用传感器的应用。再通过低功耗蓝牙跟不同的产品连接起来,通过APP把数据传输到手机或者平板上面。
【】【】【
※ 相关信息
无相关信息
※ 其他信息
访问数:&|&
数据加载中..市 场 价: 元折 扣 价:199.00 元
店铺类型:集市
本期售出:25 件
店铺掌柜: (查看店铺所有商品)
商品分类: [丨]
猜你喜欢:
购物中遇到问题可直接联系旺旺图标,可以得到商家的帮助。买过此商品的可以也在此留言,真实描述让大家可以参考.如有不良商家请在此举报,本站核实后会屏蔽相关商品甚至店铺!
&套餐购买链接如下,点击价格进入购买链接:
&&第二代开发板(2个)&
New SmartRF&
04EB仿真器&
&12864液晶屏
带透明外壳
CC-Debugger仿真器
带透明外壳
CC2540USBdongle
带三轴加速度计
New Keyfob
& & & & &&√
&& & & & &√
&& & & & &√
&& & & & &√
&& & &&& & &&√
&& & & & &√
&& & &&√&
&& & &&& & &&√
&& & &&& & &&√
&& & & & &√
&& & &&& & &&√
&& & &&& & &&√
&& & &&& & &&√
&& & &&& & &&√
&& & &&& & &&√
&& & &&& & &&√
TI官方视频教程观看地址:/question_answer/wireless_connectivity/bluetooth/f/103/t/21917.aspx
技术支持1:千人群:(国内最大最权威的ble开发群,加入需提供套件订单号)
技术支持2:谷雨论坛:/bbs
技术支持3:TI官方论坛:
健全的文档资料(光盘或者下载链接)是开发套件的核心,我们提供几个文档让您检验 :)
《快速开始.pdf》《入手开发套件指南.pdf》《基础实验1:LED点灯实验.pdf》《OSAL实验1:OSAL架构预览.pdf》下载地址:/s/1c0y6Ogg
&在第二代的CC254xEK开发套件上,我们开发了更多具有产品意义的实践项目(全部开源),目前已有21个,仍在继续。。。所有项目均提供测试OK的源码以及配套pdf文档。
【*】BLE组网,多主机多从机同时相互通信!堪比Zigbee啊有木有,(正在发布,资料正在整理)
等我们的好看吧:)
【*】1主机同时连接3个从机,同时通信(已发布)
平常的应用中,一般是1个主机对应1个从机,我们最新开发的项目可以实现1个主机同时连接3个从机同时通信,极大的扩展的ble的应用范围
【*】128位UUID实战-基于最新的1.4协议栈(已发布)
非常多的产品中要求使用128位的UUID,而并非默认的16位UUID,本实战实现了128UUID的通信Profile,另外包括自定义的Profile实现:1个下行数据通道(Write Characteristic),1个上行数据通道(Notify Characteristic)
【*更新】蓝牙鼠标-基于MPU6050的无线空中鼠标[飞鼠](已发布)
做该实验需要CC2540USBdongle一个,SmartRF(CC2541)开发板一块,MPU6050模块一个,以及烧写用的CC-debugger仿真器。通过MPU6050来控制飞机姿态!强烈推荐!
【*】广播数据加密传输(已发布)
组网一直是ble的弱势,如果想要实现多点到一点,一般是通过多个广播者,一个主机来实现,但是这有个局限,广播数据任何人可见,如果保证数据的私密性显得十分重要,因此我们开发了该demo,实现对广播数据的加密,只有拥有秘钥的主机才能解析广播数据。
【*】BLE主从一体(已发布)
视频详情:/bbs/forum.php?mod=viewthread&tid=343&extra=page%3D1
由于客户对主从一体的强烈需求,主从一体已经开发OK,使用New SmartRF开发板,通过五项按键,可以轻松的切换主机或者从机角色。详情,请参考上述论坛中的视频操作。
【*】多平台BLE透传(已发布)
项目详情:/bbs/forum.php?mod=viewthread&tid=292&extra=page%3D1
实战17可以说是串口透传和USB透传的升级版,新增iOS和Android两大平台的App及源码
【*】蓝牙气象站(已发布)
项目详情:/bbs/forum.php?mod=viewthread&tid=287&extra=page%3D1
套件新配件闪闪的oled12864亮个像。带有lcd的套餐,可以备注更换到最新的oled,价格不变。
蓝牙气象站可以外挂多个温湿度采集从机,可以将其中一个置于室外,一个置于卧式,一个置于宝宝房间,随时检测 :),采用I2C接口的SHTxx系列的温湿度传感器,检测结果准确可靠。另外提供iOS和Android App源码。
SHT20传感器模块购买链接:.cn/goods-.html
【*】低功耗蓝牙心率计(已发布)
一个简单却十分有趣的心率采集
【*】基于苹果ANCS技术的智能手环项目(已发布,C1套餐以上提供)
智能手环啊有木有,无需app,iPhone可直接连接,有电话、短信等等都会通知到开发板上。
【*】OAD无线下载(已发布)
产品发布后固件更新是件大事,有了OAD,就可以通过手机APP轻松更新从机固件。
【*】iBeacon基站(已发布)
基于苹果的iBeacon定位技术的实现,稍加修改即可成为商用iBeacon基站。
【*】配对与绑定(已发布)
不想被陌生人连接?那就给他设备配对密码吧。
【*】防丢器(已发布)
【*】蓝牙转Zigbee网关(正在开发)
【*】USB透传(已发布,C1套餐以上提供)------------------------------------------------
【*】通过USB控制蓝牙(已发布,C1套餐以上提供)---------------------------------------
【*】串口透传(已发布)------------------------------------------------------------------
【*】通过串口控制蓝牙(已发布)---------------------------------------------------------
【*】RGB七彩灯(已发布)
【*】蓝牙温度计(已发布)
【*】蓝牙鼠标(已发布)
【*】蓝牙台灯(已发布)
&我们提供丰富的开发资料和软件开发环境,以光盘形式提供(另外提供在线网盘资料下载更新)。
CC254x源码(协议栈1.3.2自带源码以及我们开发的实践项目源码)
iOS源码(提供多个iOS工程源码)
Android源码(目前仅有一个简单的Android源码,基于安卓官方修改)
文档(详情见开头图片描述,用户手册、开发资料,以及各实践项目手册)
Android程序截图
&第二代CC254xEK套件依然采用核心板-底板分离的设计,核心板支持CC2540、CC2541、CC2530(Zigbee),并且核心板提供PCB天线和外接SMA天线两种选择,轻松应对各种开发需求。我们依据TI官方开发套件,设置了如下搭配套餐,大家可根据需要选择最适合自己的套件。
说明1:第二代和第一代套件中使用的核心板不能通用。
说明2:04EB仿真器不支持CC2541,CC-Debugger仿真器均支持,C1套餐以上(含)默认发一个CC2541,一个CC2540。C1套餐以下默认发CC2540
说明3:Keyfob开发板默认发CC2541,因为TI针对CC2541的Keyfob提供的资源最多。
说明4:核心板天线分:PCB天线和SMA外接天线两种。默认为PCB天线的核心板,需要SMA外接天线(含天线)核心板的套件,请联系客服(需补差价10元)。
说明:5:其中B~D套餐包括1个带12864液晶的NewSmartRF,和一个不带LCD的NewSmartRF。A套餐中均不带LCD
&&第二代开发板(2个)&
New SmartRF
04EB仿真器&
&12864液晶屏
带透明外壳
CC-Debugger仿真器
带透明外壳
CC2540USBdongle
带三轴加速度计
New Keyfob
& & & & &&√
&& & & & &√
&& & & & &√
&& & & & &√
&& & &&& & &&√
&& & & & &√
&& & &&√&
&& & &&& & &&√
&& & &&& & &&√
&& & & & &√
&& & &&& & &&√
&& & &&& & &&√
&& & &&& & &&√
&& & &&& & &&√
&& & &&& & &&√
&& & &&& & &&√
&焦点问题解答:
Q1:为什么有这么多的板子?都有什么用?
A1:您可能还不太熟悉TI的ble协议栈和官方开发板。TI的BLE协议栈对应多个硬件环境(针对CC254x的多个不同的扩展电路),例如SmartRF开发板、Keyfob开发板、USBdongle开发板等。然后还需要有仿真器或者叫做下载器的东西将程序烧写到CC254x中芯片,例如CC-debugger仿真器和04EB仿真器。
SmartRF开发板一般用于常规的ble程序开发和学习,例如串口透传、各种传感器数据采集、CC254x内部资源学习等。
Keyfob开发板一般用来开发穿戴式设备,例如防丢器、计步器等。
CC2540USBdongle开发板用来开发USB通信的相关应用,例如BLE蓝牙适配器、HID接收器、或者自己开发的USB通信程序,在这里有两个最常用的功能:1 烧写HostTestRelease配合PC端的BTool实现万能BLE万能调试器,2 烧写PacketSniffer实现协议分析仪,空中抓包。
Q2:为什么捆绑两个NewSmartRF开发板一起销售?
A2:CC254x是标准的ble芯片,CC254x既可以和智能机通信,也可以两个CC254x设备间通过ble通信。
Q3:为什么有LCD的套餐中只配备一个12864液晶屏?
A3:BLE协议栈中有许多demo会通过LCD显示一些调试信息,或者一些人机交互的界面,例如是Central主机程序,还需要LCD的提示然后进行下一步操作。但是只要一个就可以方便的开发了,两个是多余的。
Q4:CC-Debugger和04EB仿真器有什么区别?
A4:CC-Debugger支持的芯片多,包括CC2541,而且可以在线升级,04EB是老一代的仿真器,不支持2541,也不能在线升级。
&套餐详解中
&开发板详情:
1、New SmartRF
&2、New Keyfob
&3、CC2540USBdongle
&4、CC-Debugger
为您提供商品低功耗蓝牙4.0
第二代CC254xEK开发板套件ibeacon ANCS的详细介绍,
淘宝售价:元。
百客网为您提供淘宝网网上热销商品,让您更快找到热门以及合适自己的商品,
特别提供商品的详细参数、介绍以及报价等信息,挑选商品更方便。
吉ICP备号-2
Copyright &
All Rights Reserved.&|&Email:> nRF8001新一代低功耗蓝牙芯片
管理员:&人数:22小组积分:172简介:nRF8001新一代低功耗蓝牙芯片共同交流,共同进步!小组公告小组暂无公告.
小组最新帖子
成员最新动态
浏览了文章:
浏览了文章:
浏览了文章:
浏览了文章:
浏览了文章:
浏览了文章:
浏览了文章:
浏览了文章:
浏览了文章:
浏览了文章:
浏览了文章:
浏览了文章:
浏览了文章:
浏览了文章:
浏览了文章:
EDN China官方微信
扫一扫关注,获取电子新知,设计灵感
IC厂商小组
在线研讨会
赞助商链接
2016 EDN China -- Use of this website is subject to its terms of use.
京ICP备号-4 |
京公网安备37 |低功耗蓝牙4.0BLE编程 nrf51822开发板开发(2)
首先看的示例是心率计一个示例程序:&KEIL path& \ARM\Device\Nordic\nrf51822\Board\pca1\ble_app_hrs\arm。
& & 打开工程前需要下载蓝牙协议栈S110 nRF51822 SoftDevice(s110_nrf.0_softdevice.hex)到板子中,这个手册上有说明。
& & 首先看的是main.c中的main函数:
view plaincopyprint?
/*&*&Main&Function&*/&&&&&Function&for&the&application&main&entry.&&*/&&int&main(void)&&{&&&&&&uint32_t&err_&&&&&&&&timers_init();&&&&&&gpiote_init();&&&&&&buttons_init();&&&&&&ble_stack_init();&&&&&&bond_manager_init();&&&&&&&&//&Initialize&Bluetooth&Stack&parameters&&&&&&gap_params_init();&&&&&&advertising_init();&&&&&&services_init();&&&&&&conn_params_init();&&&&&&sec_params_init();&&&&&&&&//&Start&advertising &&&&&&advertising_start();&&&&&&&&//&Enter&main&loop
&&&&&&for&(;;)&&&&&&{&&&&&&&&&&//&Switch&to&a&low&power&state&until&an&event&is&available&for&the&application&&&&&&&&&&err_code&=&sd_app_evt_wait();&&&&&&&&&&APP_ERROR_CHECK(err_code);&&&&&&}&&}&&
* Main Function
Function for the application main entry.
int main(void)
uint32_t err_
timers_init();
gpiote_init();
buttons_init();
ble_stack_init();
bond_manager_init();
// Initialize Bluetooth Stack parameters
gap_params_init();
advertising_init();
services_init();
conn_params_init();
sec_params_init();
// Start advertising
advertising_start();
// Enter main loop
// Switch to a low power state until an event is available for the application
err_code = sd_app_evt_wait();
APP_ERROR_CHECK(err_code);
它很简洁:初始化-&start-&loop。
(1)Timer初始化
view plaincopyprint?
&Function&for&the&Timer&initialization.&&*&*&@details&Initializes&the&timer&module.&This&creates&and&starts&application&timers.&*/&&static&void&timers_init(void)&&{&&&&&&uint32_t&err_&&&&&&&&//&Initialize&timer&module&&&&&&APP_TIMER_INIT(APP_TIMER_PRESCALER,&APP_TIMER_MAX_TIMERS,&APP_TIMER_OP_QUEUE_SIZE,&false);&&&&&&&&//&Create&timers &&&&&&err_code&=&app_timer_create(&m_battery_timer_id,&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&APP_TIMER_MODE_REPEATED,&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&battery_level_meas_timeout_handler);&&&&&&APP_ERROR_CHECK(err_code);&&&&&&&&err_code&=&app_timer_create(&m_heart_rate_timer_id,&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&APP_TIMER_MODE_REPEATED,&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&heart_rate_meas_timeout_handler);&&&&&&APP_ERROR_CHECK(err_code);&&}&&
Function for the Timer initialization.
* @details Initializes the timer module. This creates and starts application timers.
static void timers_init(void)
uint32_t err_
// Initialize timer module
APP_TIMER_INIT(APP_TIMER_PRESCALER, APP_TIMER_MAX_TIMERS, APP_TIMER_OP_QUEUE_SIZE, false);
// Create timers
err_code = app_timer_create(&m_battery_timer_id,
APP_TIMER_MODE_REPEATED,
battery_level_meas_timeout_handler);
APP_ERROR_CHECK(err_code);
err_code = app_timer_create(&m_heart_rate_timer_id,
APP_TIMER_MODE_REPEATED,
heart_rate_meas_timeout_handler);
APP_ERROR_CHECK(err_code);
使用app_timer_create创建了两个时钟,处理函数分别是battery_level_meas_timeout_handler和heart_rate_meas_timeout_handler。
view plaincopyprint?
&Function&for&handling&the&Battery&measurement&timer&timeout.&&*&&*&@details&This&function&will&be&called&each&time&the&battery&level&measurement&timer&expires.&&*&&&&&&&&&&This&function&will&start&the&ADC.&&*&&*&@param[in]&&&p_context&&&Pointer&used&for&passing&some&arbitrary&information&(context)&from&the&&*&&&&&&&&&&&&&&&&&&&&&&&&&&app_start_timer()&call&to&the&timeout&handler.&&*/&&static&void&battery_level_meas_timeout_handler(void&*&p_context)&&{&&&&&&UNUSED_PARAMETER(p_context);&&&&&&battery_start();&&}&&&&&&&Function&for&handling&the&Heart&rate&measurement&timer&timeout.&&*&&*&@details&This&function&will&be&called&each&time&the&heart&rate&measurement&timer&expires.&&*&&&&&&&&&&It&will&exclude&RR&Interval&data&from&every&third&measurement.&&*&&*&@param[in]&&&p_context&&&Pointer&used&for&passing&some&arbitrary&information&(context)&from&the&&*&&&&&&&&&&&&&&&&&&&&&&&&&&app_start_timer()&call&to&the&timeout&handler.&&*/&&static&void&heart_rate_meas_timeout_handler(void&*&p_context)&&{&&&&&&uint32_t&err_&&&&&&&&UNUSED_PARAMETER(p_context);&&&&&&&&err_code&=&ble_hrs_heart_rate_measurement_send(&m_hrs,&m_cur_heart_rate);&&&&&&&&if&(&&&&&&&&&&(err_code&!=&NRF_SUCCESS)&&&&&&&&&&&&&&&&&&&&&&(err_code&!=&NRF_ERROR_INVALID_STATE)&&&&&&&&&&&&&&&&&&&&&&(err_code&!=&BLE_ERROR_NO_TX_BUFFERS)&&&&&&&&&&&&&&&&&&&&&&(err_code&!=&BLE_ERROR_GATTS_SYS_ATTR_MISSING)&&&&&&)&&&&&&{&&&&&&&&&&APP_ERROR_HANDLER(err_code);&&&&&&}&&}&&
Function for handling the Battery measurement timer timeout.
* @details This function will be called each time the battery level measurement timer expires.
This function will start the ADC.
* @param[in]
Pointer used for passing some arbitrary information (context) from the
app_start_timer() call to the timeout handler.
static void battery_level_meas_timeout_handler(void * p_context)
UNUSED_PARAMETER(p_context);
battery_start();
Function for handling the Heart rate measurement timer timeout.
* @details This function will be called each time the heart rate measurement timer expires.
It will exclude RR Interval data from every third measurement.
* @param[in]
Pointer used for passing some arbitrary information (context) from the
app_start_timer() call to the timeout handler.
static void heart_rate_meas_timeout_handler(void * p_context)
uint32_t err_
UNUSED_PARAMETER(p_context);
err_code = ble_hrs_heart_rate_measurement_send(&m_hrs, m_cur_heart_rate);
(err_code != NRF_SUCCESS)
(err_code != NRF_ERROR_INVALID_STATE)
(err_code != BLE_ERROR_NO_TX_BUFFERS)
(err_code != BLE_ERROR_GATTS_SYS_ATTR_MISSING)
APP_ERROR_HANDLER(err_code);
时钟创建后并不会自动运行,当调用application_timers_start后时钟开始运行:
view plaincopyprint?
&Function&for&starting&the&application&timers.&&*/&&static&void&application_timers_start(void)&&{&&&&&&uint32_t&err_&&&&&&&&//&Start&application&timers&&&&&&err_code&=&app_timer_start(m_battery_timer_id,&BATTERY_LEVEL_MEAS_INTERVAL,&NULL);&&&&&&APP_ERROR_CHECK(err_code);&&&&&&&&err_code&=&app_timer_start(m_heart_rate_timer_id,&HEART_RATE_MEAS_INTERVAL,&NULL);&&&&&&APP_ERROR_CHECK(err_code);&&}&&
Function for starting the application timers.
static void application_timers_start(void)
uint32_t err_
// Start application timers
err_code = app_timer_start(m_battery_timer_id, BATTERY_LEVEL_MEAS_INTERVAL, NULL);
APP_ERROR_CHECK(err_code);
err_code = app_timer_start(m_heart_rate_timer_id, HEART_RATE_MEAS_INTERVAL, NULL);
APP_ERROR_CHECK(err_code);
services_init()初始化程序中的三个服务:ble_dis.c, ble_bas.c, ble_hrs.c。
view plaincopyprint?
&Function&for&initializing&the&services&that&will&be&used&by&the&application.&&*&&*&@details&Initialize&the&Heart&Rate,&Battery&and&Device&Information&services.&&*/&&static&void&services_init(void)&&{&&&&&&uint32_t&&&&&&&err_&&&&&&ble_hrs_init_t&hrs_&&&&&&ble_bas_init_t&bas_&&&&&&ble_dis_init_t&dis_&&&&&&uint8_t&&&&&&&&body_sensor_&&&&&&&&//&Initialize&Heart&Rate&Service&&&&&&body_sensor_location&=&BLE_HRS_BODY_SENSOR_LOCATION_FINGER;&&&&&&&&memset(&hrs_init,&0,&sizeof(hrs_init));&&&&&&&&&&&&hrs_init.is_sensor_contact_supported&=&false;&&&&&&hrs_init.p_body_sensor_location&&&&&&=&&body_sensor_&&&&&&&&//&Here&the&sec&level&for&the&Heart&Rate&Service&can&be&changed/increased.&&&&&&BLE_GAP_CONN_SEC_MODE_SET_OPEN(&hrs_init.hrs_hrm_attr_md.cccd_write_perm);&&&&&&BLE_GAP_CONN_SEC_MODE_SET_NO_ACCESS(&hrs_init.hrs_hrm_attr_md.read_perm);&&&&&&BLE_GAP_CONN_SEC_MODE_SET_NO_ACCESS(&hrs_init.hrs_hrm_attr_md.write_perm);&&&&&&&&BLE_GAP_CONN_SEC_MODE_SET_OPEN(&hrs_init.hrs_bsl_attr_md.read_perm);&&&&&&BLE_GAP_CONN_SEC_MODE_SET_NO_ACCESS(&hrs_init.hrs_bsl_attr_md.write_perm);&&&&&&&&err_code&=&ble_hrs_init(&m_hrs,&&hrs_init);&&&&&&APP_ERROR_CHECK(err_code);&&&&&&&&//&Initialize&Battery&Service &&&&&&memset(&bas_init,&0,&sizeof(bas_init));&&&&&&&&//&Here&the&sec&level&for&the&Battery&Service&can&be&changed/increased.&&&&&&BLE_GAP_CONN_SEC_MODE_SET_OPEN(&bas_init.battery_level_char_attr_md.cccd_write_perm);&&&&&&BLE_GAP_CONN_SEC_MODE_SET_OPEN(&bas_init.battery_level_char_attr_md.read_perm);&&&&&&BLE_GAP_CONN_SEC_MODE_SET_NO_ACCESS(&bas_init.battery_level_char_attr_md.write_perm);&&&&&&&&BLE_GAP_CONN_SEC_MODE_SET_OPEN(&bas_init.battery_level_report_read_perm);&&&&&&&&bas_init.evt_handler&&&&&&&&&&=&NULL;&&&&&&bas_init.support_notification&=&true;&&&&&&bas_init.p_report_ref&&&&&&&&&=&NULL;&&&&&&bas_init.initial_batt_level&&&=&100;&&&&&&&&err_code&=&ble_bas_init(&bas,&&bas_init);&&&&&&APP_ERROR_CHECK(err_code);&&&&&&&&//&Initialize&Device&Information&Service&&&&&&memset(&dis_init,&0,&sizeof(dis_init));&&&&&&&&ble_srv_ascii_to_utf8(&dis_init.manufact_name_str,&MANUFACTURER_NAME);&&&&&&&&BLE_GAP_CONN_SEC_MODE_SET_OPEN(&dis_init.dis_attr_md.read_perm);&&&&&&BLE_GAP_CONN_SEC_MODE_SET_NO_ACCESS(&dis_init.dis_attr_md.write_perm);&&&&&&&&err_code&=&ble_dis_init(&dis_init);&&&&&&APP_ERROR_CHECK(err_code);&&}&&
Function for initializing the services that will be used by the application.
* @details Initialize the Heart Rate, Battery and Device Information services.
static void services_init(void)
ble_hrs_init_t hrs_
ble_bas_init_t bas_
ble_dis_init_t dis_
body_sensor_
// Initialize Heart Rate Service
body_sensor_location = BLE_HRS_BODY_SENSOR_LOCATION_FINGER;
memset(&hrs_init, 0, sizeof(hrs_init));
hrs_init.is_sensor_contact_supported =
hrs_init.p_body_sensor_location
= &body_sensor_
// Here the sec level for the Heart Rate Service can be changed/increased.
BLE_GAP_CONN_SEC_MODE_SET_OPEN(&hrs_init.hrs_hrm_attr_md.cccd_write_perm);
BLE_GAP_CONN_SEC_MODE_SET_NO_ACCESS(&hrs_init.hrs_hrm_attr_md.read_perm);
BLE_GAP_CONN_SEC_MODE_SET_NO_ACCESS(&hrs_init.hrs_hrm_attr_md.write_perm);
BLE_GAP_CONN_SEC_MODE_SET_OPEN(&hrs_init.hrs_bsl_attr_md.read_perm);
BLE_GAP_CONN_SEC_MODE_SET_NO_ACCESS(&hrs_init.hrs_bsl_attr_md.write_perm);
err_code = ble_hrs_init(&m_hrs, &hrs_init);
APP_ERROR_CHECK(err_code);
// Initialize Battery Service
memset(&bas_init, 0, sizeof(bas_init));
// Here the sec level for the Battery Service can be changed/increased.
BLE_GAP_CONN_SEC_MODE_SET_OPEN(&bas_init.battery_level_char_attr_md.cccd_write_perm);
BLE_GAP_CONN_SEC_MODE_SET_OPEN(&bas_init.battery_level_char_attr_md.read_perm);
BLE_GAP_CONN_SEC_MODE_SET_NO_ACCESS(&bas_init.battery_level_char_attr_md.write_perm);
BLE_GAP_CONN_SEC_MODE_SET_OPEN(&bas_init.battery_level_report_read_perm);
bas_init.evt_handler
bas_init.support_notification =
bas_init.p_report_ref
bas_init.initial_batt_level
err_code = ble_bas_init(&bas, &bas_init);
APP_ERROR_CHECK(err_code);
// Initialize Device Information Service
memset(&dis_init, 0, sizeof(dis_init));
ble_srv_ascii_to_utf8(&dis_init.manufact_name_str, MANUFACTURER_NAME);
BLE_GAP_CONN_SEC_MODE_SET_OPEN(&dis_init.dis_attr_md.read_perm);
BLE_GAP_CONN_SEC_MODE_SET_NO_ACCESS(&dis_init.dis_attr_md.write_perm);
err_code = ble_dis_init(&dis_init);
APP_ERROR_CHECK(err_code);
static ble_hrs_t的结构定义:
view plaincopyprint?
&Heart&Rate&Service&structure.&This&contains&various&status&information&for&the&service.&*/&&typedef&struct&ble_hrs_s&&{&&&&&&ble_hrs_evt_handler_t&&&&&&&&evt_&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&/&&Event&handler&to&be&called&for&handling&events&in&the&Heart&Rate&Service.&*/&&&&&&bool&&&&&&&&&&&&&&&&&&&&&&&&&is_expended_energy_&&&&&&&&&&&&&&&&&&&&&&&&&/&&TRUE&if&Expended&Energy&measurement&is&supported.&*/&&&&&&bool&&&&&&&&&&&&&&&&&&&&&&&&&is_sensor_contact_&&&&&&&&&&&&&&&&&&&&&&&&&&/&&TRUE&if&sensor&contact&detection&is&supported.&*/&&&&&&uint16_t&&&&&&&&&&&&&&&&&&&&&service_&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&/&&Handle&of&Heart&Rate&Service&(as&provided&by&the&BLE&stack).&*/&&&&&&ble_gatts_char_handles_t&&&&&hrm_&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&/&&Handles&related&to&the&Heart&Rate&Measurement&characteristic.&*/&&&&&&ble_gatts_char_handles_t&&&&&bsl_&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&/&&Handles&related&to&the&Body&Sensor&Location&characteristic.&*/&&&&&&ble_gatts_char_handles_t&&&&&hrcp_&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&/&&Handles&related&to&the&Heart&Rate&Control&Point&characteristic.&*/&&&&&&uint16_t&&&&&&&&&&&&&&&&&&&&&conn_&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&/&&Handle&of&the&current&connection&(as&provided&by&the&BLE&stack,&is&BLE_CONN_HANDLE_INVALID&if&not&in&a&connection).&*/&&&&&&bool&&&&&&&&&&&&&&&&&&&&&&&&&is_sensor_contact_&&&&&&&&&&&&&&&&&&&&&&&&&&&/&&TRUE&if&sensor&contact&has&been&detected.&*/&&&&&&uint16_t&&&&&&&&&&&&&&&&&&&&&rr_interval[BLE_HRS_MAX_BUFFERED_RR_INTERVALS];&&&&&&&/&&Set&of&RR&Interval&measurements&since&the&last&Heart&Rate&Measurement&transmission.&*/&&&&&&uint16_t&&&&&&&&&&&&&&&&&&&&&rr_interval_&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&/&&Number&of&RR&Interval&measurements&since&the&last&Heart&Rate&Measurement&transmission.&*/&&}&ble_hrs_t;&&
Heart Rate Service structure. This contains various status information for the service. */
typedef struct ble_hrs_s
ble_hrs_evt_handler_t
/& Event handler to be called for handling events in the Heart Rate Service. */
is_expended_energy_
/& TRUE if Expended Energy measurement is supported. */
is_sensor_contact_
/& TRUE if sensor contact detection is supported. */
/& Handle of Heart Rate Service (as provided by the BLE stack). */
ble_gatts_char_handles_t
/& Handles related to the Heart Rate Measurement characteristic. */
ble_gatts_char_handles_t
/& Handles related to the Body Sensor Location characteristic. */
ble_gatts_char_handles_t
/& Handles related to the Heart Rate Control Point characteristic. */
/& Handle of the current connection (as provided by the BLE stack, is BLE_CONN_HANDLE_INVALID if not in a connection). */
is_sensor_contact_
/& TRUE if sensor contact has been detected. */
rr_interval[BLE_HRS_MAX_BUFFERED_RR_INTERVALS];
/& Set of RR Interval measurements since the last Heart Rate Measurement transmission. */
rr_interval_
/& Number of RR Interval measurements since the last Heart Rate Measurement transmission. */
} ble_hrs_t;
ble_hrs.h/ble_hrs.c是心率计程序服务的代码。
buttons_init(void)初始化两个按钮:HR_INC_BUTTON_PIN_NO和HR_DEC_BUTTON_PIN_NO,分别模拟心率计的加减。
view plaincopyprint?
&Function&for&initializing&the&button&module.&&*/&&static&void&buttons_init(void)&&{&&&&&&//&Configure&HR_INC_BUTTON_PIN_NO&and&HR_DEC_BUTTON_PIN_NO&as&wake&up&buttons&and&also&configure&&&&&&//&for&'pull&up'&because&the&eval&board&does&not&have&external&pull&up&resistors&connected&to&&&&&&//&the&buttons. &&&&&&static&app_button_cfg_t&buttons[]&=&&&&&&{&&&&&&&&&&{HR_INC_BUTTON_PIN_NO,&false,&BUTTON_PULL,&button_event_handler},&&&&&&&&&&{HR_DEC_BUTTON_PIN_NO,&false,&BUTTON_PULL,&button_event_handler}&&//&Note:&This&pin&is&also&BONDMNGR_DELETE_BUTTON_PIN_NO&&&&&&};&&&&&&&&&&&&APP_BUTTON_INIT(buttons,&sizeof(buttons)&/&sizeof(buttons[0]),&BUTTON_DETECTION_DELAY,&false);&&}&&
Function for initializing the button module.
static void buttons_init(void)
// Configure HR_INC_BUTTON_PIN_NO and HR_DEC_BUTTON_PIN_NO as wake up buttons and also configure
// for 'pull up' because the eval board does not have external pull up resistors connected to
// the buttons.
static app_button_cfg_t buttons[] =
{HR_INC_BUTTON_PIN_NO, false, BUTTON_PULL, button_event_handler},
{HR_DEC_BUTTON_PIN_NO, false, BUTTON_PULL, button_event_handler}
// Note: This pin is also BONDMNGR_DELETE_BUTTON_PIN_NO
APP_BUTTON_INIT(buttons, sizeof(buttons) / sizeof(buttons[0]), BUTTON_DETECTION_DELAY, false);
当按下按钮时,处理程序是button_event_handler(),它处理心率计的加减模拟:
view plaincopyprint?
&Function&for&handling&button&events.&&*&&*&@param[in]&&&pin_no&&&The&pin&number&of&the&button&pressed.&&*/&&static&void&button_event_handler(uint8_t&pin_no,&uint8_t&button_action)&&{&&&&&&if&(button_action&==&APP_BUTTON_PUSH)&&&&&&{&&&&&&&&&&switch&(pin_no)&&&&&&&&&&{&&&&&&&&&&&&&&case&HR_INC_BUTTON_PIN_NO:&&&&&&&&&&&&&&&&&&//&Increase&Heart&Rate&measurement&&&&&&&&&&&&&&&&&&m_cur_heart_rate&+=&HEART_RATE_CHANGE;&&&&&&&&&&&&&&&&&&if&(m_cur_heart_rate&&&MAX_HEART_RATE)&&&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&&&m_cur_heart_rate&=&MIN_HEART_RATE;&//&Loop&back&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&break;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&case&HR_DEC_BUTTON_PIN_NO:&&&&&&&&&&&&&&&&&&//&Decrease&Heart&Rate&measurement&&&&&&&&&&&&&&&&&&m_cur_heart_rate&-=&HEART_RATE_CHANGE;&&&&&&&&&&&&&&&&&&if&(m_cur_heart_rate&&&MIN_HEART_RATE)&&&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&&&m_cur_heart_rate&=&MAX_HEART_RATE;&//&Loop&back&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&break;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&default:&&&&&&&&&&&&&&&&&&APP_ERROR_HANDLER(pin_no);&&&&&&&&&&&&&&&&&&break;&&&&&&&&&&}&&&&&&}&&&&&&}&&
参考资料:nRF51822 AK II上手指南(中文)
点击打开链接
转载:点击打开链接
> 本站内容系网友提交或本网编辑转载,其目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请及时与本网联系,我们将在第一时间删除内容!
Android 4.3以后的系统自动支持蓝牙4.0规范的低功耗蓝牙(BLE).在android4.3之前,蓝牙4.0支持是由手机厂家加入支持的,接口各异,导致开发一个支持蓝牙4.0程序支持市面上的手机很困难.从android 4.3以后,系统将统一接口,使得支持大部分手机成为可能.所以与手机或平板联机之前要确认是android 4.3及以上的系统.有 ...
为了省钱,也为了提高手动能力,只买了块核心板,仿真器用的是旧的jinkv7,自己搭扩展板,DIY就这样开始了.
买这块之前做了些调查,最终选定了nrf51822,功耗低,性能强,开发难度小,虽然比TI的贵一点,但cortex-m0毕竟不错,带256K flash,16K Ram,可以做很多应用开发. (1)2.4GHZ多协议无线射频 (2)3 ...
蓝牙协议栈 nrf51822开发中,蓝牙协议栈和应用开发是分开的. (1)兼容蓝牙4.0低功耗协议栈基带层,L2CAP\AAT\SM\GAP\GATT协议,设备和广播,GATT客户端和服务器,SMP支持(包含MITM和OOB配对): (2)应用部分和协议栈部分内存空间隔离: (3)采用异步事件驱动程序架构: (4)没用使用RTOS,可以方便移植到任何RTOS ...
蓝牙是一种短距离的通讯方式,它设计的意图是取代电子便携设备之间的有线电缆连接.蓝牙的主要特性是健壮性.低功耗.成本低,它工作于免费的2.4无线传输频段.
蓝牙有两种技术系统:基本速率Basic Rate (BR)和低功耗 Low Energy (LE).这两种系统都包括了设备发现.建立连接和连接机制.BR系统包括了Enhanced Data
首先看的示例是心率计一个示例程序:&KEIL path& \ARM\Device\Nordic\nrf51822\Board\pca1\ble_app_hrs\arm.
打开工程前需要下载蓝牙协议栈S110 nRF51822 SoftDevice(s110_nrf.0_softdevice.he ...
代码实例:Board/pca s110/experimental/ble_app_uart.
实现的功能是从uart口发送数据至另一个蓝牙串口,或是从蓝牙读取数据通过uart打印出数据.
int main(void) { // Initialize leds_init(); timers_init(); button ...
SDP的全称是Service Discovery Protocol,中文是服务发现协议.SDP(服务发现协议)是蓝牙协议体系中的核心协议,是蓝牙系统重要组成部分,是所有用户模式的基础.在蓝牙系统中.客户只有通过服务发现协议才能获得设备信息.服务信息及服务特征,才能在此基础上建立相互间的连接.通过这个协议,应用程序可以发现哪些服务可用以及服务的特性是什 ...
Battery Service是有关电池特性方面的服务,如果需要它,在初始化时将它加入到蓝牙协议栈.
如果通过ble_bas_battery_level_update(),电池电量将会通知,Battery Service将发送事件到应用程序. (1)Battery Service事件类型
Battery Service eve ...

我要回帖

更多关于 低功耗蓝牙协议栈 的文章

 

随机推荐