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

Arduino:Примеры/Genuino101CurieBLELED

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

Перевод: Максим Кузьмин (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 используется для установления соединения с управляющим приложением на смартфоне и передачи значения для включения/выключения светодиода.

На смартфоне

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

BleLED 1.png

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

BleLED 2.png

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

BleLED 3.png

Нажмите на стрелочку вверх, чтобы открыть окно Write value, а затем выставьте тип данных на UINT 8.

BleLED 4.png

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

BleLED 5.png

Код

В этом скетче блок setup() используется для того, чтобы инициализировать и настроить периферийное BLE-устройство. Начнем с того, что присваиваем устройству название «LED» и указываем UUID сервиса:

blePeripheral.setLocalName("LED");
blePeripheral.setAdvertisedServiceUuid(ledService.uuid());

Затем настраиваем BLE-сервис и добавляем характеристику переключения (она будет использоваться для управления светодиодом):

blePeripheral.addAttribute(ledService);
blePeripheral.addAttribute(switchCharacteristic);

Выставляем значение этой характеристики на «0» (т.е. по умолчанию светодиод будет выключен):

switchCharacteristic.setValue(0);

И, наконец, запускаем рассылку пакетов-объявлений BLE-сервиса, который мы настроили выше:

blePeripheral.begin();

В блоке loop() проверяем соединение с центральным BLE-устройством, и если соединение есть, проверяем, была ли перезаписана характеристика, и если была, считываем это значение и соответствующим образом меняем состояние светодиода.

  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. #include <CurieBLE.h>
  24.  
  25. BLEPeripheral blePeripheral;  // периферийное BLE-устройство (плата, которую вы программируете)
  26. BLEService ledService("19B10000-E8F2-537E-4F6C-D104768A1214"); // BLE-сервис для светодиода
  27.  
  28. // BLE-характеристика для переключения светодиода: указываем
  29. // пользовательский 128-битный UUID, а также разрешаем центральному
  30. // устройству проводить операции считывания и записи:
  31. BLEUnsignedCharCharacteristic switchCharacteristic("19B10001-E8F2-537E-4F6C-D104768A1214", BLERead |BLEWrite);
  32.  
  33. const int ledPin = 13; // контакт для светодиода
  34.  
  35. void setup() {
  36.   Serial.begin(9600);
  37.  
  38.   // выставляем светодиодный контакт в режим OUTPUT:
  39.   pinMode(ledPin, OUTPUT);
  40.  
  41.   // задаем локальное имя и UUID сервиса, которые
  42.   // будут указаны в пакетах-объявлениях:
  43.   blePeripheral.setLocalName("LED");
  44.   blePeripheral.setAdvertisedServiceUuid(ledService.uuid());
  45.  
  46.   // добавляем сервис и характеристику:
  47.   blePeripheral.addAttribute(ledService);
  48.   blePeripheral.addAttribute(switchCharacteristic);
  49.  
  50.   // задаем начальное значение для характеристики:
  51.   switchCharacteristic.setValue(0);
  52.  
  53.   // запускаем рассылку пакетов-объявлений:
  54.   blePeripheral.begin();
  55.  
  56.   Serial.println("BLE LED Peripheral");  //  "Включение/выключение светодиода на периферийном устройстве"
  57. }
  58.  
  59. void loop() {
  60.   // запускаем прослушку периферийных устройств, к которым можно подключиться:
  61.   BLECentral central = blePeripheral.central();
  62.  
  63.   // если центральное устройство подключилось к периферийному:
  64.   if (central) {
  65.     Serial.print("Connected to central: ");  //  "Подключились к центральному устройству: "
  66.     // показываем MAC-адрес центрального устройства:
  67.     Serial.println(central.address());
  68.  
  69.     // если центральное устройство еще подключено к периферийному...
  70.     while (central.connected()) {
  71.       // ...и если центральное устройство перезаписало характеристику,
  72.       // используем это значение для управления светодиодом:
  73.       if (switchCharacteristic.written()) {
  74.         if (switchCharacteristic.value()) {   // любое значение, которое больше «0»...
  75.           Serial.println("LED on");  //  "Светодиод включен"
  76.           digitalWrite(ledPin, HIGH);         // ...включит светодиод...
  77.         } else {                              // ...а значение «0»...
  78.           Serial.println(F("LED off"));  //  "Светодиод выключен"
  79.           digitalWrite(ledPin, LOW);          // ...выключит его
  80.         }
  81.       }
  82.     }
  83.  
  84.     // если центральное устройство отключилось, сообщаем об этом:
  85.     Serial.print(F("Disconnected from central: "));  //  "Отключились от центрального устройства: "
  86.     Serial.println(central.address());
  87.   }
  88. }

См.также

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

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

  1. Arduino.cc - Genuino101CurieBLELED