ELMduino - Library for Car Hacking

Hi,

Thanks for the great library, Im going to interface with the ELM327 via serial, do you know if i need the Arduino running at 3.3V or 5V for this?

Im planning to use the arduino pro micro so i can run at either 3.3v or 5v?

Many thanks

You'll have to check what voltages are safe for both the Arduino and the bluetooth device you're interfacing with the ELM327 (i.e. HC-05)

Version 2.5.0 adds a cool new feature: debug mode. If you have issues with using ELMduino - make sure to enable this debug mode to see what's really going on under the hood of the library

I should’ve explained the debug mode more and how to enable it. If anyone has issues with the library in the future, I ask that you run the library in debug mode, enable timestamps in the Serial Monitor, and provide a transcript of the printouts to help me figure out what’s going wrong with your setup.

To enable: When calling the “.begin()” method, specify “true” as the second argument like so:

myELM327.begin(ELM_PORT, true);

Result: After enabling the debug mode, you should get something similar to the following in the Serial Monitor:

Clearing input serial buffer
12:17:05.732 → Sending the following command/query: AT Z
12:17:06.575 → Received char: \r
12:17:06.575 → Received char: \r
12:17:06.575 → Received char: E
12:17:06.575 → Received char: L
12:17:06.575 → Received char: M
12:17:06.575 → Received char: 3
12:17:06.575 → Received char: 2
12:17:06.575 → Received char: 7
12:17:06.575 → Received char:
12:17:06.575 → Received char: v
12:17:06.575 → Received char: 1
12:17:06.575 → Received char: .
12:17:06.575 → Received char: 5
12:17:06.575 → Received char: \r
12:17:06.575 → Received char: \r
12:17:06.575 → Received char: >
12:17:06.575 → Delimiter found
12:17:06.575 → All chars received: ELM327v1.5
12:17:06.669 → Clearing input serial buffer
12:17:06.669 → Sending the following command/query: AT E0
12:17:06.669 → Received char: A
12:17:06.669 → Received char: T
12:17:06.716 → Received char:
12:17:06.716 → Received char: E
12:17:06.716 → Received char: 0
12:17:06.716 → Received char: \r
12:17:06.716 → Received char: O
12:17:06.716 → Received char: K
12:17:06.716 → Received char: \r
12:17:06.716 → Received char: \r
12:17:06.716 → Received char: >
12:17:06.716 → Delimiter found
12:17:06.716 → All chars received: ATE0OK
12:17:06.809 → Clearing input serial buffer
12:17:06.809 → Sending the following command/query: AT S0
12:17:06.809 → Received char: O
12:17:06.809 → Received char: K
12:17:06.809 → Received char: \r
12:17:06.809 → Received char: \r
12:17:06.809 → Received char: >
12:17:06.809 → Delimiter found
12:17:06.809 → All chars received: OK
12:17:06.903 → Clearing input serial buffer
12:17:06.903 → Sending the following command/query: AT AL
12:17:06.950 → Received char: O
12:17:06.950 → Received char: K
12:17:06.950 → Received char: \r
12:17:06.950 → Received char: \r
12:17:06.950 → Received char: >
12:17:06.950 → Delimiter found
12:17:06.950 → All chars received: OK
12:17:07.044 → Clearing input serial buffer
12:17:07.044 → Sending the following command/query: AT TP A0
12:17:07.091 → Received char: O
12:17:07.091 → Received char: K
12:17:07.091 → Received char: \r
12:17:07.091 → Received char: \r
12:17:07.091 → Received char: >
12:17:07.091 → Delimiter found
12:17:07.091 → All chars received: OK
12:17:07.091 → Connected to ELM327
12:17:07.091 → Service: 1
12:17:07.137 → PID: 12
12:17:07.137 → Normal length query detected
12:17:07.137 → Query string: 010C
12:17:07.137 → Clearing input serial buffer
12:17:07.137 → Sending the following command/query: 010C
12:17:07.137 → Received char: S
12:17:07.137 → Received char: E
12:17:07.137 → Received char: A
12:17:07.137 → Received char: R
12:17:07.137 → Received char: C
12:17:07.137 → Received char: H
12:17:07.184 → Received char: I
12:17:07.184 → Received char: N
12:17:07.184 → Received char: G
12:17:07.184 → Received char: .
12:17:07.184 → Received char: .
12:17:07.184 → Received char: .
12:17:07.184 → Received char: \r
12:17:07.372 → Received char: 4
12:17:07.372 → Received char: 1
12:17:07.372 → Received char: 0
12:17:07.372 → Received char: C
12:17:07.372 → Received char: 0
12:17:07.372 → Received char: A
12:17:07.372 → Received char: D
12:17:07.372 → Received char: 4
12:17:07.372 → Received char: \r
12:17:07.372 → Received char: 4
12:17:07.372 → Received char: 1
12:17:07.372 → Received char: 0
12:17:07.372 → Received char: C
12:17:07.372 → Received char: 0
12:17:07.372 → Received char: A
12:17:07.372 → Received char: D
12:17:07.372 → Received char: 8
12:17:07.372 → Received char: \r
12:17:07.731 → Received char: \r
12:17:07.731 → Received char: >
12:17:07.731 → Delimiter found
12:17:07.731 → All chars received: SEARCHING…410C0AD4410C0AD8
12:17:07.731 → Expected response header: 410C
12:17:07.731 → Double response detected
12:17:07.731 → 64-bit response: responseByte_0: 212
12:17:07.731 → responseByte_1: 10
12:17:07.731 → responseByte_2: 0
12:17:07.731 → responseByte_3: 0
12:17:07.731 → responseByte_4: 0
12:17:07.731 → responseByte_5: 0
12:17:07.731 → responseByte_6: 0
12:17:07.731 → responseByte_7: 0
12:17:07.731 → RPM: 693
12:17:07.731 → Service: 1
12:17:07.731 → PID: 12
12:17:07.731 → Normal length query detected
12:17:07.731 → Query string: 010C
12:17:07.731 → Clearing input serial buffer
12:17:07.731 → Sending the following command/query: 010C
12:17:07.731 → Received char: 4
12:17:07.731 → Received char: 1
12:17:07.731 → Received char: 0
12:17:07.731 → Received char: C
12:17:07.731 → Received char: 0
12:17:07.731 → Received char: A
12:17:07.731 → Received char: C
12:17:07.731 → Received char: C
12:17:07.731 → Received char: \r
12:17:07.731 → Received char: 4
12:17:07.731 → Received char: 1
12:17:07.731 → Received char: 0
12:17:07.731 → Received char: C
12:17:07.731 → Received char: 0
12:17:07.731 → Received char: A
12:17:07.731 → Received char: C
12:17:07.731 → Received char: C
12:17:07.731 → Received char: \r
12:17:07.840 → Received char: \r
12:17:07.840 → Received char: >
12:17:07.840 → Delimiter found
12:17:07.840 → All chars received: 410C0ACC410C0ACC
12:17:07.840 → Expected response header: 410C
12:17:07.887 → Double response detected
12:17:07.887 → 64-bit response: responseByte_0: 204
12:17:07.887 → responseByte_1: 10
12:17:07.887 → responseByte_2: 0
12:17:07.887 → responseByte_3: 0
12:17:07.887 → responseByte_4: 0
12:17:07.887 → responseByte_5: 0
12:17:07.887 → responseByte_6: 0
12:17:07.887 → responseByte_7: 0
12:17:07.887 → RPM: 691

Hi,
Im trying to get some info form my electric Motorcycle through elmduino. maybe someone can help me.

I tried the sample code. What I get is:
Connected to ELM327
Received: SEARCHING...UNABLETOCONNECT
ERROR: ELM_UNABLE_TO_CONNECT

when turning off the bike i will get timeouts.
So I guess that means that the BT connection is stable, but maybe the communication between ELM327 and the bike doenst work.
Is that assumption correct?

Any hints how I can debug this?

Ok,
I researched a little bit.
My Elm327 isnt capaple of doing SAE1708 (OBD – Elm Electronics)

I wanna buy a ELM325.
You defined 2 "user-protocolls". Can I use them to talk SAE1708 tu my ELM325?

Can you explain how I can do that?

Thank you

You can find a list of all supported protocols in the lib's readme here. Unfortunately, I don't think SAE1708 is supported.

Are you accessing the ECU directly or does your motorcycle have an OBDII port?

Also, please use the latest version of the library, enable debugging mode, and post the entire printout. Lastly, ensure all other bluetooth devices are either disabled or turned off and your motorcycle is on and running during the tests.

Ok, I bought a new dongle. and its working now.
Im getting a lot of data. The cheap chinese copycat-dongle was the problem.

Thank you for your support

UPDATE: Issue caused by ELM327 communication protocol. Sending "AT D" command (which is set all to defaults) restored actual values. The library is updated accordingly (as of version 2.5.4).

Thanks to @Power_Broker for this library. I appreciate his work and the time he put on this project. Though I am far from using it. In my case, the returned values are pretty high (about 256 times greater than the actual values). For example when the engine is off, myELM327.rpm() returns 4 (actual 0), myELM327.kph() returns 17 (actual 0). When engine is running, myELM327.rpm() returns 433640 (actual 1693.75 rpm). These are not only RPM and KPH, all available PIDs between 1 and 20 that are calculated based on OBD2 formula return greater values. According to the log excerpt below, the returned hex and responseByte_x values are correct. Something is happening during calculation but I couldn't figure it out.

I have been reading all the ELMduino github issues and this topic, but couldn't find a single clue. So perhaps my case is a unique one and far from being fixed. Anyways I wanted to share my experience in case someone else can benefit, or maybe there is a simple solution which I have overlooked.

Thanks in advance for your attention.

Here are the details of my rig:

PC running on Ubuntu 20.04 LTE (5.8.0-45-generic #51~20.04.1-Ubuntu SMP):

  • 970A SLI Krait Edition (MS-7693)
  • AMD FX(tm)-6300 Six-Core Processor
  • 8 GB RAM

MCU board with Arduino 1.8.13 IDE:

  • ESP32 Devkit V1

Toyota Corolla HB 2002 E120 with the cheapest transparent blue coloured single board bluetooth ELM327 adapter.

Here is the sketch I am using:

#include "BluetoothSerial.h"
#include "ELMduino.h"


BluetoothSerial SerialBT;
#define ELM_PORT   SerialBT
#define DEBUG_PORT Serial


ELM327 myELM327;


uint32_t rpm = 0;
uint32_t kph = 0;


void setup()
{
#if LED_BUILTIN
  pinMode(LED_BUILTIN, OUTPUT);
  digitalWrite(LED_BUILTIN, LOW);
#endif

  DEBUG_PORT.begin(115200);
  //SerialBT.setPin("1234");
  ELM_PORT.begin("ArduHUD", true);
  
  if (!ELM_PORT.connect("OBDII"))
  {
    DEBUG_PORT.println("Couldn't connect to OBD scanner - Phase 1");
    while(1);
  }

  if (!myELM327.begin(ELM_PORT, true, 2000))
  {
    Serial.println("Couldn't connect to OBD scanner - Phase 2");
    while (1);
  }

  Serial.println("Connected to ELM327");
}


void loop()
{
  float tempRPM = myELM327.rpm();

  if (myELM327.status == ELM_SUCCESS)
  {
    rpm = (uint32_t)tempRPM;
    Serial.print("RPM: "); Serial.println(rpm);
  }
  else
    myELM327.printError();
    

  int32_t tempKPH = myELM327.kph();

  if (myELM327.status == ELM_SUCCESS)
  {
    kph = tempKPH;
    Serial.print("KPH: "); Serial.println(kph);
  }
  else
    myELM327.printError();
}

Here is an excerpt from serial monitor:

12:37:43.503 -> Connected to ELM327
12:37:47.693 -> Service: 1
12:37:47.693 -> PID: 12
12:37:47.693 -> Normal length query detected
12:37:47.693 -> Query string: 010C
12:37:47.693 -> Clearing input serial buffer
12:37:47.693 -> Sending the following command/query: 010C
12:37:48.126 -> Received char: 4
12:37:48.126 -> Received char: 8
12:37:48.126 -> Received char: 6
12:37:48.126 -> Received char: B
12:37:48.126 -> Received char: 1
12:37:48.126 -> Received char: 0
12:37:48.163 -> Received char: 4
12:37:48.163 -> Received char: 1
12:37:48.163 -> Received char: 0
12:37:48.163 -> Received char: C
12:37:48.163 -> Received char: 0
12:37:48.163 -> Received char: 0
12:37:48.163 -> Received char: 0
12:37:48.163 -> Received char: 0
12:37:48.163 -> Received char: 1
12:37:48.163 -> Received char: 0
12:37:48.163 -> Received char: \r
12:37:48.163 -> Received char: \n
12:37:48.226 -> Received char: \r
12:37:48.259 -> Received char: \n
12:37:48.259 -> Received char: >
12:37:48.259 -> Delimiter found
12:37:48.259 -> All chars received: 486B10410C000010
12:37:48.259 -> Expected response header: 410C
12:37:48.259 -> Single response detected
12:37:48.259 -> 64-bit response: responseByte_0: 16
12:37:48.259 -> responseByte_1: 0
12:37:48.259 -> responseByte_2: 0
12:37:48.259 -> responseByte_3: 0
12:37:48.259 -> responseByte_4: 0
12:37:48.259 -> responseByte_5: 0
12:37:48.259 -> responseByte_6: 0
12:37:48.259 -> responseByte_7: 0
12:37:48.259 -> RPM: 4
12:37:48.259 -> Service: 1
12:37:48.259 -> PID: 13
12:37:48.259 -> Normal length query detected
12:37:48.294 -> Query string: 010D
12:37:48.294 -> Clearing input serial buffer
12:37:48.294 -> Sending the following command/query: 010D
12:37:48.393 -> Received char: 4
12:37:48.393 -> Received char: 8
12:37:48.429 -> Received char: 6
12:37:48.429 -> Received char: B
12:37:48.429 -> Received char: 1
12:37:48.429 -> Received char: 0
12:37:48.429 -> Received char: 4
12:37:48.429 -> Received char: 1
12:37:48.429 -> Received char: 0
12:37:48.429 -> Received char: D
12:37:48.429 -> Received char: 0
12:37:48.429 -> Received char: 0
12:37:48.429 -> Received char: 1
12:37:48.429 -> Received char: 1
12:37:48.429 -> Received char: \r
12:37:48.429 -> Received char: \n
12:37:48.527 -> Received char: \r
12:37:48.527 -> Received char: \n
12:37:48.564 -> Received char: >
12:37:48.564 -> Delimiter found
12:37:48.564 -> All chars received: 486B10410D0011
12:37:48.564 -> Expected response header: 410D
12:37:48.564 -> Single response detected
12:37:48.564 -> 64-bit response: responseByte_0: 17
12:37:48.564 -> responseByte_1: 0
12:37:48.564 -> responseByte_2: 0
12:37:48.564 -> responseByte_3: 0
12:37:48.564 -> responseByte_4: 0
12:37:48.564 -> responseByte_5: 0
12:37:48.564 -> responseByte_6: 0
12:37:48.564 -> responseByte_7: 0
12:37:48.564 -> KPH: 17
12:38:09.285 -> Service: 1
12:38:09.285 -> PID: 12
12:38:09.285 -> Normal length query detected
12:38:09.285 -> Query string: 010C
12:38:09.285 -> Clearing input serial buffer
12:38:09.285 -> Sending the following command/query: 010C
12:38:09.419 -> Received char: 4
12:38:09.419 -> Received char: 8
12:38:09.419 -> Received char: 6
12:38:09.419 -> Received char: B
12:38:09.419 -> Received char: 1
12:38:09.419 -> Received char: 0
12:38:09.419 -> Received char: 4
12:38:09.419 -> Received char: 1
12:38:09.419 -> Received char: 0
12:38:09.452 -> Received char: C
12:38:09.452 -> Received char: 0
12:38:09.452 -> Received char: F
12:38:09.452 -> Received char: B
12:38:09.452 -> Received char: 2
12:38:09.452 -> Received char: D
12:38:09.452 -> Received char: 1
12:38:09.452 -> Received char: \r
12:38:09.452 -> Received char: \n
12:38:09.552 -> Received char: \r
12:38:09.552 -> Received char: \n
12:38:09.552 -> Received char: >
12:38:09.552 -> Delimiter found
12:38:09.552 -> All chars received: 486B10410C0FB2D1
12:38:09.552 -> Expected response header: 410C
12:38:09.586 -> Single response detected
12:38:09.586 -> 64-bit response: responseByte_0: 209
12:38:09.586 -> responseByte_1: 178
12:38:09.586 -> responseByte_2: 15
12:38:09.586 -> responseByte_3: 0
12:38:09.586 -> responseByte_4: 0
12:38:09.586 -> responseByte_5: 0
12:38:09.586 -> responseByte_6: 0
12:38:09.586 -> responseByte_7: 0
12:38:09.586 -> RPM: 257204
12:38:09.586 -> Service: 1
12:38:09.586 -> PID: 13
12:38:09.586 -> Normal length query detected
12:38:09.586 -> Query string: 010D
12:38:09.586 -> Clearing input serial buffer
12:38:09.586 -> Sending the following command/query: 010D
12:38:09.719 -> Received char: 4
12:38:09.719 -> Received char: 8
12:38:09.752 -> Received char: 6
12:38:09.752 -> Received char: B
12:38:09.752 -> Received char: 1
12:38:09.752 -> Received char: 0
12:38:09.752 -> Received char: 4
12:38:09.752 -> Received char: 1
12:38:09.752 -> Received char: 0
12:38:09.752 -> Received char: D
12:38:09.752 -> Received char: 0
12:38:09.752 -> Received char: 4
12:38:09.752 -> Received char: 1
12:38:09.752 -> Received char: 5
12:38:09.752 -> Received char: \r
12:38:09.752 -> Received char: \n
12:38:09.852 -> Received char: \r
12:38:09.886 -> Received char: \n
12:38:09.886 -> Received char: >
12:38:09.886 -> Delimiter found
12:38:09.886 -> All chars received: 486B10410D0415
12:38:09.886 -> Expected response header: 410D
12:38:09.886 -> Single response detected
12:38:09.886 -> 64-bit response: responseByte_0: 21
12:38:09.886 -> responseByte_1: 4
12:38:09.886 -> responseByte_2: 0
12:38:09.886 -> responseByte_3: 0
12:38:09.886 -> responseByte_4: 0
12:38:09.886 -> responseByte_5: 0
12:38:09.886 -> responseByte_6: 0
12:38:09.886 -> responseByte_7: 0
12:38:09.886 -> KPH: 1045

Hello, Im currently trying to work on a project that uses leds to show my cars rpm. I believe I got the AT+Commands working and the hc-05 is connected to the elm327. And I'm obviously using the ELMduino library but having issues to get it to connect. Im using the example code "Arduino_Software_Serial_test" and as it is connecting it gets through 6 of the protocols and then messes up the next protocol. Then it says it cannot connect. Do you know what the problem is?

///////////////////////////////////////////////////////////////////////////////////
Attempting to connect to ELM327...
Clearing input serial buffer
Sending the following command/query: AT Z
Attempting to connect to ELM327...
Clearing input serial buffer
Sending the following command/query: AT Z
All chars received:
Timeout detected with overflow of 0ms
Clearing input serial buffer
Sending the following command/query: AT E0
All chars received:
Timeout detected with overflow of 0ms
Clearing input serial buffer
Sending the following command/query: AT S0
All chars received:
Timeout detected with overflow of 0ms
Clearing input serial buffer
Sending the following command/query: AT AL
All chars received:
Timeout detected with overflow of 0ms
Clearing input serial buffer
Sending the following command/query: AT TP A0
All chars received:
Timeout detected with overflow of 0ms
Setting protocol via AT TP A%c did not work - trying via AT SP %c
Clearing input serial buffer
Sending the following command/query: AT SP 0
All chars received:
Timeout detected with overflow of 0ms
Setting protocol via AT SP %c did not work
Couldn't connect to OBD scanner
////////////////////////////////////////////////////////////////////////////////////

Hi There @Power_Broker,

first of all i really appreciate your work for the ELMduino library here and apologize for my bad english ^^.
I spent nights of trying to conenct my new Nissan Leaf ZE1 via OBDII (ELM327) an ESP32 and your library. The Goal is to publish the SoC via MQTT and use it in Home-Assistant. But now i'm a bit stucked and have some Questions.

Is there any guide for simply connecting to the BMS of the Nissan-Leaf via ELM327?
Could it be, that my ELM327 (the blue mini-Adapter from Ebay for 10€) could not handle the BMS-Protocoll?
I can establish the connection and print the rpm both in my Leaf and my Mercedes C-Class (S205), but nothing more.

Thanks in advance from an desperate arduino-newbie!

Greetz,
chrizzbiz

Is there any guide for simply connecting to the BMS of the Nissan-Leaf via ELM327?

ELM327s only interface with what is connected to the OBD2 port, so I don't think what you want is possible. HOWEVER, take a look at the supported PID list in the library's readme - you might find what you need is already incorporated in the lib. Also, the lib supports custom PIDs as long as you know what they are.

What exact data are you looking to get from your car?

Thanks for your answer. Im looking for the State-Of-Charge (SoC) from the Battery-Management-System (BMS). I couldn‘t find any PIDs from the BMS in your readme.

I do apologize for such a basic question but is it possible to read can bus in real time using elm327?

In the end I need my esp32 to detect turn indicator signals broadcasted in can bus.

Hello my issue is to disable debug mode in this sample code. Thanks!
#include <SoftwareSerial.h>
#include "ELMduino.h"

SoftwareSerial mySerial(2, 3); // RX, TX
ELM327 myELM327;

uint32_t rpm = 0;
uint16_t Temp = 0;

void setup()
{
Serial.begin(38400);
mySerial.begin(38400);
myELM327.begin(mySerial, true, 2000);
}

void loop()
{
float tempRPM = myELM327.rpm();
float tempTemp=myELM327.engineCoolantTemp();
if (myELM327.status == ELM_SUCCESS)
{
rpm = (uint32_t)tempRPM;
Temp = (uint16_t)tempTemp;
Serial.print("RPM: "); Serial.println(rpm);
Serial.print("Temp: "); Serial.println(Temp);
}
}

I replace 'true' with 'false' to turn off debug mode

Hi, thanks for the ELMduino Library i want to read OBD2 Data from my Audi A4 for the Öltemp.
I take your ESP32_Blwetooth_Serial,I think the esp is connected to the ELM327 but I do not get any data to the RMP. The ELM327 works wiht the Torque APP, i see the APP take the 15765-4CAN11/500 Protokol.
Can you help me please

Thanks Jörn

12:46:21.607 -> Clearing input serial buffer
12:46:21.607 -> Sending the following command/query: AT D
12:46:21.654 -> Received char: ?
12:46:21.654 -> Received char: \r
12:46:21.654 -> Received char: \r
12:46:21.654 -> Received char: >
12:46:21.654 -> Delimiter found
12:46:21.654 -> All chars received:
12:46:21.748 -> Clearing input serial buffer
12:46:21.748 -> Sending the following command/query: AT Z
12:46:21.794 -> Received char: \r
12:46:21.794 -> Received char: \r
12:46:21.794 -> Received char: E
12:46:21.794 -> Received char: L
12:46:21.794 -> Received char: M
12:46:21.794 -> Received char: 3
12:46:21.794 -> Received char: 2
12:46:21.794 -> Received char: 7
12:46:21.794 -> Received char:
12:46:21.794 -> Received char: v
12:46:21.794 -> Received char: 2
12:46:21.794 -> Received char: .
12:46:21.794 -> Received char: 1
12:46:21.794 -> Received char: \r
12:46:21.794 -> Received char: \r
12:46:21.794 -> Received char: >
12:46:21.794 -> Delimiter found
12:46:21.794 -> All chars received: ELM327v21
12:46:21.888 -> Clearing input serial buffer
12:46:21.888 -> Sending the following command/query: AT E0
12:46:21.951 -> Received char: A
12:46:21.951 -> Received char: T
12:46:21.951 -> Received char:
12:46:21.951 -> Received char: E
12:46:21.951 -> Received char: 0
12:46:21.951 -> Received char: \r
12:46:21.951 -> Received char: O
12:46:21.951 -> Received char: K
12:46:21.951 -> Received char: \r
12:46:21.951 -> Received char: \r
12:46:21.951 -> Received char: >
12:46:21.951 -> Delimiter found
12:46:21.951 -> All chars received: ATE0OK
12:46:22.045 -> Clearing input serial buffer
12:46:22.045 -> Sending the following command/query: AT S0
12:46:22.091 -> Received char: O
12:46:22.091 -> Received char: K
12:46:22.091 -> Received char: \r
12:46:22.091 -> Received char: \r
12:46:22.091 -> Received char: >
12:46:22.091 -> Delimiter found
12:46:22.091 -> All chars received: OK
12:46:22.185 -> Clearing input serial buffer
12:46:22.185 -> Sending the following command/query: AT AL
12:46:22.185 -> Received char: ?
12:46:22.232 -> Received char: \r
12:46:22.232 -> Received char: \r
12:46:22.232 -> Received char: >
12:46:22.232 -> Delimiter found
12:46:22.232 -> All chars received:
12:46:22.326 -> Clearing input serial buffer
12:46:22.326 -> Sending the following command/query: AT ST 00
12:46:24.326 -> All chars received:
12:46:24.326 -> Timeout detected with overflow of 0ms
12:46:24.420 -> Clearing input serial buffer
12:46:24.420 -> Sending the following command/query: AT TP A0
12:46:24.420 -> Received char: O
12:46:24.420 -> Received char: K
12:46:24.420 -> Received char: \r
12:46:24.466 -> Received char: \r
12:46:24.466 -> Received char: >
12:46:24.466 -> Delimiter found
12:46:24.466 -> All chars received: OK
12:46:24.466 -> Connected to ELM327
12:46:24.466 -> Service: 1
12:46:24.466 -> PID: 12
12:46:24.466 -> Normal length query detected
12:46:24.466 -> Query string: 010C
12:46:24.466 -> Clearing input serial buffer
12:46:24.466 -> Sending the following command/query: 010C
12:46:24.466 -> Received char: N
12:46:24.466 -> Received char: O
12:46:24.466 -> Received char:
12:46:24.466 -> Received char: D
12:46:24.466 -> Received char: A
12:46:24.466 -> Received char: T
12:46:24.466 -> Received char: A
12:46:24.466 -> Received char: \r
12:46:24.466 -> Received char: \r
12:46:24.466 -> Received char: >
12:46:24.466 -> Delimiter found
12:46:24.466 -> All chars received: NODATA
12:46:24.513 -> ELM responded with errror "NO DATA"
12:46:24.513 -> Expected response header: 410C
12:46:24.513 -> Response not detected
12:46:24.513 -> Received: NODATA
12:46:24.513 -> ERROR: ELM_NO_DATA