Как сбросить настройки bluetooth модуля HC-06

Тема в разделе "Arduino & Shields", создана пользователем Витя, 3 май 2014.

  1. Витя

    Витя Гик

    Есть вот такой модуль https://amperka.ru/product/hc-06-bluetooth-module

    Он по умолчанию работает на 9600 бод. Решил поиграть с командами, установил там имя ему и скорость поменял на 230400 через команду AT+BAUD9. И все. Он работает к нему можно подсоедениться но обшаться не получается больше. И AT команды не принимает.

    Прочитал что 11 пин у него - это reset. Подаю ноль туда - лампочка перестает мигать типа наверное сбрасывается и должна вернуться скорость 9600. Но всеравно не работает. И при поиске он видится с имянем которое я ему задавал и не сбрасывается на по умолчанию как по идее должно. Никто не знает как сбросить его?
     
  2. acos

    acos Официальный гик Администратор

    О, товарищ по несчастью. Я так тоже с АТ-командами поигрался).
    Я решил проблему так - взял USB-serial адаптер на ft232rl, выставил ему такую скорость и дал АТ команду на 9600. На Arduino такую скорость не сделать (обычным способом). Если на материнской плате есть com-порт, можно попробовать через него (только уровни напряжения нужно 5 вольт максимум сделать), достаточно только TX от материнки взять. Если нет, то либо искать usb-serial с поддержкой такой скорости, либо на Arduino сделать такой флэшер АТ-команды нужной, эмулировать передачу AT+BAUD4.

    Ну и ещё можно попробовать вот такой скетч загрузить, и надеяться что сработает. Даташит говорит, что на 16 мГц будет некоторый рассинхрон, но чем чёрт не шутит - вдруг сработает?

    Код (Text):
    void setup() {
      // put your setup code here, to run once:
      Serial.begin(230400);

    }

    void loop() {
      // put your main code here, to run repeatedly:
     
      Serial.print('AT+BAUD4');

    }
     
  3. Витя

    Витя Гик

    Вот я посмотрел таблицу ошибок:
    Screen Shot 2014-05-06 at 23.08.08.png

    Не пойму как ее понять. Написан процент ошибок но и при 9600 они есть написано. Это получается вероятность ошибки? Просто имеет ли смысл поставить на большое время зацикленую посылку этой команды? Типа может там через несколько часов вдруг пройдет без ошибки?
     
  4. acos

    acos Официальный гик Администратор

    на сколько я помню UART может работать с погрешностью по времени до 10% (возможно не прав).
    Суть ошибки - UART это протокол, который понимает, что пришла пора считать следующий бит в байте строго по времени. если часы немного не совпадают, то есть вероятность того, что бит в передатчике ещё не сменится на следующий, а приёмник уже подумает что пора следующий считать, и считает ерунду в итоге.
    А что, так и не получилось в итоге или как?
    А вот так?
    Код (Text):
    void setup() {
      // put your setup code here, to run once:
      Serial.begin(230400);

    }

    void loop() {
      // put your main code here, to run repeatedly:
      Serial.print('A');
      delay(1);
      Serial.print('T');
      delay(1);
      Serial.print('+');
      delay(1);
      Serial.print('B');
      delay(1);
      Serial.print('A');
      delay(1);
      Serial.print('U');
      delay(1);
      Serial.print('D');
      delay(1);
      Serial.print('4');
      delay(10000);
    }
    На большое время поставить смысла нет - отсчёт времени начинается каждый раз со старт бита, который идёт перед передачей каждого байта.


    http://easyelectronics.ru/avr-uchebnyj-kurs-peredacha-dannyx-cherez-uart.html
     
    Последнее редактирование: 7 май 2014
    Витя нравится это.
  5. Витя

    Витя Гик

    Ура! Получилось! :) Спасибо!
     
  6. H`UGO

    H`UGO Нуб

    Доброго времени суток! Знающие, подскажите... Случайно отослал команду установки контроля по чётным AT+PE. Больше на AT команды не реагирует. При этом блюпуп работает, обменивается данными с терминалом но иногда добавляет байты, к примеру "1" или "2" передаёт "Т" передаёт а вот "А" или "3" добавляет после байт и в итоге посылая AT получается вообще бред типа : комп > контроллер > BT > Android. с компа "AT" в смартфоне только "Т" . В смартфоне "AT" в терминале компа "AЁя". "АТ" в этом случаи посылаю не в АТ режиме. просто как пример что посылаю и что приходит. КАК ВЕРНУТЬ В РЕЖИМ БЕЗ ПРОВЕРКИ ЧЁТНОСТИ?
     
  7. shpock

    shpock Гик

    в терминале выставляете Parity EVEN, подключаетесь к модулю, и отправляете AT+PN . Все! (блютус соединение при подаче АТ команд должно быть не активно).

    ... да , после в терминале поменяйте обратно на NONE.
     
  8. H`UGO

    H`UGO Нуб

    Перепробовал по разному, не получается. Что то мне кажется что я выставляю проверку по чётным на приём от ВТ, а на отправку нет. Есть возможность восстановить заводские?
     

    Вложения:

  9. Onkel

    Onkel Гуру

    это не процент ошибок, а процент ошибки во времени. uart в атмеге делает на каждый такт uartа три сэмпла - через 3/8, 1/2 и 5/8 после условного начала передачи бита байта, а синхронизация идет по каждому байту, по старт- байту. Так что важно, чтобы накопление ошибок за 10 бит (старт- дата- стоп) не превышало 3/8 такта, т.е. точность установки времени (частоты) достаточна 3/80=3,75 %.Вот из этой цифры и исходите, глядя на таблицу- если ошибка времени меньше 3,75 %, то все будет работать 100%, если больше - то процент ошибок будет 100%.
     
  10. shpock

    shpock Гик

    так вы через мегу его подключаете. А что в меге? Какой скетч?
    Если есть LPT port - возможно.
     
  11. Onkel

    Onkel Гуру

    я извиняюсь может что не так, я обычно с другими модулями работаю, там если их включаешь (подаешь питание) с заземленным пином ресет то он встает в заводские установки и сообщает по uart свои параметры , версию фирмвари и мак - адрес.
    ну уж если совсем швах могу посоветовать сгенерить нужную последовательность нулей- единиц, эмулирующую команду, иногда приходилось и к такому методу прибегать в бытность реверс-хакером.
     
  12. Onkel

    Onkel Гуру

    чуть повыше - 3.75% если выборка по 3 сэмплам и 5% если выборка по 1 сэмплу, но по умолчанию в атмегах по 3 сэмплам и я не видел, чтобы кто- то переходил на односэмпловый режим, это уже только на сотнях кбод нужно. Кстати, моя цифирь совпадает с данными таблицы, если обратить внимание на цвета - 2,1% еще куда ни шло, 3,7% очень плохо, ну а 7,8% это уже швах, хоть 3 сэмпла на бит, хоть один сэмпл на бит. В общем при типично ардуиновских бодах надо ставить по формуле из даташита и не ломать себе мозг.
     
  13. H`UGO

    H`UGO Нуб


    Да, через мегу. Скетч тестовый: что послал в порт, то пошло на блюпуп и наоборот что прилетело на блюпуп, то пошло в порт.
    #include <SoftwareSerial.h>
    SoftwareSerial BTSerial(10, 11); // RX, TX
    String command = ""; // Stores response of the HC-06 Bluetooth device

    void setup() {
    // Open serial communications:
    Serial.begin(9600);
    Serial.println("Type AT commands!");
    }

    void loop() {
    // Read device output if available.
    if (BTSerial.available()) {
    while(BTSerial.available()) { // While there is more to be read, keep reading.
    command += (char)BTSerial.read();
    }

    Serial.println(command);
    command = ""; // No repeats
    }
    // Read user input if available.
    if (Serial.available()){
    delay(10); // The delay is necessary to get this working!
    BTSerial.write(Serial.read());
    }
    }
    На самом деле я не до конца понимаю что за проверка по чётным или не чётным битам выполняется. Пример:
    Отправляю на ВТ с Android "Т", в порт компа через мегу эта же "Т" и приходит. Обратно так же. Если отправляю "А", то приходит, "А" и 0хFF (0x41, 0xFF). Если с компа в порт(в мегу) отправить, то на терминал прилетает только те символы, которые приходят без 0хFF. При чём примерно половина одних и тех же символов приходит в "чистом" виде (например цифры это только 2 4 6 7 8 ). Я уже пробовал так и отправлять 0x41, 0xFF, 0x65 ("AT") ну и по разному. Кто растолкует что именно происходит при проверке по чётным битам? Может у меня получится сформировать команду таким образом чтоб получить "AT+PN"
     
  14. Onkel

    Onkel Гуру

    если у вас включен контроль четности, то последний бит- не бит данных, а бит четности, соответственно приемник путается - если последний бит не проходит как сумма предыдущих 7 бит, то приемник считает этот бит старт- битом, стоп- бит и последующие 1 считает следующим байтом, так что для имитации команды с битом четности вам над вручную набрать нужную строку команды, выставляя 8 бит 0 или 1 по двоичной сумме предыдущих 7 бит. Например, если вы хотите передать в режиме even "A"=0x41, то должны передать 0x41, "Т"=0x65 передать как 0x65. Но у вас, боюсь, включен режим odd (cудя по "к примеру "1" или "2" передаёт "Т" передаёт а вот "А" или "3" добавляет после байт"), попробуйте добавить 0x80 к четным байтам( "А" будет 0xC1, "+"будет 0xAB ....) и ничего не добавлять к нечетным байтам ("T".
     
  15. H`UGO

    H`UGO Нуб

    Ну в целом всё понятно. Только, если не сложно, поясните "восьмой бит - сумма предыдущих семи".
    Допустим "А" 01000001
    "Т" 01010100
    Я так понимаю при установки по чётному "А" длжна принять вид 11000001?
     
  16. geher

    geher Гуру

    Если была подана команда AT+PE, то это режим Even Parity.
    Если не путаю, то в этом случае значение бита четности определяется как сумма по модулю два значащих бит. Т.е. если количество единичных бит в коде символа четное, то данный бит будет 0 (ничего прибавлять не нужно), если нечетное, то 1 (прибавить 0x80 при использовании настройки 8N, которая вроде как и работает по умолчанию в ардуине).
    Обычно при включении такого режима четности включается вариант 7E, т.е. 7 значащих бит и за ними бит четности. При этом могут передаваться только символы с кодами 0-128.
    Есть, конечно, вариант с символами переключения таблицы, но это отдельная история.

    Короче,
    01000001, два единичных бита, четное число единичных бит, для режима 7E оно так и останется.
    01010100, три единичных бита, нечетное число единичных бит, для режима 7E бит четности нужно установить в 1, получится 11010100.


    Хуже, если это 8E. Тогда в посылке 8 бит данных плюс бит четности, но это маловероятно.

    Для Odd Parity будет наоборот, т.е. если количество единичных бит в коде символа четное, то бит четности будет 1, если нечетное, то 0.

    PS. Кстати, HC-05 может быть подключен к аппаратному UART контроллера? Тогда можно попробовать его настроить так
    Код (Text):
    Serial.begin(скорость,SERIAL_7E1);
    (Serial1, Serial2 и т.п., если используются дополнительные аппаратные порты МК, если они там есть, конечно) или, если wiring не может использоваться, то посмотреть, как оно реализовано в библиотеках Arduino IDE.
    А потом выдать в этот порт команду "AT+PN"
     
    Последнее редактирование: 10 янв 2016
  17. Onkel

    Onkel Гуру

    да, если режим контроля четности odd.
     
  18. shpock

    shpock Гик

    подключите модуль к порту напрямую, без меги. А то вы так будете долго, еще и через програмный сериал, мучаться!!!
    обязательные условия для выполнения АТ команд: перед командой ничего желательно не писать.
    После команд не нужно добавлять /r /n.
    Влютус соединение не поднималось.( тоисть подали питание, и сразу подаем команду AT+PN
    (через програмный сериал на леонардо только что попробовал - команды не воспринимает).
     
  19. H`UGO

    H`UGO Нуб

    Да, в меге аппаратно 4 порта UART. Юзаю так: Терминал меги аппаратный, на ВТ программный хотя в скетче это видно. И да, это идея использовать второй аппаратный UART для BT так как он "сможет" 8N. Пробую...
     
  20. H`UGO

    H`UGO Нуб


    Проблем с выполнениями команд не было пока я чётность не задал. Без меги мне проблематично к порту подключить. Попробую вручную в бинарном нарисовать "AT+PN", и на аппаратный сериал кину.