SIK Experiment Guide for the Arduino 101/Genuino 101 Board (Chinese)

This Tutorial is Retired!

This tutorial covers concepts or technologies that are no longer current. It's still here for you to read and enjoy, but may not be as useful as our newest tutorials.

Pages
Contributors: D___Run___
Favorited Favorite 1

实验 21:使用板载低功耗蓝牙 (BLE)

简介

我们现在要进行最后一个实验,兜了一圈后又回到了单个 LED。不过这次实验有一些复杂!这次并是使这一单独的 LED 闪烁,而是将通过手机或平板电脑控制它!

101 开发板内置了低能量蓝牙 (BLE)。对于您而言,这意味着您可以开始从手机控制 101 开发板。BLE 使用基于服务/属性的设备通信方法。从长远来看,此方法可使跨多个设备进行的开发更加容易,但是如果您刚刚接触它,则可能会觉得有些困难。本实验涵盖将有助于进行通信的应用程序加载到设备中,我们将查看使用 BLE 的示例草图。

这是您最后一个实验,但是绝不是您学习 101 开发板的终点。我们强烈建议查看 Arduino 网站以了解有关 101 开发板的详细信息以及支持材料将如何发展和改进。

所需部件

您需要以下部件:

  • 1x 实验电路板
  • 1x Arduino 101 或 Genuino 101 开发板
  • 1x LED
  • 1x 100Ω 电阻
  • 3x 跳线

没有 SIK?

如果您要执行本实验,但又没有 SIK,那么我们建议您使用这些部件:

Breadboard - Self-Adhesive (White)

Breadboard - Self-Adhesive (White)

PRT-12002
$5.50
48
Jumper Wires - Connected 6" (M/M, 20 pack)

Jumper Wires - Connected 6" (M/M, 20 pack)

PRT-12795
$2.10
2
LED - Basic Red 5mm

LED - Basic Red 5mm

COM-09590
$0.45

Resistor 100 Ohm 1/4th Watt PTH - 20 pack

COM-13761
Retired

您还需要一个 Arduino 101 Genuino 101 开发板。

Arduino 101

DEV-13787
9 Retired

Genuino 101

DEV-13984
Retired

推荐阅读

继续进行本实验之前,我们建议您熟悉以下教程中的概念:

低能量蓝牙 (BLE) 简介

低能量蓝牙 (BLE) 是使用蓝牙的相对较新通信协议。BLE 正越来越多地用于可穿戴和物联网 (IoT) 应用,在这些应用中,电源管理是一个值得关注的问题,并且您的设备需要能够与众多设备(如手机、汽车和其他 BLE 设备)进行通信。

为了标准化与各种各样的设备之间的通信协议,BLE 使用基于常规属性 (GATT) 的系统,该系统使用基于设备功能的服务组成的层次结构。例如,Fitbit 可能具有心率服务以及计步器服务。每个服务都可以分配属性。这些属性将承载服务的原始数据。

一个示例属性是针对有关与之通信的设备的信息以及对给定服务十分重要的数据进行通信。在 Fitbit 示例中,步数或脉搏数就可以是一个属性。大体的思路如下:有一些服务能使设备了解期望从彼此获得的信息,并让彼此保持统一,以便来回共享属性。GATT 能采用其最简单的形式让设备对彼此进行假设并开始处理重要内容...共享您尝试传达的信息。

注:BLE 内置在 101 开发板上的 Curie 模块中,除了连接您要通过 BLE 进行控制的对象,无需进行任何接线。

硬件接线

是否准备好开始对每个部件进行接线?请查看下面的接线图以了解如何连接每个部件。

请特别注意组件用于指示如何在实验电路板上放置它的标记。极化组件只能按一个方向连接到电路。

实验的接线图

替换文本

难以看清电路?单击接线图可放大查看。

安装 BLE 应用程序

为了准备充分,并通过将 BLE 与 Arduino 101 结合使用来运行,我们建议使用 nRF Master Control Panel 应用程序。该应用程序可以用于 Android 和 iOS 设备,最棒的地方在于它是免费的!

要下载该应用程序,请转到 Google Play Store 或 Apple App Store 并搜索 nRF。在准备好并运行 BLE 之后,我们强烈建议您尝试 nRF 提供的一些其他工具,但是现在,我们只需要 Master Control Panel。搜索、下载并安装应用程序 -- 随后您便已准备就绪!

打开草图

在计算机上打开 Arduino IDE 软件。采用 Arduino 语言进行编码可控制电路。通过访问您先前下载并置于“示例”文件夹中的“101 SIK 指南代码”,来打开用于电路 21 的代码。

要打开该代码,请转到:文件 > 示例 > 101 SIK 指南代码 > Circuit_21

还可以将以下代码复制并粘贴到 Arduino IDE 中。点击“上传”,然后查看发生的情况!

language:cpp
/*
SparkFun Inventor's Kit
Example sketch 21

BASIC BLE CONTROL

Turn an LED on and off using BLE and either a phone or tablet. Android and iOS devices only!

Based off of the BLE LED example written by Intel Corporation and included with the Curie BLE Arduino Library.

*/

 #include 

BLEPeripheral blePeripheral;  // BLE Peripheral Device (the board you're programming)
BLEService ledService("19B10000-E8F2-537E-4F6C-D104768A1214"); // BLE LED Service

//set BLE characteristic
switchCharacteristic("19B10001-E8F2-537E-4F6C-D104768A1214", BLERead | BLEWrite);

const int ledPin = 13; // pin to use for the LED

 void setup()
{
 // set LED pin to output mode
  pinMode(ledPin, OUTPUT);

  // set advertised local name and service UUID:
  blePeripheral.setLocalName("101 Board");
  blePeripheral.setAdvertisedServiceUuid(ledService.uuid());

  // add service and characteristic:
   blePeripheral.addAttribute(ledService);
   blePeripheral.addAttribute(switchCharacteristic);

   // set the initial value for the characeristic:
   BLEUnsignedCharCharacteristic switchCharacteristic.setValue(0);

   // begin advertising BLE service:
   blePeripheral.begin();
 }

void loop()
{
  // listen for BLE peripherals to connect:
 BLECentral central = blePeripheral.central();

 // if a central is connected to peripheral:
  if (central)
  {
   // while the central is still connected to peripheral:
    while (central.connected())
    {
      // if the remote device wrote to the characteristic,
      // use the value to control the LED:
      if (switchCharacteristic.written())
      {
          // any value other than 0, turn on the LED
         if (switchCharacteristic.value())
         {  
         digitalWrite(ledPin, HIGH);         
         }
      //else turn the LED off
       else
      {                              
      digitalWrite(ledPin, LOW);         
      }
      }
     }
    }
  }

要注意的代码

BLEService ledService("19B10000-E8F2-537E-4F6C-D104768A1214");

BLE 基于服务,使用名为全局唯一标识符 (UUID) 的自定义字符串预定义了一些服务。此字符串的长度是 16 字节,顾名思义,它在全局是唯一的。这是使用特定 UUID 实例化 BLEService 对象 ledService。

switchCharacteristic("19B10001-E8F2-537E-4F6C-D104768A1214", BLERead | BLEWrite);

特征和属性在服务下绑定在一起。您可以创建特征及其自己的 UUID,并将它们设置为可读、可写或是可读写。我们选择设置为可读写。请注意,特征 UUID 是一个与服务 UUID 不同的数字。

blePeripheral.setLocalName("101 Board");

您可以使用 setLocalName() 方法来命名 101 开发板。使用引号向它传递字符串。我们建议将此名称设为可以方便地识别为您自己的开发板,尤其是如果您在课堂上使用 101 开发板。

   blePeripheral.setAdvertisedServiceUuid(ledService.uuid());

   // add service and characteristic:
   blePeripheral.addAttribute(ledService);
   blePeripheral.addAttribute(switchCharacteristic);

   // set the initial value for the characeristic:
   switchCharacteristic.setValue(0);

   // begin advertising BLE service:
   blePeripheral.begin();

在这段代码中,我们向外围设备添加一个服务,然后将属性绑定或添加到外围设备。我们添加 ledService,并通过 switchCharacteristics 控制它。我们最后将 switchCharacteristics 的起始值设置为 0,然后启动外围设备。

在其中的循环函数中,我们确保外围设备与中央设备(手机)之间存在连接。具有连接时,我们检查是否存在特征以及它是否已写入。如果存在 0 以外的值,则我们打开 LED;如果没有值,或是值为 0,则关闭 LED。

应看到的情况

在设备上打开蓝牙连接并启动 Master Control Panel 应用程序。扫描设备,选择您的 101 开发板,然后连接到它。

替换文本

连接之后,打开未知服务,然后选择 switchvalue。单击上传徽标(向上箭头)。这会显示一个对话框。输入 0 以外的数字,然后单击“发送”。

替换文本

替换文本

LED 应打开!显示相同的对话框,输入数字 0,然后单击“发送”。LED 应关闭。

替换文本

故障诊断

LED 未亮起

您知道常规程序:检查接线,检查 LED 是否反向插入。

无法连接到 101 开发板的蓝牙

确保草图已上传!必须上传草图才能从 101 开发板广播 BLE 信号。

仍未运行

尝试重新启动手机或平板电脑的蓝牙并再次扫描本地设备。