Модуль HC-05 не получает команд и не спаривается

arduino-uno c++ bluetooth hc-05 voltage-divider

Я работаю над проектом, где нужно будет установить соединение между двумя модулями HC-05, каждый из которых подключен к ардуино, но сейчас я просто пытаюсь заставить один из них работать и подключиться к телефону. Не уверен, что делаю что-то правильно...

Я не могу давать AT-команды, и в результате устройство не может соединиться с моим телефоном. Моя настройка выглядит примерно так:

С незначительными отличиями том, что я использую Уно плату, а не Мега -, RX и TX пины подключены, чтобы...ну, я пробовал много разных выводов, по умолчанию RX и TX пины уточнения другие пины как в коде, а также обращая соединения (RX к TX, TX к RX), также эта схема забыл упомянуть "включить" PIN, который я подключил к моему Arduino по 3,3 в PIN.

Я перепробовал много разных примеров кода, последний из которых я попробовал следующий:

#include <SoftwareSerial.h>

SoftwareSerial mySerial(2, 3); // RX, TX

void setup() {
  // Open serial communications and wait for port to open:
  Serial.begin(38400);
  Serial.println("Enter AT commands:"); // a prompt in Serial Monitor
  // Deleted while loop, unnecessary

 
  mySerial.begin(38400);
}

void loop() { // run over and over
  //if (Serial3.available()) { // we don't use Serial3 any more
  if (mySerial.available()) {
    //Serial.write(Serial3.read());
    Serial.write(mySerial.read());
  }
  if (Serial.available()) {
    //Serial3.write(Serial.read());
    mySerial.write(Serial.read());
  }
}

Который я нагло оторвал от этого ответа, с незначительными изменениями.

Итак, мне подключили Arduino к ПК, загрузить код, подключить модуль, набор серийного монитора скорость передачи данных до 38400 и...какую-то чушь появляются на экране, просто чередуя последовательность символов 'х' и '?', я понимаю, что на самом деле послание "ввод AT-команд:" написано в моем коде...

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

EDIT: Следуя некоторым комментариям и установив скорость последовательного обмена данными на 38400, мне удалось получить другие ответы на мои команды, но это просто новый тип тарабарщины, и он все еще фактически не реагирует на мои команды.

Дело в том, что все учебники, которые я видел в интернете несколько противоречащих друг другу, некоторые соединения RX и TX пины на обратный к Arduino, некоторые-нет, некоторые отмечают и другие пины на плате, некоторые не заморачиваются с активировать контакт целиком, некоторые-не использовать делитель напряжения, некоторые связаться с выводом VCC от 3,3 В, а не 5В, а некоторые даже пропустить по-команду установки целиком!

Одна последняя деталь, которую я чувствую , что должен упомянуть, есть красный свет, который мигает и гаснет каждые две секунды, я думаю, что это означает, что модуль считывается для приема команд, но я также видел противоречивую информацию об этом, так что я не уверен.

Я хочу знать, что я делаю неправильно, и как правильно это сделать?

, 👍1

Обсуждение

Я тоже потратил несколько часов, пытаясь понять это. Так много подводных камней, RX vs TX, программное обеспечение serial vs pins 1/0, скорость передачи данных в бодах, настройки NL & CR в последовательном мониторе, необходимость нажимать кнопку при включении модуля., @Thomas

Прошел год с тех пор, как я сделал этот пост, и я, к сожалению, не помню настройки, которую я сделал, чтобы решить проблему, я думаю, что это могло быть не использование резисторов и просто прямое подключение модуля HC к Arduino, извините, но я не уверен., @The Riser


1 ответ


4

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

некоторые подключают контакты RX и TX в обратном порядке к Arduino, некоторые нет, некоторые указывают другие контакты на плате

Существует в основном 2 способа связи между последовательным монитором и HC-05:

  • Вы можете подключить HC-05 непосредственно к последовательному чипу USB на плате Arduino, таким образом, вы будете общаться непосредственно с HC-05. В этом случае используются контакты TX и RX, так как они подключены к последовательному чипу USB. Но метки TX и RX относятся к чипу ардуино (Atmega328p в Arduino Uno). Поскольку последовательные соединения должны соединяться поочередно (RX - TX и TX-RX), вывод с надписью TX ведет к выводу RX последовательного чипа USB и наоборот.

    Таким образом, вы соедините TX HC-05 с выводом TX на Arduino, а RX HC-05 (через делитель напряжения) - с выводом RX на Arduino. Кроме того, перед этим вы должны запрограммировать Arduino с пустым скетчем, чтобы Arduino не вмешивался в последовательную связь своим собственным последовательным использованием.

  • Или вы можете использовать интерфейс SoftwareSerial и позволить коду Arduino транслироваться между устройствами. Arduino получает данные от ПК и отправляет их на HC-05. Кроме того, он получает данные от HC-05 и отправляет их на КОМПЬЮТЕР. Это то, что вы пытались. Но вам абсолютно необходимо указать другой набор контактов для интерфейса SoftwareSerial, чем 0 и 1. Эти контакты делают аппаратный последовательный интерфейс, который подключается к ПК. Поэтому измените номера этих контактов (например, на 2 и 3).

    На самом деле: Всякий раз, когда вы видите код для Uno, Nano или Mega, использующий SoftwareSerial на контактах 0 и 1, вы можете быть уверены, что это мусор.

Я подключаю Arduino к КОМПЬЮТЕРУ, загружаю код, подключаю модуль, устанавливаю скорость передачи последовательного монитора на 38400 бодов и...на экране появляется куча тарабарщины

Даже когда вы меняете контакты, как описано выше, ваш код все равно использует 9600 бод для подключения к ПК. Когда вы установите последовательный монитор на 38400, в то время как код использует 9600 бод для этого интерфейса, вы получите просто тарабарщину. Либо измените свой последовательный монитор на 9600 бод, либо измените свой код на Serial.begin(38400). Последний вариант лучше, так как он гарантирует, что вы используете одинаковую скорость передачи данных для обоих интерфейсов.

некоторые вообще не утруждают себя включением выводов

Вывод ВКЛЮЧЕНИЯ, по-видимому, имеет выдвижной резистор на плате HC-05, который тянет его к земле, когда ничего не подключено. Земля означает режим передачи данных, режим ВЫСШЕГО командования. Поэтому, когда они ничего не подключают, они хотят оставаться в режиме данных. Хотя это также зависит от того, есть ли у конкретной платы HC-05 откидной или откидной резистор. Pulldown более вероятно, но так как нет ни одного производителя этих модулей, вы не можете быть уверены. Так как вы хотите войти в режим AT, вы должны использовать командный режим и подключить его к 3.3 В. Для нормальной работы он бы заземлился. Хотя вы также можете подключить его к цифровому выходному контакту Arduino и позволить коду решить, в каком режиме должен быть модуль.

некоторые не используют делитель напряжения

Чип на плате HC-05 представляет собой устройство 3,3 В. Фактические платы прорыва, которые можно купить везде, в основном только добавляют регулятор напряжения от 5 В до 3,3 В, светодиод для отображения состояния и вырывают необходимые контакты. Контакты для передачи данных в основном напрямую подключены к чипу. Есть много ресурсов, которые утверждают, что HC-05 толерантен к 5V, но также много, которые противостоят этому. Чтобы не разрушить HC-05, следует также использовать делитель напряжения.

некоторые подключают контакт VCC к 3,3 В вместо 5 В

Это делается только тогда, когда используемая плата не имеет регулятора напряжения от 5 В до 3,3 В. Зависит от того, какой именно платой вы владеете.

некоторые даже полностью пропускают настройку AT-Command!

Когда им не нужно настраивать HC-05 особым образом, зачем им переходить в командный режим. Это может быть по-другому для вас.

,

Голосовать за тебя. Кажется, говорит все, что говорит мой, и даже больше. Я предполагаю, основываясь на длине и деталях, которые вы начали до меня., @timemage

Хорошо, я изменил код на Serial.begin(38400), сообщение "Enter AT commands:" теперь выглядит как обычно, и ответы на команды таковы...теперь меньше тарабарщины, похоже, смесь '?'и какой бы команды я ни набрал, но он определенно все еще не получает команды, я попытался изменить имя устройства, и оно по-прежнему появляется как "HC-05" (имя по умолчанию)на моем телефоне, после этого я переключил контакты RX и TX на 2 и 3 соответственно, и теперь он даже не отвечает на мои команды., @The Riser

Вы переключили физические соединения HC-05 на новые контакты, а также изменили номера контактов в коде? и подключил HC-05 TX к RX вашего интерфейса SoftwareSerial?, @chrisl

Кстати: Где именно вы не можете установить соединение? Когда он появляется на вашем телефоне, я предполагаю, что сопряжение будет работать. Реальное соединение затем устанавливается подходящим приложением. Страница настройки Bluetooth Android (где вы можете выполнить сопряжение устройств) не выполняет реального соединения., @chrisl

@chrisl Да, я переключил физические контакты на новые позиции и попробовал обе комбинации (RX-RX & TX-TX, а затем RX-TX и TX-RX), по-прежнему нет ответа, что касается того, как я пытаюсь подключиться, я думал, что сначала должен подключиться через страницу настроек, вот где я потерпел неудачу, но я попытался использовать подходящее приложение, которое я уже установил (Bluetooth-терминал), но не повезло, не могу подключиться через него., @The Riser

контакты 2 и 3 на Mega не поддерживают прерывание смены контактов используемое SoftwareSerial, @Juraj

@Juraj Я использую Uno, это все еще применимо?, @The Riser

@TheRiser Вы можете добавить новую версию кода и новую проводку к вашему вопросу, отредактировав ее. Просто добавьте его в качестве обновления в конце вашего вопроса. Тогда мы сможем смотреть дальше. Комментарии на самом деле делаются не для дискуссий. Кроме того, таким образом, кто-то другой мог бы увидеть проблему, не просматривая все комментарии, @chrisl

Хорошо, спасибо., @The Riser