Второе применение – связь двух приборов по схемам микроконтроллер–микроконтроллер или микроконтроллер–прибор. Устройство подключается через проводной интерфейс USART. Применение HC-05 прокладывает мост между приборами USART–bluetooth–USART. МК воспринимает модуль bluetooth HC-05 как ответное устройство USART, а за организацию связи отвечает электроника модуля. При использовании устройства инженеру не требуются знания в области bluetooth.
HC-05 отличается от HC-06 тем, что ему доступны оба режима работы: ведомый (slave) и ведущий (master). А вот HC-06 работает только ведомым, то есть он не способен находить другие устройства и самостоятельно устанавливать с ними связь.
Для входа в режим конфигурирования AT командами необходимо подключить контакт EN к «земле» и во время включения модуля нажать на нем кнопку. Как только индикаторный светодиод на модуле начнет мигать каждые две секунды, можно отпускать кнопку — модуль перешел в режим конфигурирования. ВНИМАНИЕ! По умолчанию скорость передачи данных в режиме конфигурирования составляет 38 400 бод.
Распиновка
- STATE – проверка состояние модуля. На этом контакте дублируется сигнал, который отображает встроенный на плате светодиод. Если он очень быстро мигает, значит модуль находится в активном состоянии. В режиме установления связи ток составляет ~30-40 мА. Когда модуль устанавливает связь с другим устройством, светодиод просто горит. В режиме передачи данных ток составляет ~10 мА.
- RX – получение данных
- TX – передача данных
- GND – подключается к земле
- +5V – питание 5 В
- EN (Key) – включение / выключение модуля. Если на этот контакт подать логическую 1 (5 В) – модуль выключится, если подать логический 0 или не подключаться к этому контакту – модуль будет работать.
Пример: RX/TX
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 |
int val; int led = 13; void setup() { Serial.begin(9600); pinMode(led, OUTPUT); digitalWrite(led, HIGH); } void loop() { if (Serial.available()) { val = Serial.read(); // При символе "1" включаем светодиод if (val == '1') { digitalWrite(led, HIGH); } // При символе "0" выключаем светодиод if ( val == '0') { digitalWrite(led, LOW); } } } |
Пример: Двунаправленная передача данных
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 |
#include <SoftwareSerial.h> SoftwareSerial mySerial(2, 3); // указываем пины RX и TX int led = 13; void setup() { pinMode(2,INPUT); pinMode(3,OUTPUT); Serial.begin(38400); mySerial.begin(9600); pinMode(led, OUTPUT); digitalWrite(led, LOW); } void loop() { if (mySerial.available()) { int val = mySerial.read(); // читаем из software-порта // При символе "1" включаем светодиод if (val == '1') { digitalWrite(led, HIGH); Serial.write(val); // пишем в hardware-порт } // При символе "0" выключаем светодиод if (val == '0') { digitalWrite(led, LOW); Serial.write(val); // пишем в hardware-порт } } if (Serial.available()) { int c = Serial.read(); // читаем из hardware-порта mySerial.write(c); // пишем в software-порт } } |
Режим AT-команд
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
#include <SoftwareSerial.h> SoftwareSerial BTSerial(10, 11); // RX | TX void setup() { pinMode(9, OUTPUT); // this pin will pull the HC-05 pin 34 (key pin) HIGH to switch module to AT mode digitalWrite(9, HIGH); Serial.begin(9600); Serial.println("Enter AT commands:"); BTSerial.begin(38400); // HC-05 default speed in AT command more } void loop() { // Keep reading from HC-05 and send to Arduino Serial Monitor if (BTSerial.available()) Serial.write(BTSerial.read()); // Keep reading from Arduino Serial Monitor and send to HC-05 if (Serial.available()) BTSerial.write(Serial.read()); } |