打印

蓝牙4.0模块开发指南

[复制链接]
3783|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 zzq宁静致远 于 2015-9-16 15:06 编辑

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


第一节  MTSerialBle简介

第二节  通信演示


第三节  IO口操作


第四节   常用指令


第五节   串口指令

相关帖子

沙发
zzq宁静致远|  楼主 | 2015-8-4 12:33 | 只看该作者
本帖最后由 zzq宁静致远 于 2015-8-4 12:46 编辑

第一节   MTSerialBle简介

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

1.1     使用示例
1.1.1  使用智能手机和电器设备通讯
    通过MTSerialBle的透传功能,可以建立起智能手机和普通设备的连接桥梁,相当于手机端直接和设备的串口建立起了连接。

1.1.2   智能灯控
    通过MTSerialBle的IO控制功能,可以省去外挂的MCU,直接通过PWM和IO控制多彩LED的亮度和颜色。

1.1.3   取代电缆线
    通过MTSerialBle的主从一体功能,将两个模块分别设置为主从模块,就可实现模块之间的相互通信,此功能可以用于一些使用电缆通信的场景,使用BLE取代通信电缆。

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


使用特权

评论回复
板凳
zzq宁静致远|  楼主 | 2015-8-4 12:48 | 只看该作者
本帖最后由 zzq宁静致远 于 2015-8-4 13:03 编辑

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

1.1.1  连接模块到电脑


1.1.2   设置为从机


1.1.3   数据收发



1.1.4   Android系统

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

1.1.5  IOS系统

    IOS系统下可以使用LightBlue进行操作,可以在APP Store内搜索安装。

1.  搜索连接设备

  

2.  数据收发

  

3.  发送指令

  



1.2     模块和模块

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



1.2.2  分别设置为主从



1.2.3   互发数据







使用特权

评论回复
地板
dirtwillfly| | 2015-8-4 14:00 | 只看该作者
感谢分享

使用特权

评论回复
5
songchenping| | 2015-8-4 14:44 | 只看该作者
这个算是教程还是产品推介啊

使用特权

评论回复
6
ccmc| | 2015-8-5 09:23 | 只看该作者
产品推介

使用特权

评论回复
7
zzq宁静致远|  楼主 | 2015-8-5 15:19 | 只看该作者
本帖最后由 zzq宁静致远 于 2015-8-5 15:24 编辑

第三节    I/O口操作

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


    如上图所示:

    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




使用特权

评论回复
8
zzq宁静致远|  楼主 | 2015-8-17 17:23 | 只看该作者
本帖最后由 zzq宁静致远 于 2015-9-16 15:10 编辑

第四节   常用指令

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输出电平为高


使用特权

评论回复
9
51xlf| | 2015-8-21 08:18 | 只看该作者
很详细

使用特权

评论回复
10
zzq宁静致远|  楼主 | 2015-9-16 15:05 | 只看该作者
第五节   串口指令


    由于USB CDC串口参数为自适应,所以串口指令对USB CDC 串口无效,例如USBDongle。
1.1     查询/设置——串口波特率
   
指令
  
  
  
应答
  
  
参数
  
查询:AT+BAUD?
OK+BAUD: Para
Para:A~G
  
A:2400
  
B:4800
  
C:9600
  
D:19200
  
E:38400
  
F:57600
  
G:115200
  
H:230400
  
默认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
Para:A~B
  
A:1位停止位
  
B:2位停止位
  
默认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
Para:0~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                         // 设置成功

使用特权

评论回复
11
冰河w| | 2015-9-28 21:15 | 只看该作者
蓝牙模块的PCB天线是不是有固定的画法

使用特权

评论回复
受到警告 12
usrqqq| | 2016-4-26 10:54 | 只看该作者
提示: 该帖被管理员或版主屏蔽
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:蓝牙BLE、WiFi、LoRa等物联网方案 深圳市馒头科技:http://www.mantoukeji.cn/

9

主题

263

帖子

21

粉丝