查看: 20071|回复: 16

Arduino 101/Genuino 101 蓝牙开发教程

[复制链接]
  • TA的每日心情
    郁闷
    2018-12-6 22:21
  • 签到天数: 48 天

    [LV.5]常住居民I

    发表于 2015-12-20 23:02 | 显示全部楼层 |阅读模式
    占坑先搭框架,写提纲


    BLE技术简介
    这里带大家了解下BLE技术。BLE设备无法向下兼容(无法与蓝牙2.0\2.1\3.0通信),仅能与BLE设备通信。
    从Curie datasheet获知,curie的蓝牙芯片型号为NRF51822

    BLE角色
    在BLE协议中,有两个角色,中心设备(Central)外围设备(Periphery)
    中心设备可以扫描附近的外围设备,而外围设备可以发出广播让中心设备扫描;
    BLE连接中必须同时存在这两种角色的设备,同角色设备间不能相连;
    中心设备可以同时连接多个外围设备,而外围设备同一时刻只能链接一个中心设备;

    现在的很多可穿戴设备都是作为周边(Periphery)存在,而手机作为中央(Central)存在。
    从例程看,Arduino 101/Genuino 101/intel Curie 只能作为 周边(Periphery) 使用。也就是说,两个101之间是不能直接连接的,但你可以把多个101连接到手机或者其他 中央(Central) 设备。


    GATT协议
    当BLE连接建立后,两个设备间通信将使用GATT协议进行。
    GATT协议中也有两种角色——GATT服务端(server) & GATT客户端(client)
    但是不管是Periphery还是Central都是可以实现 GATT server 和 GATT client去传输数据,但是无法同时都是。
    这两种角色取决于BLE连接成功后,两个设备间通信的方式。




    101蓝牙驱动




    101蓝牙驱动库


    蓝牙控制LED例程:[mw_shl_code=cpp,true]#include <CurieBLE.h>

    const int ledPin = 13; // set ledPin to on-board LED
    const int buttonPin = 4; // set buttonPin to digital pin 4

    BLEPeripheral blePeripheral; // create peripheral instance
    BLEService ledService("19B10010-E8F2-537E-4F6C-D104768A1214"); // create service with a 128-bit UUID (32 characters exclusive of dashes).
                                                                   // Long UUID denote custom user created UUID


    // create switch characteristic and allow remote device to read and write
    BLECharCharacteristic ledCharacteristic("19B10011-E8F2-537E-4F6C-D104768A1214", BLERead | BLEWrite);
    // create button characteristic and allow remote device to get notifications
    BLECharCharacteristic buttonCharacteristic("19B10012-E8F2-537E-4F6C-D104768A1214", BLERead | BLENotify); // allows remote device to get notifications
    // Note use of Typed Characteristics. These previous 2  characeristics are of the type char

    void setup() {
      Serial.begin(9600);
      pinMode(ledPin, OUTPUT); // use the LED on pin 13 as an output
      pinMode(buttonPin, INPUT); // use button pin 4 as an input

      // set the local name peripheral advertises
      blePeripheral.setLocalName("ButtonLED");
      // set the UUID for the service this peripheral advertises:
      blePeripheral.setAdvertisedServiceUuid(ledService.uuid());

      // add service and characteristics
      blePeripheral.addAttribute(ledService);
      blePeripheral.addAttribute(ledCharacteristic);
      blePeripheral.addAttribute(buttonCharacteristic);

      // set initial values for led and button characteristic
      ledCharacteristic.setValue(0);
      buttonCharacteristic.setValue(0);

      // advertise the service
      blePeripheral.begin();

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

    void loop() {
      // poll peripheral
      blePeripheral.poll();

      // read the current button pin state
      char buttonValue = digitalRead(buttonPin);

      // has the value changed since the last read
      boolean buttonChanged = (buttonCharacteristic.value() != buttonValue);

      if (buttonChanged) {
        // button state changed, update characteristics
        ledCharacteristic.setValue(buttonValue);
        buttonCharacteristic.setValue(buttonValue);
      }

      if (ledCharacteristic.written() || buttonChanged) {
        // update LED, either central has written to characteristic or button state has changed
            // if you are using a phone or a BLE  central device that is aware of this characteristic, writing a value of 0x40 for example
            // Will be interpreted as written
        if (ledCharacteristic.value()) {
          Serial.println("LED on");
          digitalWrite(ledPin, HIGH);
        } else {
            // If central writes a 0 value then it is interpreted as no value and turns off the LED
          Serial.println("LED off");
          digitalWrite(ledPin, LOW);
        }
      }
    }[/mw_shl_code]

    官方示例
    https://www.arduino.cc/en/Tutori ... BLEHeartRateMonitor










  • TA的每日心情
    擦汗
    2020-5-26 17:59
  • 签到天数: 957 天

    [LV.10]以坛为家III

    发表于 2015-12-20 23:09 | 显示全部楼层
    还是这个传统啊……
  • TA的每日心情
    慵懒
    2018-8-31 10:36
  • 签到天数: 36 天

    [LV.5]常住居民I

    发表于 2016-3-5 01:30 | 显示全部楼层
    还不补档啊!公司要做这个101了,昨天去研讨会,intel放鸽子了,没看到解说。

    点评

    空了写嘛~~~我工作也忙额  详情 回复 发表于 2016-3-5 09:41
  • TA的每日心情
    郁闷
    2018-12-6 22:21
  • 签到天数: 48 天

    [LV.5]常住居民I

     楼主| 发表于 2016-3-5 09:41 | 显示全部楼层
    大Angel101 发表于 2016-3-5 01:30
    还不补档啊!公司要做这个101了,昨天去研讨会,intel放鸽子了,没看到解说。 ...

    空了写嘛~~~我工作也忙额
  • TA的每日心情
    郁闷
    2016-3-14 22:35
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2016-3-14 22:36 | 显示全部楼层
    楼主,genuino的蓝牙玩过了没有啊??正在玩这个板子,希望能交流下

    该用户从未签到

    发表于 2016-3-16 14:23 | 显示全部楼层
    大Angel101 发表于 2016-3-5 01:30
    还不补档啊!公司要做这个101了,昨天去研讨会,intel放鸽子了,没看到解说。 ...

    https://www.arduino.cc/en/Main/ArduinoBoard101
    你说的活动是不是在深圳啊?好像是我们协办的那场。Intel的人放鸽子了。

    该用户从未签到

    发表于 2016-4-1 18:08 | 显示全部楼层
    大哥都等你1年了还没写.
  • TA的每日心情
    奋斗
    2019-3-4 20:26
  • 签到天数: 115 天

    [LV.6]常住居民II

    发表于 2016-4-11 07:18 | 显示全部楼层
    代码看不懂啊,能解释一下吗

    点评

    还有那个驱动在哪里下载啊  发表于 2016-4-11 07:19
  • TA的每日心情
    奋斗
    2016-4-15 09:04
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2016-4-13 08:14 | 显示全部楼层
    如果加上温度传感器数据的采集呢?求大神支招   小白一小只~~~
  • TA的每日心情
    奋斗
    2016-4-15 09:04
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2016-4-15 10:52 | 显示全部楼层
    请问CurieBLE库函数在哪里可以下到?
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    热门推荐

    5分钟带你快速了解新一代开发板:M5STACK
    5分钟带你快速了解新一代
    一、什么是M5Stack M5Stack是一种模块化、可堆叠扩展的开发板,每个模块
    创客火首发无人机编队套装,开启不一样的人工智能教育
    创客火首发无人机编队套装
    2017年国务院发布《新一代人工智能发展规划》,提出要广泛开展人工智能科普活动,在中
    这个F()函数是做什么的?
    这个F()函数是做什么的
    如图上,在看代码的时候,发现了这么一个函数,然后后面又一行英文注释。 我用有道翻
    隔离论坛在搞一个开源的arduino墨水屏,值得入手吗?
    隔离论坛在搞一个开源的ar
    amobbs论坛出来了一个众筹的arduino的墨水屏终端,100多块钱,有大神加入了吗? 看着
    两轮自平衡小车的线性CCD循迹总结
    两轮自平衡小车的线性CCD
    继之前的两轮自平衡小车的制作总结(https://www.arduino.cn/thread-99011-1-1.html)
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   
    快速回复 返回顶部 返回列表