Ответ на телефонный звонок с помощью RN-52 и Arduino Mega 2560

Я пришел из Stackoverflow и нуждаюсь в некотором руководстве.

Моя цель : стримить мелодии (выполнено) и отвечать/завершать вызовы через RN-52 (не выполнено)

Моя проблема : я запутался в функциях RX/TX/CTS/RTS RN-52 ( техническое описание ).

Я пытался : подключить RX и TX RN52 к TX и RX Mega 2560 (контакты 0 и 1), чтобы инициировать UART, однако, когда я пытаюсь отправить команду Cв модуль, ничего не происходит (это должно сказать RN52 ответить на звонок).

Возможно : моя проблема заключается в переводе RN52 в командный режим, но у меня есть заземление GPIO9 (низкое значение делает его командным режимом).

Возможно : я неправильно отправляю команду? я использовал Serial.println("C");.

Я надеюсь, что мой вопрос и борьба ясны. Буду очень признателен за любой материал для чтения, указывающий мне в правильном направлении. Я хотел бы заставить это работать, но я хотел бы узнать, как это работает еще больше. Заранее спасибо и счастливого Нового Года!

Полезная ссылка: https://learn.sparkfun.com/tutorials/rn-52-bluetooth-hookup-guide/c

РЕДАКТИРОВАТЬ (схема, дополнительная информация)

Вот мой код для использования двух кнопок для ответа или отклонения вызова.

#include <SoftwareSerial.h>//not sure if this is needed...read about it during a tutorial?

const int answerButton = 52; //button to answer
const int endButton = 53; //button to end

void setup(){
  Serial.begin(9600); //start talking to RN52
  pinMode(answerButton,INPUT); //set buttons to input
  pinMode(endButton,INPUT); 
}
void loop(){
  int answer = digitalRead(answerButton); //read the state of the buttons
  int endCall = digitalRead(endButton);

  if (answer == 1){ //if depressed, print C (command to answer the call)
    Serial.print("C");
    delay(2000);
  }
  if (endCall == 1){ //if depressed, print E (command to end/reject call) 
    Serial.print("E");
    delay(2000);
  }
  delay(1);//for stability...although I'm not entirely sure this is needed :)
}

Когда я использую это, я вижу, что светодиод RX загорается, но на вызов не отвечают. И, к сожалению, я не могу одновременно подключиться к последовательному порту RN52, чтобы посмотреть, что он говорит через CoolTerm, так как Arduino использует это соединение (читайте об этом на этом форуме).

GPIO7 ни к чему не подключен (просто открыт).

RN52 заземлен и правильно воспроизводит музыку через Bluetooth на моем iPhone. ОДНАКО в таблице данных (таблица 1-3) есть упоминание о заземлении или отправке сигнала на GPIO2, но я не могу понять, что они говорят делать ... это может быть частью моей проблемы.

ДОБАВЛЯЕМ СХЕМУ (круто, понятия не имел, что смогу это сделать! Извините, буду включать во все будущие посты!)

схематический

смоделируйте эту схему - схема, созданная с помощью CircuitLab

Можете ли вы отредактировать принципиальную схему и минимальный пример исходной программы (скетч)? Вы устанавливаете последовательную скорость? GPIO7 низкий или высокий? Индикатор TX мигает? Вы подключили GND? ...
Ок, правка внесена! Я надеюсь, что эта дополнительная информация поможет.
Не могли бы вы добавить простую схему, показывающую соединения между Arduino и RN-52. Это будет иметь большое значение для прояснения того, что вы сделали.
Верно, извини. Я понятия не имел, что эта функция здесь, буду использовать в будущем, очень удобно! @RedGrittyBrick, добавлена ​​принципиальная схема!

Ответы (2)

  Serial.begin(9600); //start talking to RN52

Я думаю, вам нужно потянуть GPIO7 вниз, чтобы установить скорость 9600.

Из таблицы

GPIO7 Установка на этом выводе низкого уровня устанавливает скорость передачи UART на 9600 бод. По умолчанию контакт имеет высокий уровень со скоростью 115 200 бод.

Вы правы! Я думаю, что отсутствие необходимости отключать GPIO7 при общении через ПК заставило меня подумать, что это не нужно. Но это позволило мне использовать Serial.println("C");и принимать входящий вызов. Теперь мне нужно взглянуть на это "рукопожатие". Спасибо вам за помощь! Я проголосую за вас, как только наберу 15 повторений. Ваше здоровье!
Также я думаю, что println печатает \r\n, и вам нужно только \r«Каждая команда заканчивается возвратом каретки (\ r)». цитата со страницы 19 dlnmh9ip6v2uc.cloudfront.net/datasheets/Wireless/Bluetooth/…

Хорошо, в последнее время я часто использую RN-52, поэтому у меня есть несколько вещей:

  1. Думаю, я на самом деле не знаю ответа на этот вопрос, но разве вы не должны использовать устройство 5 В для связи через UART с устройством 3,3 В? Конечно, вы можете просто подключить RN-52 к Arduino Mega, ТОЛЬКО подключив питание 3,3 В к RN-52, но если вы собираетесь использовать UART для отправки команд с Arduino на RN-52, не делайте этого. Вам нужна Arduino 3,3 В? Это именно то, что я использую с RN-52. Я использую Arduino Pro Micro 3,3 В/8 МГц от SparkFun . Я бы просто взял его, потому что вам не нужно возиться с коммутационной платой FTDI; просто подключите USB-кабель прямо к нему!

  2. Я могу управлять RN-52 с помощью этой настройки, и я всегда использовал скорость передачи 115200, не касаясь ни одного из контактов GPIO. Я бы посоветовал вам сделать то же самое.

  3. Поскольку я еще не видел, чтобы это обсуждалось здесь, вы можете использовать неправильную последовательную линию на Arduino Mega, которую вам в любом случае не следует использовать! Например, мой конкретный Arduino Pro Micro имеет две разные последовательные линии. Serial.begin(115200)и Serial.println("C")соответствуют USB-связи устройства с компьютером. Serial1.begin(115200)и Serial1.println("C")применить к контактам TX и RX, которые на самом деле подключены к RN-52. Вам нужно будет посмотреть на конкретные последовательные линии Mega или любого другого Arduino, который вы в конечном итоге используете, чтобы выяснить, как правильно инициализировать правильную последовательную линию связи.

Проверьте это видео :

Спасибо за эту информацию! Хотя я получаю большую часть этого, я не совсем уверен, почему бы мне просто не запитать RN52 3,3 В от Arduino? Я почитаю о Pro Micro, на который вы ссылались выше. Мне удалось связаться с RN52, однако я могу отправить только 1 команду ... вероятно, из-за того, что RX / TX не подключен к Arduino (спасибо за ссылку на видео, я посмотрел его и купил расходные материалы). Относительно № 3: я думаю, вы правы в том, что используете неправильную последовательную линию... Я пытаюсь настроить сегодня вечером. Еще раз спасибо за понимание, я сообщу о результатах. Ваше здоровье!
Просто из любопытства: какой микрофон вы используете для РН-52?