BLE Wireless Gamepad V2.0无线手柄

简介

想着你新买的手柄即能打游戏又能控制机器人,这可以吗?当然可以!DFROBOT新推出的BLE 蓝牙4.0无线遥控手柄就能同时满足这两个需求,基于TI CC2540蓝牙芯片设计,专为DIY玩家量身打造的,无需编程,上电即可使用。 单芯片硬件扫面,响应速度快,支持蓝牙主从机一键切换。主机模式下可与DFRobot BLE设备相连接,实现远程无线操控。从机模式可作为HID键盘鼠标设备,连接电脑作为游戏手柄使用。手柄支持多按键识别,每个按键拥有按下和松开两个状态,方便编程开发。 V2.0手柄在老版本的基础上,不仅在硬件上做了改善,使得连接更加稳定。还额外支持了AT功能,可以通过AT命令去设置蓝牙的基本参数,开启手柄震动等功能。新版手柄还支持Kiss连接方式,只需把手柄靠近设备,即可完成一键绑定。

产品参数

按键说明

手柄按键

手柄按键值对应图

数字按键值说明

标号 名称
1 A
2 B
3 C
4 D
5 E
6 F
7 G
8 H

模拟按键值说明

标号 名称 HID模式
1 X x
2 Y y
3 Z z
4 W w
5 T t
6 U u
7 V v
8 S s
9 L l
10 P P

前置按键值说明

标号 名称 HID模式
1 L3 3
2 L4 4
3 N n
4 O o

功能按键

LED指示灯

指示灯除了拥有模式指示和数据发送指示外,还有连接指示功能:

蓝牙手柄连接方式

主机透传模式

在此模式下,手柄可与一个DFRobot BLE从机设备相互连接,作数据透传,有以下两种方法。

  1. KISS连接:在手柄未绑定的状态下,将手柄和设备放置在10cm以内时,手柄将连接设备并绑定设备蓝牙MAC地址,修改连接方式为固定设备连接。下一次上电后,手柄只需要在蓝牙设备的通信范围内,即可自行连接。
  2. AT指令设置连接方式:通过串口AT指令来配置蓝牙参数,配制方法参考下方 通过AT指令配置手柄蓝牙参数。设置手柄的连接方式为指定设备连接,并绑定设备MAC地址。重启手柄,就可以和设备进行连接通信。

解除蓝牙绑定

手柄可以通过一下两种方式解除蓝牙设备绑定

  1. 一键解除绑定:短按 ANALOG 按键解除手柄MAC地址绑定
  2. AT指令设置连接方式:通过串口AT指令来配置蓝牙参数,配制方法参考下方 通过AT指令配置手柄蓝牙参数。设置手柄的链接方式为任意设备连接。重启手柄,就可以解除设备绑定。

从机HID模式

V2.0手柄在从机模式下依然支持蓝牙HID模式。什么是蓝牙HID?HID是Human Interface Device的缩写,由其名称可以了解HID设备是直接与人交互的设备,例如键盘、鼠标与游戏杆等。而蓝牙HID设备即可以简单地理解为蓝牙键盘、鼠标等输入设备。 具体的使用方法可以参照V1版的wiki:点击传送至V1 BLE HID使用教程

数据通信

这个环节,我们以DFRobot Bluno配上BLE 无线手柄作为样例。 Bluno设为从机,烧入串口接收代码,并把手柄和Bluno贴在一起(两者小于10cm),两者即可实现Kiss连接。打开Bluno串口(需要可以显示十六进制字符的串口助手,Arduino IDE目前不支持)查看数据输出。

String inData;
byte Data[14];

void setup() {
  Serial.begin(115200);
  //Serial.println("Waiting for Raspberry Pi to send a signal...\n");
}

void loop()
{
  if (Serial.available()); //if there is any data in the Serial port
  {
    for (int i = 0; i < 14; i++)
    {
      while (Serial.available() == 0)
      {
        // do nothing
      }
      Data[i] = Serial.read();
    }
  }
  for (int i = 0; i < 14; i++)
  {
    Serial.write(Data[i]);  //print received data
  }
}

数据输出

数据格式

帧头 地址 长度 命令字节 数字按键 预留字节 模拟按键 校验和
2字节 1字节 1字节 1字节 2字节 2字节 4字节 1字节

数据格式采用定长的形式,每一帧数据长度是14字节:

  1. 帧头:0x55 0xAA
  2. 地址:0x01
  3. 长度:0x0E
  4. 命令字节:0x01(有数据)或0x00(无数据)
  5. 数字按键:数字按键数据,具体请参考下方真值表
  6. 预留字节:未来扩展预留,此处为默认为”0x00“
  7. 模拟按键:模拟摇杆数据,具体请参考下方真值表
  8. 校验和:异或校验

命令字节

当检测到任何按键处于按下状态时,命令字节会变为0x01,并发送相应数据; 当检测到所有按键处于松开状态时,命令字节会变为0x00,此时手柄会发送三遍截止命令,表示所有按键已经松开:”55 AA 01 0E 00 00 00 00 00 00 00 00 00 F0“

数字按键

手柄按键值对应图
数字按键数据位 在帧中占据了2个字节,其中前一个字节输出4个前置按键,2个模拟中键的数据和2个空位;后一个字节描述8个数字按键数据,对应前面的按键值说明表

具体14个数字按键对应位置的真值表如下:
按键真值表

注意: 当按键被按下时输出为1,松开时输出为0。所有按键全部松开时,输出:55 AA 01 0E 00 00 00 00 00 00 00 00 00 F0

当且仅当单个按键被按下时,可直接查看真值表获取数据:

当多个按键同时被按下时,则输出结果是每个按键单独按下的值按位或运算所得的结果:

注意:由于硬件扫描的原因,同在一个字节上的按键 "R2","R1" 和右侧摇杆按钮 "R" 不能被同时按下,否则会控制器会认为按键出现冲突,停止发送数据。

模拟按键

模拟按键数据位总共四个字节,分别对应两个遥感的x&y轴数据。
遥感按键图

遥感按键数值表

注意:当遥感处于静止状态时,输出中值"0x7F",但由于遥感静止默认归中,所以当两个遥感静止时,默认进入停止域,不输出数据。为了避免机械抖动,特意把中值阈扩大,以减少机械误差。

使用教程

设置接收端为从机模式,打开手柄开关,两者贴近小于10cm,完成Kiss贴近连接。

例如,我们想判断A键是否被按下,接收端可以使用如下样例代码:

int str[14] = {'\0'};
void setup()
{
  Serial.begin(57600);
}

void loop()
{
  if (Serial.available())
  {
    for (int i = 0; i < 14; ++i)
    {
      str[i] = Serial.read();
      delay(2);
    }
    if (str[6] & 0x01)
    {
      //说明A键按下
    }
  }
}

当您看完以上所有的参数和教程后,是不是也想亲自试一试呢?不要急!DFRobot不仅有硬件,还有软件!可以直接下载接收端解析程序去读取按键数值


点击“Download”下载安装后,即可正常使用。关于如何安装库?

通过AT指令配置手柄蓝牙参数

AT指令的使用

  1. 打开Arduino IDE
  2. 在菜单->工具->串口中选择正确的设备
  3. 开启串口监视器 (点击窗口的右上角的按键)
  4. 在两个下拉菜单中选择"Both NL & CR"(①)和115200 baud(②)
  5. 在输入框中(③)输入AT指令,并点击发送键(④)
  6. 如果BLE配置成功,界面将会返回"OK"(⑤)
  7. 如果收到“ERROR CMD”,可以再发一遍。发送多次后如果还是“ERROR CMD”,你需要检查一下指令发送是否正确.(大写字母)

Fig1: 输入AT指令,记得更改为Both NL & CR

AT指令表

<CR+LF> 即回车+换行,所有的AT指令都是以windows下的回车作为结束符,不要把“<CR+LF>”这几个字符当做AT指令的一部分!!!

1. "AT+ROLE" 设置BLE芯片主从机状态

AT+ROLE=ROLE_CENTRAL<CR+LF> 设置BLE工作在主机状态下(数据传输模式)
AT+ROLE=ROLE_PERIPHERAL<CR+LF> 设置BLE工作在从机状态下(HID设备模式)
AT+ROLE=?<CR+LF> 查询当前BLE芯片的主从机状态。 (默认值为ROLE_PERIPHERAL)

2. "AT+BIND" 设置BLE芯片绑定蓝牙地址

AT+BIND=0x0017ea9397e1<CR+LF> 设置BLE芯片绑定的蓝牙地址为0x0017ea9397e1
AT+BIND=?<CR+LF> 查询当前BLE芯片绑定蓝牙地址。 默认值为0x000000000000

3. "AT+CMODE" 设置BLE芯片连接模式

AT+CMODE=UNIQUE<CR+LF> 设置连接模式为指定蓝牙地址连接模式(指定蓝牙地址由BIND命令设置,见"AT+BIND" )
AT+CMODE=ANYONE<CR+LF> 设置连接模式为任意蓝牙地址连接模式(不受BIND命令设置地址的约束,见"AT+BIND")
AT+CMODE=?<CR+LF> 查询当前BLE芯片连接模式。 默认值为ANYONE

4. "AT+MAC"查询BLE芯片MAC地址

AT+MAC=?<CR+LF> 查询当前BLE芯片MAC地址

5. "AT+NAME" 设置和查询当前设备名称

AT+NAME=DFBLEduinoV1.0<CR+LF> 设置模块名称为“DFBLEduinoV1.0”。ascii码形式,小于等于13字节
AT+NAME=?<CR+LF> 查询当前模块名称, 默认值为DFBLEduinoV1.0

6. "AT+MOTOR" 开启和关闭震动电机

AT+MOTOR=1<CR+LF> 开启震动电机
AT+MOTOR=0<CR+LF> 关闭震动电机

7. "AT+TXPOWER" 设置蓝牙发射功率

AT+TXPOWER=0<CR+LF> 设置发设功率。 (4, 0, -6 或 -23)
AT+TXPOWER=?<CR+LF> 查询当前发射功率 (默认: 0)

8. "AT+VERSION" 查看固件版本

AT+VERSION=?<CR+LF> 查看当前固件版本

9. "AT+RSSI" 返回当前的RSSI值

AT+RSSI=?<CR+LF> 返回当前的RSSI值(未连接状态下返回-000)

10. "AT+PASSWORD" 设置和查询匹配后AT指令密码

AT+PASSWORD=?<CR+LF> 查询蓝牙匹配后AT指令密码(一般通过USB连接查询)
AT+PASSWORD=abc<CR+LF> 设置蓝牙匹配后AT指令密码(一般通过USB连接设置)

常见问题

还没有客户对此产品有任何问题,欢迎通过qq或者论坛联系我们!

更多问题及有趣的应用,可以 访问论坛 进行查阅或发帖!

更多

原理图Part1 原理图Part2 BLE Wireless固件 历史版本

DFshopping_car1.png DFRobot商城购买链接