В качестве введения я купил себе ардуино и несколько модулей, чтобы изучить некоторые программные вещи. Проект состоит в том, чтобы в конечном итоге подключить к моей машине считыватель bluetooth OBD2 для отображения данных в реальном времени на небольшом ЖК-дисплее.
Проблема
Я либо не могу подключиться к моему модулю HC05, либо не могу писать в него через программный последовательный порт. Думаю, я сузил это до пары возможностей.
- Я вообще не могу подключиться к модулю.
У меня Мега 2560 и HC05.
5V ‹-› VCC
GND ‹-› GND
D2 ‹-› RXD
D3 ‹-› TXD
Обратите внимание, что я видел скорости передачи 9600 и 38400 бод для подключения, но ни один из них не работал, поэтому я сделал эту функцию, чтобы попробовать их все для себя ...
//set up serial relay into HC05.
SoftwareSerial hc05(2,3);
//computer serial baud rate 115200
bool hc05_connect() {
long baud_list[] = {300, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 74880, 115200, 230400};
Serial.println("Attempting to connect to HC05 bluetooth module...");
bool success = 0;
for (int i=0; i<(sizeof(baud_list) / sizeof(baud_list[0])); i++) {
Serial.print("Baud rate ");
Serial.print(baud_list[i]);
Serial.print("...");
hc05.begin(baud_list[i]);
hc05.write("AT");
delay(1000);
if (hc05.available()) {
Serial.println(" successful!");
success = 1;
return success;
} else {
Serial.println(" failed");
}
}
return success;
}
Примечания:
- Это всегда возвращалось неудачно для каждой скорости передачи.
- У меня модуль bluetooth находится в командном режиме, который запускается нажатием кнопки при подаче питания.
- Я попытался отключить контакты TX / RX при загрузке скетча. Никакой разницы не замечено.
- Мои попытки отправить команды на HC05 безуспешны.
Ниже моя функция для отправки команд модулю.
void loop() {
// listen for communication from the ESP8266 and then write it to the serial monitor
if (hc05.available()) {
Serial.write(hc05.read());
}
// listen for user input and send it to the ESP8266
if (Serial.available() > 0) {
Serial.println("Writing to hc05...");
Serial.println(Serial.available());
Serial.println(Serial.read());
hc05.write(Serial.read());
}
}
Я добавил несколько строк, которые записываются обратно в Serial, чтобы я мог видеть, что отправляется, а монитор возвращает странные вещи. Например, если я отправлю AT, монитор прочитает следующее:
Writing to hc05...
3
65
Writing to hc05...
1
10
Примечания:
- Почему он отправляет 2 разных предмета?
- Почему он отправляет целые числа, а не символы, которые я сказал?
- Означает ли это, что я просто отправляю ему бессмысленные команды, поэтому он не отвечает?
Я могу предоставить полный код, если хотите, но это уже огромный текстовый экран. Помогите, пожалуйста!
Изменить
Таким образом, я смог установить связь двумя способами через модуль bluetooth, используя модифицированную версию кода в этом руководстве: https://www.instructables.com/How-to-Set-Up-and-Test-Arduino-Bluetooth-Connectio/
Мне удалось отправить только с ПК и не получить на терминал Bluetooth Android с помощью SoftwareSerial с RX - TX0 / TX - RX0 HC05. И я смог принимать на ПК и не отправлять, используя аппаратный последовательный / Serial1 с RX - TX1 / TX - RX1 HC05.
Итак, теперь у меня есть RX - TX0 / TX - RX1. Вроде через терминал общается вот так.
void setup() {
Serial.begin(9600); //open the serial port
Serial1.begin(9600);
}
void loop() {
if (Serial1.available()) {
Serial.print("(Received)");
Serial.println(Serial1.readString()); // send from serial to bluetooth
}
if (Serial.available()) {
Serial.print("(Sent)");
Serial.println(Serial.readString());
Serial1.println(Serial.readString()); // send from bluetooth to serial
}
}
Но если я применяю это к своему коду, я все равно не могу заставить его работать.
Прежде чем я попытаюсь взломать это вместе, почему я получаю последовательное соединение для работы через 2 разных последовательных канала? Странный...