OBD2 ELM327 Clone
#1
wer hat Lust mal was zu basteln?

https://www.obdsol.com/solutions/chips/stn1110/


kann man fix und fertig aufgebaut in DL bei EXP-Tech beziehen:

https://www.exp-tech.de/obd-ii-uart

übertrifft jeden ELM327!

Kann man recht leicht am Arduino anschließen:

[Bild: 51a7ae23ce395f9d11000003.png]
Bildrechte bei Sparkfun!!

Software:

Code:
#include <SoftwareSerial.h>

//Create an instance of the new soft serial library to control the serial LCD
//Note, digital pin 3 of the Arduino should be connected to Rx of the serial LCD.

SoftwareSerial lcd(2,3);

//This is a character buffer that will store the data from the serial port
char rxData[20];
char rxIndex=0;

//Variables to hold the speed and RPM data.
int vehicleSpeed=0;
int vehicleRPM=0;

Code:
void setup(){
  //Both the Serial LCD and the OBD-II-UART use 9600 bps.
  lcd.begin(9600);
  Serial.begin(9600);

  //Clear the old data from the LCD.
  lcd.write(254);
  lcd.write(1);  

  //Put the speed header on the first row.
  lcd.print("Speed: ");
  lcd.write(254);
  //Put the RPM header on the second row.
  lcd.write(128+64);
  lcd.print("RPM: ");

  //Wait for a little while before sending the reset command to the OBD-II-UART
  delay(1500);
  //Reset the OBD-II-UART
  Serial.println("ATZ");
  //Wait for a bit before starting to send commands after the reset.
  delay(2000);

  //Delete any data that may be in the serial port before we begin.
  Serial.flush();
}

Code:
void loop(){
  //Delete any data that may be in the serial port before we begin.  
  Serial.flush();
  //Set the cursor in the position where we want the speed data.
  lcd.write(254);
  lcd.write(128+8);
  //Clear out the old speed data, and reset the cursor position.
  lcd.print("        ");
  lcd.write(254);
  lcd.write(128+8);
  //Query the OBD-II-UART for the Vehicle Speed
  Serial.println("010D");
  //Get the response from the OBD-II-UART board. We get two responses
  //because the OBD-II-UART echoes the command that is sent.
  //We want the data in the second response.
  getResponse();
  getResponse();
  //Convert the string data to an integer
  vehicleSpeed = strtol(&rxData[6],0,16);
  //Print the speed data to the lcd
  lcd.print(vehicleSpeed);
  lcd.print(" km/h");
  delay(100);

  //Delete any data that may be left over in the serial port.
  Serial.flush();
  //Move the serial cursor to the position where we want the RPM data.
  lcd.write(254);
  lcd.write(128 + 69);
  //Clear the old RPM data, and then move the cursor position back.
  lcd.print("          ");
  lcd.write(254);
  lcd.write(128+69);

  //Query the OBD-II-UART for the Vehicle rpm
  Serial.println("010C");
  //Get the response from the OBD-II-UART board
  getResponse();
  getResponse();
  //Convert the string data to an integer
  //NOTE: RPM data is two bytes long, and delivered in 1/4 RPM from the OBD-II-UART
  vehicleRPM = ((strtol(&rxData[6],0,16)*256)+strtol(&rxData[9],0,16))/4;
  //Print the rpm data to the lcd
  lcd.print(vehicleRPM);

  //Give the OBD bus a rest
  delay(100);

}

Code:
/The getResponse function collects incoming data from the UART into the rxData buffer
// and only exits when a carriage return character is seen. Once the carriage return
// string is detected, the rxData buffer is null terminated (so we can treat it as a string)
// and the rxData index is reset to 0 so that the next string can be copied.
void getResponse(void){
  char inChar=0;
  //Keep reading characters until we get a carriage return
  while(inChar != '\r'){
    //If a character comes in on the serial port, we need to act on it.
    if(Serial.available() > 0){
      //Start by checking if we've received the end of message character ('\r').
      if(Serial.peek() == '\r'){
        //Clear the Serial buffer
        inChar=Serial.read();
        //Put the end of string character on our data string
        rxData[rxIndex]='\0';
        //Reset the buffer index so that the next character goes back at the beginning of the string.
        rxIndex=0;
      }
      //If we didn't get the end of message character, just add the new character to the string.
      else{
        //Get the new character from the Serial port.
        inChar = Serial.read();
        //Add the new character to the string, and increment the index variable.
        rxData[rxIndex++]=inChar;
      }
    }
  }
}


mehr Lesestoff:

https://learn.sparkfun.com/tutorials/obd...okup-guide


ich werde mir das Board kaufen und an einem Raspberry Pi in Betrieb nehmen und eine GUI stricken Prost!


Mitstreiter willkommen........und das Teil ist nicht nur aber auch für die C5 und C6 benutzbar!
Grüße
Thomas


  Zitieren
#2
Hi Thomas,
Ich wäre sicherlich gerne dabei, aber nach "ELM327" ging mir das Verständnis und später der Glaube an meine Fähigkeiten aus. Könntest Du bitte ab "Luftschutzbunker" mit Erklärungen anfangen? Was ist es, was macht es und was kann man später damit anfangen?

Ich möchte es wenigstens annähernd verstehen, weil ich Deine Bastelei bisher schon sehr interessant fand.

Viele Grüße,
Achim
Objects in mirror are loser...
  Zitieren
#3
Achim, ich stehe gerade voll auf dem Schlauch, auch wenn da Luftschutzbunker in Anführungszeichen geschrieben steht dumdidum

Morgen erkläre ich mal genauer um was es dabei geht.....
Grüße
Thomas


  Zitieren
#4
Thomas,
genauso habe ich auf dem Schlauch gestanden, bzw. stehe immer noch drauf. Feixen

...aber Ziel erreicht, bin mal gespannt, was das alles ist.

Viele Grüße, Achim
Objects in mirror are loser...
  Zitieren
#5
Hi Tom,

ich möchte dich in deinem Basteleifer nicht bremsen, aber was hast du vor, dass du einen Raspi brauchst und nicht mit der Leistung eines Arduino auskommst? Zumal brauchbare Displays/Touchscreens für den Raspi nicht unbedingt billig sind.

Ich verzichte übrigens auf JBus und bastele gerade mit nem PiCAN als CAN-Bus-Analyzer. Mit Touchscreen.

Viele Grüße, Mirko
[Bild: cch_st.png]
  Zitieren
#6
Hallo Mirko,
hier kann mich niemand bremsen King
Aber trotzdem danke für Deinen Einwand!

Dass das keine 25€ Sache wird ist schon klar.....ich wollte dazu auch nach und nach ins Detail gehen.
Dein verlinktes Board ist auch gar nicht mal so schlecht, nur wäre dann die C5 außen vor.
Das J1850 Protokoll sollte schon mit an Bord sein.

Im Grunde möchte ich erst mal Rohdaten visualisieren und dazu einiges erklären.
Bei der C5 kenne ich mich ja im Datenstrom recht gut aus.....
Mit CAN fange ich erst an....

Natürlich kann man alles mit einem China ELM327 Clone und einer App machen, sprich diagnostizieren und Live Daten abrufen, ich möchte aber auch aufzeigen wie man aktiv ins Geschehen eingreift und zum Beispiel ein Fenster bewegt, oder eine Tür verriegelt.

Der PI bietet sich dazu an weil er recht preiswert ist und das Linux in Verbindung mit Python und TKinter tolle Möglichkeiten eröffnet.

vy73 Zwinkern
Grüße
Thomas


  Zitieren
#7
Hi Tom,

ich wäre dabei.
Möchte eh noch mal mit Dir sprechen, da ich bei der C5 bzgl. Automatikgetriebe etwas bauen will.
C5_Coup_sil_60.png
  Zitieren
#8
Halt mich doch mal auf dem Laufenden, wenn ich demnächst mit der CAN-Geschichte durch bin (Kernel mit PiCAN-Patch läuft seit 4 Stunden auf dem Raspi 2, als nächstes kommt das BeagleBone dran) könnte das als Fortführung oder Bastelprojekt interessant sein.

Viele Grüße, Mirko
[Bild: cch_st.png]
  Zitieren
#9
Coole Sache - bei mir im Haus (und drumherum) sprechen leider nur zwei Dinge CAN: Mein X5-Bayernknödel und der Controller von einem Zahnarzt-Stuhl, den ich gerade zur Rep. bei mir habe.
Ich könnte die beiden eigentlich mal verbinden sich vor Lachen auf dem Boden wälzen sich vor Lachen auf dem Boden wälzen

Irgendwo fliegt auch noch ein iBus-Interface rum.
Ich les hier mal mit, klingt spannend!
  Zitieren
#10
Hab mir jetzt auch mal ein exemplar bestellt.
Wobei ich die Platine sehr klobig finde. Da würde ich für ein finales System lieber auf einen OBD2 Stecker setzen oder selbst eine Platine machen.

Hier gibt es auch interessante Produkte die alles in einem Gehäuse vereinen:

https://freematics.com/products/
C5_Coup_sil_60.png
  Zitieren


Möglicherweise verwandte Themen...
Thema Verfasser Antworten Ansichten Letzter Beitrag
  Obd2 Corvette.ZR1 0 12.816 06.06.2017, 23:11
Letzter Beitrag: Corvette.ZR1
  OBD2 Diagnosegerät .. Welches funktioniert bei der C6? (ASR-Störung!) Wer weiss Rat? wormser68 13 33.043 14.11.2013, 10:46
Letzter Beitrag: TobiasB
  Aufbau einer VIN im OBD2 J1850 Datenstrom Tom V 1 14.012 07.09.2013, 21:09
Letzter Beitrag: Tom V
  OBD2 / Class2 Busadressen der C5 Tom V 0 11.950 06.09.2013, 23:41
Letzter Beitrag: Tom V

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 2 Gast/Gäste
Forenübersicht
Technikforen
-- C 1 Technikforum
-- C 2 Technikforum
-- C 3 Technikforum
-- C 4 Technikforum
---- C4 ZR-1 Technikforum
-- C 5 Technikforum
---- C5 Z06-Technikforum
-- C 6 Technikforum
---- C6 Z06-Technikforum
---- C6 ZR1-Technikforum
-- C7 Technikforum
---- C7 Z06 Technikforum
-- C8 Diskussionsforum
-- Tuningforum
-- Allgemeines Technikforum
---- OBD2
Other Vette-Stuff
-- Man sieht sich
---- Nachbetrachtungen
---- Stammtische Deutschland
------ Baden-Württemberg
------ Bayern
------ Berlin/Brandenburg
------ Hessen
------ Nordrhein- Westfalen
------ Niedersachsen/HB/HH
------ Rheinland-Pfalz
------ Sachsen
------ Thüringen
------ Schleswig Holstein
---- Stammtische Österreich
------ Wien / St. Pölten
---- Stammtische Schweiz
------ Ostschweiz/Vorarlberg
------ Treffen Schweiz
-- Jäger & Sammler
-- Vettetalk
---- Reiseberichte
-- Corvette-Bilder der Mitglieder
---- Membervideos
-- Sonstige Schöne Vettepics
---- Corvettevideos
-- Vettelady's Corner
-- Wissenswertes & Kurioses
-- Werkstätten & Händler
-- CORVETTE & Parts - For Sale!
---- laufende Auktionen bei EBAY
---- Transporthilfeforum
---- for sale - Alles ohne Corvette!
-- Wanted !
-- Wer weiß was
---- Fragen vor dem Kauf
-- Paragraphen & Pamphlete
Smalltalk und Forumsschnack
-- Über dieses Forum
---- Teammitteilungen
---- In Memoriam
-- Hallo, ich bin's!
-- Motorsport
-- Off Topic
---- Jux & Dallerei
---- Das Club-Forum
---- Don't feed the troll!
-- Glückwunsch- und Grußforum
-- Bits und Bytes
-- Comic-Forum
-- Das Modellautoforum
-- Testforum
Händlerangebote
-- Info-Forum
-- ACP Euskirchen
-- Dyno-Center
-- KTS American Parts
-- Corvetteproject (Molle)
-- Schmidt Revolution
-- NCRS Central Europe
-- IDP-CORVETTE ( INJA )
-- TIKT Performance Parts
-- BG Sportwagen
-- SPEEDSTYLE
-- V8Lounge
-- AVI Schilling & Wendt Assekuranzmakler
-- Autosalon am Park GmbH
-- NCRS Central Europe
-- Hoffmann Classics
-- CCRP Austria
-- RockAuto.com
-- Stingrays-Shop.com
-- corvetteparts.de