Cat hungry.png
Здравствуйте! Собираем деньги на перевод материалов по электронике(https://www.allaboutcircuits.com/education/). Реквизиты указаны здесь.

Arduino:Примеры/Genuino101CurieBLECallbackLED

Материал из Онлайн справочника
Перейти к: навигация, поиск

Перевод: Максим Кузьмин (Cubewriter)
Перевел 2686 статей для сайта.

Контакты:

Проверка/Оформление/Редактирование: Мякишев Е.А.


Включение/выключение светодиода с помощью функций внешнего вызова[1]

Этот пример показывает, как, используя смартфон/планшет, а также встроенные BLE-возможности платы Arduino/Genuino 101, включать/выключать светодиод, подключенный к 13-ому контакту. Нам нужно будет создать сервис для светодиода, запустить опрос периферийного BLE-устройства и задать несколько событий, которые будут запускать функции внешнего вызова. Значения будут отсылаться через приложение nRF Master Control Panel (BLE), которое доступно и для Android, и для iOS.

Необходимое оборудование

  • Arduino или Genuino 101
  • Смартфон или планшет (на Android или iOS)

Необходимое ПО

  • Приложение nRF Master Control Panel (BLE) для Android или iOS

Цепь

Genuino101fzz.jpg

Наиболее важные части скетча

  • CurieBLE.h – библиотека, дающая доступ ко всем параметрам, возможностям и функциям BLE-модуля платы Arduino/Genuino 101. При помощи BLE вы можете подключаться и коммуницировать со смартфонами, планшетами и прочими устройствами, поддерживающими этот стандарт. В данном руководстве BLE используется для установления соединения с управляющим приложением на смартфоне и передачи значения для включения/выключения светодиода.
    • blePeripheralConnectHandler() – вызывается, когда к плате 101 подключается центральное BLE-устройство. Она показывает на мониторе порта IDE Arduino сообщение о подключении и адрес центрального устройства.
    • blePeripheralDisconnectHandler() – вызывается, когда центральное BLE-устройство отключается от платы 101. Она показывает на мониторе порта IDE Arduino сообщение об отключении и адрес центрального устройства.
    • switchCharacteristicWritten() – вызывается, когда центральное BLE-устройство перезаписывает характеристику переключения светодиода. Она включает/выключает светодиод в зависимости от значения, записанного пользователем в эту характеристику через приложение nRF Master Control Panel.

На смартфоне

Чтобы управлять светодиодом на Arduino/Genuino 101, вам понадобится приложение nRF Master Control Panel (BLE), которое доступно и для Android, и для iOS. Запустите его и нажмите SCAN. В итоге поиск должен выдать запись LEDCB с кнопкой CONNECT.

CallBackLED 1.png

Нажмите на CONNECT, и вам откроется экран с описанием сервиса Unknown Service, предлагаемого платой 101. Этот сервис будет иметь UUID «19B10000-E8F2-537E-4F6C-D104768A1214», и он задан строчкой BLEService ledService("19B10000-E8F2-537E-4F6C-D104768A1214"), стоящей в самом начале скетча.

CallBackLED 2.png

Нажмите на запись Unknown Service, чтобы открыть характеристики этого сервиса, как показано на картинке ниже. В нем будет характеристика Unknown Characteristic, в свойствах которой указано, что ее значение можно перезаписать через «Write Request» (т.е. через запрос на запись). Кроме того, справа от нее будет две иконки: стрелочка вниз означает считывание, стрелочка вверх – запись.

CallBackLED 3.png

Нажмите на стрелочку вверх, чтобы открыть окно Write value, а затем выставьте тип данных на UINT 8 и нажмите на поле ввода, чтобы вписать нужное значение («0» или «1»). Затем нажмите на SEND – это отправит указанное значение на плату, тем самым поменяв состояние светодиода (т.е. включив или выключив его).

CallBackLED 4.png

Код

  1. /*
  2.    Правообладатель – Intel Corporation (2015).  Все права защищены.
  3.  
  4.    Эта библиотека является бесплатной; ее можно распространять
  5.    и/или модифицировать согласно условиям Стандартной общественной
  6.    лицензии ограниченного применения GNU (т.к. она выпущена Фондом
  7.    свободного ПО) – либо версии 2.1 этой лицензии, либо более поздней
  8.    версии (на ваш выбор).
  9.  
  10.    Эта библиотека распространяется в надежде на то, что будет
  11.    полезна кому-либо, но БЕЗО ВСЯКИХ ГАРАНТИЙ – даже без гарантий на
  12.    коммерческое качество и пригодность применения для конкретных
  13.    целей. Более подробно читайте в Стандартной общественной лицензии
  14.    ограниченного применения GNU.
  15.  
  16.    Вы должны получить копию Стандартной общественной лицензии
  17.    ограниченного применения вместе с этой библиотекой. Если не
  18.    получили, напишите в Фонд бесплатного ПО на адрес: Free Software
  19.    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,    
  20.    MA  02110-1301  USA
  21. */
  22.  
  23.  
  24. #include <CurieBLE.h>
  25.  
  26. const int ledPin = 13; // задаем контакт для встроенного светодиода
  27. BLEPeripheral blePeripheral; // создаем экземпляр для периферийного устройства
  28.  
  29. BLEService ledService("19B10000-E8F2-537E-4F6C-D104768A1214"); // создаем сервис
  30.  
  31. // создаем характеристику для переключателя, а также разрешаем
  32. // удаленному устройству делать на ней операции записи и считывания:
  33. BLECharCharacteristic switchChar("19B10001-E8F2-537E-4F6C-D104768A1214", BLERead | BLEWrite);
  34.  
  35. void setup() {
  36.   Serial.begin(9600);
  37.   pinMode(ledPin, OUTPUT); // делаем контакт для 13-ого светодиода выходным
  38.  
  39.   // задаем локальное название для периферийного устройства:
  40.   blePeripheral.setLocalName("LEDCB");
  41.   // задаем UUID для сервиса, который рекламирует это периферийное устройство:
  42.   blePeripheral.setAdvertisedServiceUuid(ledService.uuid());
  43.  
  44.   // добавляем сервис и характеристику:
  45.   blePeripheral.addAttribute(ledService);
  46.   blePeripheral.addAttribute(switchChar);
  47.  
  48.   // присваиваем периферийному устройству обработчики событий для подключения и отключения:
  49.   blePeripheral.setEventHandler(BLEConnected, blePeripheralConnectHandler);
  50.   blePeripheral.setEventHandler(BLEDisconnected, blePeripheralDisconnectHandler);
  51.  
  52.   // присваиваем характеристике обработчик события для записи нового значения:
  53.   switchChar.setEventHandler(BLEWritten, switchCharacteristicWritten);
  54. // задаем начальное значение для характеристики:
  55.   switchChar.setValue(0);
  56.  
  57.   // запускаем «рекламу» сервиса:
  58.   blePeripheral.begin();
  59.   Serial.println(("Bluetooth device active, waiting for connections..."));  //  "Bluetooth-устройство активно, ждем подключений..."
  60. }
  61.  
  62. void loop() {
  63.   // запускаем опрос периферийного устройства:
  64.   blePeripheral.poll();
  65. }
  66.  
  67. void blePeripheralConnectHandler(BLECentral& central) {
  68.   // обработчик события «подключение центрального устройства»
  69.   Serial.print("Connected event, central: ");  //  "Событие «подключение центрального устройства», адрес: "
  70.   Serial.println(central.address());
  71. }
  72.  
  73. void blePeripheralDisconnectHandler(BLECentral& central) {
  74.   // обработчик события «отключение центрального устройства»
  75.   Serial.print("Disconnected event, central: ");  //  "Событие «отключение центрального устройства», адрес: "
  76.   Serial.println(central.address());
  77. }
  78.  
  79. void switchCharacteristicWritten(BLECentral& central, BLECharacteristic& characteristic) {
  80.   // центральное устройство записывает в характеристику новое значение, обновляя состояние светодиода
  81.   Serial.print("Characteristic event, written: ");  //  "Событие «запись в характеристику», текущий статус: "
  82.  
  83.   if (switchChar.value()) {
  84.     Serial.println("LED on");  //  "Светодиод включен"
  85.     digitalWrite(ledPin, HIGH);
  86.   } else {
  87.     Serial.println("LED off");  //  "Светодиод выключен"
  88.     digitalWrite(ledPin, LOW);
  89.   }
  90. }

См.также

  1. Heart Rate Monitor
  2. Battery Monitor
  3. Button LED
  4. LED

Внешние ссылки

  1. Arduino.cc - Genuino101CurieBLECallbackLED