Arduino Mega 2560 + BLE HM-10 - не могу выполнять команды AT

У меня есть Arduino Mega 2560 и модуль Bluetooth HM10.

Я подключил Bluetooth в соответствии со спецификациями производителя: VCC -> 5v GND -> GND

TXD и RXD Bluetooth, я попытался поместить их в контакты Arduino, в Serial1, в Serial2, в Serial3, с тем же результатом.

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

#define BTserial Serial1

int LED_BOARD = 13;
int LED_RED = 2;
int LED_GREEN = 3;

void setup() {
    BTserial.begin(9600);
    Serial.begin(9600);
  
    pinMode(LED_BOARD,OUTPUT);
    pinMode(LED_RED,OUTPUT);
    pinMode(LED_GREEN,OUTPUT);
}

void loop() {
    if (Serial1.available()) {
        dato = Serial1.readStringUntil('\n');

        Serial.println("DATA RECEIVED: [" + String(dato) + "]");

        if (dato.equals("1")) {
            digitalWrite(LED_BOARD, HIGH);
        }
        if (dato.equals("0")) {
            digitalWrite(LED_BOARD, LOW);
        }
        
        if (dato.equals("RED_ON")) {
            digitalWrite(LED_RED, HIGH);
        }
        if (dato.equals("RED_OFF")) {
            digitalWrite(LED_RED, LOW);
        }

        if (dato.equals("GREEN_ON")) {
            digitalWrite(LED_GREEN, HIGH);
        }
        if (dato.equals("GREEN_OFF")) {
            digitalWrite(LED_GREEN, LOW);
        }
    }
}

У меня есть телефон Android, и я использую приложение Arduino Bluetooth Controller (модуль HM-10).

  • Я отправляю текст 1, и светодиод платы Arduino (вывод 13) загорается.
  • Я посылаю текст 0, и светодиод платы Arduino (вывод 13) гаснет.
  • Я посылаю RED_ON, и светодиод моей макетной платы, подключенный к контакту 2, включается
  • Я посылаю RED_OFF, и светодиод моей макетной платы, подключенный к контакту 2, гаснет
  • Я посылаю GREEN_ON, и светодиод моей макетной платы, подключенный к контакту 3, включается
  • Я посылаю GREEN_OFF, и светодиод моей макетной платы, подключенный к контакту 3, гаснет

Так что Блютуз работает.

Моя проблема заключается в попытке увидеть список команд Bluetooth (AT+HELP command).

У меня есть метод, который отвечает за отправку AT+HELP в bluetooth, но у меня нет ответа.

Это метод, который я запускаю в основном:

String str_ii = "";
int ii_0 = 0;
void ble_help(){
    Serial.println("ble_help");

    BTserial.println("AT+HELP"); // список всех команд AT+ 
    while (true){ // цикл для печати всех команд AT+ 
        char in_char = BTserial.read();
        if (int(in_char)==-1 or int(in_char)==42){
            continue;
        }
        str_ii+=in_char;
        if (in_char=='\n'){
            if (str_ii==String('\r')+String('\n')){
                if (ii_0 == 0){
                    ii_0 = 1;
                    continue;
                }
                break; // перерыв после более чем 1 возврата пустой каретки и перевода строки
            }
            Serial.print(str_ii);
            str_ii = "";
        }
    }
}

При выполнении этого метода в приложении Arduino Bluetooth Controller (модуль HM-10) я вижу текст НА+HELP, но нет никакой реакции / ответа от bluetooh. Ни в приложении Arduino Bluetooth Controller (модуль HM-10), ни в Arduino serial monitor

Что я делаю не так?

Спасибо.

, 👍1


1 ответ


1

Перво наперво вы можете увидеть все AT команды доступные в техническом паспорте доступные в datasheet

Во-вторых, чтобы получить строки из Serial в BTserial, вы можете просто использовать c = Serial.readStringUntil('\n'); как здесь

#define BT_RX           0
#define BT_TX           1
#define BT_Serial       Serial1
#define BT_Timeout      100

String c, c2;

void setup() {
  BT_Serial.setTX(BT_TX);
  BT_Serial.setRX(BT_RX);
  BT_Serial.begin(9600);//baudrate
  BT_Serial.setTimeout(BT_Timeout); //установить тайм-аут чтения/записи bluetooth

  Serial.begin(9600);
  Serial.setTimeout(100);
  delay(100);
}

void loop()                     
{
  if (Serial.available()) {
    c = Serial.readStringUntil('\n');
    Serial.println(c);
    BT_Transmit_AT(c);
  }
  if (BT_Serial.available()) {
    c2 = BT_Serial.readStringUntil('\n');
    Serial.println(c2);  
  }
  delay(20);
}

void BT_Transmit_AT(String data) { //send AT commands
  unsigned long current_time = millis();
  while (BT_Serial.available() > 0) {
    if (millis() - current_time > 100){ //таймер, чтобы выйти, если ничего не получает
      Serial.println("Timeout");
      break;
    }
  }
  BT_Serial.print(data);
}

И, наконец, вам нужно убедиться, что ваш HM-10 является подлинным/имеет установленную подлинную прошивку или это клон. Проверьте, реагирует ли он на "AT" с "OK" вообще. Если это так, то это подлинно, и вы можете продолжать. Если это не так, то вам нужно прошить на него подлинную прошивку, а затем обновить ее, если это так. Вот хороший учебник по прошивке подлинной прошивки на модуль.

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

,