Всем привет! Сегодня я покажу вам как связать две Arduino между собой с помощью блютуз модулей.
Для этого понадобятся:
1. Два модуля HC-05(или один HC-05 и один HC-06)
2. Две платы Arduino(в моём случае это две Arduino Uno)
3. Соединительные провода: в моём случае 8 проводов типа папа-мама, 6 проводов типа папа-папа
4. Две кнопки
5. Светодиод и резистор на 220Ом
6. Два USB кабеля
7. Компьютер с установленной программой Arduino IDE и драйверами для плат
И так, начнём подготовку наших модулей к прошивке. Чтобы блютуз модули могли связаться между собой, нужно прошить их с помощью AT-команд. Один модуль будет играть роль мастера(пульт управления), а другой - подчинённого(например, робот). Модуль HC-05 можно использовать и в роли мастера, и в роли подчинённого. А модуль HC-06 может играть только роль подчинённого.
Прошить модули можно с помощью USB-переходника.
Но т.к. у меня его нет, я буду использовать в качестве него плату Arduino. Чтобы проверить, может ли плата играть роль такого проводника, нужно:
1. Залить в плату пустой скетч и замкнуть между собой контакты TX и RX
2. Открыть монитор порта, ввести любой символ и нажать Enter. Тот символ, что мы отослали, плата должна вернуть обратно в монитор порта. Если всё именно так, то плату можно использовать в роли переходника.
И так, преступим к прошивке наших модулей. Модуль HС-05 у меня прошивался через Arduino IDE, а HC-06 не хотел. Поэтому чтобы посылать модулю HC-06 AT-команды я буду использовать программу Termite.
Подключаем сначала мастер-модуль HC-05.
Подключаем вот так:
5V(плата Arduino) - VCC(HC-05)
Gnd(плата Arduino) - Gnd(HC-05)
TX(плата Arduino) - TX(HC-05)
RX(плата Arduino) - RX(HC-05)
Чтобы перевести модуль в режим AT-команд, отключаем питание от модуля, зажимаем кнопку на модуле и подаём питание при зажатой кнопке.
Теперь подаём питание 3.3V на контакт EN. Модуль готов к прошивке.
Открываем Arduino IDE. Выбираем порт к которому подключена наша плата, устанавливаем скорость обмена данными 38400 бод(скорость обмена данными модуля HC05 в режиме AT-команд = 38400 бод), выбираем режим NL&CR, вводим команду "AT"(без кавычек) и нажимаем Enter. Если вы всё правильно сделали модуль должен ответить OK.
Вводим такие команды:
AT+ROLE=1 //устанавливаем роль мастера
AT+UART=38400,0,0 //устанавливаем скорость обмена данными 38400
Модуль на все команды должен ответить OK как на фото ниже:
Теперь перейдём к прошивке модуля HC-06. Подключаем его к плате так:
5V(плата Arduino) - VCC(HC-06)
Gnd(плата Arduino) - Gnd(HC-06)
TX(плата Arduino) - TX(HC-06)
RX(плата Arduino) - RX(HC-06)
На некоторых сайтах я читал, что для того чтобы прошить модуль HC-06 нужно подать 3.3V на контакт Key, но у меня всё работало и без этого.
Открываем Termite и устанавливаем настройки как на фото ниже:
После этого вводим команду "AT"(без кавычек) и нажимаем Enter. Модуль должен ответить OK. Если всё именно так, можно вводить следующую команду:
AT+BAUD6 //устанавливаем скорость обмена данными 38400
Модуль должен ответить как на фото ниже:
Примечание: у меня стоит скорость 38400 бод потому что я уже прошивал модуль раньше и установил ему скорость обмена 38400 бод.
О том, какие ещё существуют AT-команды для модуля HС-06 можно узнать здесь.
Теперь если всё прошло успешно можно собирать пульт управления и приёмник.
Сначала соберём пульт управления. Подключаем так:
5V(плата Arduino) - VCC(HC-05)
Gnd(плата Arduino) - Gnd(HC-05)
TX(плата Arduino) - RX(HC-05)
RX(плата Arduino) - TX(HC-05)
Как подключать кнопки показано на фото ниже. Зелёные провода подключены к контактам 4 и 5, белый и серый - к контактам Gnd.
Теперь приступим к приёмнику. Подключаем вот так:
5V(плата Arduino) - VCC(HC-06)
Gnd(плата Arduino) - Gnd(HC-06)
TX(плата Arduino) - RX(HC-06)
RX(плата Arduino) - TX(HC-06)
Pin2(плата Arduino) подключаем через резистор на 220Ом к длинной ноге светодиода, Gnd(плата Arduino) - к короткой ноге светодиода. Фото подключения показано ниже:
Теперь подаём питание на обе платы. Если блютуз модули настроены правильно, они должны установить между собой соединение: светодиод на модуле HC-05 будет два раза мигать и на некоторое время тухнуть, светодиод на модуле HC-06 будет постоянно гореть или будет гореть также как на HC-05. Если модули установили соединение, можно продолжать.
Загружаем такой скетч в пульт:
int Pin_Button = 4;
int Pin_Button2 = 5;
boolean Button_Click = true;
boolean Button_Click2 = true;
void setup() {
pinMode(Pin_Button, INPUT_PULLUP);
pinMode(Pin_Button2, INPUT_PULLUP);
Serial.begin(38400);
}
void loop() {
if(Button_Click) {
if (!digitalRead(Pin_Button)) {
Serial.println("A");
Button_Click = false;
Button_Click2 = true;
return;
}
}
if(Button_Click2) {
if (!digitalRead(Pin_Button2)) {
Serial.println("B");
Button_Click2 = false;
Button_Click = true;
return;
}
}
}
А такой в приёмник:
int Pin_Led = 2;
char Command = 'A';
void setup() {
Serial.begin(38400);
pinMode(Pin_Led, OUTPUT);
}
void loop() {
if(Serial.available() > 0) {
Command = Serial.read();
Serial.println(Command);
switch(Command) {
case 'A':
digitalWrite(Pin_Led, LOW);
break;
case 'B':
digitalWrite(Pin_Led, HIGH);
}
}
}
Теперь чтобы зажечь светодиод нужно нажать на кнопку, подключенную к 5 пину платы, а чтобы он потух нужно нажать на кнопку, подключенную к 4 пину платы. Пожалуйста, оцените статью, для меня это очень важно. На этот раз всё, всем спасибо за внимание!