» »

C#, OBD2 in branje iz porta

C#, OBD2 in branje iz porta

krneki0001 ::

Malo se ukvarjam, da bi naredil svojo aplikacijo v C# za branje podatkov iz motornega računalnika v avtomobilu. Tablico 10" bi priklopil direktno na OBD2 port z vmesnikom in potem s svojim programom parsal podatke, ki bi jih dobil iz obd2 porta. Hkrati bi pa to skupaj povezal z GPS-om in offline mapami na windows 10.

Se je že kdo s tem ukvarjal?

Je možno iz OBD2 dobivat tako kot z GPS-a stalno vse podatke ali moraš za vsak podatek zbujat zadevo z AT komandami?

ingeniero ::

Odvisno od GPS modula ... Ponavadi naprava sama pošilja podatke na serijski port.
Sem bil prehiter. Vidim, da sprasujes za OBD2.

Zgodovina sprememb…

krneki0001 ::

Ja, za OBD2.

Za GPS sem si že naredil aplikacijo, ki mi bere offline mapo in kaže kje sem, ter relevantne podatke kot so hitrost in nadmorska višina, ter mi GPS tracke shranjuje v datoteko vključno s hitrostjo in ostalimi podatki.

Jaz bi pa rad, da bi recimo enako delalo tudi z OBD, da bi imel zraven še porabo, zunanjo temperaturo, ... (vse podatke, ki so mi relevantni in ji motorni računalnik zna dati od sebe.

Zgodovina sprememb…

noraguta ::

V osnovi vzpostaviš terminalsko povezavo. https://sourceforge.net/projects/cseria...
Vsaka poizvedba gre pa posebej.
Pust' ot pobyedy k pobyedye vyedyot!

Zgodovina sprememb…

  • spremenilo: noraguta ()

krneki0001 ::

hmm, to pomeni, da vsakič ko hočem GPS točko shranit, moram poklicat obd in dobit podatke, pa potem shranit.

Hvala.

krneki0001 ::

Če bo kdo kaj takega še rabil. Pobiram obrate in hitrost.

Še link do ukazov ta obd2, ki bazira na ELM327 čipu.
http://www.obdtester.com/elm-usb-comman...

Pa še v pdf-ju
http://elmelectronics.com/ELM327/AT_Com...

Priklop na obd2 bt adapter:
    ArrayList deviceStrs = new ArrayList();
    final ArrayList devices = new ArrayList();

    BluetoothAdapter btAdapter = BluetoothAdapter.getDefaultAdapter();
    Set pairedDevices = btAdapter.getBondedDevices();
    if (pairedDevices.size() > 0)
    {
        for (BluetoothDevice device : pairedDevices)
        {
            deviceStrs.add(device.getName() + "\n" + device.getAddress());
            devices.add(device.getAddress());
        }
    }

    // show list
    final AlertDialog.Builder alertDialog = new AlertDialog.Builder(this);

    ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.select_dialog_singlechoice,
            deviceStrs.toArray(new String[deviceStrs.size()]));

    alertDialog.setSingleChoiceItems(adapter, -1, new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which)
        {
            dialog.dismiss();
            int position = ((AlertDialog) dialog).getListView().getCheckedItemPosition();
            String deviceAddress = devices.get(position);
            // TODO save deviceAddress
        }
    });

    alertDialog.setTitle("Choose Bluetooth device");
    alertDialog.show();


Še socket (UUID string se zamenja s tvojim od adapterja):
BluetoothAdapter btAdapter = BluetoothAdapter.getDefaultAdapter();

BluetoothDevice device = btAdapter.getRemoteDevice(deviceAddress);

UUID uuid = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");

BluetoothSocket socket = device.createInsecureRfcommSocketToServiceRecord(uuid);

socket.connect();



new EchoOffObdCommand().run(socket.getInputStream(), socket.getOutputStream());

new LineFeedOffObdCommand().run(socket.getInputStream(), socket.getOutputStream());

new TimeoutObdCommand().run(socket.getInputStream(), socket.getOutputStream());

new SelectProtocolObdCommand(ObdProtocols.AUTO).run(socket.getInputStream(), socket.getOutputStream());


EngineRPMObdCommand engineRpmCommand = new EngineRPMObdCommand();
SpeedObdCommand speedCommand = new SpeedObdCommand();
while (!Thread.currentThread().isInterrupted())
{
    engineRpmCommand.run(sock.getInputStream(), sock.getOutputStream());
    speedCommand.run(sock.getInputStream(), sock.getOutputStream());
    // TODO handle commands result
    Log.d(TAG, "RPM: " + engineRpmCommand.getFormattedResult());
    Log.d(TAG, "Speed: " + speedCommand.getFormattedResult());
}

Zgodovina sprememb…

detroit ::

krneki0001 je izjavil:

Ja, za OBD2.

Za GPS sem si že naredil aplikacijo, ki mi bere offline mapo in kaže kje sem, ter relevantne podatke kot so hitrost in nadmorska višina, ter mi GPS tracke shranjuje v datoteko vključno s hitrostjo in ostalimi podatki.

Jaz bi pa rad, da bi recimo enako delalo tudi z OBD, da bi imel zraven še porabo, zunanjo temperaturo, ... (vse podatke, ki so mi relevantni in ji motorni računalnik zna dati od sebe.



Lahko kaj več poveš o teji offline mapi in aplikaciji? Sounds interesting
Skero

krneki0001 ::

za offline karte ima windows 10 možnost, da jih DL-jaš. Vse skupaj pride par giga in imaš karte za cel svet na računalniku. Updejtajo se same, če imaš tako nastavljeno in imaš vse karte. Potem pa vzameš api od Maps in dostopaš do teh kart.

Za gps sem potem naredil wrapper, ki mi bere iz com porta vse kar gps daje ven in to parsam, da dobim ven prave podatke.

$GPGGA,121505,4807.038,N,01131.324,E,1,08,0.9,133.4,M,46.9,M, , *42

where:

- $GPGGA is the NMEA 0183 sentence ID for the GPS fix data.
- 121505 is the fix taken at 12:15:05 UTC.
- 4807.038,N is latitude 48° 07.038' N.
- 01131.324,E is longitude 11° 31.324' E. 1 is the fix quality.
- The fix quality can have a value between 0 and 3, defined as follows:o0 = no fix
--1 = GPS or standard positioning service (SPS) fix
--2 = DGPS fix
--3 = Precise positioning service (PPS) fix

- 08 is the number of satellites being tracked.
- 0.9 is the horizontal dilution of position (HDOP).
- 133.4,M is the altitude, in meters, above mean sea level.
- 46.9,M is the height of the geoid (mean sea level) above the WGS84 ellipsoid.
- (empty field) is the time in seconds since the last DGPS update.
- (empty field) is the DGPS station ID number.
- *42 is the checksum field.


Imaš pa na voljo vse to:
- $GPGGA  GPS fix data 
- $GPGLL Geographic position, latitude and longitude 
- $GPGSA GPS Dilution of Precision (DOP) and active satellites 
- $GPGSV GPS satellites in view 
- $GPRMC Recommend minimum specific GPS/TRANSIT data 
- $GPRRE  Range residual error 
- $GPVTG  Track made good and ground speed 
- $GPZDA  Time and date 
- $PGRME  Estimated error information (Garmin Proprietary) 
- $PGRMT  Sensor Information (Garmin Proprietary) 
- $PMGNVER  GPS hardware and software version numbers (Magellan Proprietary) 
- $PASHR,POS  Position information (Ashtech Proprietary) 
- $PASHR,SAT  GPS satellite tracking status information (Ashtech Proprietary) 
- $PRWIRID  Version Information (Rockwell Proprietary) 
- $PRWIZCH  Channel Status (Rockwell Proprietary) 
- $SDDPT  Depth, in meters 
- $SDMTW  Water Temperature, in degrees Celcius 

Zgodovina sprememb…

krneki0001 ::

vsi NMEA podatki:
http://www.gpsinformation.org/dale/nmea...

dva dobro razložena primera v C#(prvi je že tak, da dobiš vse kar rabiš, samo še karte moraš zraven potegnit in na njih poiskat točko kjer si):
http://spatialhorizons.com/2006/12/18/c...

http://www.codeproject.com/Articles/231...

detroit ::

kater jezik pa je to? sicer pa hvala zgleda zanimiv
Skero

krneki0001 ::

Vse delam v C#, ker imam na tablici windows 10.

detroit ::

Aha mal me je zmedel tist text gor where : ....
to je najbrž gps izpis.
Skero

krneki0001 ::

Ja ja tisto so pa NMEA podatki, ki jih producira GPS in jih ti dobiš na com port. Tisto potem parsaš z wrapperjem in dobiš ven uporabne podatke.

Gor sem dal katere so vse te vrstice in kako zgleda tista vrstica, ki kaže točko, kje si in tvojo hitrost.

Scorpia ::

Standardni obd2 protokol, ne da te podatke, ki jih ti želiš. Za kaj več, je treba dobiti specializiran program oziroma adapter za tvoj avto, če znas sam spisati programo in poznati katere protokole uporablja. Tako da srečno.
////

krneki0001 ::

Standardni OBD2 protokol da vse kar želim in še več. Samo "zbujat" ga je potrebno za vsako GPS točko, ki jo hočem shranit. Vmesnik uporabljam ELM327 za branje iz OBD2 porta.

Program okvirno že deluje in včeraj sem to že sprobal v živo. Sicer sem naredil, da mi samo hitrost pobira in jo potem uparjam s tisto iz GPS-a in si prikazujem še razliko (Vgps - Vobd2).

detroit ::

Zanimiv projektič:) GPS je od tablice ali ločena zver in jo konektaš s tablico?
Skero

krneki0001 ::

Ločen, preko BT. Ker programiram na desktopu, mi prav pride da lahko testiram. Mogoče bom v končni fazi tudi kr tistega iz tablice uporabil, ampak zaenkrat je en BT SIRF3.

detroit ::

Ti si opremljen k sport billy. Hehe thanks za idejo bo še mene mogoče kej prjel...ko končno zamenjam svojo kareto.
Skero

krneki0001 ::

Sej to že sedaj vse narediš, na novem boš pa samo doprogramiral, ker ima več senzorjev in boš več podatkov dobil.

Doma smo nori na potovanja z avtom. Narediš doma okvirno ruto nekje 5000km pa jo preneseš v računalnik, ampak samo mesta, ki bi jih recimo rad videl. Potem se pa voziš kjer ti paše, samo končni cilj so tista osnovna mesta, ki bi jih rad videl.

Na ta način sva si pogledala že ogromno stvari, videla pa še nekaj takih, za katere nikjer ne slišiš, niti ti noben ne zna povedat. Recimo muzej filmskih kulis v Maroku. Od kar nekaj filmov, ki so jih snemali v maroku, so kulise odnesli v ogromno stavbo in tam lahko vse te kulise vidiš. Od tega, da imaš celotno jamo od filma Cave, pa do filmov z rimskimi vojaki,....

In namesto 5 ali 7" gps-a sem si raje kupil 10" tablico, pa bom verjetno šel na 12.5" ali 13" prenosnik (yoga, ko lahko imaš ali tablico ali pa prenosnik). Tam bo še bolj vidno vse skupaj.

detroit ::

Treutno so drugi projekti, poleg šole, službe in še ene službe se mora mal umirit pa mal dinarčkov nabrat:)
Skero


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[Android] Thread

Oddelek: Programiranje
81201 (978) Spura
»

[Android] Bluetooth aplikacija

Oddelek: Programiranje
51094 (957) marjan_h
»

[JAVA] zaustavitev niti (threadov)

Oddelek: Programiranje
223182 (3182) morbo
»

[Delphi] client server

Oddelek: Programiranje
61277 (1136) jvolk
»

[Java]Brane spletne strani preko https

Oddelek: Programiranje
112147 (1966) CWIZO

Več podobnih tem