Как прервать соединение HM10 Bluetooth?

У меня есть 2 модуля Bluetooth HM10, подключенные к 2 Arduino Teensy под управлением следующего кода.

void setup() {
  Serial.begin(9600);
  Serial1.begin(9600);
  // Если baudrate модуля HM-10 был обновлен,
  // может потребоваться изменить 9600 на другое значение
  // После того, как вы нашли правильную скорость,
  // вы можете обновить ее с помощью команды AT+BAUDx 
  // например, AT+BAUD0 для 9600 бод
}

void loop() {
  char c;
  if (Serial.available()) {
    c = Serial.read();
    Serial1.println(c);
  }
  if (Serial1.available()) {
    c = Serial1.read();
    Serial.print(c);    
  }
}

Соединяя их с помощью команд AT, я смог отправлять сообщения туда и обратно, записывая их в Serial1. Однако теперь, когда я пытаюсь отправить AT-команды, он просто отправляет строку в другой модуль вместо того, чтобы ответить " ОК " и т. Д. Как разорвать соединение и заставить команды AT работать снова?

Учебник Я использовал для сопряжения модулей.

, 👍1

Обсуждение

Дайте нам окончательный набор команд, которые вы послали модулям Bluetooth, чтобы заставить их соединиться, а затем переслать ваш ввод друг другу., @cjs

Я голосую за то, чтобы закрыть этот вопрос как не относящийся к теме, потому что речь идет о наборе команд модуля HM10, а не Arduino., @Chris Stratton

Я бы сказал, что это то, с чем вы сталкиваетесь только на ардуино (Serial.println (), Arduino Teensy и т. Д.), так что Я думаю, что это подходит Arduino SE. Я также не могу придумать лучшего сообщества SE, чтобы ответить на этот вопрос., @Avamander


4 ответа


0

Из спецификации устройства:

Функция системного КЛЮЧА (PIO0) при низком значении > 1000 мс:>

7.3.1 Если модуль находится в спящем режиме, модуль немедленно проснется, если значение AT+NOTI равно “1”, модуль отправит строку “OK+ПРОБУЖДЕНИЕ” через UART.

7.3.2 Если модуль уже подключен к удаленному устройству, модуль отключится от удаленного устройства.

7.3.3 Если модуль находится в режиме ожидания, модуль будет сброшен в конфигурацию по умолчанию. Затем перезагрузите компьютер.

,

1

Мне удалось разорвать связь с: В

В паспорте указано, что вы можете использовать AT+PWRM1, но это не сработало для меня. Вместо этого вышеприведенная команда оборвала соединение с удаленным устройством.

Из таблицы данных:

  1. Выполните команду “AT+PWRM1”, модуль автоматически перейдет в спящий режим при включении питания или отключении от удаленного устройства.
,

1

Чтобы прервать соединение с помощью команд BT, я делаю следующее (программно):
команда 1: В
команда 2: AT+IMME1
Когда BT находится в рабочем режиме, он не распознает обычные команды BT. Исключением из этого правила является сама команда AT. Но за ним должна последовать другая команда (#2) в течение периода ожидания наблюдения, который является довольно быстрым. IMME1 переводит BT обратно в режим AT, где он больше не подключен, и распознает ваши команды AT [+...]. Если параметр Сохранения включен, он попытается автоматически переподключиться слишком быстро...

,

0

Каким-то образом я оказался в таком бесконечном цикле автоматического переподключения после активации AT+ROLE1 без предварительной установки AT+IMME1. Ничто, казалось, не помогло, даже не потянув PIO0 низко за 1s. Я до сих пор даже не знаю, к какому устройству подключался мой HM-10. Он просто автоматически подключился к чему-то при загрузке...

Единственный способ вырваться из этого бесконечного цикла, который я мог найти, был использовать этот скетч ниже. Хитрость заключалась в том, что я должен был ждать ответа "OK" после "AT", прежде чем выдать команду "AT+RENEW" для восстановления заводских настроек.

#include <SoftwareSerial.h>

SoftwareSerial BTserial(8, 9);

void waitForOK()
{
  while (!BTserial.available());

  char c = BTserial.read();
  Serial.write(c);
  c = BTserial.read();
  Serial.write(c);
}

void setup()
{
  Serial.begin(9600);
  BTserial.begin(115200); // fw v700 изменил значение по умолчанию на 115200, в противном случае используйте 9600
  Serial.println("BTserial started at 115200");

  BTserial.write("AT");
  waitForOK();
  BTserial.write("AT+RENEW");
  waitForOK();
  BTserial.write("AT+IMME1");
  waitForOK();
}
,