2019-3-12 15:08:03 [显示全部楼层]
1261浏览
查看: 1261|回复: 1

[教程] 手机点亮Genuino 101 CurieBLE LED

[复制链接]
本帖最后由 szjuliet 于 2019-3-13 23:42 编辑

本贴写于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引脚。

屏幕快照 2019-03-12 19.47.50.png

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,灯灭(见本页第一张图)。


屏幕快照 2019-03-12 19.48.48.png

以下为源代码。


[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]

gada888  版主

发表于 2019-3-21 14:04:11

没用过这个模块
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2022 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail