Подготовка к настройке AT-командами

Настройка bluetooth-модулей HC-05/06

В одном из наших уроков мы знакомились с Bluetooth модулями HC-05 и HC-06, которые широко распространены в среде DIY энтузиастов. Если вы еще не знакомы с bluetooth, то для начала следует почитать именно этот урок: Arduino: bluetooth.

В этой же статье мы поговорим о тонкой настройке Bluetooth-модулей: смены имени устройства, скорости передачи данных, пароля и много другого.

Режим AT-команд

Настройка bluetooth модуля осуществляется в режиме AT-команд. В этом режиме модуль принимает данные через UART интерфейс (RX,TX) и интерпретирует их как команды настройки. Чтобы перевести HC-05 и HC-06 в режим AT-команд необходимо задействовать контакт KEY, который в зависимости от типа печатной платы модуля может быть, а может и не быть.

Есть вариант платы, на которой нет контакта KEY, но есть кнопка. Эта кнопка выполняет ту же функцию. А есть вариант, когда нет ни кнопки ни выведенного контакта (тот же HC-06). В таком случае необходимо будет припаять дополнительный провод к контакту, отмеченному на фото ниже.

Режим AT команд Bluetooth HC-05

Подключение к компьютеру

Для настройки модуля нам необходимо будет подключить его к компьютеру. Сделать этом можно тремя способами.

Способ №1. С помощью отдельного USB-UART моста, например такого: USB-UART на основе CP2102.

Bluetooth HC-05GndVccRXTX
USB-UART CP2102/CP2104Gnd5VTXRX

Микросхема CP2102 или CP2104 имеют напряжение сигнальных линий 3,3 Вольта, а значит их можно смело подключать напрямую к bluetooth модулю не боясь его повредить.

Способ №2. С помощью платы Arduino, подключенной в режиме USB-UART моста.

На большинстве плат из линейки Ардуино имеется встроенный USB-UART мост, который можно использовать в обход самой Ардуино. Для этого необходимо замкнуть проводом контакты RST и Gnd, а затем подключить bluetooth по следующей схеме.

Настройка bluetooth hc-05 при помощи Arduino

Встроенный USB-UART Arduino имеет напряжение сигнальных линий 5 Вольт, а следовательно нам придется преобразовать уровень напряжения для RX линии bluetooth модуля. Это нужно сделать только для RX; подробности согласования уровней для HC-05 и HC-06 можно найти в нашем уроке.

Обратите внимание, что на этой схеме контакт Arduino RX подключается к контакту RX bluetooth-модуля. Хотя в таких случаях всегда делают крест-на-крест — это не ошибка. Дело в том, что мы используем не сам контроллер Atmega328, а именно микросхему USB-UART моста, которая с ним связана. Эта микросхема уже подключена крест-на-крест к микроконтроллеру. То есть, по факту, мы имеет такую цепочку соединений: USB-UART TX -> Arduino RX -> Bluetooth RX. И соединив RST и Gnd, мы просто убираем Arduino из этой цепочки.

Способ №3. С помощью платы Arduino с программным USB-UART ретранслятором.

В этом случае USB-UART мостом будет служить основной микроконтроллер платы Arduino — Atmega328p. Подключим Ардуино к bluetooth по следующей схеме.

Настройка bluetooth hc-05 при помощи Arduino

На этой схеме мы подключаем TX и RX bluetooth модуля к контактам 10 и 11, так как аппаратный UART на ногах 0(RX) и 1(TX) будет занят общением с компьютером.

Затем пишем небольшую программу-ретранслятор ( программный USB-UART мост), которая будет осуществлять обмен данными между терминалом на компьютере и Bluetooth модулем. Программа крайне проста:

#include <SoftwareSerial.h>
#include <Time.h>

int gLedPin = 13;
int gRxPin = 10;
int gTxPin = 11;

SoftwareSerial BTSerial(gRxPin, gTxPin);

void setup() {
  # 38400 - для метода №1, 9600 - для метода №2
  BTSerial.begin(38400);
  Serial.begin(9600);
  delay(500);
}

void loop() {
  if (BTSerial.available()) {
    Serial.write(BTSerial.read());
  }
  if (Serial.available()) {
    BTSerial.write(Serial.read());
  }
}

В этой программе есть два важных параметра, на которые следует обратить внимание:

Serial.begin(9600); — это скорость общения Ардуино и компьютера. Именно эту скорость нужно будет выставить в терминале!

BTSerial.begin(38400); — это скорость общения Ардуино и bluetooth модуля. В зависимости от варианта входа в режим AT-команд, она будет разной. Об этом будет сказано ниже.

Загружаем программу на Ардуино — USB-UART мост готов!

Терминал

В данном контексте терминал — это программа для текстового общения с различными устройствами по различным протоколам связи. Нам важен терминал, который работает с аппаратными или программными COM-портами.

В качестве терминала для нашей задачи можно использовать встроенный в Arduino IDE монитор порта — он тоже умеет передавать данные через COM-порт. В настройках следует выбрать передачу символов CR+LF (0x0D+0x10) и нужную скорость. Вот так должен выглядеть экран монитора порта (см. настройки внизу окна).

Монитор порта Arduino IDE bluetooth

Также можно использовать любой другой терминал, например, достаточно популярный TeraTerm. Его настройки:

Настройка teraterm
Настройка teraterm

Все дальнейшие манипуляции рационально поделить на две части: для ведомого модуля HC-06 и для ведущего HC-05.


Изменено:

Настройка bluetooth-модулей HC-05/06: 66 комментариев

  1. Все сделал как написано, но ЛЕД на модуле все равно продолжает быстро мигать не переходя в АТ режим… в чем дело?

    • Нужно приконектится с мобилки, Включить прогу «terminal bluetoth», и ей приконектится к модульчику. Тампочка сразу начинает мигать,.. длинный пропуск, короткие два мигания…

      **** А еще, кнопочка «EN», она подает 3,6 вольта через делитель напряжения на платке..
      Выдернув питание, прижав кнопку, и подав питание снова, модуль моргает мЕЕЕдленно. Это похоже и есть тот режим, пронраммирования модуля.
      Я пака свою беду не победил. Есть много подозрений, одна, что уровни 3.6 не видит комп, через микруху (как ее, не помню), котора соединяет МК с RS-232 на МК.
      …воюем дальше.

      • У меня тоже не работало. Во первых поменял подключение каналов зеркально(подключил rx-tx и tx-rx) и перебирая скорости поставил 38400. и сразу заработало.

        • Эти контакты надо включать зеркально всегда tx -прием сигнала rx выход сигнала

      • Здравствуйте! Почему модуль тройка bluetooth hc-05 может быть не видима ни для компьютера, ни для телефона? Модуль соединяю с Arduino Uno, K — 3.3В, V — 5В, G-Gnd, RX — TX, TX-RX. При подключении Ардуино через USB к компьютеру на модуле мигает светодиод ‘mode’ в режиме 2с/2с

        • В АТ режиме пропиши «AT+CLASS?»
          если там 0 или 1 то пропиши «AT+CLASS:7936»
          после на AT+CLASS? должен ответить +CLASS:1f00

  2. Модуль на вид HC-05, все ножки в круговую припаяны. есть вход KEY, его и включаю на 3.3В на ардуино.

    • А кнопка есть? Можно попробовать зажать кнопку, подать питание, отпустить кнопку

  3. А почему в делителе напряжений резисторы на 47к и 10к? Ведь тогда при напряжении 5В с ардуино на блютуз пойдёт 0,8В???

        • Автор будь внимателен , будет время ,поставлю 4.7 k ,про верю отпишусь 😉

          • Леонид, будь уважителен, автор в 100 раз больше пользы сделал на этой странице

  4. Здравствуйте!
    У кого есть этот модуль HC-06, замерьте и подскажите пожалуйста, что это диод или стабилитрон или еще что, который идет от плюсовой ноги (черная) видел на фото на нем было написано «B2», дело в том что пришло мне это чудо, долго не мог понять почему не работает, оказывается не хватает этой детали!
    Кто разбирается подскажите что это и его номинал?
    Спасибо!

    • Если через эту деталь идёт питание, то скорее всего это диод — защита от переплюсовки. Можно поставить любой. В прямом направлении. Или заменить перемычкой

  5. Здравствуйте!
    У меня задача стоит передать MIDI команды без проводов. Это UART со скоростью 31 250 бит в сек. Возможно ли это осуществить на данных модулях? Меня смущает скорость, необходимо передавать именно со скорость 31250.
    Спасибо.

    • Модуль устойчиво работает на скорости 115200, а максимум установлен вообще на уровне 1382400.

  6. сделал всё по аналогии, подключаюсь к hc-06, лед горит непрерывно (статус коннект), но при посылке любых команд ничего не происходит 🙁
    не подскажите, в чем проблема?

    • Команды должны заканчиваться комбинацией 0х13 0х10. Скорее всего нет символа конца строки и он считает что команда не завершена.

  7. скетч:
    #include

    int gLedPin = 13;
    int gRxPin = 10;
    int gTxPin = 11;

    SoftwareSerial BTSerial(gRxPin, gTxPin);

    void setup() {
    BTSerial.begin(9600);
    Serial.begin(9600);
    delay(500);
    }

    void loop() {
    if (BTSerial.available()) {
    Serial.write(BTSerial.read());
    }
    if (Serial.available()) {
    BTSerial.write(Serial.read());
    }
    }

  8. Пробовали ли Вы подключать, например, к HC-5 (в режиме мастер) другие устройства. Например, гарнитуру, или пульсометр?

  9. Доброго времени суток! Вопрос, при отправки команды «АТ» на BT не могу распознать ответ от него, т.к. приходит в формате «xxxx⸮», может кто сталкивался.

    • разобрался, проблема была в разности скоростях «BTSerial.begin» и «Serial.begin».

  10. Спасибо за статью. Остались вопросы:
    1. Зачем кнопка на модуле?
    2. Что выдается на ноге STATE?
    3. Как управлять модулем с ноги EN?
    Спасибо за ответы…

    • Кнопка соединяется к контактом KEY. С помощью неё можно переходить в режим настройки.
      STATE — это контакт, который отвечает за светодиод состояния. Можно подключить STATE к Ардуино и проверять, например, есть ли соединение в данный момент.
      EN переключает модуль в активное состояние. По-умолчанию модуль активен, так что можно не трогать этот контакт.

      • 1. Кнопку необходимо удерживать, чтобы проходили команды? Или достаточно нажать и отпустить?
        2. А на выводе STATE будет также мигание 2 раза в секунду или 1 раз в две секунды как и светодиод состояния?
        3. Какой уровень надо подать на EN чтобы отключить модуль?
        Извините за въедливость мою… хочу поэкспериментировать и прикинуть где и как это может пригодиться. Спасибо…

        • Кнопка привязана к контакту KEY, так что пользуйтесь ей как описано в статье.
          STATE привязан к светодиоду, соответственно полностью повторяет его поведение.
          Про EN не подскажу, на самом чипе такого пина вообще не предусмотрено. Кто-то пишет, что он вообще может быть никуда не подключен. Вам стоит проверить, подать на него высокий и низкий уровень.

  11. почему при компиляции скетча из п4 выходит exit status 1
    Ошибка компиляции.?

  12. подскажите, пожалуйста, все сделал как надо:подключил на KEY, светодиод моргал раз в две секунди, но команды АТ не принимаются. не знаю что делать дальше. помогите!

    • Проверьте все скорости обмена. Для разных вариантов входа в режим AT команд, будет разная скорость обмена с модулем — 9600 или 38400.
      Если не получается, попробуйте скорость 115200

  13. нужно получать отладочные данные с ком порта приличной кучи ардуин но ноут с 2303 прожигателем таскать не удобно. смотрю на телефон и этот блютус. хочу узнать. этот модуль может передавать данные с ком порта сам если просто подключить рх тх и питание? его можно настраивать с телефона? или нужна еще ардуинка как переходник с юарта нужного устройства на юарт блютуза? вроде как по логике модуль должен передавать все что на него приходит по юарту кроме команд настройки.

    • Если вы умеете с телефона передавать данные по UART, то контроллер не нужен. Максимум, что может потребоваться, это согласовать уровни напряжения 3.3В — 5В. Настройки модуля тоже делаются через UART с помощью AT Команд.

  14. Привет всем. Попался мне тут Bluetooth-модуль BT-20 на чипе BC212 от CSR. Стоит задача поднять на нём виртуальный COM-порт (режим ведомого, чтобы на смарте/ноуте появлялся виртуальный ком-порт при подключении к модулю). Поиск документации на сей модуль и чип особого успеха не принёс. Как я понимаю, конфигурация и общение с модулем со стороны микроконтроллера ведётся с помощью АТ-команд через UART. Хотелось бы понять как его перевести в режим АТ-команд, какие команды воспринимаются модулем и как его необходимо конфигурить, чтобы он работал как виртуальный com-порт? Какова сама процедура приёма/передачи потока данных черех модуль?
    Спасибо!

  15. Друзья, помогите пожалуйста ! Можно ли с помощью hc-5 сделать такое: два модуля при обнаружения друг, друга начинаю т подавать сигнал (включение светодиода) Напишите в whattssapp пожалуйста +79091554056 очень нужно. Или инстаграм @valery_voropaev

    • пропиши им пару как описано в статье и будешь понимать, что есть сопряжение и связь по выходу 32 — bt_link. подключи к этому выходу LED.

  16. Плата arduino nano, при подачи напряжения на модуль HC-06, индикатор моргает в течении 3-5 сек. и перестает моргать. Это что значит, что ему П…Ц?

    • Автор решил эту проблему,у меня такая же беда,что с ним не понятно,идти за новым или этот можно еще как то оживить

  17. У меня HC-06 у меня нету пина KEY и нету никакой кнопки? Это чё мне нужно растаять пин KEY?!

  18. Перейдём в терминальную программу, соединимся с портом и попробуем послать команду AT , на которую нам модуль должен ответить OK

  19. Всем привет!

    Есть модификация модуля HC-05 с 6ногами, (State,RX,TX,GND,VCC,EN), очень популярная сейчас на Алиэкспресс, так вот, для нее не нужно припаивать проводок на 34пин (KEY) и подавать туда 3.3в, чтобы включить работу RX-TX на выводах необходимо подать 3.3в. на разъем EN а не на key, после этого такой модуль начинает работать как положено начинает отвечать на AT команды отправленные с компьютера или ардуины по пинам. С трудом нашел эту информацию в одном описании этого модуля на странице товара на алиекспресс.
    Короче все также как с KEY в этой статье, только 3.3в. подаем на EN! (Enter).
    Привожу описание на англ.

    First, the module parameters:
    1.PCB Dimensions: 37.3mm (length) * 15.5mm (W)
    2 Weight:. 3.5g
    (3) Input voltage: 3.6V—6V, 7V ban over
    4 power anti-reverse, reverse module does not work
    5 leads to 6 feet: EN / VCC / GND / RXD / TXD / STATE (Bluetooth status leads to the foot, is not connected to the output low, after connecting output high)
    6 with the connection status indicator, LED flash means no Bluetooth connection; LED flashing slowly that enter the AT command mode
    7 onboard 3.3V regulator chip, the input voltage DC 3.6V-6V; When unpaired, current of about 30mA (because LED lights flashing, the current state of change); After successful pairing, the current is about 10mA
    8 Interface level 3.3V, you can directly connect a variety of microcontroller (/51/AVR/PIC/ARM/MSP430 etc.), 5V microcontroller can also be directly connected. Directly connected to the microcontroller serial port, not through the MAX232 chip!
    9 open area effective transmission distance of 10 meters, over 10 meters are possible, but do not guarantee the quality of the connection
    10. After successful pairing, can be used as a full-duplex serial port. Do not need to know anything about the Bluetooth protocol, but only supports 8 data bits, 1 stop bit, no parity communication format. This is the most common communication format that does not support other formats!
    11 Press the key to give the Bluetooth module is energized to enter AT mode, set parameters and query information
    12 can be switched master and slave mode via AT commands
    13 modules default baud rate is 9600, the default passkey is 1234, the default name for the HC-05
    14 protection with transparent shrink tube
    Second, wiring methods:
    VCC: positive power supply
    GND: power supply is negative
    RXD: Receive side, the Bluetooth module receives data sent to the other device; TXD terminal normally connected to the other device to send
    TXD: sending end, the Bluetooth module to send data to other devices; RXD terminal normally connected to other devices receiving
    EN: Enable, then you need to enter AT mode 3.3V

    • Павел, у меня как раз такой модуль (с EN-Z), и вот нифига не получается его заставить что-то говорить в ответ.

  20. Да и после подачи 3.3в. на EN модуль начинает работать на скорости 38400, с ним работает вот этот скетч:

    #include
    #include

    //int gLedPin = 13;
    int gRxPin = 10;
    int gTxPin = 11;

    SoftwareSerial BTSerial(gRxPin, gTxPin);

    void setup() {
    //# 38400 — для метода №1, 9600 — для метода №2
    pinMode(LED_BUILTIN, OUTPUT);
    BTSerial.begin(38400);
    Serial.begin(9600);
    delay(500);
    }

    void loop() {
    if (BTSerial.available()) {
    Serial.write(BTSerial.read());
    }
    if (Serial.available()) {
    //digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level)
    BTSerial.write(Serial.read());
    //digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW
    }
    }

  21. Правильный скетч (в прошлом сообщении криво вставился…)

    #include
    #include

    //int gLedPin = 13;
    int gRxPin = 10;
    int gTxPin = 11;

    SoftwareSerial BTSerial(gRxPin, gTxPin);

    void setup() {
    //# 38400 — для метода №1, 9600 — для метода №2
    pinMode(LED_BUILTIN, OUTPUT);
    BTSerial.begin(38400);
    Serial.begin(9600);
    delay(500);
    }

    void loop() {
    if (BTSerial.available()) {
    Serial.write(BTSerial.read());
    }
    if (Serial.available()) {
    //digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level)
    BTSerial.write(Serial.read());
    //digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW
    }
    }

  22. Вот такой интересный вопрос возник. Китайский аналог нс06 — jdy09. Видим не на всех моделях телефонов. Htc one, asus zenfone его видят и нормально работают. А вот шестое яблоко и сяоми шлют его лесом. Может кто сталкивался, в чем может быть проблема?

  23. Доброго времени суток !!! Ребята ! Подскажите пожалуйста, для диагностики гбо ( газо баллонное оборудование ) ,Я купил HC-05 распаял по рекомендациям из интернета , подключил к разъёму гбо и…… Ни какого эффекта . компьютер win10 видит блютуз адаптер , информирует что устройство подключено , и работает нормально. Но!!! Программа диагностики гбо , сообщает что контролер не обнаружен!!! , те, мозги гбо, не отвечают на запрос программы диагностики, ( «косы» заводского исполнения ) на адаптер питание подаётся , подскажите пожалуйста , как мне быть, в этом случае?! Мне кажется что проблемам в HC-05 или Я ошибаюсь? Как мне проверить HC-05 заранее спасибо!!!!!

    • Чтобы проверить HC-05, подключите его к компу напрямую через usb-uart переходник. Затем запустите его в командном режиме, как это описано в статье, а потом передайте пару каких-нибудь AT команд. Если он отвечает, то скорее всего с самим модулем всё ок.

  24. Привет Олег. Спасибо за статью, отчасти помогла. Команды АТ и AT+VERSION работали, а вот имя и скорость передачи данных сменить не смог. Вычитал, что производителем была сменена прошивка, и начиная с VERSION:3.0-20170609 немного видоизменились команды (появился знак = перед значением), и теперь имеют подобный вид:
    AT+NAME=BT GPS 1 смена имени
    AT+UART:57600,0,0 смена скорости передачи данных
    Возможно эта инфа кому-то пригодится.

  25. Как подружить HC-05 с айфоном?
    Как устройство айфон его даже найти не может

  26. После подачи питания светодиод мигает очень часто. После соединения с Андроидом мигает редко — две вспышки подряд. Передаёт лажу — в основном подряд несколько одинаковых символов, код символа — fd. Что означает мигание два раза подряд с периодом 2 секунды? Возможно это код ошибки. Где взять эти коды?

  27. Тут проблемка возникла.При отправке символа 1 с телефона он выдает в ком порте x?x?x , с другими буквами и цифрами такая же проблема, но символы другие. Что делать? заранее спасибо!

  28. at+version?
    +VERSION:4.0-20190728
    OK
    AT+CMODE?
    +CMODE: 1
    OK
    AT+ROLE?
    +ROLE:0
    OK
    AT+CLASS?
    +CLASS:0x1F00
    OK
    AT+UART=115200,0,0
    OK
    ————-
    После этого отказывается общаться на этой скорости, на 115200 опять отвечает, но после
    at+reset
    OK
    at

    at+uart?
    +UART:4800,0,0,
    сбрасывает.
    Как с этим бороться? Это лечится?

  29. Для HC-06 версия 3.0-20170609
    Для настройки модуля
    Не должно быть соединения по блютуз с другим устройством.
    Соединиться через TTL адаптер Rx к Tx, а Tx к Rx
    Изначальная скорость 9600
    Включить NL & CR команды отдаются только большими буквами.
    Команды:
    AT
    AT+VERSION результат VERSION:3.0-20170609
    AT+UART запрос текущей скорости
    AT+UART:38400,0,0 устанавливает скорость 38400. меняйте скорость под свои нужны
    AT+NAME возвращает установленное имя модуля
    AT+NAME=НовоеИмя устанавливает новое имя
    AT+PSWD покажет пароль
    AT+PSWD:»1234′ устанавливает пароль

  30. Хочу сделать блютуз музыкальный центр как сделать чтобы модуль передавал сигнал и от куда нужно его снимать( troyka bluetooth hc-05 )

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.