查看: 18291|回复: 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例程:

    kittenblock中小学创客名师推荐的图形化编程软件

    #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);
        }
      }
    }


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










    如果以上内容对你有帮助,你可以通过打赏支持作者
  • TA的每日心情
    慵懒
    2019-5-24 00:00
  • 签到天数: 887 天

    [LV.10]以坛为家III

    发表于 2015-12-20 23:09 | 显示全部楼层
    还是这个传统啊……
    请PY我
  • 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库函数在哪里可以下到?
    您需要登录后才可以回帖 登录 | 立即注册  

    本版积分规则

    热门推荐

    ESP32 Picoweb教程:提供JSON内容
    ESP32 Picoweb教程:提供J
    简介 在本ESP32教程中,我们将检查如何从Picoweb应用程序中提供JSON内容。有关Picoweb
    ESP32 / ESP8266 MicroPython教程:字符串拆分方法
    ESP32 / ESP8266 MicroPyt
    [/backcolor]引言[/backcolor][/backcolor]这篇ESP32 / ESP8266 MicroPython教程主
    ESP32 Arduino:获取FreeRTOS任务优先级
    ESP32 Arduino:获取FreeRT
    本文主要介绍如何使用ESP32和Arduino环境获取FreeRTOS任务的优先级。 简 介本文主要介
    体验OneNET4.0,一起来拼开发板
    体验OneNET4.0,一起来拼
    一、 活动时间2019年04月09日-2019年6月30日 二、活动链接1.登录Arduino中文社区账
    【原创】 drawbot平面关节scara机械臂写字机 画画机器人直播...
    【原创】 drawbot平面关节
    这个项目上个月就在做了,结构和代码反反复复改了多次,加上自己又太忙,一直没来得及
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
    快速回复 返回顶部 返回列表