Добавить в избранное

Bluetooth-модуль HC-05 с Arduino: управление с телефона по Serial

Чтение ≈ 4 мин

Подключение HC-05 к Arduino: Bluetooth UART-мост, AT-настройка имени и PIN, SoftwareSerial для обмена с телефоном, управление светодиодом и реле с Android-приложения и различие HC-05/HC-06.

HC-05: Bluetooth как Serial-кабель

HC-05 — Bluetooth-модуль, который превращается в беспроводной UART-мост: всё, что приходит в его TX — видно на телефоне, всё, что пишет телефон — приходит в его RX. Для кода на Arduino это выглядит как обычный Serial — Bluetooth-протокол полностью скрыт.

HC-05 может быть и мастером, и слейвом (AT-настраивается). HC-06 — упрощённый, только слейв. Для подключения к телефону разницы нет.

Подключение

HC-05 VCC ── 5V (модуль с платой берёт 5В, сам преобразует)
HC-05 GND ── GND
HC-05 TX  ── Arduino D2  (RX)
HC-05 RX  ── делитель 5В→3.3В ── Arduino D3  (TX)

Критично: HC-05 работает на 3.3 В логике. TX Arduino (5 В) на RX модуля — через делитель 1к+2к. Модули с платой часто имеют стабилизатор и частичную защиту, но делитель на RX — лишняя страховка.

Аппаратный Serial (D0/D1) занят USB — для модуля берём SoftwareSerial на свободных пинах.

Первый код: управление с телефона

#include <SoftwareSerial.h>

SoftwareSerial bt(2, 3);   // RX, TX
const int LED = 13;

void setup() {
    pinMode(LED, OUTPUT);
    Serial.begin(9600);
    bt.begin(9600);        // у HC-05 по умолчанию 9600 для данных
    Serial.println("жду команду по Bluetooth...");
}

void loop() {
    if (bt.available()) {
        char cmd = bt.read();
        Serial.print("команда: "); Serial.println(cmd);
        if (cmd == '1') digitalWrite(LED, HIGH);
        if (cmd == '0') digitalWrite(LED, LOW);
    }
    // двусторонне: печатаем на телефон
    if (Serial.available()) {
        bt.write(Serial.read());
    }
}

На телефон ставите Bluetooth Terminal (или любое BLE/UART-приложение), спариваетесь с HC-05 (PIN по умолчанию 1234), шлёте «1»/«0» — светодиод включается/выключается.

AT-режим: имя, PIN, скорость

Для настройки модуля его вводят в AT-режим: зажимаете кнопку на модуле при подаче питания (или подтягиваете KEY к 3.3V) — светодиод мигает медленно (~2 с). В AT-режиме скорость 38400:

SoftwareSerial bt(2, 3);
void setup() {
    bt.begin(38400);       // AT-режим!
}
// шлём в мониторе:
// AT            — ответит OK
// AT+NAME?      — текущее имя
// AT+NAME=MyRobot — сменить имя
// AT+PSWD=4321  — PIN
// AT+UART=9600,0,0 — скорость данных

Полезные команды: AT+ROLE? (0=слейв, 1=мастер), AT+ADDR? (адрес), AT+VERSION?, AT+ORGL (сброс в дефолт).

Управление несколькими устройствами

Командная строка удобнее одиночных символов:

String cmd;

void loop() {
    while (bt.available()) {
        char c = bt.read();
        if (c == '\n') { process(cmd); cmd = ""; }
        else cmd += c;
    }
}

void process(String s) {
    if (s == "led on")  digitalWrite(13, HIGH);
    if (s == "led off") digitalWrite(13, LOW);
    if (s.startsWith("servo ")) {
        int angle = s.substring(6).toInt();
        myservo.write(angle);
    }
}

Телефон шлёт «led on», «servo 90» — Arduino парсит и выполняет.

Датчики → телефон

Обратное направление — телеметрия:

void loop() {
    float t = dht.readTemperature();
    bt.print("T:"); bt.println(t);
    delay(2000);
}

Bluetooth-приложение (или самописное на MIT App Inventor) рисует график в реальном времени.

HC-05 vs BLE-модули (HM-10, ESP32)

HC-05 — классический Bluetooth 2.0 SPP: просто, но жрёт энергию и работает только с Android (iOS не поддерживает SPP без MFi). Для iPhone — BLE-модули HM-10 или ESP32 со встроенным BLE. ESP32 вообще имеет и классический Bluetooth, и BLE — универсальнее.

Типичные проблемы

  • Не спаривается: PIN не тот (попробуйте 0000/1234), модуль в AT-режиме (мигает медленно).
  • Спарился, но данных нет: скорость bt.begin не совпадает с настроенной UART (по умолчанию 9600).
  • Мусор в терминале: перепутаны RX/TX, оба конца на разных скоростях.
  • AT не отвечает: модуль не в AT-режиме (нужна кнопка при включении), скорость не 38400.
  • 5В на RX убил модуль: делитель напряжения обязателен для TX Arduino → RX HC-05.

Итог

HC-05 — простейший способ беспроводного управления: SoftwareSerial на двух пинах, телефон через Bluetooth Terminal, команды — обычным текстом. Правила: делитель на RX модуля, AT-режим на 38400, PIN 1234 по умолчанию. Дальше — пульт для робота, телеметрия с датчиков, умный дом с телефона.

Полный проект: машинка на Bluetooth

#include <SoftwareSerial.h>

SoftwareSerial bt(2, 3);           // RX=D2, TX=D3
const int M1_F = 5, M1_B = 6, M2_F = 9, M2_B = 10;  // драйвер моторов

void setup() {
    for (int p : {M1_F, M1_B, M2_F, M2_B}) pinMode(p, OUTPUT);
    bt.begin(9600);
    Serial.begin(9600);
}

void loop() {
    if (bt.available()) {
        char c = bt.read();
        if (c == 'F') forward();
        else if (c == 'B') backward();
        else if (c == 'L') left();
        else if (c == 'R') right();
        else if (c == 'S') stop();
    }
}

На телефоне — Bluetooth-джойстик (Arduino Bluetooth Controller и подобные) с кнопками-направлениями, шлёт F/B/L/R/S.

Двусторонний обмен

// Arduino шлёт данные на телефон
bt.print("T:"); bt.print(temp); bt.print(",");
bt.print("B:"); bt.println(battery);

Приложение парсит T:23.5,B:87 и рисует панель.

HC-05 в режиме мастера

HC-05 может сам подключаться к слейву (другому HC-05/HC-06) — пара устройств «напрямую». В AT-режиме:

AT+ROLE=1        // мастер
AT+CMODE=1       // connect to any
AT+BIND=xxxx:xx:xxxxxx  // адрес слейва (получен AT+ADDR? на слейве)

Приложения для телефона

  • Bluetooth Terminal — текстовый терминал, команды и ответы.
  • Arduino Bluetooth Controller — кнопки/джойстик.
  • MIT App Inventor — сделайте своё приложение с кнопками и графиками за вечер.

Безопасность

HC-05 спаривается стандартным PIN — меняйте AT+PSWD с заводского 1234. Сосед в зоне досягаемости может спариться и управлять вашим устройством — для продукта используйте BLE с pairing или обфускацией команд.

Частые ошибки

  • RX модуля на 5 В — умирает со временем; делитель обязателен.
  • Скорость не совпадает — 9600 данные / 38400 AT по умолчанию.
  • PIN неверный — попробуйте 0000/1234/1111.
  • AT-режим не входит — кнопка KEY при включении питания.
  • iOS не видит — классический SPP не поддерживается, нужен BLE (HM-10, ESP32).

Полный проект: машинка на Bluetooth

#include <SoftwareSerial.h>

SoftwareSerial bt(2, 3);
const int M1_F = 5, M1_B = 6, M2_F = 9, M2_B = 10;

void setup() {
    for (int p : {M1_F, M1_B, M2_F, M2_B}) pinMode(p, OUTPUT);
    bt.begin(9600);
}

void loop() {
    if (bt.available()) {
        char c = bt.read();
        if (c == 'F') forward();
        else if (c == 'B') backward();
        else if (c == 'L') left();
        else if (c == 'R') right();
        else if (c == 'S') stop();
    }
}

HC-05 в режиме мастера

AT+ROLE=1        // мастер
AT+CMODE=1       // connect to any
AT+BIND=xxxx:xx:xxxxxx  // адрес слейва

Приложения для телефона

  • Bluetooth Terminal — текстовый терминал.
  • Arduino Bluetooth Controller — кнопки/джойстик.
  • MIT App Inventor — своё приложение за вечер.

Частые ошибки

  • RX модуля на 5 В — делитель обязателен.
  • Скорость не совпадает — 9600 данные / 38400 AT.
  • PIN неверный — 0000/1234/1111.
  • iOS не видит — классический SPP не поддерживается.
Поделиться
Понравился материал?

Комментарии

Добавить комментарий