也许这个问题在这里会跑题,但是我不知道如何处理出现的问题。我不想半途而废。
这个想法是在arduino上创建一个蓝牙设备,使用蓝牙模块HC-05从机器(ELM327 v2.1)读取数据。
在此代码中,蓝牙模块切换到主模式并使用其 MAC 地址连接到 ELM327。模块在评论中的代码中回答。
#include <SoftwareSerial.h>
SoftwareSerial bluetoothSerial(4, 5);
void setup() {
Serial.begin(9600);
Serial.print("Готов)");
bluetoothSerial.begin(38400);
delay(1000);
getSetAtCommand("AT"); //OK
getSetAtCommand("AT+CMODE=0"); //OK
getSetAtCommand("AT+PSWD=1234"); //OK
getSetAtCommand("AT+ROLE=1"); //OK
getSetAtCommand("AT+BIND=0010,CC,4F3603"); //OK
getSetAtCommand("AT+LINK=0010,CC,4F3603"); //OK
delay(1000);
getSetAtCommand("AT+STATE?"); // OK: CONNECTED
}
char buffer[50];
int i = 0;
void loop() {
while (Serial.available() > 0) {
char c = Serial.read();
if (c != '\n' && i < 49) {
buffer[i++] = c;
} else {
buffer[i] = '\0';
//Serial.println(buffer);
getSetAtCommand(buffer);
i = 0;
}
}
}
void getSetAtCommand(String command) {
Serial.println(command);
String added_command = command + "\r\n";
bluetoothSerial.print(added_command);
delay(500);
while (bluetoothSerial.available()) {
Serial.write(bluetoothSerial.read());
}
}
由于 State 返回 CONNECTED,我假设它已连接到 ELM。
模块不响应命令AT+PAIR=0010,CC,4F3603,20\r\n
。模块等命令ATZ\r\n, AT015B\r\n, 015B\r\n, ATRV\r\n, 0105\r\n, at i\r\n, at rv\r\n, ati\r\n, atrv\r\n
也没有响应。有时 ERROR [0] 回答,据我了解这意味着没有这样的命令。
在我看来,这些命令根本达不到 ELM。可能是什么问题呢?
ELM327 本身可以工作,它可以毫无问题地连接到手机并显示数据。
我通过笔记本电脑上的模拟器进行了尝试,连接的蓝牙模型显示在笔记本电脑的蓝牙设备中,也无法像 ELM 那样工作。代码的第一个版本:
#include <SoftwareSerial.h>
SoftwareSerial bluetoothSerial(4, 5);
void setup() {
Serial.begin(9600);
Serial.print("Готов)");
bluetoothSerial.begin(38400);
delay(1000);
getSetAtCommand("AT"); //OK
getSetAtCommand("AT+CMODE=0"); //OK
getSetAtCommand("AT+PSWD=1234"); //OK
getSetAtCommand("AT+ROLE=1"); //OK
getSetAtCommand("AT+BIND=0010,CC,4F3603"); //OK
getSetAtCommand("AT+LINK=0010,CC,4F3603"); //OK
delay(1000);
getSetAtCommand("AT+STATE?"); // OK: CONNECTED
delay(1000);
getSetAtCommand("ATZ"); //нет ответа
getSetAtCommand("AT015B");//нет ответа
getSetAtCommand("015B"); //нет ответа
getSetAtCommand("ATRV");//нет ответа
getSetAtCommand("0105"); //нет ответа
getSetAtCommand("at i");//нет ответа
getSetAtCommand("at rv"); //нет ответа
getSetAtCommand("ati");//нет ответа
getSetAtCommand("atrv");//нет ответа
}
void loop() {
}
void getSetAtCommand(String command) {
Serial.println(command);
String added_command = command + "\r\n";
bluetoothSerial.print(added_command);
delay(500);
while (bluetoothSerial.available()) {
Serial.write(bluetoothSerial.read());
}
}
Serial.print("atsp5 )");
bluetoothSerial.print("atsp5\r\n");
delay(1000);
while (bluetoothSerial.available()) {
Serial.write(bluetoothSerial.read());
}