CNK Arduino 教程(三)

蓝牙传输数据

你可能会想要制作一些需要无线通信的设备。而 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.begin()

==============

初始化 BLESerial 函数。

========
BLESerial
========

检查 BLESerial 是否被初始化,初始化完成后返回值为 1。

=====================
BLESerial.operator bool()
=====================

检查 101 开发板是否与适配器配对,配对完成后,返回值 1,否则返回值 0。

  • CurieIMU 库

我们使用 CurieIMU 库来调用 Curie 中 IMU 的六轴加速计和陀螺仪数据。
我们可以使用以下函数初始化 CurieIMU 功能。

===============
CurieIMU.begin();
===============

初始化 CurieIMU 函数。

==============================
CurieIMU.setAccelerometerRange(2);
==============================

设置加速计的读取范围为 2 G 。

=========================
CurieIMU.setGyroRange(250);
=========================

设置陀螺仪的读取范围为 250 degrees/second。

======================================
CurieIMU.readAccelerometerScaled(ax, ay, az);
======================================

读取速度加速计的 x/y/z 数值。根据之前的设置,这里读出的数值范围为 -2.00 ~ 2.00

==============================
CurieIMU.readGyroScaled(gx, gy, gz);
==============================

读取速度陀螺仪的 x/y/z 数值。根据之前的设置,这里读出的数值范围为 -250.00 ~ 250.00

发布者:Cara,转载请注明出处:http://www.makercollider.com/curie/1180

发表评论

登录后才能评论
QR code