This shows you the differences between two versions of the page.
pm:prj2024:ddosaru:david.foanene [2024/05/27 13:01] david.foanene |
pm:prj2024:ddosaru:david.foanene [2024/05/27 13:30] (current) david.foanene |
||
---|---|---|---|
Line 19: | Line 19: | ||
3. ESP32. | 3. ESP32. | ||
- | {{:pm:prj2024:ddosaru:proiect_pm.jpg?400|}} | + | {{:pm:prj2024:ddosaru:poza_esp32_obd2.jpg?300|}} |
===== Software Design ===== | ===== Software Design ===== | ||
+ | <note> | ||
+ | #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 | ||
+ | } | ||
- | <note tip> | ||
- | Descrierea codului aplicaţiei (firmware): | ||
- | * mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR) | ||
- | * librării şi surse 3rd-party (e.g. Procyon AVRlib) | ||
- | * algoritmi şi structuri pe care plănuiţi să le implementaţi | ||
- | * (etapa 3) surse şi funcţii implementate | ||
</note> | </note> | ||
Line 36: | Line 111: | ||
<note tip> | <note tip> | ||
- | Care au fost rezultatele obţinute în urma realizării proiectului vostru. | + | Am reusit sa trimit si sa primesc mesaje pe magistrala CAN. |
+ | [[https://youtube.com/shorts/y7ZGwtQQasY?feature=share]] | ||
</note> | </note> | ||
===== Concluzii ===== | ===== 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 ===== | ===== Download ===== | ||
- | <note warning> | ||
- | 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**. | + | {{:pm:prj2024:ddosaru:proiect_pm_david_foanene.zip|}} |
- | </note> | + | |
- | + | ||
- | ===== Jurnal ===== | + | |
- | <note tip> | ||
- | Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. | ||
- | </note> | ||
===== Bibliografie/Resurse ===== | ===== Bibliografie/Resurse ===== | ||
<note> | <note> | ||
- | Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. | + | Componente achizitionate : |
+ | 1. ESP32 - Sigmanortec [[https://www.sigmanortec.ro/]] | ||
+ | 2. Shield CAN V1.2 - Optimus Digital [[https://www.optimusdigital.ro/ro/]] | ||
+ | 3. Cablu OBD2 - DB9 - RoboFun [[https://www.robofun.ro/]] | ||
+ | Biblioteci folosite : | ||
+ | 1. SPI.h | ||
+ | 2. mcp2515.h | ||
</note> | </note> | ||
<html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> | <html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> | ||