Arduino:Примеры/Genuino101CurieBLELED

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

Перевод: Максим Кузьмин (Cubewriter) Перевел 364226 статей для сайта.</br>Контакты:</br>* Skype: cubewriter</br>* E-mail: cubewriter@gmail.com</br>* Максим Кузьмин на freelance.ru
Проверка/Оформление/Редактирование: Мякишев Е.А.


Включение/выключение светодиода[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

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