这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 企业专区 » TI » 蓝牙4.0模块开发指南

共22条 1/3 1 2 3 跳转至

蓝牙4.0模块开发指南

菜鸟
2016-07-13 17:52:24     打赏
蓝牙4.0广泛应用于可穿戴设备、智能控制系统、智能家居等领域。我们在使用过程中难免遇到不同的问题。本帖以深圳市馒头科技有限公司的MT-BLE系列蓝牙4.0模块为例,将蓝牙4.0模块各种使用情景写给各位需要应用到蓝牙4.0的技术人员。

第一节  MTSerialBle简介

第二节  通信演示


第三节  IO口操作


第四节   常用指令


第五节 串口指令


第六节 主机指令



关键词: 蓝牙4.0开发     BLE     CC2541    

菜鸟
2016-07-13 17:52:59     打赏
2楼
第一节   MTSerialBle简介

    先介绍下MTSerialBle透传模块,MTSerialBle是深圳市馒头科技设计的低功耗蓝牙(BLE)透传模块,模块支持主从一体,可以实现模块和模块之间的数据传输,也可以和Android或IOS进行完美的数据传输。模块集成4路PWM输出,1路12位ADC输入,7个标准IO控制,6个按键触发。用户使用完全不必关心蓝牙协议,直接通过串口传输数据即可,是开发智能设备的完美选择。
    MTSerialBle接口图如下所示:
111.JPG 

菜鸟
2016-07-13 17:53:30     打赏
3楼
1.1     使用示例
1.1.1  使用智能手机和电器设备通讯
    通过MTSerialBle的透传功能,可以建立起智能手机和普通设备的连接桥梁,相当于手机端直接和设备的串口建立起了连接。
222.JPG 
1.1.2   智能灯控
    通过MTSerialBle的IO控制功能,可以省去外挂的MCU,直接通过PWM和IO控制多彩LED的亮度和颜色。
333.JPG 
1.1.3   取代电缆线
    通过MTSerialBle的主从一体功能,将两个模块分别设置为主从模块,就可实现模块之间的相互通信,此功能可以用于一些使用电缆通信的场景,使用BLE取代通信电缆。
444.JPG 

1.1.4   智能门锁
    通过MTSerialBle的IO控制功能,可以省去外挂的MCU,直接通过PWM和IO控制外围电路,实现智能门锁。555.JPG 

菜鸟
2016-07-13 17:56:56     打赏
4楼
第二节   通信演示
1.1     手机和模块
    手机与模块之间传输数据,我们将模块的串口通过USB转串口接入到PC,通过PC端的串口助手完成数据的收发。这里需要注意,手机必须支持蓝牙4.0功能才能和模块通讯。

1.1.1  连接模块到电脑
666.png 


1.1.2   设置为从机
  
777.png 
1.1.3   数据收发

   888.png 

1.1.4   Android系统

    Android系统可以使用我们公司开发的BLE调试工具(MTBleTools)进行操作,可以通过应用市场或百度网盘下载此工具。
           
999.png999-1.png 
1.1.5  IOS系统

  直接在苹果商店里面搜索MTBLE 即可搜索到。下载安装。

操作方法与安卓基本一样。


1.2     模块和模块

    模块和模块传输数据,必须保证两个模块都是MTSerialBle透传模块,分别工作在主从模式,并且用户自定义数据一致。
    以下我们使用两个MT254xCoreSTest演示模块之间互相透传数据。
1.2.1   连接模块到电脑

   999-5.png 

1.2.2  分别设置为主从

   999-6.png 

1.2.3   互发数据 999-7.png

菜鸟
2016-07-13 17:59:50     打赏
5楼
第三节    I/O口操作

    为了保持我们在之前51单片机、STM32对I/O口控制的习惯性,MT-BLE蓝牙4.0模块的AT指令操作I/O口仍然保留这个操作写法。

111.JPG 

    如上图所示:

    1. GND、VCC不解释,DC、DD:烧写引脚;

    2. PIO0、PIO1、PIO2、PIO3、PIO4、PIO5、PIO6,这7个引脚为I/O口高低电平输出与读取;

    3. PWM0、PWM1、PWM2、PWM3,这4个引脚为4路PWM输出;

    4. ADC,这个引脚为AD采样;



1.1     查询/设置——LED提示方式
   

指令

  
  

  

应答

  

  

参数

  

查询:AT+LED?

OK+LED: Para

Para:S,N

  

S:待机慢闪,连接后常亮

  

N:待机暗,连接后亮

  

亮—低电平

  

暗—高电平

  

默认Para =S

设置:AT+LED[Para]

OK+LED: Para

提示:可以通过此引脚判断设备是否处于连接状态

示例:

Send: AT+LED?                    // 查询当前LED提示方式

Recv: OK+LED:S                  // 当前为 待机慢闪,连接后常亮


Send: AT+LED[N]                // 设置LED提示方式为待机暗,连接后亮

Recv: OK+LED:N                 // 设置成功



1.2      查询/设置——单个IO电平
   

指令

  
  

  

应答

  

  

参数

  

查询:AT+PIO[Para1]?

OK+PIO: Para1#Para2

Para1:

  

IO 编号:0---6

  

Para2:

  

IO电平  0或1

设置:AT+PIO[Para1,Para2]

OK+PIO: Para1#Para2

注意:当设置IO电平时,IO自动切换为上拉输出模式。当查询IO电平时,IO自动切换为上拉输入模式。

示例:

Send: AT+PIO[0]?                 // 查询PIO0的电平

Recv: OK+PIO:0#1               // 当前PIO0的电平为高


Send: AT+PIO[1][0]              // 设置PIO1输出低电平

Recv: OK+PIO:1#0               // 电平设置成功


    这个用途,我们可以通过蓝牙控制电平驱动电路。



1.3     查询/设置——多个IO电平
   

指令

  
  

  

应答

  

  

参数

  

查询:AT+MPIO[Para1]?

OK+MPIO: Para1#Para2

Para1: 多个IO的集合

  

0x00--------0x7F

  

每一位对应一个IO

   

Para2:IO对应的电平

  

0x00--------0x7F

  

每一位对应一个IO的电平

设置:AT+MPIO[Para1,Para2]

OK+MPIO: Para1#Para2

注意:当设置IO电平时,IO自动切换为上拉输出模式。当查询IO电平时,IO自动切换为上拉输入模式。

示例:

Send: AT+MPIO[0F]?           // 查询PIO0、PIO1、PIO2、PIO3的状态

Recv: OK+MPIO:0F#0A   //  PIO0到PIO3的电平分别为 低、高、低、高


Send: AT+MPIO[70,AA]      // 设置PIO4到PIO6分别输出 低、高、低

Recv: OK+MPIO:70#20       // 设置成功  注意这里



1.4      查询/设置——PWM输出
   

指令

  
  

  

应答

  

  

参数

  

查询:AT+PWM[Para1]?

OK+PWM: Para1#Para2#Para3

Para1:

  

PWM编号:  0---3

  

Para2:

  

PWM输出频率

  

100-10000Hz

  

0:停止PWM

  

Para3:

  

PWM占空比  1---100

  

0:停止PWM

设置:

  

AT+PWM[Para1,Para2,Para3]

OK+PWM: Para1#Para2#Para3

注意:4路PWM输出的频率无法单独设置,必须是一样的,当前输出的频率为最后设置的频率。

示例:

Send: AT+PWM[1]?                                // 查询PWM1的当前设置

Recv: OK+PWM:1#1000#50                   // PWM1的当前设置为1000Hz,占空比50%


Send: AT+PWM[2,1500,20]                    // 设置PWM2为输出频率为:1500Hz  占空比:20%

Recv: OK+PWM:2#1500#20                   // 设置成功



1.5     查询/设置——IO主动上报功能
   

指令

  
  

  

应答

  

  

参数

  

查询:AT+EPIO?

OK+EPIO: Para

Para: 多个IO的集合

  

0x00-----0x7E

  

每一位对应一个IO

  

默认值:00

设置:AT+EPIO[Para]

OK+EPIO: Para

注意:PIO0没有主动上报功能; 设置主动上报功能后,相应IO自动切换为输入模式。

使用建议:常态为高电平,触发时为低电平。

使能IO主动上报功能后,当对应IO电平发生变化时,与之连接的设备将会接收到相应的提示

Recv: OK+MPIO:7E#3E                //  PIO6当前电平低,PIO1~PIO5为高

Recv: OK+MPIO:70#70                 //  PIO4~PIO6为高

Recv: OK+MPIO:0E#03                //  PIO1~PIO2为高,PIO3为低

示例:

Send: AT+EPIO?                   //查询当前IO主动上报功能

Recv: OK+EPIO:10               // 当前PIO4开启了主动上报功能


Send: AT+EPIO[7E]        // 设置PIO1~PIO6都开启主动上报功能

Recv: OK+EPIO:7E              // 设置成功



1.6     查询——ADC当前电压
   

指令

  
  

  

应答

  

  

参数

  

查询:AT+ADC?

OK+ADC: Para

Para:

  

ADC电压值 0-1250mV

注意:由于adc采样内部基准源,所以采集电压的范围为0-1250mV。

示例:

Send: AT+ADC?                   // 查询ADC当前电压值

Recv: OK+ADC:100             // ADC当前为100mV



专家
2016-07-13 18:42:25     打赏
6楼
不错!收藏学习。

菜鸟
2016-07-14 14:05:52     打赏
7楼
第四节   常用指令

1.1     测试
   

指令

  
  

应答

  


参数

  


AT+



OK+




示例:

Send: AT+                    //测试指令

Recv: OK+                   //指令测试成功


1.2      固件版本查询
   

指令

  
  

应答

  


参数

  


查询:AT+VERS?



OK+版本信息




示例:

Send: AT+VERS?                           //查询固件版本

Recv: OK+MTSeriBleV220           //当前固件版本为V220


1.3      查询/设置——设备名
   

指令

  
  

应答

  


参数

  


查询:AT+NAME?



OK+NAME: Para



Para:模块名称

  

最长允许11个字符,包括字母、数字、下划线。

  

默认Para=MTSeriBlexx



设置:AT+NAME[Para]



OK+NAME: Para


示例:

Send: AT+NAME?                                            //查询当前设备名

Recv: OK+NAME:MTSeriBle12                      // 当前设备名为:MTSeriBle12


Send: AT+NAME[Serial]                                  //设置设备名为Serial

Recv:OK+NAME:Serial                                    //设备名成功设置为Serial


1.4      恢复出厂设置
   

指令

  
  

应答

  


参数

  


AT+RENEW



OK+RENEW



无(此指令会使模块重启)


示例:

Send: AT+RENEW                //恢复出厂设置

Recv: OK+RENEW               //模块即将重启


1.5      重启模块
   

指令

  
  

应答

  


参数

  


AT+RESET



OK+RESET



无(此指令会使模块重启)


示例:

Send: AT+RESET                  //重启模块

Recv: OK+RESET                 //模块即将重启



1.6      查询——当前工作状态
   

指令

  
  

应答

  


参数

  


查询:AT+STAS?



OK+STAS: Para



ParaA~E

  

A:空闲

  

B:广播

  

C:扫描

  

D:连接建立

  

E:连接断开


示例:

Send: AT+STAS?                  //查询当前状态

Recv: OK+STAS:B               //设备当前正在广播



1.7     查询/设置——状态通知使能
   

指令

  
  

应答

  


参数

  


查询:AT+NOTI?



OK+NOTI: Para



ParaYN

  

Y:使能通知

  

N:禁止通知

  

默认Para=Y



设置:AT+NOTI[Para]



OK+NOTI: Para


注意:使能通知后,模块将会主动从串口输出当前的状态。禁止通知后,串口只输出无线端传输的数据以及指令的响应。

示例:

Send: AT+NOTI?                  // 查询通知是否使能

Recv: OK+NOTI:Y               // 当前通知为使能状态


Send: AT+NOTI[N]              // 设置通过为禁止

Recv: OK+NOTI:N               // 设置成功



1.8     查询/设置——模块工作方式
   

指令

  
  

应答

  


参数

  


查询:AT+IMME?



OK+IMME: Para



ParaYN

  

Y:上电立即自动工作

  

N:上电等待指令

  

默认para=Y



设置:AT+IMME[Para]



OK+IMME: Para


注意:上电工作在主从模式下分别对应如下功能

从机模式下:

自动工作为开始广播,如果为手动工作方式,则需要通过指令开启广播。详见4.3。

主机模式下:

开始扫描设备并且尝试连接,如果有成功连接过的设备在信号范围内,则会自动连接此设备。如果为手动工作方式,这需要通过指令进行扫描和连接操作,详见第5章。


示例:

Send: AT+IMME?                          //查询工作方式

Recv: OK+IMME:Y                       //当前为上电自动工作方式


Send: AT+IMME[N]                      //设置为手动工作方式

Recv: OK+IMME:N                       //设置成功




1.9      查询/设置——主从模式
   

指令

  
  

应答

  


参数

  


查询:AT+ROLE?



OK+ROLE: Para



ParaCP

  

C:主机

  

P:从机

  

默认para=P



设置:AT+ROLE[Para]



OK+ROLE: Para


注意:设置指令会使模块重启

示例:

Send: AT+ROLE?                           // 查询当前模式

Recv: OK+ROLE: P                        //当前为从机模式


Send: AT+ROLE[C]                       //设置为主机模式

Recv: OK+ROLE:C                        //设置成功,模块即将重启


1.10  远控指令
   

指令

  
  

应答

  


参数

  


AT+R[Para]



远控指令应答



Para:AT指令


说明:在指令模式下,此指令可将AT指令发送至远端模块。此指令只适用模块与模块之间,如果为模块与手机之间,可以通过指令服务实现对远端模块的控制,详见《MTSerialBle-App开发指南》。

示例:

Send: AT+R[AT+VERS?]                        //查询远端模块的固件版本

Recv: OK+MTSeriBleV150                     //远端模块的固件版本为150


Send: AT+R[AT+PIO[1,1]]                     //设置远端模块的PIO1输出高电平

Recv: OK+PIO:1#1                                  //远端模块的PIO1输出电平为高


菜鸟
2016-07-14 14:06:18     打赏
8楼
第5节 串口指令

由于USB CDC串口参数为自适应,所以串口指令对USB CDC 串口无效,例如USBDongle。

1.1     查询/设置——串口波特率
   

指令

  
  

应答

  


参数

  


查询:AT+BAUD?



OK+BAUD: Para



ParaA~G

  

A2400

  

B4800

  

C9600

  

D19200

  

E38400

  

F57600

  

G115200

  

H230400

  

默认para=G



设置:AT+BAUD[Para]



OK+BAUD: Para


注意:USBDongle的串口参数为自适应,所以此指令设置无效。使用USBDongle,当PC端的波特率设置为9600时,USBDongle自动进入指令模式。

示例:

Send: AT+BAUD?                // 查询当前波特率

Recv: OK+BAUD:G             // 当前波特率为115200


Send: AT+BAUD[C]             // 设置串口波特率为9600

Recv: OK+BAUD:C             // 设置成功



1.2     查询/设置——串口停止位
   

指令

  
  

应答

  


参数

  


查询:AT+STOP?



OK+STOP: Para



ParaA~B

  

A1位停止位

  

B2位停止位

  

默认para=A



设置:AT+STOP[Para]



OK+STOP: Para


示例:

Send: AT+STOP?                  // 查询串口停止位

Recv: OK+STOP:A               // 当前停止位为1位


Send: AT+STOP[B]              // 设置停止位为 2位

Recv: OK+STOP:B               // 设置成功

1.3     查询/设置——串口发送延时时间
   

指令

  
  

应答

  


参数

  


查询:AT+SDLY?



OK+SDLY: Para



Para0~10000(单位:ms)

  

0:不延时

  

默认Para =0



设置:AT+SDLY[Para]



OK+SDLY: Para


注意:串口发送延时——当无线端收到数据后RDY口将会输出低电平,并且开始延时这个时间后开始从串口输出数据,可以利用此功能唤醒外部MCU。

此值建议设置为MCU从唤醒到能够接收数据的时间。

示例:

Send: AT+SDLY?                           // 查询串口发送延时

Recv: OK+SDLY:1000                            // 当前串口发送延时为 1000ms


Send: AT+SDLY[0]                        // 设置串口发送延时0ms——广播发送延时

Recv: OK+SDLY:0                         // 设置成功


菜鸟
2016-07-19 14:24:29     打赏
9楼
第5章 主机指令
主机指令在从机模式下无效。模块工作在主机时,只能与MTSerialBle透传从机连接。
5.1        扫描从机
指令        应答        参数
AT+SCAN        OK+SCAN: Para1#Para2……        Para1:扫描到的设备数量
Para2:扫描到的设备地址列表
注意:默认扫描时间为5秒,完成5秒扫描后才有响应。
示例:
Send: AT+SACN                                                                                                // 开始扫描从设备
Recv: OK+SCAN:3#112233445566#223344556677#334455667788                        // 扫描到3个从设备

Send: AT+SACN                        // 开始扫描从设备
Recv: OK+SCAN:0                // 没有扫描到从设备

当开启扫描显示设备名或显示信号强度时,扫描响应将会携带设备名和信号强度,具体响应如下。

1.        开启显示设备名:
Recv: OK+SCAN:2#112233445566@abc#223344556677@bcd                        // 扫描到2个从设备
        设备MAC地址        设备名
设备1        112233445566        abc
设备2        223344556677        bcd

2.        开启显示信号强度:
Recv: OK+SCAN:2#112233445566@-50#223344556677@-63                        // 扫描到2个从设备
        设备MAC地址        信号强度
设备1        112233445566        -50dBm
设备2        223344556677        -63dBm

3.        同时显示设备名和信号强度
Recv: OK+SCAN:2#112233445566@abc@-50#223344556677@bcd@-63        // 扫描到2个从设备
        设备MAC地址        设备名        信号强度
设备1        112233445566        abc        -50dBm
设备2        223344556677        bcd        -63dBm


5.2        设置/查询——扫描参数
指令        应答        参数
查询:AT+RANG?        OK+RANG:Para1#Para2        Para1:持续扫描时间
范围:1~10
单位:秒/S
默认值:5
Para2:扫描信号范围
范围:10~100
单位:dBm
默认值:100
设置:
AT+RANG[Para1,Para2]        OK+RANG:Para1#Para2        
注意:扫描时间为主设备查找从设备的时间,如果从设备当前在信号范围内广播,一般情况5秒内可以扫描到。扫描信号范围可用户过滤较远的设备,只扫描离主设备近的从设备,此值越小距离越近。
例如我们设置参数为AT+RANG[10,50],则表示持续扫描10秒,并且只扫描信号强度大于-50dBm的设备。
示例:
Send: AT+RANG?                        // 查询当前扫描参数
Recv: OK+RANG:5#100                // 持续扫描5秒,只扫描信号强度在-100dBm以内的设备

Send: AT+RANG[10,50]                // 设置扫描参数为持续扫描10秒,只扫描-50dBm以内的设备
Recv: OK+RANG:10#50                // 设置成功


5.3        连接搜索结果中指定序号的设备
指令        应答        参数
AT+CONN[Para]        连接成功:OK+CONN:Para
连接失败:FAIL+LINK        Para:要连接的设备在搜索结果中的索引号
注意:此索引号要小于SCAN指令返回的搜索到的设备数量,编号从0开始。
示例:
Send: AT+CONN[0]                // 连接扫描结果中第0个设备
Recv: OK+CONN:0                // 开始连接

如果使能了通知功能,在开启广播时将还会接收到
Recv:WAR+LINK:Y                // 连接建立
Recv:FAIL+LINK                // 连接失败


5.4        连接指定地址的设备
指令        应答        参数
AT+CON[Para]        连接成功:OK+CON:xxxxxxxx
连接失败:FAIL+LINK        Para:要连接的设备MAC地址
注意:蓝牙的MAC地址为6Byte,用字符串表示为12个字符,例如112233445566。
示例:
Send: AT+CON[112233445566]                // 连接MAC地址为112233445566的从设备
Recv: OK+CON:112233445566                // 开始连接

如果使能了通知功能,在开启广播时将还会接收到
Recv:WAR+LINK:Y                // 连接建立
Recv:FAIL+LINK                // 连接失败







5.5        连接最后一次连接成功的设备
指令        应答        参数
AT+CONL        连接成功:OK+CONL
连接失败:FAIL+LINK        无
注意:如果最后一次连接成功的设备当前正在信号范围内广播,则可以直接连接成功,否则连接失败。
示例:
Send: AT+CONL                // 连接最后一次连接成功的设备
Recv: OK+CONL        // 开始连接

如果使能了通知功能,在开启广播时将还会接收到
Recv:WAR+LINK:Y                // 连接建立
Recv:FAIL+LINK                // 连接失败





5.6        扫描时是否显示设备名
指令        应答        参数
查询:AT+SNAME?        OK+SNAME:Para        Para:是否显示设备名
Y:显示
N:不显示
默认para=N
设置:AT+SNAME[Para]        OK+SNAME:Para        
示例:
Send: AT+SNAME?                // 查询扫描时是否显示设备名
Recv: OK+SNAME:N                // 扫描时不显示设备名

Send: AT+SNAME[Y]                // 设置扫描时显示设备名
Recv: OK+SNAME:Y                // 设置成功



5.7        扫描时是否显示信号强度
指令        应答        参数
查询:AT+SRSSI?        OK+SRSSI:Para        Para:是否显示信号强度
Y:显示
N:不显示
默认para=N
设置:AT+SRSSI[Para]        OK+SRSSI:Para        
示例:
Send: AT+SRSSI?                // 查询扫描时是否显示信号强度
Recv: OK+SRSSI:N                // 扫描时不显示信号强度

Send: AT+SRSSI[Y]                // 设置扫描时显示信号强度
Recv: OK+SRSSI:Y                // 设置成功

菜鸟
2016-07-25 11:32:17     打赏
10楼
 iBeacon搜索模块 iBeacon信息采集模块 可以搜索市面上所有的标准iBeacon设备https://item.taobao.com/item.htm?spm=a1z10.1-c.w4004-13377699222.17.RaH3Il&id=531554951201

共22条 1/3 1 2 3 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]