Bluetooth-модуль HC-05 — команда INQ не работает

Для проекта мне нужно подключить пульт дистанционного управления Bluetooth к Arduino Nano.

Проблема

Я пытаюсь установить соединение с указанным пультом дистанционного управления Bluetooth. Это устройство видно! (Я проверил это на смартфоне)

Вот шаги, которые я пытаюсь сделать с модулем Arduino и HC05:

AT <-- confirms, that Command Mode is running successfully
OK

AT+ROLE? <-- 1 For Bluetooth Master Mode
+ROLE:1
OK 

AT+CMODE? <-- 1 allows connecting to any BT address
+CMOD:1
OK

AT+INQM? <-- Show Inquiry access values
+INQM:1,1,48
OK

AT+INQ <-- Inquiry Bluetooth Device

Примерно через 60 секунд отображается сообщение "ОК", но согласно этот учебник или согласно этому видео на YouTube он должен отображать все Bluetooth-устройства, которые готовы к подключению. Устройство BT определенно видно. (Я попробовал несколько устройств BT, таких как смартфоны и периферийные устройства).

Почему запрос не работает? Что здесь не так?

Схема точно такая же, как на этом рисунке:

схема

Для настройки Bluetooth-соединения я подключаю EN-Pin к +3,3 В, что успешно активирует AT-Command-Mode Согласно этому сайту, вы можете сделать это так.

Вот мой код, который я использую для связи с модулем. - Работает хорошо!

#include <SoftwareSerial.h>
SoftwareSerial mySerial(2, 3); // Прием | Передача
// Подключите HC-05 TX к контакту 2 RX Arduino.
// Подключите HC-05 RX к контакту 3 Arduino TX через делитель напряжения.
//

char c = ' ';
int buf[64]; //буфер для хранения AT-команд
int len = 0; //сохраняет длину команд

void setup() 
{
    Serial.begin(9600);
    Serial.println("Arduino is ready");
    delay(500);
    mySerial.begin(9600);  
    Serial.println("BlueTooth is ready");
}

void loop()
{

  if(Serial.available())
  {
    len = Serial.available(); //сохраняем количество байтов для чтения
    for(int i = 0; i<len; i++) // сохраняем все байты в буфер
    {
      buf[i] = Serial.read();
    }
    for(int i = 0; i<len; i++)
    {
      mySerial.write(buf[i]);
      Serial.write(buf[i]);
    }
  }


  if(mySerial.available())
  {
    len = mySerial.available();
    for(int i = 0; i<len; i++)
    {
      buf[i] = mySerial.read();
    }
    for(int i = 0; i<len; i++)
    {
      Serial.write(buf[i]);
    }
  }

}

Вот связанный вопрос, но ответ не помогает.

, 👍0


2 ответа


Лучший ответ:

2

Я выполнил сброс настроек устройства. Это решило проблему

AT+ORGL
AT+RESET

Еще одна вещь, которая очень важна: KEY-Pin (EV-Pin на некоторых платах) должен быть ВЫСОКИМ (3 Вольта) во время команды INQ. Если этот пин не высокий, команда inq не будет работать.

Если вы поместите 3 В на этот вывод и отпустите его, вы действительно перейдете в режим AT-команды. Но не все AT-команды работают (например, указанная команда at+inq). Если вы хотите включить все AT-команды, вывод должен оставаться высоким.

,

0

Попробуйте этот пример из таблицы:

AT+INIT
AT+INQM=1,9,48  // максимум 9 устройств, время ожидания 61 секунда
AT+INQ

И вместо этого используйте это в цикле():

void loop() {
  while (Serial.available())
    mySerial.write(Serial.read());
  while (mySerial.available())
    Serial.write(mySerial.read());
}
,

Пробовал, но и это не работает. Эта команда изменяет только максимальное количество устройств, которые может найти модуль. но так как ни один не найден, это не помогает., @Michael B