This is an old revision of the document!


David Foanene - ESP Code Sniffer

Introducere

Acest proiect își propune să dezvolte un sistem de comunicație CAN utilizând un microcontroler ESP32 și un shield MCP2515. Scopul principal este de a intercepta și afișa mesaje CAN transmise pe magistrala CAN.

Descriere generală

Proiectul va utiliza un microcontroler ESP32 împreună cu un CAN shield pentru a citi și interpreta codurile de la modulele de control ale vehiculului. ESP32 va fi programat să stabilească o conexiune CAN (Controller Area Network) cu sistemul de diagnoză a bordului (OBD) al vehiculului.

Hardware Design

Componenete :

   1. Conector OBD2 - DB9.
   2. CAN Shield (MCP 2551 + MCP 2515).
   3. ESP32.

Software Design

  #include <SPI.h>
  #include <mcp2515.h>
  MCP2515 mcp2515(5); // Chip Select pin
  void setup() {
     Serial.begin(115200);
     while (!Serial);
     SPI.begin();
     mcp2515.reset();
     mcp2515.setBitrate(CAN_500KBPS, MCP_8MHZ);

     // Dezactivează modul Loopback pentru a interacționa cu alte noduri CAN
     mcp2515.setNormalMode();
     Serial.println("MCP2515 Initialized");
  }
  void loop() {
     sendRandomCANMessage();

     struct can_frame canMsg;
     // Verifică pentru mesaje primite
     MCP2515::ERROR result = mcp2515.readMessage(&canMsg);
     if (result == MCP2515::ERROR_OK) {
     Serial.print("Received message with ID: 0x");
     Serial.print(canMsg.can_id, HEX);
     Serial.print(" Data: ");
     for (int i = 0; i < canMsg.can_dlc; i++) {
        Serial.print(canMsg.data[i], HEX);
        Serial.print(" ");
     }
     Serial.println();
     } else {
        Serial.print("Error Receiving Message: ");
        Serial.println(result);
     }
     // Verifică starea MCP2515
     uint8_t status = mcp2515.getStatus();
     Serial.print("MCP2515 Status: ");
     Serial.println(status, HEX);
     delay(1000); // O întârziere mai lungă între cicluri
  }
  void sendRandomCANMessage() {
     struct can_frame canMsg;
     // Generează un ID random între 0x100 și 0x7FF (ID standard de 11 biți)
     canMsg.can_id = random(0x100, 0x7FF);

     // Setează o lungime random pentru datele trimise (de la 1 până la 8)
     canMsg.can_dlc = random(1, 9);
     // Generează date random
     for (int i = 0; i < canMsg.can_dlc; i++) {
        canMsg.data[i] = random(0, 256); // Fiecare byte de date este între 0x00 și 0xFF
     }
     // Trimite mesajul
     MCP2515::ERROR result = mcp2515.sendMessage(&canMsg);
     if (result == MCP2515::ERROR_OK) {
         Serial.println("Message Sent Successfully!");
         Serial.print("Sent message with ID: 0x");
         Serial.print(canMsg.can_id, HEX);
         Serial.print(" Data: ");
         for (int i = 0; i < canMsg.can_dlc; i++) {
             Serial.print(canMsg.data[i], HEX);
             Serial.print(" ");
         }
         Serial.println();
     } else {
         Serial.print("Error Sending Message: ");
         Serial.println(result);
     }
     delay(100); // Mică întârziere pentru a asigura recepția mesajului
  }

Rezultate Obţinute

Am reusit sa trimit si sa primesc mesaje pe magistrala CAN.

Concluzii

Utilizarea CAN este mai grea decat am crezut la inceput, fiind nevoie de cunostiinte avansate in acest domeniu. Conectarea la magistrala CAN a unei masini a esuat din motive necunoscute. Am folosit comunicarea SPI intre shield ul CAN si ESP32.

Download

O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectului: surse, scheme, etc. Un fişier README, un ChangeLog, un script de compilare şi copiere automată pe uC crează întotdeauna o impresie bună ;-).

Fişierele se încarcă pe wiki folosind facilitatea Add Images or other files. Namespace-ul în care se încarcă fişierele este de tipul :pm:prj20??:c? sau :pm:prj20??:c?:nume_student (dacă este cazul). Exemplu: Dumitru Alin, 331CC → :pm:prj2009:cc:dumitru_alin.

Jurnal

Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului.

Bibliografie/Resurse

Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe Resurse Software şi Resurse Hardware.

Export to PDF

pm/prj2024/ddosaru/david.foanene.1716804873.txt.gz · Last modified: 2024/05/27 13:14 by david.foanene
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0