手机点亮Genuino 101 CurieBLE LED

2019-03-125046
AI 快速预览详细 收起
本教程介绍了一种简单的方法,通过nRF Connect应用控制Genuino 101板上的LED灯。首先,将LED灯接在101板的13引脚。然后,在手机上安装nRF Connect应用并搜索连接到Genuino 101板。连接成功后,通过发送“1”或“0”来控制LED灯的亮灭。这种方法省去了编写复杂程序的步骤,非常适合初学者。


本贴写于2016-8-1,由QQ日志迁移过来。

本人动手能力着实一般,请忽略接线。另外nRF Toolbox相当好玩,很多有趣的BLE传感器都可以玩起来。
一个简单的LED灯点亮和熄灭的小实验,可以在手机上进行控制,但是我们这次介绍的不是用App Inventor来编写程序,而是使用nRF Connect来测试。


官方教程地址:https://www.arduino.cc/en/Tutorial/Genuino101CurieBLELED


硬件:

Arduino/Genuino 101板
LED灯
手机

软件:
* nRF Master Control Panel (BLE) for Android and iOS
手机上用Play Store搜索后安装

步骤
1. 接线:将LED灯接在101板的13引脚。

手机点亮Genuino 101 CurieBLE LED图1

2. 安装nRF Master Control Panel

在Play Store搜索并安装,安装后运行。

点击SCAN,应用开始搜索可用的蓝牙设备,发现LED灯,点CONNECT连接。

连接成功后出现几个服务,点击Unknown Service,出现了读READ和写WRITE的属性。点击向上的箭头,打开写的属性。

在NEW下面,点击下拉箭头,呼出UNIT 8。

在Write value处输入“1”,点SEND,发送开灯指令。同理,输入0,点SEND,发送关灯指令。


成功发送1后,可以看到LED灯亮了(见下图)。再发送0,灯灭(见本页第一张图)。


手机点亮Genuino 101 CurieBLE LED图2

以下为源代码。


[mw_shl_code=applescript,true]#include <CurieBle.h>



BLEPeripheral blePeripheral;       // BLE Peripheral Device (the board you're programming)

BLEService heartRateService("180D"); // BLE Heart Rate Service



// BLE Heart Rate Measurement Characteristic"

BLECharacteristic heartRateChar("2A37",  // standard 16-bit characteristic UUID

    BLERead | BLENotify, 2);  // remote clients will be able to get notifications if this characteristic changes

                              // the characteristic is 2 bytes long as the first field needs to be "Flags" as per BLE specifications

                              // https://developer.bluetooth.org/ ... ate_measurement.xml



int oldHeartRate = 0;  // last heart rate reading from analog input

long previousMillis = 0;  // last time the heart rate was checked, in ms



void setup() {

  Serial.begin(9600);    // initialize serial communication

  pinMode(13, OUTPUT);   // initialize the LED on pin 13 to indicate when a central is connected



  /* Set a local name for the BLE device

     This name will appear in advertising packets

     and can be used by remote devices to identify this BLE device

     The name can be changed but maybe be truncated based on space left in advertisement packet */

  blePeripheral.setLocalName("HeartRateSketch");

  blePeripheral.setAdvertisedServiceUuid(heartRateService.uuid());  // add the service UUID

  blePeripheral.addAttribute(heartRateService);   // Add the BLE Heart Rate service

  blePeripheral.addAttribute(heartRateChar); // add the Heart Rate Measurement characteristic



  /* Now activate the BLE device.  It will start continuously transmitting BLE

     advertising packets and will be visible to remote BLE central devices

     until it receives a new connection */

  blePeripheral.begin();

  Serial.println("Bluetooth device active, waiting for connections...");

}



void loop() {

  // listen for BLE peripherals to connect:

  BLECentral central = blePeripheral.central();



  // if a central is connected to peripheral:

  if (central) {

    Serial.print("Connected to central: ");

    // print the central's MAC address:

    Serial.println(central.address());

    // turn on the LED to indicate the connection:

    digitalWrite(13, HIGH);



    // check the heart rate measurement every 200ms

    // as long as the central is still connected:

    while (central.connected()) {

      long currentMillis = millis();

      // if 200ms have passed, check the heart rate measurement:

      if (currentMillis - previousMillis >= 200) {

        previousMillis = currentMillis;

        updateHeartRate();

      }

    }

    // when the central disconnects, turn off the LED:

    digitalWrite(13, LOW);

    Serial.print("Disconnected from central: ");

    Serial.println(central.address());

  }

}



void updateHeartRate() {

  /* Read the current voltage level on the A0 analog input pin.

     This is used here to simulate the heart rate's measurement.

  */

  int heartRateMeasurement = analogRead(A0);

  int heartRate = map(heartRateMeasurement, 0, 1023, 0, 100);

  if (heartRate != oldHeartRate) {      // if the heart rate has changed

    Serial.print("Heart Rate is now: "); // print it

    Serial.println(heartRate);

    const unsigned char heartRateCharArray[2] = { 0, (char)heartRate };

    heartRateChar.setValue(heartRateCharArray, 2);  // and update the heart rate measurement characteristic

    oldHeartRate = heartRate;           // save the level for next comparison

  }

} [/mw_shl_code]

创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(1)
gada888
gada888
没用过这个模块
- 没有更多了 -