Obtención de salida de basura en el monitor en serie mientras se comunica con OBD mediante la interfaz CAN (MCP2515) y nodemcu

1

Estoy realizando un proyecto que consiste en obtener la velocidad del vehículo desde el puerto OBD de un automóvil y almacenarlo en mi base de datos mediante nodemcu.

Estoy programando nodemcu utilizando el IDE de Arduino y utilizando esta biblioteca para trabajar con CAN.

Aquí hay un programa de ejemplo simple que estoy tratando de probar, pero obtengo salida de basura en el monitor serie:

#include <SPI.h>
#include "mcp_can.h"

INT32U canId = 0x000;
unsigned char buf[8];
char str[20];
MCP_CAN CAN0(10);

void setup()
{
    Serial.begin(38400);
START_INIT:

    if(CAN_OK == CAN0.begin(MCP_ANY, CAN_125KBPS, MCP_80MHZ))
    {
        Serial.println("Initialized successfully");
    }
    else
    {
        Serial.println("Initializing is failed");
        Serial.println("Reloading...");
        delay(100);
        goto START_INIT;
    }
}


void loop()
{
    INT8U len=8;
    if(CAN_MSGAVAIL == CAN0.checkReceive())
    {
        CAN0.readMsgBuf(&canId,&len, buf);
        Serial.print("<");Serial.print(canId);Serial.print(",");
        for(int i = 0; i<len; i++)
        {
            Serial.print(buf[i]);Serial.print(",");
        }
        Serial.print(">");
        Serial.println();
    }
}

Mis especulaciones:

  1. Una identificación CAN puede diferir de un auto a otro. Si es así, ¿cómo puedo saber la identificación de mi auto? (Es Maruti Suzuki Ertiga)
  2. La velocidad en baudios que estoy usando quizás esté mal
  3. La frecuencia o los kbps que estoy usando en la llamada de función CAN0.begin (MCP_ANY, CAN_125KBPS, MCP_80MHZ) pueden estar equivocados.

Si alguno de los puntos mencionados anteriormente es incorrecto, ¿cómo sé / cuáles son los valores correctos?

    
pregunta Syed Souban

1 respuesta

1

En cuanto a sus especulaciones:

  1. Como mencionó @Alexander von Wernherr en su comentario, no hay una identificación CAN relacionada con su automóvil, sino una cantidad de marcos CAN diferentes con identificación CAN individual. Sin embargo, la parte de bucle de su programa ya se encarga de leerlos todos y los imprime. Entonces este no es el problema aquí.
  2. ¿Ve la copia impresa Initialized successfully o Initializing is failed en su terminal serial? Si no, tu tasa de baudios de 38400 es incorrecta. Consulte la documentación del MCP2515 para obtener el valor correcto.
  3. La frecuencia que establezca debe ajustarse al hardware que usa. En el enlace que compartiste, están hablando de usar MCP_16MHZ para el MCP2515. Así que tal vez este es el problema. Una vez más, por favor, consulte la documentación de la MCP2515. La tasa de bits de la interfaz CAN está determinada por el fabricante del automóvil. O tiene que obtener este número de alguna documentación o simplemente intenta los valores de tasa de bits más comunes, por ejemplo. CAN_125KBPS , CAN_250KBPS , CAN_500KBPS .

Finalmente, si todos ellos están configurados correctamente, verá los bytes individuales de cada cuadro CAN. Sin embargo, entonces todavía necesita realizar ingeniería inversa, la trama CAN contiene qué información y cómo se codifica dentro de los bytes de datos.

    
respondido por el oh.dae.su

Lea otras preguntas en las etiquetas