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]);
}
}
}
Вот связанный вопрос, но ответ не помогает.
@Michael B, 👍0
2 ответа
Лучший ответ:
Я выполнил сброс настроек устройства. Это решило проблему
AT+ORGL
AT+RESET
Еще одна вещь, которая очень важна: KEY-Pin (EV-Pin на некоторых платах) должен быть ВЫСОКИМ (3 Вольта) во время команды INQ. Если этот пин не высокий, команда inq не будет работать.
Если вы поместите 3 В на этот вывод и отпустите его, вы действительно перейдете в режим AT-команды. Но не все AT-команды работают (например, указанная команда at+inq). Если вы хотите включить все AT-команды, вывод должен оставаться высоким.
Попробуйте этот пример из таблицы:
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());
}
- Хочу создать Bluetooth audio control (увеличение/уменьшение громкости, воспроизведение, пауза и т.д.) для смартфона
- Самая низкая мощность, возможная в Arduino
- Проблемы с последовательной связью от Arduino к Bluetooth HC-05
- Arduino IRremote перестает работать
- Проблема с загрузкой Bluetooth на Arduino HC-05 v4.0
- Беспроводной Bluetooth USB-хаб с использованием Arduino nano
- Можно ли подключить два электронных регулятора скорости к одному контакту заземления?
- Raspberry Pi 3B+ BLE связь с Arduino Nano 33 IOT
Пробовал, но и это не работает. Эта команда изменяет только максимальное количество устройств, которые может найти модуль. но так как ни один не найден, это не помогает., @Michael B