Ошибки при попытке использовать библиотеку HC-05 для автоматизированных AT-команд

Я пытаюсь использовать HC-05 с Arduino UNO для проекта носимых устройств, над которым я работаю. Я хочу сортировать "автоматические" соединения, не требуя от пользователей смены оборудования для входа в режим AT, и не заставляя их вводить команды AT. Для этого я использую библиотеку HC-05, которую я нашел на github: https://github.com/jdunmire/HC05. В конце концов я захочу выполнить поиск устройств (AT+INQ), сохранить адреса Bluetooth в строке и проверить имя каждого устройства, соответствующего каждому адресу. Затем я подключусь к тем, у кого есть конкретное имя.

Я сталкиваюсь с множеством проблем, поэтому решил, что начну с самых распространенных.

При попытке запустить много разных команд (AT+ORGL, AT+INIT, AT+INQM, AT+INQ, AT+UART, просто чтобы назвать некоторые из наиболее часто неработающих), я часто получаю ответ "тайм-аут 1" вместо этого "ОК"

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

Ниже приведен простой код, который я написал только для того, чтобы попытаться воспроизвести результаты, используя "AT+ORGL", и что вы знаете, те же результаты...

#include "HC05.h"

#ifdef HC05_SOFTWARE_SERIAL
#include <SoftwareSerial.h>
HC05 btSerial = HC05(A2, A5, A3, A4);  // cmd, state, rx, tx
#else
HC05 btSerial = HC05(3, 2);  // cmd, state
#endif

#ifdef DEBUG_HC05
#ifdef DEBUG_SW_PORT
  extern SoftwareSerial DEBUG_PORT;      //This will allow me to print to serial without sending to BT
#endif
#endif

void setup() {
DEBUG_BEGIN(38400);
 DEBUG_PRINTLN("Setup");
  delay(3000);  // this delay is for debugging convenience only
 DEBUG_PRINTLN("DelayComplete");
 btSerial.findBaud();
 btSerial.cmd("AT"); //Let's test to make sure the KEY pin is connected well
 btSerial.cmd("AT+ORGL");
}

void loop() {

}

Вот результаты в серийном мониторе:

Setup
DelayComplete
findBaud
Trying 4800... x
Trying 9600... x
Trying 19200... x
Trying 38400... Found.
AT
OK
AT+ORGL
timeout 1

Вот фотография моего фриттинга

Проводка - это проводка, используемая во всех примерах библиотеки. Кажется, что ошибка "timeout 1" закодирована здесь в библиотеке HC05.cpp:

int HC05::cmd(const char* cmd, unsigned long timeout)
{
int recvd = 0;
DEBUG_PRINTLN(cmd);

setCmdPin(HIGH);
// No spec for how long it takes to enter command mode, but 100ms
// seems to work- assuming the output has been drained.
delay(100);
_btSerial.write(cmd);
_btSerial.write("\r\n");
_btSerial.setTimeout(timeout);
do
{
    // ATTENTION: At least through Arduino v1.0.3, it is not possible
    //            to tell the difference between a timeout and
    //            receiving only the termination character (NL in this
    //            case), because the termination character is not
    //            returned and timeout is not returned as a unique
    //            indication.
    //            In this case the result would be an early return
    //            of a multiline response before the OK is received.
    //            The return would incorrectly indicate an error (no
    //            OK response).
    recvd = _btSerial.readBytesUntil('\n',_buffer,_bufsize);
    if (recvd > 0)
    {
        DEBUG_WRITE((uint8_t *)_buffer,recvd);
        DEBUG_WRITE('\n');
    }
    else
    {
        DEBUG_PRINTLN("timeout 1");
    }
}
while ((recvd > 0) && (_buffer[0] != 'O' || _buffer[1] != 'K'));

setCmdPin(LOW);

// Empirically determined that it takes some time to reliably exit
// command mode. The appeared to be a baud rate dependency and with
// >100ms required at 9600 baud.
delay(150);
return((_buffer[0] == 'O' && _buffer[1] == 'K'));}
}

Я не уверен, как я могу исправить свою ошибку. Любые предложения очень ценятся!

Я полагаю, что я использую HC-05: http://www.dsdtech-global.com/2017/07/dsd-tech-hc-06-wireless-bluetooth.html

0 ответов

Другие вопросы по тегам