Comments (4)
Try this:
#include <ESP8266WiFi.h>
#include "ELMduino.h"
const char* ssid = "WiFi_OBDII";
const char* password = "your-password";
//IP Adress of your ELM327 Dongle
IPAddress server(192, 168, 0, 10);
WiFiClient client;
ELM327 myELM327;
uint32_t rpm = 0;
void setup()
{
Serial.begin(115200);
// Connecting to ELM327 WiFi
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid);
// WiFi.begin(ssid, password); //Use this line if your ELM327 has a password protected WiFi
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("Connected to Wifi");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
if (client.connect(server, 35000))
Serial.println("connected");
else
{
Serial.println("connection failed");
ESP.reset();
}
myELM327.begin(client);
}
void loop()
{
float tempRPM = myELM327.rpm();
if (myELM327.status == ELM_SUCCESS)
{
rpm = (uint32_t)tempRPM;
Serial.print("RPM: "); Serial.println(rpm);
}
else
{
Serial.print(F("\tERROR: "));
Serial.println(myELM327.status);
delay(100);
}
}
from elmduino.
Thanks for your Response !
now i can read the data but only rpm and kph(Speed).
if i want to Read other PIDS its dosent work proberly.
So the rpm works good but i cant get the COOLANT temperature?
I hope this is Right ?:float tempCOOLANT = myELM327.queryPID(SERVICE_01,ENGINE_COOLANT_TEMP);
void loop()
{
float tempRPM = myELM327.rpm();
float tempBATTERY = myELM327.queryPID(SERVICE_01,CONTROL_MODULE_VOLTAGE);
float tempCOOLANT = myELM327.queryPID(SERVICE_01,ENGINE_COOLANT_TEMP);
float tempINTAKE = myELM327.queryPID(SERVICE_01,INTAKE_AIR_TEMP);
float tempOIL = myELM327.queryPID(SERVICE_01,ENGINE_OIL_TEMP);
float tempLOAD= myELM327.queryPID(SERVICE_01,ENGINE_LOAD);
float tempSPEED1= myELM327.kph();
if (myELM327.status == ELM_SUCCESS)
{
rpm = (uint32_t)tempRPM;
tft.setCursor(50, 95); // Set position (x,y)
tft.setTextColor(ST7735_WHITE); // Set color of text. We are using custom font so there is no background color supported
tft.setTextSize(2); // Set text size. Goes from 0 (the smallest) to 20 (very big)
tft.print(rpm); // Print a text or value
Serial.print("RPM: "); Serial.println(rpm);
coolant = (uint32_t)tempCOOLANT;
tft.setCursor(5, 15); // Set position (x,y)
tft.setTextColor(ST7735_GREEN); // Set color of text. We are using custom font so there is no background color supported
tft.setTextSize(2); // Set text size. Goes from 0 (the smallest) to 20 (very big)
tft.print(coolant); // Print a text or value
Serial.print("COOLANT: "); Serial.println(coolant);
from elmduino.
I was able to help another user successfully query non-rpm/non-speed PIDs in issue #4. Keep in mind, you have to check myELM327.status
after each myELM327.queryPID()
call. Also keep in mind that you may have to do some extra math on the return value of myELM327.queryPID()
to get the correct reading.
Here's an example:
// modified test + my custom PIDs
// based purely on library
#include "BluetoothSerial.h"
#include "ELMduino.h"
#define ELM_PORT SerialBT
#define ESP_BLUETOOTH_NAME "ESP32"
BluetoothSerial SerialBT;
ELM327 myELM327;
void setup()
{
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, HIGH);
Serial.begin(115200);
ELM_PORT.begin(ESP_BLUETOOTH_NAME, true);
Serial.println("Attempting to connect to ELM327...");
if (!ELM_PORT.connect("V-LINK"))
{
Serial.println("Couldn't connect to OBD scanner - Phase 1");
while (1);
}
if (!myELM327.begin(ELM_PORT))
{
Serial.println("Couldn't connect to OBD scanner - Phase 2");
while (1);
}
Serial.println("Connected to ELM327");
for (int a = 0; a < 10; ++a)
{
digitalWrite(LED_BUILTIN,HIGH); delay(100);
digitalWrite(LED_BUILTIN,LOW); delay(100);
}
}
void loop()
{
int32_t rpm = -1;
int32_t soot = -1;
int32_t burn = -1;
float litersLeft = -1;
/////////////////////////////////////////////////////// RPM
float tempRPM = myELM327.rpm();
Serial.print("Payload received for rpm: ");
for (byte i = 0; i < PAYLOAD_LEN; i++)
Serial.write(myELM327.payload[i]);
Serial.println();
if (myELM327.status == ELM_SUCCESS)
{
rpm = (int32_t)tempRPM;
Serial.print("RPM: "); Serial.println(rpm);
}
else
printError();
/////////////////////////////////////////////////////// Soot
if (myELM327.queryPID(34, 13162))
{
int32_t tempSoot = myELM327.findResponse();
Serial.print("Payload received for soot: ");
for (byte i = 0; i < PAYLOAD_LEN; i++)
Serial.write(myELM327.payload[i]);
Serial.println();
if (myELM327.status == ELM_SUCCESS)
{
soot = tempSoot;
Serial.print("Soot: "); Serial.println(soot);
}
else
printError();
}
/////////////////////////////////////////////////////// Liters
if (myELM327.queryPID(34, 4906))
{
int32_t tempLitersLeft = myELM327.findResponse() / 64.0;
Serial.print("Payload received for liters: ");
for (byte i = 0; i < PAYLOAD_LEN; i++)
Serial.write(myELM327.payload[i]);
Serial.println();
if (myELM327.status == ELM_SUCCESS)
{
litersLeft = tempLitersLeft;
Serial.print("Liters: "); Serial.println(litersLeft);
}
else
printError();
}
/////////////////////////////////////////////////////// Burns
if (myELM327.queryPID(34, 8434))
{
int32_t tempBurn = myELM327.findResponse();
Serial.print("Payload received for DPF burns: ");
for (byte i = 0; i < PAYLOAD_LEN; i++)
Serial.write(myELM327.payload[i]);
Serial.println();
if (myELM327.status == ELM_SUCCESS)
{
burn = tempBurn;
Serial.print("DPF burns: "); Serial.println(burn);
}
else
printError();
}
for (int a = 0; a < 5; ++a)
{
digitalWrite(LED_BUILTIN,HIGH);
delay(200);
digitalWrite(LED_BUILTIN,LOW);
delay(200);
}
}
void printError()
{
if (myELM327.status == ELM_SUCCESS)
Serial.println(F("\tELM_SUCCESS"));
else if (myELM327.status == ELM_NO_RESPONSE)
Serial.println(F("\tERROR: ELM_NO_RESPONSE"));
else if (myELM327.status == ELM_BUFFER_OVERFLOW)
Serial.println(F("\tERROR: ELM_BUFFER_OVERFLOW"));
else if (myELM327.status == ELM_GARBAGE)
Serial.println(F("\tERROR: ELM_GARBAGE"));
else if (myELM327.status == ELM_UNABLE_TO_CONNECT)
Serial.println(F("\tERROR: ELM_UNABLE_TO_CONNECT"));
else if (myELM327.status == ELM_NO_DATA)
Serial.println(F("\tERROR: ELM_NO_DATA"));
else if (myELM327.status == ELM_STOPPED)
Serial.println(F("\tERROR: ELM_STOPPED"));
else if (myELM327.status == ELM_TIMEOUT)
Serial.println(F("\tERROR: ELM_TIMEOUT"));
else if (myELM327.status == ELM_GENERAL_ERROR)
Serial.println(F("\tERROR: ELM_GENERAL_ERROR"));
}
delay(500);
}
from elmduino.
Seeing as @Felix-Jost was able to get it to work for an ESP8266, I'm closing this ticket.
from elmduino.
Related Issues (20)
- Protocol Data Point HOT 4
- Couldn't connect to OBD scanner (stucked) HOT 18
- First time Bluetooth pairing between ESP32 and ELM327 HOT 1
- custom pid for DPF HOT 17
- BT Pairing problem between ESP-32 and ELM327 HOT 6
- How to change OBD protocol HOT 5
- Response not detected HOT 28
- Error in getting Multiple PID's HOT 9
- ESP32 s3 BLE compatibility? HOT 3
- Attempting to read non-standard PID HOT 1
- When does `queryPid` return `true`? HOT 4
- ESP32_CheckPIDs_1_20.ino HOT 1
- How to read data if I know TXD RXF RXD and MTH HOT 2
- ERROR: ELM_BUFFER_OVERFLOW on Honda Vezel 2023 HOT 4
- Problems in phase 1, can't connect with ELM327 HOT 3
- couldn't connect to OBD scanner HOT 5
- ERROR: ELM_TIMEOUT . Value received for a while and then error happens. HOT 4
- setPIN error when using ESP32 HOT 3
- Help me understand Manifold pressure readings HOT 32
- How to use the No-Blocking function for standard PID (such as OBD standard)?
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from elmduino.