Интеграция Bluetooth с Arduino и Android: создание беспроводных проектов
Компоненты и материалы
| Arduino UNO | ×1 |
| Модуль Bluetooth HC-06 | ×1 |
| Светодиод (любой) | ×1 |
Приложения и онлайн-сервисы
| Arduino IDE |
| MIT App Inventor 2 |
О проекте
Bluetooth (BT) — отличная беспроводная локальная (и персональная) сеть. В повседневной жизни мы постоянно сталкиваемся с телефонами, аудиосистемами, камерами и другими устройствами, объединёнными с помощью известного «синего огонька».
В мире Интернета вещей и автоматизации удалённое управление через мобильные телефоны с использованием BT-технологий очень распространено. Это обусловлено двумя важными компонентами:
- Простые платформы разработки приложений для ANDROID (например, MIT App Inventor 2)
- Доступные BT-модули (например, HC-06)
В этом руководстве мы рассмотрим управление выходами Arduino через мобильное устройство для управления роботом, включения ламп в доме и т.д.
Шаг 1: Модуль Bluetooth и Arduino
На рынке распространены модули BT 3.0 типа «Master-Slave» (HC-05) и «Slave» (HC-06). Недавно появились HC-08 и HC-10 на базе BT 4.0 (BLE — Bluetooth Low Energy). Модули BLE — единственные, которые можно подключить к iPhone, так как Apple не поддерживает BT 3.0.
Для проектов здесь используется HC-06 — популярный и дешёвый модуль (прощай, iPhone! Здесь королём является Android!). Модуль питается от 5 В, что позволяет легко подключить его к Arduino UNO. Выводы Tx и Rx можно соединить напрямую с UNO без делителей напряжения, как в случае с ESP8266. Обычно HC-06 подключают к выводам 0 и 1 Arduino («Serial 0»):
- HC06-Tx → Arduino pin 0 (Rx)
- HC06-Rx → Arduino pin 1 (Tx)
При использовании «Serial 0» (единственного аппаратного последовательного порта UNO) важно помнить: HC-06 не должен быть физически подключён к выводам 0 и 1 во время загрузки программы, так как USB-порт также использует этот последовательный порт. Простое решение (если проект не использует много GPIO UNO) — использовать «программный последовательный порт» через библиотеку SoftwareSerial. Здесь мы используем выводы 10 и 11 UNO (Tx, Rx соответственно).
Шаг 2: Тестирование и настройка HC-06
Напишем простой код для тестирования, программирования и инициализации HC-06. Сначала подключим библиотеку SoftwareSerial, задав переменную «BT» для нового последовательного порта.
#include <SoftwareSerial.h>
SoftwareSerial BT (10, 11); // RX, TX
String command = ""; // Хранит ответ Bluetooth-устройства
void setup () {
Serial.begin (9600);
Serial.println ("Type AT commands");
BT.begin (9600); // Обычная скорость HC-06 по умолчанию
}
Основной цикл просто ждёт данные от BT. При их поступлении данные выводятся в Serial Monitor. Также AT-команды можно отправлять из Serial Monitor в модуль HC-06.
void loop () {
if (BT.available ()) { // принять данные, если доступны
while (BT.available ()) { // «продолжать приём»
delay (10); // задержка для стабильности
char c = BT.read (); // чтение последовательного порта
command += c; // формирование строки
}
Serial.println (command);
command = ""; // без повторов
}
if (Serial.available ()) {
delay (10);
BT.write (Serial.read ());
}
}
После загрузки программы, используя Serial Monitor, выполним базовые тесты:
- Отправить «AT» — модуль должен ответить «OK».
- Запросить версию прошивки: «AT+VERSION» — модуль ответит, например, «linvorV1.8».
- С HC-06 можно задать имя модуля: «AT+NAME=MJRoBot_BT_HC06». Но, в отличие от других модулей, нельзя узнать установленное имя. При отправке этой команды HC-06 просто отвечает: «OKsetname».
По умолчанию у HC-06 пароль (PIN): 1234. Можно установить новый командой AT:
- AT+PINxxxx, где 'xxxx' — 4 цифры.
F08H931IL8LGG7U.ino
Шаг 3: Android-устройство
Хорошо! Модуль подключён к UNO и работает. Пришло время для Android-устройства.
В Google Play много приложений. Я использую своё приложение, разработанное с помощью MIT App Inventor 2 и доступное бесплатно: MJRoBot BT Digital Analog Voice Control.
Приложение отправляет цифровые команды (кнопками или голосом) и аналоговые команды для управления PWM-устройствами вроде сервоприводов (данные в диапазоне 0–255).
- Скачайте приложение
- В настройках Android найдите BT-модуль и соединитесь (введите PIN 1234 или ваш). Это делается один раз, устройство сохранит данные.
- После сопряжения устройства и HC-06 запустите приложение. При следующем запуске соединение установится автоматически.
- Выберите имя модуля (в моём случае то, что заканчивается на HC-06).
Приложение покажет «CONNECTED», сообщая, что оно «спарено» с HC-06. Теперь протестируйте кнопки и посмотрите в Serial Monitor на ПК, какие данные отправляет приложение. Например, последовательное нажатие кнопок «ON» и «OFF» для 4 устройств даст:
dev1on dev1off dev2on dev2off dev3on dev3off dev4on dev4off
Теперь, когда Android-приложение общается с BT-модулем, создадим что-то полезное!
Шаг 4: Управление выходами Arduino
Соберём схему, как показано выше. Идея — использовать приложение для включения/выключения светодиодов и управления их яркостью.
Подключения:
- Устройство 1: «dev1on / dev1off» → Красный светодиод → Pin 3 UNO
- Устройство 2: «dev2on / dev2off» → Жёлтый светодиод → Pin 5 UNO
- Устройство 3: «dev3on / dev3off» → Зелёный светодиод → Pin 6 UNO
- Устройство 4: «dev4on / dev4off» → Синий светодиод → Pin 9 UNO
То есть, при нажатии кнопки «ON» для «Устройства 1» отправляется сообщение «dev1on», и красный светодиод загорается.
Обратите внимание: 4 вывода поддерживают PWM (не все цифровые выводы UNO могут это. Ищите отмеченные «~». Это важно для использования «слайдеров» в приложении, отправляющих числовые данные для управления яркостью через PWM):
- Dev A0: «r / 0-255» → Красный светодиод → Pin 3 UNO
- Dev A1: «y / 0-255» → Жёлтый светодиод → Pin 5 UNO
- Dev A2: «g / 0-255» → Зелёный светодиод → Pin 6 UNO
- Dev A3: «b / 0-255» → Синий светодиод → Pin 9 UNO
При использовании слайдеров перед значением PWM (0–255) отправляется символ, информирующий Arduino о команде слайдера.
Ниже полный код Arduino:
FA44NBUIL8LGGAY.ino
Шаг 5: Управление IoT-устройствами голосовыми командами
Для управления IoT-устройствами голос становится трендом. Реализовать это с Arduino / HC-06 / Android очень просто. Android-устройства уже имеют эту функцию «из коробки». В моём приложении добавлена кнопка, заставляющая Android «слушать» команду и отправлять её в текстовом формате на Arduino. Код отвечает за «чтение» приходящей строки.
Я добавил примеры в код. Когда Arduino получает команду «Connect TV», например, загорается зелёный светодиод (устройство 3) (вместо светодиода может быть реле, включающее телевизор).
Вы должны заменить строки в части Loop кода на команды на вашем языке. Я использовал португальский (мой родной), так было легче управлять в Google из-за разного акцента с моим английским. Используйте короткие фразы или отдельные слова. Важно точное совпадение между тем, что вы написали, и тем, что возвращает приложение Google для распознавания голоса.
Здесь можно найти файл .aia для прямого запуска в MIT App Inventor 2. В видео ниже небольшая демонстрация голосового управления:
Шаг 6: Заключение
Надеюсь, это руководство покажет огромный потенциал управления «вещами» с помощью BT / Android / Arduino. Как всегда, желаю, чтобы этот проект помог другим найти свой путь в увлекательном мире электроники, робототехники и IoT! Больше проектов на моём блоге: MJRoBot.org
Привет с юга мира!
Увидимся в следующем руководстве!
Спасибо
Marcelo
Код
Фрагмент кода #1
#include <SoftwareSerial.h>
SoftwareSerial BT (10, 11); // RX, TX
String command = ""; // Stores response of bluetooth device
void setup () {
Serial.begin (9600);
Serial.println ("Type AT commands");
BT.begin (9600); // HC-06 Usually default baud-rate
}
Фрагмент кода #2
void loop () {
if (BT.available ()) {
while (BT.available ()) {
delay (10);
char c = BT.read ();
command += c;
}
Serial.println (command);
command = "";
}
if (Serial.available ()) {
delay (10);
BT.write (Serial.read ());
}
}
Фрагмент кода #3
dev1on dev1off dev2on dev2off dev3on dev3off dev4on dev4off
Производственный процесс
- Создание Bluetooth-робота на Raspberry Pi с аудио-обратной связью
- Легкая прошивка микроконтроллеров Atmel AT89 с помощью Arduino Uno — пошаговое руководство
- Универсальный Android-пульт на Arduino, 1Sheeld и ИК-управлении
- Android-управляемая робот-платформа на Raspberry Pi и Motor Shield
- Управление светодиодом по Bluetooth с Arduino: простой DIY-гид
- Голосовое управление бытовыми приборами: Bluetooth-управление через Google Assistant
- Arduino UNO + WiFi Shield: реальный график температуры в вебе через Serial
- Система управления светом на Intel Curie (Arduino 101) с детекцией движений
- Управление Arduino с iOS/Android по Wi-Fi/Ethernet через Evothings Studio
- Удалённое управление лампой через Arduino Uno, реле и Android-приложение Blynk