Arduino:Примеры/Genuino101CurieBLELED
Поддержать проект | Содержание | Знакомство с Arduino | Продукты | Основы | Справочник языка Arduino | Примеры | Библиотеки | Хакинг | Изменения | Сравнение языков Arduino и Processing |
Содержание
Включение/выключение светодиода[1]
Этот пример показывает, как, используя смартфон/планшет, а также встроенные BLE-возможности платы Arduino/Genuino 101, включать/выключать светодиод, подключенный к 13-ому контакту. Мы создадим сервис для светодиода и будем постоянно следить за центральным BLE-устройством, ожидая, когда оно перезапишет значение в характеристике, связанной со светодиодом, которым мы хотим управлять. Этот пример схож с этим примером, где управление светодиодом осуществляется при помощи опроса и функций внешнего вызова. Значения будут отсылаться через приложение nRF Master Control Panel (BLE), которое доступно и для Android, и для iOS.
Необходимое оборудование
- Arduino или Genuino 101
- Смартфон или планшет на Android или iOS
Необходимое ПО
Цепь
Наиболее важные части скетча
CurieBLE.h – библиотека, дающая доступ ко всем параметрам, возможностям и функциям BLE-модуля платы Arduino/Genuino 101. При помощи BLE вы можете подключаться и коммуницировать со смартфонами, планшетами и прочими устройствами, поддерживающими этот стандарт. В данном руководстве BLE используется для установления соединения с управляющим приложением на смартфоне и передачи значения для включения/выключения светодиода.
На смартфоне
Чтобы управлять светодиодом на Arduino/Genuino 101, вам понадобится приложение nRF Master Control Panel (BLE), которое доступно и для Android, и для iOS. Запустите его и нажмите SCAN. В итоге поиск должен выдать запись LED с кнопкой CONNECT.
Нажмите на CONNECT, и вам откроется экран с описанием сервиса Unknown Service, предлагаемого платой 101. Этот сервис будет иметь UUID «19B10000-E8F2-537E-4F6C-D104768A1214», и он задан строчкой BLEService ledService("19B10000-E8F2-537E-4F6C-D104768A1214"), стоящей в самом начале скетча.
Нажмите на запись Unknown Service, чтобы открыть характеристики этого сервиса, как показано на картинке ниже. В нем будет характеристика Unknown Characteristic, в свойствах которой указано, что ее значение можно перезаписать через «Write Request» (т.е. через запрос на запись). Кроме того, справа от нее будет две иконки: стрелочка вниз означает считывание, стрелочка вверх – запись.
Нажмите на стрелочку вверх, чтобы открыть окно Write value, а затем выставьте тип данных на UINT 8.
Теперь нажмите на поле ввода, чтобы вписать нужное значение («0» или «1»). Затем нажмите на SEND – это отправит указанное значение на плату, тем самым поменяв состояние светодиода (т.е. включив или выключив его).
Код
В этом скетче блок 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 }
См.также
- Heart Rate Monitor
- Battery Monitor
- Button LED
- Callback LED
Внешние ссылки