Наш ассоциированный член www.Bikinika.com.ua

Arduino Підручник: Інтеграція Bluetooth LE і iOS

  1. Починаємо
  2. Основний дизайн вашого додатка
  3. Програмування Arduino
  4. Світлодіод
  5. Взаємодія із сервоконтролем
  6. Послідовна комунікація
  7. Внутрішня робота щита BLE
  8. Підключення устаткування
  9. Оновлення App для iOS
  10. Огляд початкового проекту
  11. Покласти все разом
  12. Куди піти далі?

Створення машин, які взаємодіють з фізичним світом, є надзвичайно задовольняє. Контролюючи їх через Bluetooth з пристроєм iOS просто просто приголомшливо!

У минулому єдиним способом створення пристрою Bluetooth, затвердженого Apple, була участь Програма MFi . С Bluetooth Low Energy 4.0 Фізичні особи та невеликі компанії можуть розробляти власні продукти та продавати їх без накладних норм MFi від Apple. Це означає, що ви можете розмовляти з пристроями через Bluetooth LE з дуже маленькою конфігурацією і кодом, що відкриває цілий світ можливостей для розробників iOS.

Цей посібник навчить вас, як створити власний пристрій Bluetooth LE, використовуючи стандартні компоненти, які можна керувати за допомогою простого додатка iOS. Оскільки у центрі уваги цього проекту є створення пристрою BLE, ви будете використовувати основу iOS Core Bluetooth. Якщо ви не знайомі з Core Bluetooth, перевірте наш Вступ до основного Bluetooth: створення монітора частоти серцевих скорочень підручник.

Нехай будівля починається!

Починаємо

Використання готових компонентів для цієї побудови робить створення пристрою Bluetooth нескладною. Ось зображення, що показує основні елементи, які ви будете використовувати в цьому проекті:

Ось зображення, що показує основні елементи, які ви будете використовувати в цьому проекті:

Подивіться на частини, які потрібно виконати.

Ось список частин, які потрібно виконати, і де їх можна отримати:

Ось список частин, які потрібно виконати, і де їх можна отримати:

Провідники Arduino, серво та перемички можна придбати разом з SparkFun.com у Комплект Inventor SparkFun для Arduino . Цей комплект постачається з багатьма корисними компонентами та навчальними посібниками для початку роботи в апаратному світі.

Ви можете знайти менш дорогі BLE Shields, крім перерахованих у цьому підручнику, але знайте, що багато хто з них жертвує гнучкістю, щоб заощадити на вартості. BLE-Shield v2.0.0 дозволяє вам програмувати свої власні користувальницькі послуги та характеристики на модуль. Це означає, що ви можете повністю скористатися структурою даних Bluetooth 4.0.

Це піклується про апаратну сторону речей - є ще кілька додаткових програмних частин, щоб подбати про те, а також.

Завантажити Стартовий проект Xcode тут . Стартовий проект включає в себе контролер перегляду та базову реалізацію базового Bluetooth, щоб заощадити ваш час. Ви додасте більше коду для взаємодії з BLE Shield пізніше в підручнику.

Далі завантажте та встановіть Arduino IDE з Завантажити Arduino сторінка; вона доступна для платформ Windows, Mac OS X і Linux. Ви будете використовувати IDE Arduino для запису та компіляції коду для Arduino. Переконайтеся, що ви придбали останню версію випуску , а не бета-версії або нічні збірки.

Примітка:

Залежно від операційної системи та версії плати Arduino, для встановлення зв'язку з Arduino може знадобитися встановити додаткові драйвери. Щоб дізнатися, чи потрібно виконати цей додатковий крок, перевірте Початок роботи з Arduino на сторінці, виберіть операційну систему, яку ви використовуєте, і виконайте наведені покрокові інструкції.

Основний дизайн вашого додатка

Ваш готовий проект буде складатися з програми iOS, яка надсилатиме повідомлення через Bluetooth на модуль BLE Shield. Модуль потім надішле повідомлення на плату Arduino, щоб повідомити серво, яку позицію він повинен повернути.

Ось приклад використання вашого проекту:

  1. Користувач програми iOS переміщує повзунок у середнє положення.
  2. Додаток надсилає номер 90, який у цьому випадку становить 90 градусів, до модуля BLE Shield, використовуючи активне з'єднання Bluetooth.
  3. Щит BLE передає номер 90 дошці Arduino.
  4. Дошка Arduino повертає сервопривід до положення 90 градусів.

Здається досить просто! Для початку, ви будете працювати з Arduino IDE і програмувати логіку плати.

Примітка: В цей час не слід збирати щит BLE на плату Arduino! Ви можете зіткнутися з труднощами програмування Arduino, якщо встановлено BLE Shield. Поки ви знімете його перед програмуванням Arduino, все має йти гладко. Коли ви збираєте або розбираєте модуль щита BLE або будь-який з проводів, хороша ідея видалити живлення з плати, від'єднавши спочатку кабель USB.

Програмування Arduino

Запустіть IDE Arduino; ви побачите, що редактор відображається з порожнім документом або "ескізом", як показано нижче:

Перш ніж робити щось інше, натисніть Файл Зберегти у верхньому меню та збережіть поточний файл у зручному місці, як Arduino_Servo_Controller . Це створює папку в місці збереження, яка містить файл з розширенням .ino.

Примітка: Не перейменовуйте папки Arduino, якщо ви також не перейменуєте файл .ino, що міститься в ньому. Arduino IDE вимагає, щоб файл .ino знаходився в папці з тим же ім'ям.

Перш ніж почати писати код, потрібно налаштувати IDE для спілкування з платою Arduino Uno.

Виберіть Tools (Інструменти) Board (Рада) Arduino Uno, щоб дозволити IDE дізнатися, з якою дошкою ви будете мати справу. Потім підключіть Uno до комп'ютера за допомогою кабелю USB, як показано нижче:

Потім підключіть Uno до комп'ютера за допомогою кабелю USB, як показано нижче:

Це дозволяє Ardeino IDE розпізнати послідовний порт, до якого підключено Uno.

Примітка: Кабель USB забезпечує не тільки зв'язок з Arduino, а й живлення. Якщо ви працюєте над майбутнім проектом, який потребує більше 500 мА, вам доведеться використовувати інший джерело живлення, крім USB.

Після цього скористайтеся пунктом меню Інструменти Серійний порт ... і виберіть USB-порт, до якого підключено Arduino. Взагалі схожий на /dev/tty.usbserial… або /dev/tty.usbmodem… .

На цьому етапі Ardeino IDE готовий до програмування.

Додайте код нижче до вашого проекту за допомогою IDE Arduino:

// Arduino Bluetooth LE Servo Контролюється iOS void setup () // Викликається тільки один раз на стартап {} void loop () // Безперервний цикл {}

Програми Arduino зазвичай розділені на дві основні функції: setup () і loop ().

Функція setup () робить саме те, що вона каже: вона викликається тільки один раз при запуску і є прекрасним місцем для налаштування апаратного та програмного забезпечення. Функція loop () викликається після того, як встановлено (). Після введення циклу () ви ніколи не виходите, але постійно виконуйте код в лінійному порядку, поки плата не буде скинута або вимкнена.

Натисніть кнопку Перевірити (значок галочки), щоб переконатися, що всі дані правильно компілюються. Якщо так, ви побачите повідомлення про підтвердження, подібне до нижче:

Якщо так, ви побачите повідомлення про підтвердження, подібне до нижче:

Тепер, коли у вас є базові рамки програми Arduino, настав час додати певну логіку для керування платою.

Світлодіод

Головною метою вашої програми Arduino в цьому проекті є отримання однобайтових повідомлень, що надходять з BLE Shield, і використання вмісту повідомлення для встановлення позиції сервосистеми. Але перш ніж ви занадто залучені до коду сервоприводу, було б непогано перевірити свої поточні з'єднання.

Найпростіший спосіб зробити це - написати невелику програму, яка керує вбудованим світлодіодом на Uno. Подумайте про неї як про «еквівалент світу привіт» на Arduino. :]

Замініть код у вашому проекті таким чином:

// Arduino Bluetooth LE Серво керований iOS int LED = 13; // Більшість плат Arduino мають вбудований світлодіод на виводі 13 void setup () // Викликається тільки один раз при запуску {pinMode (LED, OUTPUT); // Встановлюємо штифт у вигляді вихідного цифрового напису (LED, HIGH); // Вмикаємо світлодіод (тобто встановлюємо високе напруга)} void loop () // Безперервний цикл {затримка (500); digitalWrite (LED, LOW); затримка (500); digitalWrite (LED, HIGH); }

Оскільки більшість плат Arduino має вбудований світлодіод на виводі 13, ви можете використовувати підсвічування світлодіода як підтвердження того, що ваша програма Arduino виконується належним чином. Ви встановите змінну світлодіода на 13, щоб посилатися на цей штифт.

В setup () ви встановлюєте початковий стан плати. pinMode (LED, OUTPUT) встановлює pin 13 як цифровий вихід, що означає, що напруга на цьому виводі може бути встановлено на HIGH (+ 5v) або LOW (0v). digitalWrite () встановлює напругу pin; у наведеному вище коді ви встановите значення HIGH, щоб підсвічувати світлодіод.

Після завершення налаштування () loop () буде працювати безперервно. delay () зачекає певну кількість мілісекунд, які ви будете використовувати для мигання світлодіода. Після затримки в 500 мс вимкніть світлодіод, записавши значення LOW; після ще однієї затримки, увімкніть світлодіод.

Натисніть кнопку " Перевірити" ще раз, щоб скомпілювати програму та перевірити наявність синтаксичних помилок. Якщо ваша програма компілюється без проблем, на панелі стану програми Arduino IDE відобразиться повідомлення Done Compiling . Якщо ні, ознайомтеся з повідомленням про рядку стану, щоб вказати, де ви зіпсувалися, виправили помилку та клацніть кнопку " Перевірити", щоб переконатися, що ви добре розірвали помилку.

Тепер настав час запрограмувати код на плату Arduino і протестувати світлодіод.

Переконайтеся, що ваш Arduino підключений до комп'ютера за допомогою USB-кабелю, а потім натисніть кнопку Завантажити (таку кнопку зі стрілкою праворуч), щоб запрограмувати плату Arduino. Після завершення процесу завантаження повідомлення про завершення завантаження повинно з'явитися в рядку стану, як показано нижче:

Після завершення процесу завантаження повідомлення про завершення завантаження повинно з'явитися в рядку стану, як показано нижче:

Перевірте плату Arduino, і ви побачите, що індикатор почне блимати.

Світлодіод 13 увімкнено. Х'юстон, у нас є зв'язок.

Якщо сталася помилка, спробуйте діагностувати проблему таким чином:

  • Переконайтеся, що Arduino Uno вибрано в меню Інструменти / Рада .
  • Переконайтеся, що /dev/tty.usbserial… або /dev/tty.usbmodem… (або подібне) вибрано в меню Інструменти / Послідовний порт .
  • Переконайтеся, що встановлено всі необхідні драйвери для плати Arduino, як було зазначено раніше.
  • Переконайтеся, що екран BLE не зібраний на платі Arduino під час програмування плати.

Якщо світлодіод працює, ви можете бути впевнені, що Arduino IDE налаштовано належним чином. Тепер ви можете додати деякий код для керування сервоприводом.

Взаємодія із сервоконтролем

Сервопривод є двигуном зі змінним положенням обертання. Ви керуєте сервоприводом, посилаючи різні частоти електричних імпульсів до його контрольної лінії.

Замініть миготливий світлодіодний код у поточному ескізі таким чином:

// Arduino Bluetooth LE Серво керований iOS #include <Servo.h> int LED = 13; // Більшість плат Arduino мають вбудований світлодіод на виводі 13 Servo myservo; // Створення сервооб'єкту для керування сервоприводом

Наведений вище код імпортує бібліотеку сервосистем і створює змінну як екземпляр класу Servo. Включаючи бібліотеку сервоприводу, ви можете створювати сервооб'єкти, які можна легко налаштувати для керування сервоприводом.

Далі додайте наступну функцію:

void setup () // Викликається тільки один раз при запуску {pinMode (LED, OUTPUT); // Встановлюємо штифт у вигляді вихідного цифрового напису (LED, HIGH); // Вмикаємо світлодіод (тобто встановлюємо високе напруга) myservo.attach (9); // Приєднайте об'єкт сервоприводу до pin 9 myservo.write (0); // Ініціалізація позиції сервоприводу до 0}

myServo.attach (9) вказує, що вихідний висновок 9 плати Arduino Uno буде підключений до сервоприводу, тоді як запис (0) встановить положення сервоприводу до нуля градусів.

Це піклується про ініціалізацію сервоприводу, але вам все одно потрібен код для обробки зв'язку BLE. Перед тим, як вирішити цю проблему, вам слід прочитати наступний розділ про основи послідовного зв'язку.

Послідовна комунікація

Послідовне спілкування подібне до використання телефону. Динамік, що знаходиться біля вуха, є приймачем (RX), а мікрофон - передавачем (TX). Ваш передавач підключений до приймача особи, з якою ви розмовляєте, і ваш приймач підключений до передавача. Це дозволяє здійснювати двосторонню комунікацію, коли будь-яка людина може надсилати або отримувати інформацію.

Примітка: Послідовний порт Arduino здійснює зв'язок за допомогою стандартних рівнів напруги TTL (0-5v). Цей тип зв'язку вимагає трьох з'єднань: передача (TX), прийом (RX), а також загальна основа. Щит BLE був розроблений для зв'язку з послідовним портом Arduino; отже, його TX лінія буде підключатися до RX порту Arduino і, навпаки, його лінія RX буде підключатися до порту Arduino в TX.

За замовчуванням Arduino використовує висновки 0 і 1 для послідовного зв'язку. Для зв'язку з BLE Shield, це потрібно змінити на контакт 4 (RX) і контакт 5 (TX). Це захищає від будь-яких зіткнень даних, коли комп'ютер завантажується до Arduino.

Додайте до верхньої частини файлу таку інформацію:

#include <SoftwareSerial.h>

Це дозволить вам використовувати послідовну бібліотеку зв'язку.

Додайте наступну змінну під декларації змінної світлодіода та myservo:

SoftwareSerial BLE_Shield (4,5);

Це створить екземпляр SoftwareSerial з ім'ям BLE_Shield. Два параметри - це номери, так що щит BLE буде використовувати RX і TX рядки 4 і 5 відповідно.

Додайте наступний рядок до кінця функції setup ():

BLE_Shield.begin (9600); // Налаштування послідовного порту на 9600 біт / с. Це типова швидкість передачі даних BLE Shield.

Це встановлює послідовний зв'язок або швидкість передачі даних, яка є швидкістю передачі бітів даних. Для спілкування двох пристроїв вони повинні використовувати однакову швидкість передачі даних. Оскільки швидкість обміну даними BLE Shield за замовчуванням становить 9600, ви встановлюєте відповідний послідовний порт Arduino.

Нарешті, додайте наступну функцію до нижньої частини ескізу:

void loop () // Continuous loop {// Дивіться, чи доступні дані про нове положення, якщо (BLE_Shield.available ()) {myservo.write (BLE_Shield.read ()); // Запис позиції сервоприводу}}

Зрештою, пристрій iOS подаватиме дані до щита BLE. loop () має одне завдання зараз: шукайте нові байти з RX лінії щита BLE і передайте їх серво.

По-перше, він викликає BLE_Shield.available (), щоб побачити, чи є якісь байти. Якщо так, то прочитайте доступні байти і запишіть їх на myServo. Якщо немає нових даних від BLE Shield, то вона обертається навколо і знову перевіряє… і знову… і знову.

Збережіть проект Arduino, а потім натисніть кнопку Завантажити, щоб завантажити нову програму на плату Arduino. Повідомлення " Завантаження завершено" повинно з'явитися внизу IDE. Ви побачите, що світлодіод загоряється і залишається світитися, дозволяючи вам знати, що main () закінчено.

На цьому етапі ваш код Arduino є повним і готовим до спілкування з вашим iOS-додатком через щит BLE.

Наступним логічним кроком є ​​ознайомлення з функціями BLE Shield; Ви розкриваєте це в наступному розділі.

Внутрішня робота щита BLE

BLE Shield V2.0.0 від Seeed Studio базується на модулі BLE112 компанії Bluegiga, який підтримує Bluetooth Low Energy 4.0. BLE112, з або без компонента Shield, є прекрасним модулем для взаємодії з iOS пристроями. Він може бути запрограмований за допомогою спеціальних сценаріїв для запуску без додаткового процесора.

У цьому проекті ви зосередьтеся на використанні BLE Shield, як виходить з коробки. Він запрограмований BLE Service і деякі характеристики, спрямовані на базові комунікації.

Який тип зв'язку, на вашу думку, буде використовуватися між платою Arduino і BLE Shield? Підказка: Відповідь згадувалася раніше в розділі " Послідовний зв'язок ".

[spoiler title = “Рішення всередині”] Відповідь: стандартна комунікація TTL. Цей тип зв'язку використовує лінію TX і лінію RX. Це схоже на RS232, але рівні напруги значно нижчі. Як правило, напруга TTL буде від 0 до 5 вольт.

Нижче наведено попередньо запрограмовані служби та характеристики, які поставляються з цим конкретним пристроєм BLE Сховище прошивки BLE-Shield на GitHub :

  • Сервіс
    Ім'я: BLE Shield Service v2.0.0
    UUID: B8E06067-62AD-41BA-9231-206AE80AB550
  • Характеристика
    Назва: Адреса пристрою Bluetooth
    UUID: 65C228DA-BAD1-4F41-B55F-3D177F4E2196
  • Характеристика
    Назва: RX
    UUID: F897177B-AEE8-4767-8ECC-CC694FD5FCEE
    Опис: Характеристика RX використовується для прийому даних на стороні iOS. Дані, записані на TX-шпильці BLE-Shield, будуть повідомлені про характеристику RX на пристрої iOS.
  • Характеристика
    Назва: TX
    UUID: BF45E40A-DE2A-4BC8-BBA0-E5D6065F1B4B
    Опис: iPhone відправляє дані в характеристику TX BLE-Shield, яка потім надходить на контакт RX BLE-Shield. Максимальний обсяг даних, який може бути відправлений одразу, становить 20 байтів через обмеження BLE112.
  • Характеристика
    Назва: Baudrate
    UUID: 2FBC0F31-726A-4014-B9FE-C8BE0652E982
    Підтримувані значення швидкості передачі даних:
    0 × 00 = 9600 Бод (за замовчуванням)
    0 × 01 = 14400 Бод
    0 × 02 = 19200 Бод
    0 × 03 = 28800 Бод
    0 × 04 = 38400 Бод

Оскільки ваш проект базується на односторонньому зв'язку від вашого пристрою iOS до плати Arduino, ви будете використовувати тільки характеристику TX.

Підключення устаткування

Тепер прийшов час працювати над апаратними з'єднаннями проекту. Переконайтеся, що кабель USB від'єднаний від плати Arduino перед роботою з апаратним забезпеченням.

Примітка: Arduino зберігає останній завантажений ескіз у внутрішню пам'ять. Під час наступного підключення USB-кабелю ескіз, який ви написали, запускатиметься автоматично, не натискаючи кнопку Завантажити у IDU Arduino!

Щоб полегшити ваше життя, перед тим, як розпочати:

  • Arduino Uno Правління
  • BLE-щит
  • Серво
  • Три дротики

Перше місце для початку - налаштування стрибунів RX / TX. Положення перемикача за замовчуванням BLE Shield підключає RX до 0 і TX до контакту 1. Щоб відповідати коду Arduino вище, потрібно встановити RX на 4 і TX на pin 5.

Перемістіть перемички на дошці до відповідних контактів, як показано на малюнку нижче:

Перемістіть BLE Shield Jumpers RX і TX на вказані позиції.

Зберіть щит BLE на панель Arduino, як показано нижче:

Прикріплення BLE щита до плати Arduino

Переконайтеся в тому, що штифти збігаються, перш ніж застосовувати будь-який тиск, щоб укріпити BLE Shield. Вставлення неспівпадаючих штифтів може призвести до пошкодження обладнання.

Після завершення весь збірка має виглядати так:

Після завершення весь збірка має виглядати так:

BLE Shield Assembled!

Серводвигун потребує трьох підключень: + 5v (червоний), Ground (чорний) і Signal Position (білий). З'єднання + 5v і Ground забезпечують сервосиловою потужністю, необхідною для зміни та підтримання її обертального положення. Підключення сигналу позиції використовується для встановлення положення сервоприводу. Щоб уникнути можливого пошкодження сервоприводу, переконайтеся, що ви не поміняли будь-які з'єднання.

Примітка: Положення сервосистеми базується на частоті електричних імпульсів, що надсилаються на дріт сигналу позиції сервоприводу. Якщо ви повинні були підключити цей провід до осцилографа ви побачите квадратну хвильову картину з певною частотою і робочим циклом. При зміні частоти серводвигун повертає свій вал відповідно до частоти прийнятого імпульсу.

Прикріпіть три дроти до серводвигуна, як показано на малюнку нижче:

Прикріпіть три дроти до серводвигуна, як показано на малюнку нижче:

Це гарна ідея використовувати ті ж провідники кольору, як сервоприводи, так що ви не змішуєтеся, до якого дроту йде куди.

Підключіть червоний провід до 5-вольтового штифта BLE Shield. Підключіть чорний провід до контакту GND, а білий - до штифта 9, як показано нижче:

Підключіть чорний провід до контакту GND, а білий - до штифта 9, як показано нижче:

Проводи, підключені до BLE Shield

Ваше обладнання підключено і готове до роботи. Все, що залишилося, це завершити написання вашого додатка iOS, щоб зв'язати все це разом!

Оновлення App для iOS

Додаток використовує повзунок для бездротового керування положенням сервоприводу. Коли ви переміщуєте повзунок вгору або вниз, дані про позиції надсилатимуться до щита BLE Arduino. Піктограма Connect / Disconnect (Підключити / Від'єднати) внизу буде вказувати на стан з'єднання Bluetooth.

Відкрийте вікно завантажений стартовий проект в Xcode, підключіть ваш iPhone і створити і запустити вашу програму. Програма відкриється, і ви побачите зображення, подібне до наведеного нижче:

Arduino Серво додаток

Додаток не зовсім готовий до спілкування з Arduino, але саме тут ви входите.

Натисніть кнопку Стоп в Xcode.

Огляд початкового проекту

Коли програма запускається, RWTViewController створює примірник BTDiscovery, щоб почати пошук пристроїв BLE в діапазоні з конкретним UUID служби. BTDiscovery керує виявленням та підключенням пристроїв Bluetooth. Він також повідомляє додаток, коли пристрій Bluetooth підключається або відключається.

RWTViewController має вертикальне повзунок, який передає значення положення повзунка в BTService і оновлює зображення Bluetooth зі статусом з'єднання. BTService обробляє зв'язок з модулем щита BLE.

Перш ніж перейти, відкрийте BTService.h - у цьому файлі є кілька важливих речей, які допомагають програмі обмінюватися даними з BLE Shield, тому варто переглянути хвилину.

До верху файлу ви побачите пару UUID #defines.

RWT_BLE_SERVICE_UUID являє собою 128-бітовий UUID служби BLE Shield Arduino. Ви помітите, що цей UUID збігається з BLE Shield Service v2.0.0 UUID, перерахованим раніше в підручнику. Аналогічно, RWT_POSITION_CHAR_UUID збігається з UUID TX в BLE Shield. Обидва шістнадцяткові значення повинні збігатися, щоб програма могла виявляти і спілкуватися з щитом BLE.

Нарешті, RWT_BLE_SERVICE_CHANGED_STATUS_NOTIFICATION сповіщає іншу частину програми, коли периферійний пристрій підключається або відключається від програми. Контролер головного вікна вашої програми використовує це значення для перемикання зображення з'єднання на головному екрані.

Тут не потрібно додавати код, щоб можна було рухатися далі.

Відкрити RWTViewController.m і замінити реалізацію sendPosition: з наступним:

- (void) sendPosition: (uint8_t) position {// Дійсний діапазон позицій: від 0 до 180 статичних uint8_t lastPosition = 255; if (! self.allowTX) {// 1 повернення; } // Перевірити значення if (position == lastPosition) {// 2 return; } else if ((позиція <0) || (позиція> 180)) {// 3 повернення; } // Відправити позицію BLE Shield (якщо служба існує і підключена), якщо ([BTDiscovery sharedInstance] .bleService) {// 4 [[BTDiscovery sharedInstance] .bleService writePosition: position]; lastPosition = положення; // Запуск таймера затримки self.allowTX = NO; if (! self.timerTXDelay) {// 5 self.timerTXDelay = [NSTimer scheduleTimerWithTimeInterval: 0.1 target: self selector: @selector (timerTXDelayElapsed) userInfo: nil повторює: NO]; }}}

Цей метод викликається з positionSliderChanged: кожен раз, коли користувач переміщує повзунок. Ось що відбувається в цьому методі:

  1. Тільки продовжувати, якщо за останні 0,1 секунди не відбулося інше надсилання, щоб уникнути затоплення з'єднання BLE із занадто великою кількістю даних.
  2. Запобігайте тому, щоб одне і те ж значення писалося кілька разів. Щоб мінімізувати трафік і енергоспоживання, завжди бажаєте скористатися будь-якою можливістю, щоб запобігти надсилання дублікатів даних.
  3. Переконайтеся, що надіслані значення знаходяться у правильному діапазоні. Об'єкт сервоприводу Arduino приймає значення від 0 до 180. Якщо ви подивитеся на файл розкадровки, ви побачите, що мінімальні та максимальні значення слайдера встановлені в одному діапазоні.
  4. Переконайтеся, що BTService існує і готовий до дії, а потім напишіть значення повзунка в характеристику позиції.
  5. Таймер запобігає заповненню BLE Shield даними. По-перше, ви встановлюєте self.allowTX на NO, надсилаючи дані на щит, а потім повертайте його назад до YES після затримки.

Примітка: Яке значення має використання таймера тут? Ну, пристрої BLE - це пристрої з низьким енергоспоживанням, що перетворюється на «низьку потужність». Також нагадаємо, що швидкість передачі даних між Arduino і BLE Shield встановлена ​​на рівні 9600 біт / с. Якщо ви створюєте додаток з великими обсягами даних, збільшуйте швидкість передачі даних, якщо ви можете зберегти енергію.

Тепер ви повинні реалізувати частину BTService для передачі даних. Відкрити BTService.m і замінити реалізацію writePosition: з наступним:

- (void) writePosition: (UInt8) position {// Подивіться, чи було знайдено характеристику перед тим, як писати до неї, якщо (! self.positionCharacteristic) {return; } NSData * data = nil; data = [NSData dataWithBytes: & довжина позиції: sizeof (позиція)]; [self.peripheral writeValue: дані дляCharacteristic: self.positionCharacteristic type: CBCharacteristicWriteWithResponse]; }

Для початку, метод повернеться негайно, якщо відповідна характеристика, що відповідає UUID в BTService.h, ще не була виявлена. Якщо він є, вам потрібно обгорнути дані - просто значення позиції - в об'єкт NSData. Потім ви пишете значення для периферійного пристрою Core Bluetooth.

Оскільки UUID positionCharacteristic відповідає характеристиці TX BLE Shield, щит BLE передає дані в RX Arduino. Код Arduino, написаний раніше, використовує цей фрагмент даних для встановлення позиції сервоприводу.

Створіть свою програму, щоб переконатися, що все компілюється. Додаток тепер повний і готовий до тестування!

Покласти все разом

Щит Arduino, BLE і сервопривід вже повинні бути повністю зібрані, як показано на малюнку нижче:

Щит Arduino, BLE і сервопривід вже повинні бути повністю зібрані, як показано на малюнку нижче:

Завершено проект сервоприводу Arduino!

Підключіть шнур USB до Arduino для живлення. Далі переконайтеся, що Bluetooth у пристрої iPhone увімкнено, а iPhone підключено до комп'ютера.

Запустіть програму з Xcode; протягом декількох секунд ви побачите зміну значка Bluetooth з програми Disconnected ( Підключено) до Connected (Підключено), і світлодіодний індикатор BLE Shield повинен світитися. Тепер перемістіть повзунок вгору і вниз. Ви повинні побачити, що сервопривод обертається на основі руху повзунка.

(Ось пряме посилання на Відеофайл QuickTime якщо ви не можете побачити відео із наведеною вище дією.)

Куди піти далі?

Ви можете завантажити остаточний проект тут ; він містить як код iOS, так і код Arduino.

Сподіваємося, цей проект спонукає вас мріяти про інші проекти, які використовують пристрої Bluetooth LE та iOS. Наприклад, ви можете використовувати серводвигун цього підручника, щоб автоматично розблокувати передні двері вашого будинку. Або ви можете створити пульт дистанційного керування iOS для водорозпилювачів і ніколи не забувайте знову поливати газон!

Цей проект дав вам малий смак того, що потрібно для створення власного пристрою BLE. Якщо ви зацікавлені в тому, щоб дізнатися більше про цю тему, ви можете насолоджуватися моєю книгою Integration iOS Bluetooth LE з мікроконтролерами PIC18 . Це дає поглиблений погляд на створення BLE пристрою на рівні мікроконтролера.

Крім того, книга надає практичні уроки, як програмувати та конфігурувати власні послуги та характеристики для управління машиною. Основний проект книги базується на друкованій платі iO Xtreme. Книга та плата iO Xtreme доступна на моєму сайті за адресою www.back-40.com .

Сподіваюся, вам сподобався посібник. Якщо у Вас виникли питання або коментарі, будь ласка, приєднуйтесь до обговорення на форумах!

Який тип зв'язку, на вашу думку, буде використовуватися між платою Arduino і BLE Shield?
Куди піти далі?

Новости