蓝牙传输数据
你可能会想要制作一些需要无线通信的设备。而 Genuino 101 主控器上板载的蓝牙 4.1 模块正赋予了 Genuino 101 与其他蓝牙设备 (包括电脑、手机和其他蓝牙配件) 的通信能力。
在本章节中,我们将通过蓝牙适配器(USB BLE-Link)上的串口建立 Genuino101 和电脑端的蓝牙连接,并通过串口监视器在 Genuino 101 和 USB 蓝牙适配器之间收发数据。
材料准备
实物如下:
软件准备
系统推荐:Windows 7 以上 / Mac OS 10.7 Lion 或更新的版本
开发环境推荐:Arduino IDE 1.6.12 以上
开发版支持库推荐:Intel Curie Boards by Intel 1.0.7 以上
库文件需求:BLESerial(可从下方下载,请勿在库管理器中下载)
BLESerial.zip
库文件安装方法:
BLESerial 库下载完成后,在 Arduino IDE 菜单栏中的 “ 项目 -> 加载库 -> 添加一个 .ZIP 库… ” 中选择下载的 “ BLESerial.zip ” 文件即可自动完成库文件的加载。在 macOS 下载后可能会自动解压成文件夹,我们可以在 “ 添加一个 .ZIP 库… ” 的选择窗口中直接选择库文件夹即可。 )
USB BLE-Link 固件版本推荐:1.97 以上(查询方法 、 更新方法)
示例代码
首先我们将下面的代码编译下载到 Genuino 101
#include “BLESerial.h”
#include “CurieIMU.h”
void setup() {
pinMode(13, OUTPUT);
//Serial.begin(115200);
//Serial.print(“Initialize CurieIMU… “);
CurieIMU.begin();
// Set the accelerometer range to 2G
CurieIMU.setAccelerometerRange(2);
// Set the gyro range to 250 degrees/second
CurieIMU.setGyroRange(250);
//Serial.println(“Done!”);
//Serial.print(“Initialize Bluetooth Service… “);
BLESerial.setName(“Curie”);
BLESerial.begin(); // Initialize BLESerial communication
//Serial.println(“Done!”);
//Serial.println(“Waiting for connections…”);
while(!BLESerial); // Waiting for USB BLE-link connected
//Serial.println(“Connected!”);
}
void loop() {
//scaled accelerometer values
float ax, ay, az;
//scaled Gyro values
float gx, gy, gz;
// read accelerometer measurements from device, scaled to the configured range
CurieIMU.readAccelerometerScaled(ax, ay, az);
// read gyro measurements from device, scaled to the configured range
CurieIMU.readGyroScaled(gx, gy, gz);
if(BLESerial.operator bool()) {
digitalWrite(13, HIGH);
// display tab-separated accelerometer x/y/z values
BLESerial.print(ax);
BLESerial.print(“\t”);
BLESerial.print(ay);
BLESerial.print(“\t”);
BLESerial.print(az);
BLESerial.print(“\t”);
// display tab-separated gyro x/y/z values
BLESerial.print(gx);
BLESerial.print(“\t”);
BLESerial.print(gy);
BLESerial.print(“\t”);
BLESerial.print(gz);
BLESerial.println();
}
digitalWrite(13, LOW);
}
以上代码用于初始化 Genuino 101 的蓝牙功能以及 CurieIMU 相关功能,并启动搜索附近蓝牙设备状态 (即 USB BLE-link)。完成蓝牙连接后,D13 引脚的 LED 灯会点亮,同时也会实时发送 6 轴加速计和陀螺仪的运动数据;蓝牙断开后,D13 引脚的 LED 将保持熄灭状态,同时也会停止发送运动数据。
效果测试
- 蓝牙接近配对
代码上传成功后,关闭身边所有其他蓝牙设备,在电脑 USB 端口插入蓝牙适配器。把 Genuine 101 的蓝牙天线靠近蓝牙适配器 (小于 20mm),等待两台设备上的蓝牙 LED 指示灯点亮 (适配器上的蓝色 LED 指示灯可以在针孔附近找到)。当两个指示灯同时亮起并且保持点亮时,就代表蓝牙已经连接。配对完成后,即可将 Genunio 101 移开, 蓝牙会保持配对状态。
- 查看蓝牙传回的运动数据
配对完成后,在 Arduino IDE 菜单栏中的“工具”选择 USB BLE-link 的所在端口(端口号后面会显示为 “Arduino / Genuino Uno”)。
在菜单栏中选择 “ 工具 -> 串口监视器 ”,打开串口监视器后就能看到实时回传的运动数据了。
- 实时查看运动数据折线图
同样的,有了实时回传的运动数据之后,你也可以实时查看回传的运动数据折线图。
在菜单栏中选择 “ 工具 -> 串口绘图器 ”,打开串口绘图器后就能看到实时回传的运动数据折线图了。
代码分析
- BLESerial 库
我们使用库 BLESerial 来实现蓝牙数据传输。我们可以使用以下函数初始化蓝牙连接。
==============
==============
初始化 BLESerial 函数。
检查 BLESerial 是否被初始化,初始化完成后返回值为 1。
检查 101 开发板是否与适配器配对,配对完成后,返回值 1,否则返回值 0。
- CurieIMU 库
我们使用 CurieIMU 库来调用 Curie 中 IMU 的六轴加速计和陀螺仪数据。
我们可以使用以下函数初始化 CurieIMU 功能。
初始化 CurieIMU 函数。
设置加速计的读取范围为 2 G 。
设置陀螺仪的读取范围为 250 degrees/second。
读取速度加速计的 x/y/z 数值。根据之前的设置,这里读出的数值范围为 -2.00 ~ 2.00
读取速度陀螺仪的 x/y/z 数值。根据之前的设置,这里读出的数值范围为 -250.00 ~ 250.00
发布者:Cara,转载请注明出处:http://www.makercollider.com/curie/1180