Bluetooth-модуль HC-05


Bluetooth уже давно и прочно вошёл в нашу жизнь в качестве удобного протокола связи различных устройств: мобильных телефонов, ноутбуков, КПК, гарнитур, мышей, клавиатур… Список можно ещё долго продолжать. Обычно эту технологию интегрируют в свои продукты крупные производители электроники в виде малюсенькой микросхемы в корпусе BGA или QFN. А как быть нам, простому электронному люду, не владеющими тёмными силами создания 4-слойных плат и кунг-фу микромонтажа? Для этого есть
Bluetooth-модуль HC-05 от наших китайских собратьев.

Этот модуль представляет собой плату размером 2.7×1.4 см, с 34 выводами с шагом 1.5 мм, расположенных по периметру платы, и имеет на одном из торцов антенну:


На плате расположен чип BC417 от компании Cambridge Silicon Radio, который обеспечивает аппаратную поддержку стека Bluetooth 2.0+EDR (Enhaced Data Rate), а также флэш-память ES29LV800DB-70WGI от Excel Semiconductor на 8 Мбит (1 МБ), хранящая прошивку и настройки.
С оригинальной китайской прошивкой модуль умеет работать в двух режимах: простого «радиоудлинителя UART» и управления AT-командами. В первом случае всё предельно просто — включаешь модуль, подключаешься к нему с компа или иного устройства, умеющего делать COM-порт по Bluetooth, и шлёшь в этот порт данные. Во втором режиме можно управлять модулем посредством AT-команд вида «AT+КОМАНДА» — например, команда «AT+NAME?» позволяет узнать имя модуля, но об этом позже.

Для того, чтобы подключить модуль, проясним назначение выводов:

  • TX, RX, CTS, RTS — линии UART; CTS и RTS недоступны в данной прошивке
  • PCM_CLK, PCM_OUT, PCM_IN, PCM_SYNC — линии для приёма-передачи звука (недоступны)
  • AIO0, AIO1 — линии I/O общего назначения (недоступны)
  • RESET — линия сброса (активируется логическим нулём)
  • 3.3 V, GND — питание, земля
  • NC — не подсоединён (Not Connected)
  • USB_D+, USB_D- — линии данных USB (недоступны)
  • CSB, MOSI, MISO, CLK — линии SPI (CSB — это SS, Slave Select), используются для прошивки чипа
  • PIO0 — разрешение/запрет RX
  • PIO1 — разрешение/запрет TX
  • PIO2-PIO7, PIO10 — линии I/O общего назначения
  • PIO8 — для светодиода, показывающего состояние модуля: светодиод мигает с разной скоростью в зависимости от того, чем занят модуль — опросом Bluetooth-устройств, ожиданием или чем-то ещё
  • PIO9 — для светодиода, показывающего статус соединения: горит, если установлено соединение с другим Bluetooth-устройством
  • PIO11 — для управления режимом работы: по умолчанию режим простого удлинителя UART, а если подать на него логичскую 1 — режим AT-команд

Кстати, модуль питается от 3.3 В, но его линии I/O могут работать и с 5-вольтовой логикой, что позволяет подключать его UART к Arduino без заморочек.

Но это ещё не всё: шаг между выводами у модуля — 1.5 мм, что категорически не сочетается с шагом отверстий в макетных платах, и для прототипирования придётся припаивать проводки. Но нас такой вариант не устроил, и пришлось немного напрячься и сделать плату-breakout для модуля. Zotlberg взял на себя эту задачу и успешно её решил вот в таком виде:

На плате установлен стабилизатор на 3.3 В, так что можно запитать модуль стандартным для Arduino напряжением 5 В, подключив питание к выводу, обозначенному 5V. Принципиальная схема платы:

А вот ещё исходники в формате DipTrace: принципиальная схема и разведённая плата.

Итак, плата готова, приступим к работе с модулем. Ставим breakout в макетную плату и подключаем следующим образом:

  • 3.3v — к 3.3 В от Arduino
  • GND — к GND Arduino
  • RX — к TX Arduino
  • TX — к RX Arduino

Включаем Arduino с подключенным модулем. Если в вашем компьютере нет встроенного Bluetooth-контроллера, воспользуйтесь Bluetooth USB-донглом вроде этого:

Теперь займёмся программной частью. Для начала зальём в Arduino такой скетч:

enum { LED_PIN = 13 };
enum LedState { LED_ON, LED_OFF, LED_BLINK };

LedState led_state;

void setup()
{
  led_state = LED_OFF;
  pinMode(LED_PIN, OUTPUT);

  Serial.begin(38400);
}

void loop()
{
  if (Serial.available())
  {
    char command = Serial.read();

    switch (command)
    {
      case '1': led_state = LED_ON; break;
      case '0': led_state = LED_OFF; break;
      case '*': led_state = LED_BLINK; break;

      default:
      {
        for (int i = 0; i < 5; ++i)
        {
          digitalWrite(LED_PIN, HIGH);
          delay(50);
          digitalWrite(LED_PIN, LOW);
          delay(50);
        }
      }
    }
  }

  switch (led_state)
  {
    case LED_ON: digitalWrite(LED_PIN, HIGH); break;
    case LED_OFF: digitalWrite(LED_PIN, LOW); break;

    case LED_BLINK:
    {
      static unsigned long start_millis = 0;

      if (millis() - start_millis >= 300)
      {
        start_millis = millis();
        digitalWrite(LED_PIN, !digitalRead(LED_PIN));
      }
    }
  }
}

Windows 7

Кликните правой кнопкой мыши на значке Bluetooth в трее:

В появившемся списке устройств выбираем наш модуль и жмём Далее:

В следующем окне выберите вариант ввода PIN-кода вручную:

Введите код «1234» и нажмите Далее:

Если авторизация пройдёт успешно, то вы увидите следующее окно:

Откройте список Bluetooth-устройств и зайдите в свойства модуля:

На вкладке «Службы» поставьте галочку напротив профиля последовательного порта и нажмите ОК:

Windows установит нужный драйвер и покажет облачко с соответствующим сообщением и названием порта:

Теперь вам понадобится программа-терминал с хорошей настраиваемостью. Неплохим вариантом будет лёгкая и бесплатная (даже для коммерческого использования) программа Termite. Установите её, запустите и нажмите Settings. В настройках поставьте:
Port — COM6 (ну или какой порт Windows назначила модулю у вас)
Baud rate — 38400
Transmitted text — Append nothing

Жмите OK и в главном окне программы Disconnected — click to connect:

Всё — можно слать символы:

Модуль должен зажигать светодиод L в ответ на символ ‘1’, тушить на ‘0’ и мигать им на ‘*’ c частотой примерно два раза в секунду. При вводе любых других символов светодиод должен около секунды мигать с большей частотой.

Ubuntu Linux 11.04

Запустите bluetooth-wizard и нажмите «Вперёд»:

В следующем окне дождитесь нахождения вашего модуля и нажмите кнопку «Параметры PIN»:

Выберите PIN-код 1234 и закройте окно:

В окне со списком устройств Жмите «Вперёд», и если будут ошибки, повторите операцию с PIN-кодом. В случае успеха вы увидите такое окно:

Запустите сканирование доступных Bluetooth-устройств:

$ hcitool scan
Scanning ...
	        00:11:04:29:02:55       H-C-2010-06-01

H-C-2010-06-01 — это имя нашего устройства (может быть также «HC-05»). Создаём устройство для работы по протоколу RFCOMM:

$ sudo rfcomm bind /dev/rfcomm0 00:11:04:29:02:55

Всё, теперь можно обмениваться данными через виртуальный COM-порт /dev/rfcomm0. Можно прямо в консоли:

$ stty -F /dev/rfcomm0 38400  # устанавливаем скорость порта
$ echo -n '1' > /dev/rfcomm0  # пишем туда символ '1', без символов перевода строки

Также можно воспользоваться замечательной программой cutecom: в поле Device введите /dev/rfcomm0, в списке Baud rate поставьте скорость 38400, внизу окна в списке выберите вариант No line end. Теперь жмите Open device и шлите через поле Input символы:

Модуль должен зажигать светодиод L в ответ на символ ‘1’, тушить на ‘0’ и мигать им на ‘*’.

AT-команды

Чтобы задействовать такие функции модуля, как опрос «соседних» Bluetooth-устройств, установку другой скорости UART и прочие, необходимо использовать AT-команды, описанные в этом datasheet. Сразу предупреждаю: этот даташит очень китайский — многие вещи просто не описаны, для некоторых команд не описано даже их поведение, оформление кривое, куча ошибок из-за невнимательного copy&paste. Но другие даташиты на этот модуль ещё хуже }:[=]

Все команды имеют вид AT+КОМАНДА, AT+КОМАНДА? или AT+КОМАНДА=ПАРАМЕТРЫ и должны оканчиваться комбинацией CR+LF (символы с кодами 0x0D и 0x0A, ‘\r’ и ‘\n’). Примеры команд:

AT+NAME? — спросить у модуля его имя
AT+ROLE=1 — задать роль master
AT+INQ — запустить опрос соседних Bluetooth-устройств

Отвечает модуль так:

  • В случае успеха:
    +КОМАНДА:ОТВЕТ
    OK

    Строки, начинающейся с ‘+’, может и не быть, если команда не должна ничего возвращать. Например, на команду AT+NAME? модуль ответит так:
    +NAME:H-C-2010-06-1
    OK

    а на команду AT (тест) просто:
    OK

  • В случае ошибки:
    FAIL
    или
    ERROR:(КОД ОШИБКИ)

    Самый первый код ошибки 0 значит, что формат команды неверен — на команду AT+ЖАХНИ, к примеру, модуль ответит:
    ERROR:(0)

    Кстати, зацените грустный смайл 🙁 в этом ответе.

    Многие команды имеют как форму запроса, так и форму установки параметра. Опять же, команда AT+NAME? возвращает имя модуля, тогда как AT+NAME=ИМЯ его устанавливает.

    Для того, чтобы модуль мог принимать AT-команды, нужно его перевести в соответствующий режим — для этого нужно установить вывод PIO11 в логическую 1 (подтянув к питанию, например). После этого соединяйтесь с модулем, используя Arduino в качестве переходника USB-UART, аккуратно вытащив из него микроконтроллер (не сломайте ножки МК!)
    Выставьте в терминалке конец строки CR+LF и попробуйте скормить модулю пару команд. Выглядеть это должно примерно так:

    Всего команд 36, описаны они все в даташите. Заданные командами настройки модуль сохраняет в своей flash-памяти, так что после его можно использовать без повторной настройки.

    А вообще, работать напрямую с AT-командами, да ещё на микроконтроллере, довольно сложно и уныло, так что я основательно вкурил ядрёный китайский даташит и накатал библиотеку Bluetooth_HC05. В библиотеке я реализовал все функции модуля, документация по библиотеке лежит в директории doc.

    И напоследок: возможность перепрошивки аналогичного модуля обсуждали на хабре, ну и в сообществе easyelectronics есть небольшая заметка.


121 комментарий на «“Bluetooth-модуль HC-05”»

  1. Очень интересная информация, спасибо за подробную инструкцию, в том числе и для Ubuntu. Кстати вместо Termite можно использовать Putty.

    Я жду похожий модуль для связи Arduino и обычного мобильного телефона через J2ME приложение.

    Из ссылок нагуглил подробные статьи
    developers.sun.com/techtopics/mobility/apis/articles/bluetoothintro/index.html
    developers.sun.com/techtopics/mobility/midp/articles/bluetooth2/index.html
    http://www.codeguru.com/java/article.php/c13147
    http://www.mobilab.ru/articles/63/
    http://www.mobilab.ru/articles/64/
    http://www.mobilab.ru/articles/65/

    но реализовать стабильную работу пока не получилось. Может есть у кого готовый рабочий пример поиска bluetooth устройства и подключения к нему как к RFCOMM на J2ME?

    • PuTTY — отличная программа, но, как по мне, она лучше для SSH, да и настраивать Termite оказалось куда проще.
      За ссылки спасибо, они очень пригодятся, когда захочу порулить Bluetooth-девайсом с мобилы, ибо Java я знаю на уровне «это как C++, только проще, надёжнее и с батарейками».
      Насчёт стабильной работы, кстати — то ли у меня руки кривые, то ли это технология такая, то ли драйвера и софт… Но чтоб этот синий зуб завёлся с первого раза и без гемора — такого у меня не было (:

    • Могу добавить мини-faq «как сделать первое приложение для мобилы с Java (J2ME)» на примере простейшего приложения скачивающего и отображающего содержимое веб странички.

      1. Скачать/установить Java Platform (JDK) отсюда;
      2. Скачать/установить Java ME SDK отсюда;
      (рекомендую ставить эти пакеты на виртуальную машину, т.к. они сильно оч засоряют систему)
      (+ есть какие-то проблемы с эмулятором на XP SP3 и WIN7; рекомендую XP SP2)
      3. Запустить среду разработки Java ME SDK;
      4. Создать новый проект File->New Project -> MIDP Application -> [x] Create Hello MIDLet -> Finish;
      5. Скопировать этот исходник (~70 строчек кода) и скомпилировать его через F6;

      Должен запуститься эмулятор с приложением, а в папке dist проекта должны появиться файлы MobileApplication1.jad и MobileApplication1.jar, которые можно закачать на мобилку и запустить их оттуда.

      Для работы с Bluetooth нужно примерно строчек 5-10 написать, вся инфа вроде есть в ссылках выше, но без самого модуля и тестирования трудно сделать все без ошибок.

      Если кто сделает приложение для связи с Arduino, буду очень признателен помощи или исходнику, пишите на webaff.ru@gmail точка com.

    • Со стандартной прошивкой — нет. Можно попробовать написать свою, руководствуясь статьёй на Хабре, но это то ещё приключение (:

  2. Binary sketch size: 2344 bytes (of a 32256 byte maximum)
    avrdude: stk500_getsync(): not in sync: resp=0x00
    avrdude: stk500_disable(): protocol error, expect=0x14, resp=0x00

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

    • Но почему вы пишете об этом здесь, в теме о Bluetooth-модуле, если есть форум? (вверху страницы ссылка)
      К тому же, уведомление о новом комментарии в этой теме получил, наверное, только я.
      В общем, ошибка говорит о том, что Arduino не подключена или avrdude не может подключиться к плате по иным причинам. Впрочем, я не телепат, так что проверьте ваш USB-шнур (шнуры от всяких дешёвых китаедевайсов часто глючат), а уж если точно дело не в шнуре, пишите на форум в подходящий раздел, указав:
      — Модель платы (Arduino Uno/Mega/или_что_у_вас_там)
      — Версию IDE (0022 или недавно вышедшая 1.0)
      Ну и загляните в пункт меню Tools→Serial port и посмотрите, какие там есть COM-порты. Обычно, если это первая Arduino, когда-либо подключеная к компу, то у неё имя порта будет COM3.

  3. Не все скорости одинаково полезны…
    Видать не на всех модулях по-дефолту установлены 38400, на модуле который мне пришел оказалось 9600.

    • Китайцы любят делать сюрпризы. Сбросьте настройки командой AT+ORGL и проверьте, какая скорость будет после этого. Вполне может стать 38400 (:

    • Извиняюсь за глупый вопрос (сегодня прям день какой-то: почувствуй себя неумехой..), для управления модулем AT-командами нужно: PIO11 соединить с питанием (3.3), RX модуля к TX Arduino, TX модуля к RX Arduino, из платы ардуино вынуть мк (чтобы плата стало просто uart-usd-переходником), подключить usb-кабель, в настройках терминала выставить скорость на которой работал модуль и завершение строки CR+LF. Так ведь?
      А то не отвечает модуль на команды, и не могу понять почему…

    • Я не очень понял, как это у вас ничего не работает, если вы уже выяснили, что скорость 9600. Как у вас это получилось, в таком случае? (:
      У меня только два предположения: либо не подключена GND, либо скорость выставлена неверно. Имейте ввиду, что скорость в режиме удлинителя и в режиме AT-команд может отличаться.

    • Дак то скорость выяснил просто перебором, в режиме удлинителя uart.
      Уже разобрался — at-команды заработали (день вчера такой видать был). По невнимательности не туда подключался: craftduino в режиме переходника usb-uart rx/tx нужно было подключать uart-разъему… =))

  4. Подскажите а как передавать данные с HC-05. На приём все работает, передавать не хочет. В setup написал: Serial.begin(9600). В loop: Serial.print(«text»); delay(3000). RX модуля соеденил с TX ардуино, TX с RX соответственно. Ни в какую не передает через модуль. Отображает только в SerialMonitor’e среды разработки ардуины.

    • Если работает на приём — значит, у вас есть другой модуль, передающий что-то первому, я правильно понимаю? Объясните, пожалуйста, внятно и подробно суть проблемы, и, желательно, с приведением фотки модулей, подключенных к Arduino.

    • прошу прощения, контактик от RX на модуле отошел, было совсем не заметно.

  5. А реально ли через него файл передать. Напирмер в винде отправляем простой txt, hc-05 его принимает и записывает например на sd карту. Есть мысли?

    • А почему бы и нет? В виндовый комп ставишь USB Bluetooth-донгл, через который коннектишся к HC-05. В системе появляется виртуальный COM-порт, а по нему уже гоняешь данные, какие хочешь. На принимающей стороне должны быть МК, HC-05, SD/MicroSD-карта, и должен быть написан код для обмена данными по UART с компом, с библиотеками для работы по SPI с картой и для работы с файловой системой FAT32 на карте. Про SD я ещё и на форуме писал.

    • Должен признаться, что библиотека не настолько полезна, насколько я себе представлял — иной раз проще напрямую AT-командами воспользоваться. Но пример я как-то раз написал, к использованию модуля в режиме master (инициатор подключения).

  6. Столкнулся с проблемой — не получаю ответов на AT команды от модуля.
    Модуль: http://www.aliexpress.com/snapshot/103904655.html,
    насколько я понимаю аналогичен Вашему.

    Подключаюсь следующим образом:
    1. Вытаскиваю МК.
    2. Подключаю BT модуль: питание, Rx и Tx на 1 и 0 вывод Arduino (Freedruino).
    3. Подвожу POI11 на +5В

    Подключаю ардуину к компьютеру по USB — открываю Serial Monitor (Termite.exe), конец строки LR+LF
    и пробую разные скорости.
    Ответов не получаю.

    Вот здесь: http://www.compcar.ru/forum/showthread.php?p=92483
    предлагают не вынимать МК из ардуины, а залить на нее прошивку USB UART моста и подключать Rx, Tx
    BT к 8 и 9 портам ардуины соответственно.
    Пробовал так — нет ответов.

    Если можно — через skype обсудить (skype:wyfinger)

    • Если я правильно понимаю то Вы подключаете Rx модуля к Rx ардуины, а надо Rx модуля к Tx ардуины. Плюс ко всему модуль у Вас не HC-05 а HC-04 или HC-06, это следует из описания по Вашей ссылке: 3) Found name called «LINVOR» device. У меня самого таких 2 и 1 HC-05. А так как это HC-04 то у него и скорость 9600 и команды без СR+LF. Здесь хорошо написано. Если что, пишите здесь, свяжемся по скайпу.

    • Да нет, я подключаю как нужно: Rx вывод BT на 1 (Tx) ногу Ардуино и Tx вывод BT на 0 ногу Ардуино.
      В режиме UART удлинителя все работает. Скорость 9600.
      Пытался найти режим AT команд на разных скоростях и с разным завершением строки — безрезультатно.
      Буду экспериментировать в субботу (нет времени, много работы), пока собираю идеи и решения.

    • Ошибочка вышла, у меня нано и Rx и Tx отличаются от обычных, у меня тоже была проблема с АТ командами, мешал Blue Soleil, решил переустановкой системы без него.

    • Если пользуетесь дуиной как USB->UART преобразователем то включать надо на прямую — TX модуля в TX платы RX в RX.

    • Извините, на гитхабе не смотрел, теперь увидел.

  7. Подскажите пожалуйста столкнулся с проблемой. Получилось настроить модуль и все работает как в написано в статье, но только если питание подается через USB подключаю блок питания и модуль ни как не реагирует. В чем может быть проблема?

    • В подключении, наверное. Можете фотку подключения запостить?

    • Разобрался. Мой блок питания похоже не подходит (9v 1000mA от китайской игрушки). Подключил крону и все заработало

    • Как это нельзя? o_O
      Там какие-то необычные 3.3 В, что ли? (:

    • т.е. можно запитать блутус модуль без стабилизатора и без конденсаторов сразу с 3,3В?

    • Извините, вы вообще статью читали? Там всё предельно чётко написано.

    • Я даже поясню: в примере в статье, что очевидно, стабилизатор не используется (он для запитки от больших, чем 3.3 В, напряжений), он просто размещён на плате для удобства.

    • Подключил блутус к ардуино
      следующим образом:

      3.3v — к 3.3 В от Arduino
      GND — к GND Arduino
      RX — к TX Arduino
      TX — к RX Arduino
      в сети видно устройство, как linvol
      в Termite вижу отправку данных в COM порт, но вот странное дело… у меня в схеме ЖК на регистре сдвига с регулировкой подсветки и набором различных датчиков… так вот беда в том, что при подключенном блутусе индикации на модуле нет, но мигает подсветка ЖК 🙁
      В чем может быть причина такого?

    • Питания может не хватать, например. Дисплей у вас сколько потребляет?

    • Хм… А исходники покажите (выложите на файлообменник или типа того)

    • отключил все свои схемы от ардуино… оставил только модуль блутуса… переживал что он у меня помер… в итоге на ПК добавил устройство и в системе стало 2а СОМ порта — 12 и 13…
      если в Termite использовать СОМ от USB, то все работает четко, если выбирать СОМ12, СОМ13, которые от блутуса, то Termit зависает

      И еще конечно же я в скетче менял скорость на 9600

    • дело было в плохих контактах… поправил — все заработало… попробую теперь вернуть все свои схемки обратно на ардуино…

    • Дык купи мультиметр и прозванивай проводники перед подключением (сомнительные контакты, китайские соединительные проводки и т.п.)
      Только когда нет «ни единого разрыва» (:, можно считать схему правильно собранной. А иначе работа с таким девайсом — что гадание на коровьей гуще.

    • Нет, однослойная двусторонняя. Поставьте себе бесплатную версию DipTrace и посмотрите сами, если хотите (:

    • Я это и имел ввиду. Просто не понял для чего сквозные никуда не ведущие отверстия. Теперь понятно.

  8. Подключил все правильно на команды AT приходит ответ но вот при попытке установления новых параметров возвращает ошибку.
    Т.е пишу AT->OK, AT+NAME->+NAME:HC-05, AT+NAME=MyBT->ERROR:(2)или AT+ORGL->ERROR:(2). В datasheeе сказано PSKEY write error. Пробовал ставить изменять окончания CR+LF не помогает, указывать параметры в кавычках, через ":", но один фиг при попытке изменить какойнибуть параметр ERROR:(2).

    • Выглядит так, словно модуль у вас с заблокированным EEPROM или кривой прошивкой. Это вы где такой заказали?

    • брал тут shop.redbomb.ru/index.php?route=product/product&path=59&product_id=65

    • Добрый день!
      Попробуйте записать так:
      UARTSend(«AT+NAMERB-BTHC\r\n», 17);

    • Вместо RB-BTHC ваше название соответственно.
      Без всяких дополнительных симоволов. Если проблему в итоге нельзя будет решить, тогда мы произведём замену.
      У нас модули из этой партии работают — мы на их основе делаем платы.

  9. Доброго времени суток!
    Кто-нибудь пробовал ставить нестандартную (например 10400 кбит/с) скорость порта RS232 на блютуз модуле? Такая возможность есть?

    • Нет, такой функции в модуле не предусмотрено. Если хочется ограничить доступ к модулю, лучше задать пароль (точную команду не припомню, смотрите в даташите).

  10. Не как немогу установить связь с этим устройством.
    Находися, ввожу пин, все определяется, но то порт не появляется, то появляется, но он из программы терминал недоступен, то появляется два порта в свойства написано один входящее соенинения другой исходящие (картнку на форуме размещвл).
    Как заставить это работать, помогите?

  11. У меня почему-то заработал, только после того, как я подключил RX от модуля к RX дуины а TX от модуля к TX дуины.
    Причем символы не обрабатывает, всегда мигает по дефолту на любой символ.

    • Это если с компа через FT232 соединяться (например для конфигурирования модуля в режиме AT-команд)- тогда, да на прямую надо.
      А если хотим чтоб дуина общалась с HC-05, тогда строго накрест.

  12. Теперь я о своем спрошу, чтобы топик не закисал 🙂
    В описании пинов выше сказано, что PIO0 и PIO1 для разрешения/запрета RX и TX соответственно. Но я смотрю на PIO1 повешен св.диод… Вы перепрошивали ВТ? Если модуль по дефолту, то какой уровень на этих пинах соответствует запрету, а какой разрешению?
    Дело в том, что соединив модуль ВТ НС-05 в режиме АТ через FT232RL я спокойно установил нужную скорость 38400 по умолчанию, сбросив предварительно все настройки. На запрос о настройках UART модуль ответил 38400,0,0. Кстати, что это значит помимо скорости?
    После поиска ВТ в сети и установки, появляется два СОМ-порта, как тут неоднократно упоминали. На одном виснет терминал, а на втором не соединяется.

  13. Не было контакта там, где должен быть. Но так и не понятно, почему два СОМ-порта образуются. Причем, пока один не удалишь, соединение не устанавливается.

    • Причем, это фичка донгла ВТ. Удаляю из списка в диспетчере, а при повторном втыкании донгла, порт устанавливается вновь.

    • Коли так, попробуйте скачать дрова с сайта производителя, ну и в других ОС посмотреть на работу донгла, если есть такая возможность. Скорее всего, это баг драйвера, а не устройства.

    • До этого устанавливал СОМ-порт на НС-04. Все как положено — один порт.

    • Удалил все устройства и начал ставить заново, но уже с НС-05. Все равно два СОМ-порта. Но сюрпризы были впереди — при установке НС-04, также создалось два СОМ-порта. Дров родных нет на Win7, наверно, подразумевается, что в ОС уже есть все необходимое — дрова только до WinXP.

    • Один, из создаваемых СОМ-портов, исходящий, а второй, соответственно — входящий. Как это лечить?

  14. Вспоможите советом!
    Никак не могу заставить передавать данные по BT. А принимает модуль четко.
    Предположительно HC-04 (default имя — linvor, скорость — 9600,
    куплен здесь
    dx.com/p/wireless-bluetooth-rs232-ttl-transceiver-module-80711
    )
    Питаю от Nano 3.3V pin. Скетч для arduino мигающий диодиком от посланных из терминалки комманд работает четко и с winxp и с android.
    Serial.read — работает, а вот Serial.write уже нет, совсем ничего не шлет. (SoftwareSerail тоже пробовал).

    Без arduino посылка AT ничего не возвращает, подача 3.3V на pio11 (контакт 34) ничего ни меняет, комманды не воспринимает, работает по прежнему на 9600 и только на прием модулем.

    Как мне добиться передачи данных этим модулем?? Что можно еще попробовать, а то я уже умаялся с ним.

  15. Здравствуйте. Помогите советом!
    От прошлого владельца авто осталась вот такая вмонтированная в крышу штучка — приемник GPS Globalsat BU-353:
    http://www.globalsat.ru/catalog/snyatye/bu-353
    Подключается к компьютеру при помощи USB. В документации есть такие данные:
    Последовательный порт:
    Формат — ASCII;
    Протоколы GPS — NMEA 0183 (вер. 2.2 по-умолчанию)/Двоичный SiRF;
    Данные GPS — NMEA 0183 (вер. 2.2): GGA, GSA, GSV, RMC (GLL, VTG — опционально);
    Скорость передачи изменяется программно. По-умолчанию: NMEA-4800б/с, двоичный SiRF-19200б/с
    Можно ли при помощи модуля CH-05 или его аналогов организовать подключение этого приемника к планшету по Bluetooth. Насколько это будет сложно и затратно, может проще и дешевле купить готовый GPS receiver с Bluetooth?

    • Если я правильно понимаю, последовательный порт тут создаётся виртуальный, USBшный — как у Arduino, т.к. нигде не увидел наличия самого разъёма для UART на этом девайсе. А планшет у вас без USB? Не iPad, часом? *trollface*

    • Видимо, да. Вот есть версия этого приборчика — BR-355 USB/COM с разъемом PS/2:
      http://www.globalsat.ru/catalog/snyatye/br-355
      Планшет не iPad, Корейско-китайский Android 🙂 Просто не хочется тянуть этот кабель из багажника на переднюю панель, да и подключать планшет проводами в единственный USB не хотелось-бы.

    • Хм, если есть UART, тогда можно пробросить его по Bluetooth через HC-05. Только если переходник на честный RS232, то там напряжения будут сильно выше 3.3 В, которые может прожевать HC-05 (12 В, если не ошибаюсь). Придётся ещё преобразователь городить (микросхемкой MAX232 или же на резисторных делителях). Но, в целом, ничто не мешает в режиме настройки задать AT-командами подходящую скорость на модуле, а потом подключить его в режиме «удлинителя UART» и дальше трахаться с настройкой этой лабуды на планшете: проге для навигации скормить путь к устройству виртуального COM-порта, созданного на планшете при подключении модуля (/dev/ttyUSB*) — наверное, так это делается.

    • Спасибо за оперативность. Вот только у меня на девайсе шнурок USB.
      Если найду у кого-нибудь из знакомых «завалявшийся» НС-05, наверное попробую. Поиск Googl и по форумам пока не вывел на попытки конвертировать с его помощью сигнал USB от периферии (мышь, клавиатура) в Bluetooth. Вам не попадались?

    • Так в том и дело, что HC-05 с заводской прошивкой умеет только UART по Bluetooth и по проводам гонять (BT->RX, TX->BT). Так что вам остаётся либо писать свою прошивку (будет, чем заняться до конца света), либо, что куда реалистичнее, подключить-таки девайс к планшету по USB (:

    • Насколько я знаю, нет. Для процессоров BlueCore, которые используются в HC-05, есть специальная IDE с некоторым количеством примеров, подробнее читайте здесь.

    • Спасибо.
      Знаете людей, которые занимались организацией данных сетей или могут помочь
      в разработке программ для этих модулей?

    • Нет, но я знаю человека, который аккурат под НГ выложит статью о радиомодулях NRF24L01+, которые имеют встроенную возможность построения сети из одного приёмника и шести передатчиков (:
      (а программно никто не мешает и любую другую организовать)

  16. можно ли прошить модуль и обойтись от дополнительного контролера? с эфира ловить команду и включать/выключать PIO на модуле. Может у кого получилось написать что-то подобное. Какая функция в BlueLab умеет вытаскивать принимаемые байты? большая просьба, поделитесь пожалуйста примером, заранее благодарен.

  17. Кто может помочь, купил вот такой модуль mistertao.com/taobao-products/taobao-item-15095917952.html
    там уже запаян переходник на RS-232.
    проверяю через Termit — обмен есть. Но когда подключаю к своему устройству, связи нет((. Хочу просто заменить провод на bluetooth соединение, но никак не получается. Менял все скорости, ничего не помогло(( Кто поможет подарю один такой модуль))

  18. Друзья, подскажите, пожалуйста, как задействовать RTS/CTS на данном модуле. Если можно, поподробнее, буду очень признателен, так как очень надо. В интернете конкретных примеров нет по этой теме, есть только вопросы, которые зачастую остаются без ответов.

    • Вы хотели сказать, Arduino IDE 1.0.1? Компилятор-то там GCC-AVR 4.7
      Видимо, залитая мной при написании статьи библиотека устарела относительно версии в репозитории на Github, в которой всё работает. Вот ссылка на свежак (обновил и в статье).

    • Продолжаю разбираться с библиотекой. Не совсем понятно как общаться с модулем если он подключён к софтварному порту. Попробовал так. Компилируется. Но нужных действий не производится.

      #include <Bluetooth_HC05.h>
      #include <SoftwareSerial.h>
      
      SoftwareSerial mySerial(3, 2); // RX, TX
      Bluetooth_HC05 hc05;
      
      void setup()
      {
        Serial.begin(9600);
        mySerial.begin(38400);
        hc05.begin(38400, 6, 7, HC05_MODE_COMMAND);
        delay(700);
        mySerial.write(hc05.setRole(HC05_ROLE_MASTER));
        mySerial.write(hc05.initSerialPortProfile());
      
       // mySerial.write(hc05.inquire(0, 10000));
      
        BluetoothAddress slave = {
          0x00, 0x12, 0x10, 0x10, 0x13, 0x50  };
        mySerial.write(hc05.connect(slave));
      }
      void loop()
      {
        if (mySerial.available())
          Serial.write(mySerial.read());
        if (Serial.available())
          mySerial.write(Serial.read());
      }
    • Всё работает так, как и должно: в mySerial выводятся возвращаемые библиотечными функциями коды ошибок. Это всё равно, что написать mySerial.write(sin(x)) и надеяться, что форма сигнала на RX и TX станет синусоидальной (:

      Я не предусматривал в библиотеке возможность использования софтового UART, она работает через стандартный класс Serial. Так что при вызове hc05.begin(38400, 6, 7, HC05_MODE_COMMAND) также вызывается Serial.begin(38400) и вся остальная работа происходит тоже через Serial.

    • Попробую сегодня поковыряться в библиотеку. Может как то исправлю ситуацию))))

    • Я так и не смог разобраться как же всё это работает.
      Я думаю можно написать вручную. Алгоритм такой:
      1) подаём 1 на PIO11
      2) подаём 0 на RESET
      3) delay(6)
      4) подаём 1 на RESET
      5) пишем AT команды
      6) подаём 0 на PIO11
      7) подаём 0 на RESET
      8) delay(6)
      9) подаём 1 на RESET
      и всё по идеи должно работать.

  19. Здравствуйте. Подскажите пожалуйста, возможно-ли соединить HC-05 с Bluetooth мышью, чтобы при нажатии на клавишу мыши, HC-05 передавал сигнал на звуковой модуль, который, в свою очередь, будет издавать звуковой сигнал.

  20. Здравствуйте! У меня возникла следующая проблема. Собрал схему с HC-05 на базе модуля МК SEM0007. Схема подключения модуля взята из этой статьи. Через Termite посылаю 1 — на осциллографе на входе в МК вижу импульс — то есть данные модуль в этой системе принимает от пк. Но в обратную сторону, то есть принять данные с модуля в пк, у меня не получается. На выходе МК-модуля TXD данные есть (по осциллографу). Как пример передаю число 00000100. В программе МК оно все время выдаетсЯ на выход TXD. Но на термите полученной информации вообще не видно. Такое ощущение, что она вообще не передается модулем. Подскажите, пожалуйста, что в этой ситуации нужно бы сделать, а то времени на выполнение проекта этого совсем нет — побыстрее бы все решить с ним. Заранее благодарен. И, кстати, как настаивать USART на мк — сихр\асинхр, master/slave?

    • + прием данных от пк производился при настройках: Master, синхронный режим работы интерфейса USART мк

  21. Подкажите пожалуйста ????
    Есть HC-05 модуль, как с помощью него сделать связь с bluetooth-клавиатурой ??? Подходит ли для этой цели профиль данного девайса SSP или надо найти прошивку, ато и самому написать для работы этого модуля под профиль HID ???
    А если можно то какая последовательность АТ-команд необходима для его настройки ????

    • Отсыпьте мне вопросительных знаков, будьте любезны, а то у меня не хватает. Во-первых, не SSP, а SPP. Во-вторых, SPP — это, ВНЕЗАПНО, Serial Port Profile (Google не вчера изобрели). Это просто UART по Bluetooth. Не припомню что-то UART-клавиатур 😀

      Ясное дело, вам придётся найти прошивку или писать самому. В самом конце статьи есть ссылка на сведения о перепрошивке.

  22. Проси отсыпать, не вопрос… вот ловите ??????????????????????????????????????????????? =)
    А теперь еще один серьезный вопрос:
    С HID клавиатурой практически разобрался, написал свой код (не без ), но не совсем понимаю по спецификции HID, как опрашивать клавиатуру о том нажата ли какая то клавиша ????? Знаю что это делается с помощью функций GetReport, но какие значения должен иметь запрос не представляю… Есть ли ссылка или пример запроса к BT клавиатуре, функциями HID?

  23. здравствуйте, такой вопрос: подключил блютуз к arduino mega питание пока от usb кабеля, прописал скетч как у вас, через термит установил соединение, на блютузе до этого мигал красный огоненк, при соединении просто стал гореть, пытаюсь что то послать, программа вроде посылает, но на плате ничего не проиходит, пробовал другие программы, другие скетчи, ничего. В чем может быть проблема? Когда посылаю какое то сообщение на плате загорается светодиод tx, но по сообщению 1, светодиод на 13 не загорается. Вроде бы не заходит в коде программы даже в if (Serial.available())

  24. Подскажите, пожалуйста, который день мучаюсь.
    Приобрел Hc-05, подключил к ардуине, воспользовался библиотекой из статьи.
    Контакты распаяны следующие:
    RX, TX, RESET, POWER 3.3V, Ground, PIO11.

    Прошивка для модуля достаточно большая с подключаемыми классами, приводить здесь просто затруднительно, но суть проблемы в том, что после отправки любой AT-команды модулю и сбрасывания mode-пина на 0, модуль продолжает работать в AT-режиме и на любые отправляемые данные ругается как ERROR:(0).

    Последовательность действий такая:
    подключение к модулю через SoftwareSerial
    установка режима работы SLAVE
    инициализация SPP
    установка имени модуля
    установка пароля

    далее я пытаюсь отправить в uart модуля строку TEST и в терминале на ноуте с вайфаем или на телефоне в BT-терминале смотрю входящие данные. Строка TEST приходит, все окей. НО! При этом, если прочитать содержимое uart-порта модуля, то я получаю в ответ ERROR:(0), как будто модуль считает отправленные данные AT-командой.

    попробовал после установки пароля добавить хард-ресет устройства и ожидание 2 секунды для запуска.
    после этого ответ Error:(0) перестал приходить, данные отправляются нормально.

    но стоит хоть раз переключиться в AT-режим, вызвать какую-нибудь команду, обратно отпустить пин, как устройство в ответ на строку опять сыпет ошибкой.

    В чем может быть дело?

    • Да все делал так как описано. Даже на ардуино напрямую подключал (без микросхемы). Команды АТ не проходят. Использовал все скорости: настраивал на компе, в программе от 1200 до самой последней. Я не знаю может Termite просто работает только на передачу? Еще такая штука: на ХР нет такой функции как указано на картинке к свойствам, ну там где галочку надо поставить.
      Пробовал два модуля. Один точно как оказалось не работает, т.к. он не видится компом по каналу Bluetooth. Покупал его в магазине Robocraft. Другой здесь: dvrobot.ru/shop/i195.bluetooth_modul.htm — он виден, но также не работает с АТ через СОМ-порт напрямую

    • Насчёт нерабочего (не видящегося стоило сразу написать) как подключали?

      Даже на ардуино напрямую подключал

      Всмысле «даже» а как ещё пробовали? К ардуино как подключали, конкретно какой пин куда?
      А в Termite конец строки какой ставили?
      Светодиоды подключали? Как себя вели?
      Вопросы относятся к обоим модулям.
      про модуль запаянный на плату — вы уверены что там HC-05? Как в режим АТ-команд тот модуль переводили?

    • Насчёт нерабочего (не видящегося стоило сразу написать) как подключали?

      я его купил где-то год назад, а подключал вот недавно совсем.

      К ардуино как подключали, конкретно какой пин куда?

      RX к TX Arduino (пин 1)
      TX к RX Arduino (пин 0)

      Светодиоды подключали? Как себя вели?

      Светодиод на плате модуля при соединении с компом горит красным постоянно. Если соединение разорвано, то мигает. Когда припаял модуль с робокрафта, то диод вообще не горел.

      А в Termite конец строки какой ставили?

      В Termite конец строки и как в инструкции оставлял и перепробовал все варианты.

      про модуль запаянный на плату

      там на обратной стороне платы есть перемычка, ее надо спаять, тогда PIO11 соединяется с контактом KEY и его уже на 3,3 вольта подсоединял

    • НС-05 стал видеться компом по блютусу. Он не совместим с той платой на которой был другой модуль. Припаял провода по схеме. Какой светодиод за что отвечает? У меня подключенный к PIO8 только реагирует: если я PIO11 подключаю к питанию 3.3 вольта то мигает с частотой 0,5 Гц (1 раз в 2 секунды), а если отключаю, то мигает довольно быстро и становится виден по блютусу. Пробовал скорости 9600 и 38400, не работает. На плате ардуино при отправке команды с Термита светодиод RX мигает на момент приема, а TX нет, соответственно отправка видимо не происходит с модуля

    • С ардуино связать получлось, светодиод на ПИН13 работает как надо.
      Делаю так: питание отключаю от ардуино, вытаскиваю микросхему, подключаю PIO11 на +3,3 вольта, подключаю ардуино к питанию. АТ не работают.
      Если я замыкаю RX на TX, то Termite присылает то, что я отправлял. Значит связь нормальная. Почему ж тогда модуль не реагирует? Может проблема в питании? Она у меня запитана от 3.3 вольта от Ардуино

    • Уже сделал управление с телефона с помощью программы Bluetooth spp pro

    • Для AT-режима,(на крафтине с вытащенным МК) поменяйте местами проводки RX и TX, ставьте 38400 (В системных настройках порта можно ничего не трогать) и CR-LF, и будет счастье=)

    • Спасибо! Ответ пришел! =) Жаль, что у меня нет силы и рейтинга для голосования!

  25. Ребят, прошу помощи. Приобрел данный модуль, начал устанавливать связь с компом, но не тут то было… Ноутбук со встроенным BT видит устройство, все отлично… вот только беда, когда дело доходит до пункта «На вкладке «Службы» поставьте галочку напротив профиля последовательного порта и нажмите ОК:» появляется проблемка, так как никакого профиля нет… Что делать не знаю

  26. Здравствуйте.
    А могли бы вы подсказать полный список AT команд с русским описанием?

    Хочу совместить блютус с SD и передавать файлы с карты и на катру по блютузу=)
    Очень надо. Хотя-бы конкретный файл.

  27. Добрый день.Подскажите.Я соеденил два модуля нс-05 один в режим приема другой в режиме ат команд и установил сопряжение первого(на прием)с пк. вопрос какой программой можно отправлять ат команды и возможно ли получение подтверждение их выполнения.

  28. Здравствуйте, кто нибудь сталкивался с проблемой: не хочет спариваться HC-06. На win7 модуль видит но при вводе пина выдает ошибку. На cubieboard из консоли так же видит, но при спаривании так же ошибка при вводе пина… Попробовал несколько модулей — ошибка та же ((

  29. Посоветуйте, где можно заказать/купить плату-breakout для модуля типа «Zotlberg» (так указано, да простит меня уважаемый Zoltberg, если что), показанная в начале статьи?

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

Arduino

Что такое Arduino?
Зачем мне Arduino?
Начало работы с Arduino
Для начинающих ардуинщиков
Радиодетали (точка входа для начинающих ардуинщиков)
Первые шаги с Arduino

Разделы

  1. Преимуществ нет, за исключением читабельности: тип bool обычно имеет размер 1 байт, как и uint8_t. Думаю, компилятор в обоих случаях…

  2. Добрый день! Я недавно начал изучать программирование под STM32 и ваши уроки просто бесценны! Хотел узнать зачем использовать переменную типа…

3D-печать AI Arduino Bluetooth CraftDuino DIY Google IDE iRobot Kinect LEGO OpenCV Open Source Python Raspberry Pi RoboCraft ROS swarm ИК автоматизация андроид балансировать бионика версия видео военный датчик дрон интерфейс камера кибервесна манипулятор машинное обучение наше нейронная сеть подводный пылесос работа распознавание робот робототехника светодиод сервомашинка собака управление ходить шаг за шагом шаговый двигатель шилд юмор

OpenCV
Робототехника
Будущее за бионическими роботами?
Нейронная сеть - введение