RisalDash RisalDash

Qo'llanma · CAN · OBD-II

ESP32 va CAN shina bilan avtomobilning jonli ma'lumotlarini o'qing

Taxminan 2008-yildan beri ishlab chiqarilgan har qanday avtomobil OBD-II porti orqali CAN tilida gaplashadi. ESP32 da o'rnatilgan CAN kontroller allaqachon bor (Espressif uni TWAI deb ataydi), shuning uchun qo'shishingiz kerak bo'lgan yagona narsa — bir dollarlik SN65HVD230 transiveri, va siz aylanishlar sonini, sovutish suyuqligi haroratini, tezlikni va o'nlab boshqa qiymatlarni o'z dashboardingizga oqim qilib uzatishingiz mumkin.

CANTWAIOBD-IIESP32SN65HVD230Avto

Agar CAN ning dominant/retsessiv arbitraji va differensial juftligi siz uchun yangilik bo'lsa — interaktiv shina tushuntirishining CAN bo'limidan boshlang. Bu post — avtomobildan ma'lumotni haqiqatda chiqarib olish bo'yicha amaliy davomi.

Nega ESP32 bunga ideal

OBD-II portiga ulanish

SN65HVD230              ESP32
----------              -----
CTX / D  (TX)     <--   TWAI TX  (mas. GPIO5)
CRX / R  (RX)     -->   TWAI RX  (mas. GPIO4)
VCC              -->    3V3        // 3.3 V transiver — ESP32 uchun ideal
GND              -->    GND
CANH / CANL      -->    OBD-II pinlari 6 (H) va 14 (L)
// Avtomobil shinasi allaqachon terminatsiyalangan — OBD portiga 120 Om QO'YMANG.
ESP32 SN65HVD230 CAN transiveriga ulangan — TWAI TX CTX ga, CRX TWAI RX ga, 3.3 V bilan, CANH va CANL avtomobil shinasiga / OBD-II ga
SN65HVD230 ulanishi: TWAI TX → CTX, CRX → TWAI RX 3.3 V da, CANH/CANL OBD-II ning 6 va 14-pinlariga. BoardLabda yigʻilgan.

OBD-II pin 6 — bu CAN-H, pin 14 — CAN-L, pin 16 esa doimiy 12 V quvvat beradi (ESP32 uchun buck konverter orqali 5 V gacha tushiring). Avtomobil shinasida allaqachon o'zining 120 Om terminatorlari bor — portga o'zingiznikini qo'shsangiz uni ortiqcha yuklaysiz.

Kadrlarni o'qish (faqat tinglash)

O'rnatilgan driver/twai.h dan foydalaning. Eng muhim sozlama — TWAI_MODE_LISTEN_ONLY: u shinaga hech qachon chiqmasdan qabul qilish imkonini beradi, shuning uchun avtomobilga jismonan halaqit bera olmaysiz. OBD-II uchun bit tezligi — 500 kbit/s.

#include "driver/twai.h"

void setup() {
  Serial.begin(115200);
  twai_general_config_t g = TWAI_GENERAL_CONFIG_DEFAULT(
      GPIO_NUM_5, GPIO_NUM_4, TWAI_MODE_LISTEN_ONLY);   // faqat o'qish = xavfsiz
  twai_timing_config_t  t = TWAI_TIMING_CONFIG_500KBITS();  // OBD-II = 500 kbit/s
  twai_filter_config_t  f = TWAI_FILTER_CONFIG_ACCEPT_ALL();
  twai_driver_install(&g, &t, &f);
  twai_start();
}

void loop() {
  twai_message_t msg;
  if (twai_receive(&msg, pdMS_TO_TICKS(1000)) == ESP_OK) {
    Serial.printf("ID 0x%03X  [%d] ", msg.identifier, msg.data_length_code);
    for (int i = 0; i < msg.data_length_code; i++)
      Serial.printf("%02X ", msg.data[i]);
    Serial.println();
  }
}

Buni yoqilgan dvigatel bilan ishga tushiring va kadrlar oqimini ko'rasiz — har bir modul "gaplashadi". Endi faqat aniq qiymatlarni so'rashingiz kerak.

Qiymat so'rash — OBD-II PID lar

OBD-II — bu CAN ustidagi so'rov/javob qatlami. Siz 0x7DF ID ga so'rov yuborasiz (masalan, rejim 01, PID 0x0C = dvigatel aylanishlari soni) va ECU 0x7E8 da javob beradi. Aylanishlar soni javob baytlaridan (A*256 + B) / 4 sifatida hisoblanadi. PID ni 0x05 (sovutish suyuqligi harorati), 0x0D (tezlik) va hokazolarga almashtiring — PID ro'yxati standart. Yuk mashinalari va og'ir texnika uchun CAN ustida J1939 ishlaydi — o'sha jismoniy shinaning o'zi.

Xavfsizlik va tuzoqlar

Bu yerdan o'zingiz hostlaydigan avto dashboardigacha bir qadam qoldi: dekodlangan qiymatlarni bir nechta vidjetga uzating va ESP32 Wi-Fi orqali jonli asboblar panelini xizmat qiladi — bulutsiz, ilovasiz.

CAN ning dominant/retsessiv arbitraji baytni qanday harakatlantirishini jonli ko'ring.