В настоящее время технология Bluetooth неотъемлемой частью большинства цифровых устройств в современном мире: смартфонов, ноутбуков, часов, фитнес-браслетов и т.д. Она стала доминирующей технологией для радиосвязи на короткие расстояния практически сразу после своего изобретения. Хотя в большинстве случаев технология Bluetooth используется как замена кабельного соединения между устройствами, она на самом деле является универсальным мостом для существующих сетей передачи данных и механизмом соединения равноправных/одноранговых (ad hoc) устройств в различных конфигурациях.
В данной статье мы рассмотрим подключение Bluetooth модуля HC-05 к популярному сейчас Wi-Fi модулю ESP8266 и будем управлять его встроенным светодиодом удаленно, с помощью передачи команд по протоколу Bluetooth. Светодиод в нашем проекте можно заменить, к примеру, на реле, с помощью которого можно управлять различными устройствами в системах умного дома.
Ранее на нашем сайте мы рассматривали использование Bluetooth модулей HC-05 и HC06 в следующих проектах:
- подключение Bluetooth-модуля HC-05 к микроконтроллеру AVR;
- голосовое управление светодиодом с помощью Arduino и Bluetooth;
- беспроводное программирование платы Arduino Uno по Bluetooth;
- управление контактами ввода/вывода Raspberry Pi через Bluetooth.
Необходимые компоненты
Аппаратное обеспечение
- NodeMCU ESP8266 (купить на AliExpress).
- Bluetooth модуль HC-05 (купить на AliExpress).
Реклама: ООО "АЛИБАБА.КОМ (РУ)" ИНН: 7703380158
Программное обеспечение
- Arduino IDE.
- Serial Bluetooth Terminal (приложение Android) – для мониторинга данных Bluetooth на смартфоне.
Схема проекта
Схема подключения Bluetooth модуля HC-05 к NodeMCU ESP8266 представлена на следующем рисунке.
Для использования технологии Bluetooth модулю ESP8266 необходим внешний Bluetooth модуль поскольку он не имеет встроенного Bluetooth модуля как, к примеру, ESP32.
Bluetooth модуль HC-05
Вешний вид обеих сторон Bluetooth модуля HC-05 показан на следующем рисунке.
HC-05 является Bluetooth модулем с последовательной связью. Его можно настроить с помощью AT. Он может работать в различных конфигурациях: Master (ведущий), Slave (ведомый), Loop back). В нашем проекте он будет использоваться в качестве ведомого устройства.
Технические характеристики Bluetooth модуля HC-05:
- типовая чувствительность: -80dBm;
- скорость передачи данных: 9600 бод, 8 бит данных, 1 стоповый бит, нет бита четности;
- pin код для автоматического соединения: “1234” или “0000”;
- 6 контактов;
- контакты Vcc и Gnd используются для подачи питания на модуль;
- контакты Tx и Rx используются для взаимодействия с микроконтроллером;
- контакт Enable для активации модуля, когда на нем low – модуль деактивирован (отключен);
- контакт State работает как индикатор состояния модуля. Когда модуль не соединен с другим Bluetooth устройством, светодиод мигает постоянно. Когда он соединен с другим Bluetooth модулем – светодиод мигает с постоянной задержкой 2 секунды.
Использование Serial Bluetooth Terminal
Данное Android приложение является очень простым в использовании и требует несколько простых шагов для своей настройки.
По Bluetooth соедините ваш смартфон с модулем HC-05. По умолчанию код для подключения ‘0000’ или ‘1234’ (в большинстве случаев ‘1234’).
Скачайте, установите и запустите на выполнение приложение Serial Bluetooth Terminal. Затем откройте вкладку устройства и найдите в нем модуль HC-05. Если модуль HC-05 не отображается в списке устройств проверьте правильно ли он запитан.
После выбора модуля HC-05 в списке устройств произойдет подключение к нему приложения. Теперь напечатайте любое сообщение в поле ввода и передайте его. После этого сообщение должно появиться в окне монитора последовательной связи Arduino IDE.
Далее перейдем к написанию программы для нашего проекта.
Объяснение программы для модуля ESP8266
Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты.
В данном проекте мы будем использовать аппаратный и программный порты последовательной связи модуля ESP8266. Аппаратный порт будет использоваться для взаимодействия с монитором последовательной связи Arduino IDE, а программный – для взаимодействия с модулем HC-05.
Первым делом подключим в программе библиотеку последовательной связи (Software Serial library).
1 |
#include <SoftwareSerial.h> |
Далее сконфигурируем с помощью данной библиотеки контакты для использования последовательной связи (D2 и D3). В проекте мы будем использовать встроенный светодиод NodeMCU ESP8266, который подключен к его контакту D4.
1 2 |
SoftwareSerial btSerial(D2, D3); // RX, int led = D4; |
Затем мы инициализируем аппаратный и программный порты последовательной связи для работы на скорости 9600 бод. Сконфигурируем контакт D4 для работы в качестве цифрового выхода. Напечатаем приветственное сообщение в окне монитора последовательной связи.
1 2 3 4 |
Serial.begin(9600); btSerial.begin(9600); pinMode(D4, OUTPUT); Serial.println("Started..."); |
Далее мы будем осуществлять чтение данных с Bluetooth модуль и если Bluetooth получил символ “B” от смартфона, то мы будем включать мигание светодиода, а если Bluetooth получил символ “ S ” от смартфона – мы будем выключать светодиод. В нашей программе мы не будем использовать функцию delay(). Но вместо этого для замедления работы модуля ESP8266 может быть использована функция ‘millis’.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
if (btSerial.available() > 0) { char data = btSerial.read(); switch (data) { case 'B': ledB = "blink"; break; case 'S': ledB = "stop"; break; default: break; } } |
Функцию millis мы будем использовать для организации задержки 500ms, то есть светодиод будет мигать каждые 500ms. Вы можете изменить частоту мигания светодиода изменяя значение переменной ‘interval’.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
unsigned long currentMillis = millis(); if (ledB == "blink") { Serial.println("blinking started"); if (currentMillis - previousMillis >= interval) { previousMillis = currentMillis; if (ledState == LOW) { ledState = HIGH; } else { ledState = LOW; } digitalWrite(led, ledState); } } |
Исходный код программы (скетча)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
/* HC-05 interfacing with NodeMCU ESP8266 Author: Circuit Digest(circuitdigest.com) */ #include <SoftwareSerial.h> SoftwareSerial btSerial(D2, D3); // Rx,Tx int led = D4; // led also the internal led of NodemCU (к этому контакту подключен внутренний светодиод модуля) int ledState = LOW; // led state to toggle (начальное состояние светодиода) String ledB = ""; unsigned long previousMillis = 0; // будем использовать функцию millis вместо функции delay const long interval = 500; // будем мигать светодиодом каждые 500ms void setup() { delay(1000); Serial.begin(9600); btSerial.begin(9600); // для связи с модулем bluetooth pinMode(D4, OUTPUT); Serial.println("Started..."); } void loop() { if (btSerial.available() > 0) { // проверяем передает ли Bluetooth модуль какие нибудь данные esp8266 char data = btSerial.read(); // считываем данные с модуля HC-05 switch (data) { case 'B': // if receive data is 'B' (если принят символ 'B') ledB = "blink"; // write the string break; case 'S': // if receive data is 'S' (если принят символ ' S ') ledB = "stop"; break; default: break; } } unsigned long currentMillis = millis(); if (ledB == "blink") { // если принят символ 'B' начинаем мигание светодиода Serial.println("blinking started"); if (currentMillis - previousMillis >= interval) { previousMillis = currentMillis; if (ledState == LOW) { ledState = HIGH; } else { ledState = LOW; } digitalWrite(led, ledState); } } } |