Italian Leggere obd2

Fulvio75

Well-Known Member
Licensed User
Ciao mi ricollego al vecchio thread, ho provato l'esempio postato in obd2 bluetooth che legge i parametri auto da obd, i dati che legge sono errati, sapete dirmi perché?
Utilizzo modulo bluetooth Viecar set caratteri utf8.
Se faccio il test dell'adattatore mi risulta corretto, ma i dati sono tutti errati e ad ogni richiesta sempre diversi.
 

Star-Dust

Expert
Licensed User
Longtime User
Ciao Fulvio,

Mi dispiace non ho fatto delle prove perché non ho avuto ancora il tempo. Ma nel forum ci sono diversi sorgenti distribuiti nella sezione SHARE. Inizia provando uno di questi e vedi se hai lo stesso problema.
 

Fulvio75

Well-Known Member
Licensed User
Ciao Fulvio,

Mi dispiace non ho fatto delle prove perché non ho avuto ancora il tempo. Ma nel forum ci sono diversi sorgenti distribuiti nella sezione SHARE. Inizia provando uno di questi e vedi se hai lo stesso problema.
Risolto, è la posizione bei byte che cambia in alcune vetture, poi farò delle prove per vedere
 

moty22

Active Member
Licensed User
Risolto, è la posizione bei byte che cambia in alcune vetture, poi farò delle prove per vedere
Il messaggio CAN BUS è lo stesso da qualsiasi ECU (auto) con OBD2, sembra 7E8 04 41 0C 15 A9 00 00 00 . L'ELM327 o l'olmo imitato convertono il messaggio in modo diverso. il 41 0C 15 A9 è comune a tutti gli ELM, quindi è necessario guardare solo questi byte di dati. Puoi ottenere maggiori dettagli da qui: https://en.wikipedia.org/wiki/OBD-II_PIDs#Bitwise_encoded_PIDs Divertiti.
 

Fulvio75

Well-Known Member
Licensed User
Il messaggio CAN BUS è lo stesso da qualsiasi ECU (auto) con OBD2, sembra 7E8 04 41 0C 15 A9 00 00 00 . L'ELM327 o l'olmo imitato convertono il messaggio in modo diverso. il 41 0C 15 A9 è comune a tutti gli ELM, quindi è necessario guardare solo questi byte di dati. Puoi ottenere maggiori dettagli da qui: https://en.wikipedia.org/wiki/OBD-II_PIDs#Bitwise_encoded_PIDs Divertiti.
Il mio adattatore è il Viecar preso su AliExpress, dovrebbe funzionare correttamente.
Nella mia stringa ho più spazzi e non ho gli zeri finali, praticamente finisce con A9 poi tutti spazzi.
Nella stringa mi compare anche la stringa che lanciò per avere il dato.
Mi sa che è 11 bit infatti lo schema dei bit rappresentati su wiki corrisponde con quello 11 bit.
Devo provare sull'altra auto che ho.
La prima dove faccio le prove è una smart del 2012 mi sa 11 bit
 

Fulvio75

Well-Known Member
Licensed User
Questo è il log che ho fatto, i dati visualizzati tipo numero di giri ecc. è errato perchè ci sono troppi spazzi tra i byte e 00 in meno, dovrei quindi con una funzione togliere gli spazzi e trovare i byte giusti


---------------------------------------
UTF8
---------------------------------------
---------------------------------------
Invio PID:
atz
---------------------------------------

Risposta:
atz


ELM327 v1.5

>

Conversione:
>16
Res:<500
aa:(string)v1
aa(Byte): -15
bb(string):5
bb(Byte): 45
a(int): 241
b(int): 45
cn(string): 27
---------------------------------------
---------------------------------------
Invio PID:
0104
---------------------------------------
---------------------------------------

Risposta:
0104
41 04 47

>

Conversione:
>16
Res:<504
aa:(string)
aa(Byte): -35
Errore: NO DATA
Visualizzato:
94 % - 27
---------------------------------------
---------------------------------------
Invio PID:
0105
---------------------------------------
---------------------------------------

Risposta:
0105
41 05 35

>

Conversione:
>16
Res:<505
aa:(string)
aa(Byte): -35
Errore: NO DATA
Visualizzato:
54 °C - 27
---------------------------------------
---------------------------------------
Invio PID:
0106
---------------------------------------
---------------------------------------

Risposta:
0106
41 06 80

>

Conversione:
>16
Res:<506
aa:(string)
aa(Byte): -35
Errore: NO DATA
Visualizzato:
-57 % - 27
---------------------------------------
---------------------------------------
Invio PID:
0107
---------------------------------------
---------------------------------------

Risposta:
0107
41 07 77

>

Conversione:
>16
Res:<507
aa:(string)
aa(Byte): -35
Errore: NO DATA
Visualizzato:
-144 % - 27
---------------------------------------
---------------------------------------
Invio PID:
010B
---------------------------------------
---------------------------------------

Risposta:
010B
41 0B 22

>

Conversione:
>16
Res:<5011
aa:(string)
aa(Byte): -35
Errore: NO DATA
Visualizzato:
-144 kPa - 27
---------------------------------------
---------------------------------------
Invio PID:
010C
---------------------------------------
---------------------------------------

Risposta:
010C
41 0C 15 A9

>

Conversione:
>16
Res:<5012
aa:(string) A
aa(Byte): 10
bb(string):
bb(Byte): -35
a(int): 10
b(int): 221
cn(string): 1
Visualizzato:
695 RPM - 1
---------------------------------------
---------------------------------------
Invio PID:
010D
---------------------------------------
---------------------------------------

Risposta:
010D
41 0D 00

>

Conversione:
>16
Res:<5013
aa:(string)
aa(Byte): -35
Errore: NO DATA
Visualizzato:
10 km/h - 1
---------------------------------------
---------------------------------------
 

moty22

Active Member
Licensed User
aa=bc.HexToBytes(reply.SubString2(11,13)) '12,14
bb=bc.HexToBytes(reply.SubString2(14,16)) '15,17

Prova ad aumentare o diminuire i numeri 11,13 mantenendo la differenza di 2. esempio: 12,14 13,15 fino ad ottenere la lettura giusta. Come hai detto, le lettere sono fuori fase.
 

Fulvio75

Well-Known Member
Licensed User
aa=bc.HexToBytes(reply.SubString2(11,13)) '12,14
bb=bc.HexToBytes(reply.SubString2(14,16)) '15,17

Prova ad aumentare o diminuire i numeri 11,13 mantenendo la differenza di 2. esempio: 12,14 13,15 fino ad ottenere la lettura giusta. Come hai detto, le lettere sono fuori fase.
Ok, sto facendo appunto questo, per ogni macchina bisognerebbe farlo perché mi sa che comunicano una stringa differente, con la smart è così, devo provare poi con la Giulia, li è molto diversa e i caratteri sono tutti uniti senza spazzi, poi la smart nella stringa restituisce anche il codice della richiesta fatta con il ritorno a capo, l'altra no.
Ogni macchina mi sa che restituisce stringhe diverse, l'adattatore centra poco.
Ho anche un amico con Peugeot vedrò anche quella, nella mia app sto facendo una parte di debug per leggere solo la stringa restituita per vedere dove sono i byte che interessano.
 

moty22

Active Member
Licensed User
Grazie Fulvio per tutte le informazioni. Penso che tu stia andando nella direzione giusta. Sembra che la mia app B4A non funzioni per la maggior parte delle auto. Puoi provare la versione allegata, cerca "41" e dopo legge, potrebbe funzionare sulla tua Smart.
 

Attachments

  • OBD2-BT-10.zip
    28.3 KB · Views: 70

AlexBY

Member
Did you use the app on this page?
Yes. Also and rev_counter3.
My modify:
- Init string for ECU
- Connect with GetPairedDevices. Not need scan, listen e.t.c.
- Disconnect if app closed.
- in Sub convert bb=0, if reply content only 3 bytes
 

Attachments

  • obd2-bt-10m.zip
    11.4 KB · Views: 74

Fulvio75

Well-Known Member
Licensed User
quindi tradotto in italiano questo cosa fa? 😁

B4X:
Sub btnAllowConnection_Click
    If conn Then
        Manager.SendMessage(pidNo.text & Chr(13) & Chr(10))    'pidNo.text, "atz"
        Sleep(1500)
        Manager.SendMessage("ATE0" & Chr(13) & Chr(10))
        Sleep(200)
        Manager.SendMessage("ATSP0" & Chr(13) & Chr(10))    ' protocol 0-auto
        Sleep(1000)
        Manager.SendMessage("ATFI" & Chr(13) & Chr(10))        ' BUS INIT OK
        ToastMessageShow("Connect To ECU" , True)
        Sleep(200)
    End If
End Sub

Bisogna farlo prima di inviare un PIDs? Oppure solo all'apertura dell'app?
 
Top