Каталог

Подключение Bluetooth модулей к Ардуино

Подключение Bluetooth модулей к АрдуиноКак правило в заголовках к подобным статьям указывается конкретная модель модуля, например, HC-05 или HC-06. На самом деле все они подключаются одинаково. На что действительно следует обратить внимание, так это на режим работы. Bluetooth модуль может работать в одном из двух режимов: master или slave.

Slave (ведомый) - наиболее часто встречающийся режим работы, в котором устройство ожидает подключения, само при этом не способно подключиться к другому устройству. Данный режим может использоваться в роботе, bluetooth розетке, метеостанции и любом другом устройстве, к которому планируется подключение, например, со смартфона или компьютера.

В режиме master (ведущий) устройство, напротив, является инициатором соединения и может подключиться к slave модулю. Для создания связи между двумя Ардуино посредством Bluetooth потребуются два модуля, один из которых сконфигурирован на работу в режиме master, другой - slave.

Вот теперь, пожалуй, можно пояснить, чем отличаются модели bluetoth модулей:

  • HC-03, HC-05 - позволяют изменять режим работы slave/master с помощью AT-команд;
  • HC-04, HC-06 - сконфигурированы заводом-изготовителем для работы в определенном режиме, который в дальнейшем не может быть изменен штатными средствами;
  • HC-07- позиционируется как замена HC-06;
  • HC-08 - работает по протоколу Bluetooth v4.0 BLE (Bluetooth Low Energy - Bluetooth с низким энергопотреблением). Позволяет изменять режим работы с помощью AT-команд;
  • HC-09 - позиционируется как замена HC-06 и HC-07, но работает только в slave режиме.

Модули, позволяющие изменять режим работы, по умолчанию сконфигурированы как slave. Также в продаже можно встретить SPP-C Bluetooth модули, которые предлагаются как улучшенная замена HC-05 и HC-06 для работы в режиме slave.

Итак, сегодня речь пойдет о подключении к Ардуино модулей Bluetooth в режиме slave. Плата модуля кроме самого bluetooth чипа содержит преобразователь уровней и стабилизатор напряжения, что позволяет подключать его к Ардуино напрямую и запитывать от 5 вольт. Для общения с модулями используется интерфейс UART (Universal Asynchronus Receiver-Transmitter или универсальный асинхронный приемопередатчик). Все платы Ардуино имеют хотя бы один последовательный порт UART, это означает что для подключения к ним Bluetooth не требуется каких-либо специализированных библиотек или схем. Достаточно соединить контакты Rx, Tx модуля с контактами Tx и Rx Ардуино соответственно. То есть передатчик одного устройства соединяется с приемником другого. Ниже приведена схема подключения Bluetooth модуля к Arduino UNO.

Подключение блютуз модулей к АрдуиноДля обмена данными через последовательный интерфейс в Ардуино используется объект Serial. Попробуем управлять встроенным в Ардуино светодиодом: будем включать его при получении по Bluetooth символа "1" и выключать при получении "0". Для этого загрузим в него приведенный ниже скетч. Обратите внимание: выводы 0 и 1 (RX и TX) используется при программировании Ардуино, поэтому от них необходимо отключить модуль Bluetooth перед загрузкой скетча.

char incomingByte = 0;

void setup() {
  // Задаем режим работы вывода к которому подключен встроенный светодиод
  pinMode(LED_BUILTIN, OUTPUT);
  // Устанавливаем скорость передачи данных по последовательному интерфейсу
  Serial.begin(9600); 
  Serial.println("Hello");
}

void loop() {
  if (Serial.available()) {        // Если последовательным портом приняты данные
    incomingByte = Serial.read();  // то считываем из буфера один байт
    if (incomingByte=='0')         // и проверяем его на равенство '0'
      digitalWrite(LED_BUILTIN, LOW);    // если принят '0', то гасим светодиод
    else if (incomingByte=='1')    // если не равно, то сравниваем с '1'
      digitalWrite(LED_BUILTIN, HIGH);   // если принят '1', то зажигаем светодиод
  }
}

Функцией Serial.begin() устанавливаем скорость передачи данных, на которую сконфигурирован наш модуль. Как правило, заводом-изготовителем модули настраиваются на скорость 9600 бит/с. Загружаем код в Ардуино и подключаем Bluetooth. Для управления будем использовать смартфон и Bluetooth терминал - по этому сочетанию можно найти довольно много приложений в маркете. Нам подойдёт любой, поэтому выбирайте какой нравится больше. Итак, включаем на смартфоне Bluetooth и запускаем терминал. Если ранее смартфон не связывался с данным модулем, то ищем новое устройство и пробуем подключиться, на запрос PIN-кода вводим 1234 или 0000.

Если соединение установилось, то можем посылать данные на Ардуино. Попробуем отправить 1, светодиод должен зажечься; при отправке 0 он потухнет. Если мы теперь нажмем кнопку сброса на Ардуино, то в терминале появится строка Hello (третий скриншот ниже) - это выполнилась функция Serial.println("Hello") в функции setup().

Управление Ардуино по блютуз со смартфона

А что если кроме Bluetooth требуется подключить еще какое-то UART устройство? В случае с Arduino Mega и Mega2560 нам кроме порта Serial доступны еще 3 аппаратных последовательных порта: Serial1 (RX-19 и TX-18), Serial2 (RX-17 и TX-16), Serial3 (RX-15 и TX-14), а значит можно использовать их вместо Serial, соответственно, нам уже не придется отключать модуль перед прошивкой Ардуино. Для других плат можно воспользоваться библиотекой SoftwareSerial. Данная библиотека позволяет реализовать последовательный интерфейс на любых цифровых выводах Ардуино с помощью программных средств, дублирующих функциональность UART (отсюда и название "SoftwareSerial"). Библиотека позволяет программно создавать несколько последовательных портов, работающих на скорости до 115200 бит/с. Давайте немного изменим предыдущий скетч, чтобы использовался не аппаратный, а программный последовательный порт.

#include <SoftwareSerial.h>
SoftwareSerial mySerial(2, 3);       // RX, TX

char incomingByte = 0;

void setup() {
  // Задаем режим работы вывода к которому подключен встроенный светодиод
  pinMode(LED_BUILTIN, OUTPUT);
  // Устанавливаем скорость передачи данных по последовательному интерфейсу
  mySerial.begin(9600);
  mySerial.println("Hello");
}

void loop() {
  if (mySerial.available()) {        // Если последовательным портом приняты данные
    incomingByte = mySerial.read();  // то считываем из буфера один байт
    if (incomingByte=='0')           // и проверяем его на равенство '0' и '1'
      digitalWrite(LED_BUILTIN, LOW);    // если принят '0', то гасим светодиод
    else if (incomingByte=='1')
      digitalWrite(LED_BUILTIN, HIGH);   // если принят '1', то зажигаем светодиод
  }
}

Здесь для работы с Bluetooth создается программный последовательный порт на выводах 2 и 3. Можно использовать и другие выводы, но необходимо учитывать следующие ограничения: не все выводы Arduino Mega и Mega2560 поддерживают прерывания, возникающие при изменении уровня сигнала, поэтому на данных платах в качестве вывода Rx могут использоваться только следующие выводы: 10, 11, 12, 13, 14, 15, 50, 51, 52, 53, A8 (62), A9 (63), A10 (64), A11 (65), A12 (66), A13 (67), A14 (68), A15 (69). Аналогичное ограничение для платы Leonardo оставляет нам для использования в качестве Rx выводы: 8, 9, 10, 11, 14 (MISO), 15 (SCK), 16 (MOSI).

Загрузите данный скетч в Ардуино, подключите модуль к выводам 2 (Rx) и 3 (Tx) и попробуйте управлять светодиодом со смартфона, отправляя 0 и 1. При необходимости можно подключить Bluetooth модуль к другим пинам, внеся соответствувющие правки в скетч.

Как видите, работать с блютуз модулем в Ардуино очень просто. Остается лишь подумать о более удобном интерфейсе для управления конечным устройством. Если для этих целей планируется использовать смартфон, то в маркете можно найти большое количество Bluetooth контроллеров. Также можете обратить внимание на приложение RemoteXY. Оно позволяет создать свой собственный интерфейс управления, заточенный под конкретный проект.

В следующих публикациях рассмотрим конфигурирование Bluetooth модулей при помощи AT-команд и работу в режиме master.

 

footer shadow
Контакты

г. Москва, Пятницкое ш. д. 18, пав. 566

zakaz@compacttool.ru

8-495-752-55-22

compacttool logoadaptive site

accepted payment systems

Информация представленная на данном информационном ресурсе преследует исключительно рекламные цели и не является договором-офертой !

© Все права защищены 2015 - 2024г https://compacttool.ru