【雕爷学编程】Arduino动手做(96)---AT09蓝牙4.0BLE模块

37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来---小小的进步或是搞不掂的问题,希望能够抛砖引玉。

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)

实验九十六:AT-09蓝牙4.0BLE 模块 串口引出 CC2541兼容HM-10模块

【雕爷学编程】Arduino动手做(96)---AT09蓝牙4.0BLE模块

 

CC2541

是一款针对低能耗以及私有 2.4GHz 应用的功率优化的真正片载系统 (SoC) 解决方案。 它使得使用低总体物料清单成本建立强健网络节点成为可能。 CC2541 将领先 RF 收发器的出色性能和一个业界标准的增强型 8051 MCU、系统内可编程闪存存储器、8kB RAM 和很多其它功能强大的特性和外设组合在一起。 CC2541 非常适合应用于需要超低能耗的系统。 这由多种不同的运行模式指定。 运行模式间较短的转换时间进一步使低能耗变为可能 。

【雕爷学编程】Arduino动手做(96)---AT09蓝牙4.0BLE模块

 

CC2540/41特性

(1)射频

–2.4GHz蓝牙符合低能耗规范和私有的RF片载系统

–支持250kbps,500kbps,1Mbps,2Mbps的制器内核数据速率–出色的链路预算,不使用外部前段而支持长距离应用–高达0dBm的可编程输出功率

–出色的接收器灵敏度(1Mbps时为-94dBm),可选择性,和阻挡性能

–适合于针对符合世界范围内的无线电频率调节系统:ETSIEN300328和EN3004402类(欧洲),FCCCFR4715部分(美国),和ARIBSTD-T66(日本)

(2)布局

–极少的外部组件–提供参考设计支持

–6mm×6mm方形扁平无引脚(QFN)-40封装

–与CC2540引脚兼容(当不使用USB或者I2C时)(ADC)

(3)低功率

–工作模式RX低至:17.9mA

–工作模式TX(0dBm):18.2mA–功率模式1(4μs唤醒):270μs–功率模式2(睡眠定时器打开):1μs–功率模式3(外部中断):0.5μs

(4)工作模式下TPS62730兼容低功率

–RX低至:14.7mA(3V电源)–TX(0dBm):14.3mA(3V电源)

(5)微控制器

–具有代码预取功能的高性能和低功率8051微控制器内核

–系统内可编程闪存,128或者256KB

–在所有功率模式下具有保持功能的8KBRAM

–支持硬件调试

–扩展基带自动化,包括自动确认和地址解码

–所有功率模式中对所有相关寄存器的保持

(6)外设

–功能强大的5通道直接内存访问(DMA)

–通用定时器(1个16位,2个8位)

–红外(IR)生成电路

–具有捕捉功能的32kHz睡眠定时器

–精确数字接收到的数字信号强度指示器(RSSI)支持

–电池监视器和温度感应器

–含8通道和可配置分辨率的12位模数转换器(ADC)

–高级加密标准(AES)安全协处理器

–2个功能强大的支持几个串行协议的通用异步接收发器(UART)

–23个通用I/O引脚(21×4mA,2×20mA)

–I2C接口

–2个具有LED驱动功能的I/O引脚

–安全装置定时器

–集成的高性能比较器(7)开发工具

–CC2541评估模块工具包(CC2541EMK)

–CC2541小型开发工具包(CC2541DK-MINI)

–SmartRF™软件

–提供IAR嵌入式Workbench™

【雕爷学编程】Arduino动手做(96)---AT09蓝牙4.0BLE模块

 

CC2540/41软件特性

(1)符合针对单模式蓝牙低能耗(BLE)解决方案的符合蓝牙4.0协议的堆栈器

–完全功率优化堆栈,包括控制器和主机

–GAP-中心设备,外设,或者广播器(包括组合角色)

–属性协议(ATT)/通用属性配置文件(GATT)

–客户端和服务器

–L2CAP说明

(2)示例应用和配置文件

–针对GAP中心和外围作用的一般应用

–距离临近,加速计,简单关键字,和电池GATT服务

–BLE软件栈内支持更多应用

(3)多重配置选项

–单芯片配置,允许应用运行在CC2541上

–用于运行在一个外部微处理器接口

–BTool-用于评估、开发和测试的视窗(Windows)PC应用

应用范围

•2.4GHz蓝牙低能耗系统

•私有的2.4GHz系统

•人机接口器件(键盘,鼠标,遥控)

•体育和休闲设备1个HWI2C接口。

•移动电话附件•消费类电子产品

【雕爷学编程】Arduino动手做(96)---AT09蓝牙4.0BLE模块

 

CC2540/41经典应用电路

【雕爷学编程】Arduino动手做(96)---AT09蓝牙4.0BLE模块

 

CC2540/41

射频部分: 支持BLE协议栈及私有2.4G RF片载系统;

传输速率:250kbps,500kbps,1Mbps,2Mbps;

输出功率:0dBm(支持可编程输出功率)

接收灵敏度:-94dBm@1Mbps;

适合针对符合世界范围内的无线电频率应用系统 出色的链路预算,支持超长距离应用;

低功耗: 工作模式RX低至17.9mA; 工作模式TX(0dBm):18.2mA; 功率模式1(4us唤醒):270uA; 功率模式2(睡眠定时器开):1uA; 功率模式3(外部中断):0.5uA;

宽电源电压范围(2V-3.6V);

MCU: 具有代码预取功能的高性能和低功耗8051内核;

可编程Flash:CC2541F128 128KB 和CC2541F256 256KB;

支持硬件调试;

扩展基带自动化,包括自动确认和低至解码;

各个功率模式下,相关寄存器数据保持;

外设: 功能强大的5通道直接内存访问(DMA);

通用定时器(1个16bit,2 个8bit);

红外生产电路;

32kHz 具有捕获功能的睡眠定时器;

支持RSSI(数字信号强度指示器);

电池监视器和温度传感器 8通道12位模数转化器(可配置分辨率);

高级加密标准安全协处理器;

2个功能强大的支持多个串口协议的异步串口通信接口(UART);

23个通用I/O接口(21*4mA;2*20mA);

IIC 接口;

2个大电流I/O(直接驱动LED);

安全装置定时器;

集成的高性能比较器;

开发工具: CC2541 评估模块工具包(CC2541EMK); CC2541 小型开发工具包(CC2541DK-MINI); SmartRF 软件; 提供IAR嵌入式Workbench。

【雕爷学编程】Arduino动手做(96)---AT09蓝牙4.0BLE模块

 

 

AT09蓝牙4.0BLE模块亮点:

1.超低待机功耗 90uA~400uA

2.超远连接距离32.8英尺/10米

3.超快反应速度0.4秒

4.安卓、苹果、PC、MAC全通用.

5.收发无字节限制,最高可达3K Bytes/秒

6.不需要做MFI

7.IOS系统完美支持

8.Android4.3系统完美支持.

9.主从一体模块,具透传、远控、PIO采集三种功能,通过AT指令集进行切换和设置,

与您之前用过的蓝牙串口模块一样,在不改PCB和下位机程序的情况下轻松升级到蓝4.0!

【雕爷学编程】Arduino动手做(96)---AT09蓝牙4.0BLE模块

模块电原理图

【雕爷学编程】Arduino动手做(96)---AT09蓝牙4.0BLE模块

【雕爷学编程】Arduino动手做(96)---AT09蓝牙4.0BLE模块

 

【雕爷学编程】Arduino动手做(96)---AT09蓝牙4.0BLE模块

AT09蓝牙4.0BLE模块特点:

使用条件:苹果手机限定:4S及以上型号,系统版本iOS6及以上

安卓手机限定:系统为4.3版本及以上,手机蓝牙版本为4.0。

1、核心模块使用BT05从模块,引出接口包括VCC,GND,TXD,RXD,STATE。预留LED状态输出脚,单片机可通过该脚状态判断蓝牙是否已经连接,

2、LED指示蓝牙连接状态,闪烁表示没有蓝牙连接,常亮表示蓝牙已连接并打开了端口,STATE脚输出高电平为已连接,其他状态为低电平。

3、设置模块为主模式:模块已经为软件设置主从模块,通过串口发送AT+ROLE1(回车或者加\r\n),返回OK,则表示设置成功,此时模块LED灯进入快闪。主模块连接从模块需要通过AT指令进行连接(详情请参照BT05 AT指令集)。

4、底板3.3V LDO,输入电压3.6~6V,输入电压禁止超过7V!

5、接口电平3.3V,可以直接连接各种单片机(51,AVR,PIC,ARM,MSP430等),5V单片机也可直接连接,无需MAX232也不能经过MAX232!

6、空旷地有效距离7-10米,超过10米也是可能的,但不对此距离的连接质量做保证

7、配对以后当全双工串口使用,无需了解任何蓝牙协议,但仅支持8位数据位、1位停止位、无奇偶校验的通信格式,这也是最常用的通信格式,不支持其他格式。

8、在未建立蓝牙连接时支持通过AT指令设置波特率、名称、配对密码,设置的参数掉电保存。蓝牙连接以后自动切换到透传模式

9、体积小巧(3.57cm*1.52cm),工厂贴片生产,保证贴片质量。并套透明热缩管,防尘美观,且有一定的防静电能力。

10、该链接为从机,从机能与各种带蓝牙功能的电脑、蓝牙主机、大部分带蓝牙的手机、PDA、PSP等智能终端配对,从机之间不能配对。

【雕爷学编程】Arduino动手做(96)---AT09蓝牙4.0BLE模块

 

模块接线

输入电压:3.3V/5V  只需要一组电源供电。

内置电平转换功能。

如果用5.0V MCU与蓝牙模块通讯,5.0V电源端口供电,RX TX 逻辑电平5V

如果用3.3V MCU与蓝牙模块通讯,3.3V电源端口供电,RX TX 逻辑电平3.3V

RX,蓝牙模块串口接收端与MCU的TXD连接。

TX,蓝牙模块串口发送端与MCU的RXD连接。

GND,地端电源负极

3.3V,电源端3.3V电源

5V,电源端5V电源

【雕爷学编程】Arduino动手做(96)---AT09蓝牙4.0BLE模块

模块使用注意事项
MLT-BT09 4.0 蓝牙模块工作在 2.4G 无线频段,应尽量避免各种因素对无线收发
的影响,注意以下几点:
1、包围蓝牙模块的产品外壳避免使用金属,当使用部分金属外壳时,应尽量让模块天线部分远离金属部分。
2、产品内部金属连接线或者金属螺钉,应尽量远离模块天线部分。
3、模块天线部分应靠载板 PCB 四围放置,不允许放置于板中,且天线下方载板铣空,与天线平行的方向,不允许铺铜或走线。直接把天线部分直接露出载板,也是比较好的选择。
4、模块下方尽量铺大片 GND,走线尽量往外围延伸。
5、建议在基板上的模块贴装位置使用绝缘材料进行隔离,例如在该位置放一个
整块的丝印(TopOverLay)。

小常识(非常重要)
TXD:发送端,一般表示为自己的发送端,正常通信必须接另一个设备的RXD。
RXD:接收端,一般表示为自己的接收端,正常通信必须接另一个设备的TXD。
正常通信时候本身的TXD永远接设备的RXD!
自收自发:正常通信时RXD接其他设备的TXD,因此如果要接收自己发送的数据顾名思义,也就是自己接收自己发送的数据,即自身的TXD直接连接到RXD,用来测试本身的发送和接收是否正常,是最快最简单的测试方法,当出现问题时首先做该测试确定是否产品故障,也称回环测试。

【雕爷学编程】Arduino动手做(96)---AT09蓝牙4.0BLE模块

 

蓝牙4.0BLE
蓝牙发展至今经历了8个版本的更新,1.1、1.2、2.0、2.1、3.0、4.0、4.1、4.2。那么在1.x~3.0之间的我们称之为传统蓝牙,4.x开始的蓝牙我们称之为低功耗蓝牙也就是蓝牙ble,当然4.x版本的蓝牙也是向下兼容的。android手机必须系统版本4.3及以上才支持BLE API。低功耗蓝牙较传统蓝牙,传输速度更快,覆盖范围更广,安全性更高,延迟更短,耗电极低等等优点。(现在的穿戴设备都是使用BLE蓝牙技术的)
传统蓝牙与低功耗蓝牙通信方式也有所不同,传统的一般通过socket方式,而低功耗蓝牙是通过Gatt协议来实现。

主要优点
低功耗,使用标准有机电池,可运行一年乃至数年,成本低,可以完全实现兼容,速度支持1M的数据传输,可以最大程度的减少4G的串扰,更加智能,最大可以在3毫秒内完成数据的传输,安全性采用加密算法,会有数据包的加密和认证。所以蓝牙4.0的优点就是3种规格于一体,包括传统蓝牙的技术,与3.0的版本最大的区别就是功耗更低了,4.0的版本比老版本的功耗低了90%,随着蓝牙技术由手机,游戏,电脑,汽车等传统领域向物联网,医疗等新领域的发展,对用户的要求也就会越来越高,4.0的版本强化了数据传输的技术,又更注重了低功耗的性能。

【雕爷学编程】Arduino动手做(96)---AT09蓝牙4.0BLE模块

 

【雕爷学编程】Arduino动手做(96)---AT09蓝牙4.0BLE模块

 

【雕爷学编程】Arduino动手做(96)---AT09蓝牙4.0BLE模块

 

【雕爷学编程】Arduino动手做(96)---AT09蓝牙4.0BLE模块

 

  实验开源代码

 

 

/*

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)

实验九十六:AT-09蓝牙4.0BLE 模块 串口引出 CC2541兼容HM-10模块

1、实验项目:Arduino 调试源代码

2、实验接脚:

TXD = D0

RXD = D1

GND = GND

VCC = 3.3V

*/



void setup(){

Serial.begin(9600);

}



void loop(){

  while(Serial.available())

  {

    char c=Serial.read();

    if(c=='A')

      {

      Serial.println("Hello I am eagler8");

      }

  }

}

  

上一篇:Dubbo 源码分析 - 自适应拓展原理


下一篇:c# Invoke和BeginInvoke 区别