J1939-сканер на ESP32-S3: о чём говорит техника
Несколько лет назад я уже показывал самодельный сканер J1939. Тогда это был простой просмотрщик параметров: собрал, подключил, увидел сырые сообщения в браузере — и на этом история закончилась.
Сейчас у меня в руках уже не первый вариант, а полностью переработанная версия старого проекта — и это уже релизная сборка, а не макет. Живые параметры, список сообщений и ошибки были и в прошлой версии; главное изменение в другом. Теперь данные можно уносить с собой: графики сохраняются в файл и загружаются обратно, фильтры параметров — тоже, а сниффер пишет трафик в CSV, который удобно открывать в Excel. Всё это делалось не по заказу, а из любопытства: о чём вообще болтает техника, когда рядом нет дилерского сканера.
Сразу ссылки, чтобы не искать их в конце статьи:
- **Демо без устройства:** https://pavellz.gitverse.site/jscan/demo/
- **Схема устройства:** https://pavellz.gitverse.site/jscan/shema.pdf
- **Прошивка и установка прямо из браузера:** https://pavellz.gitverse.site/jscan/
- **Публичная страница проекта на GitVerse:** https://gitverse.ru/PavellZ/JScan
Что это такое
J1939 — это язык, на котором общаются блоки управления в тяжёлой технике: грузовиках, автобусах, тракторах, погрузчиках и прочих машинах с дизельными двигателями и автоматическими коробками. Там, где производитель написал на разъёме «J1939», скорее всего, найдётся знакомая CAN-шина и целая куча сообщений: обороты, температуры, давления, скорости, режимы работы, ошибки.
Обычно для просмотра этого хозяйства нужен ноутбук с дорогим софтом и кабелем, который страшно оставлять в машине. Здесь всё проще: небольшая плата с CAN-трансивером поднимает собственный Wi-Fi, вы подключаетесь к нему телефоном или ноутбуком — и открываете веб-интерфейс в браузере. Ни приложений, ни аккаунтов, ни облаков.
Сразу оговорюсь: это не OBD-II. Обычный автомобильный адаптер с ELM327 здесь не поможет, и наоборот. И это не дилерский диагностический прибор с сертификатом. Это инструмент для любознательных.
О чём говорит техника
Самое интересное в J1939 — даже не отдельные цифры, а общая картина.
Двигатель рассказывает про обороты, температуру охлаждающей жидкости, давление масла, нагрузку и расход. Коробка передач — про текущую передачу, температуру и режим работы. Тормозная система — про давления и состояние контуров. Отдельные блоки сообщают о своей активности, частоте сообщений и том, к какому типу узлов они относятся.
А ещё техника рассказывает про ошибки. Активные и сохранённые коды неисправностей, с человеческими названиями и причинами — это уже не просто «лампочка загорелась», а вполне конкретная подсказка, куда смотреть.
Устройство показывает всё это в реальном времени и не делает вид, что знает больше, чем есть. Если сообщение неизвестно — так и пишет: неизвестно. Если блок скромничает и не выдаёт свой тип — устройство честно скажет «неизвестно», а не будет угадывать.
Что изменилось по сравнению с первой версией
Первая версия уже умела показывать живые параметры, сообщения в шине и ошибки. Поэтому главное в новой версии — не количество экранов, а то, что с данными стало удобнее работать:
- **Графики сохраняются в файл.** Данные сессии можно записать и потом открыть обратно — вернуться к записи и спокойно разобрать, что было с давлением масла или температурой на подъёме.
- **Пользовательские фильтры SPN.** Наборы нужных параметров теперь удобно собирать, сохранять в файл и загружать обратно — на другом устройстве или после переустановки браузера.
- **Сниффер.** Можно записать весь трафик шины или только транспортные обмены и выгрузить результат в CSV, который нормально открывается в Excel.
Остальное — интерфейс, расшифровка по DBC, диагностика — тоже обновлялось, но эти три вещи я считаю главными.
Железо
Устройство собрано на плате ESP32-S3-DevKitC-1 N16R8: чип ESP32-S3, 16 МБ флеш-памяти и 8 МБ оперативной памяти PSRAM. Это важный момент: прошивка собрана именно под эту плату. На другой плате или модуле она не заработает.
Кроме платы, в устройстве есть:
- CAN-трансивер — он превращает физический уровень CAN-шины в сигналы, понятные контроллеру;
- диодный мост перед понижающим DC-DC — с ним можно не заботиться о полярности питания: на разъёмах Caterpillar и Cummins она отличается;
- понижающий преобразователь напряжения — из бортовых 24–28 В делает 5 В для платы;
- адресный RGB-светодиод — по нему видно, что происходит с устройством;
- корпус, кабель и разъём для подключения к технике.
Схема устройства — вот тут: **https://pavellz.gitverse.site/jscan/shema.pdf**. По ней видно, что ничего экзотического нет: готовые компоненты, обвязка и немного защиты по питанию.
Что умеет
Если коротко — устройство слушает шину, расшифровывает то, что знает, и показывает всё остальное без прикрас.
- **Живые параметры SPN.** Обороты, температуры, давления, скорости и прочие параметры обновляются на экране в реальном времени.
- **Все сообщения в шине.** Список PGN — включая те, которых нет в базе расшифровок. Неизвестное тоже интересно.
- **Устройства в сети.** Кто именно вещает, сколько сообщений отправляет и насколько активно. Тип блока — двигатель, коробка, тормоза — определяется по его же сообщениям.
- **Расшифровка по DBC.** Встроенная база параметров плюс возможность загрузить собственный файл DBC, если у вас есть описание для конкретной техники. Да, тот самый формат, который обычно открывают в CANdb++.
- **Диагностика.** Активные и исторические ошибки DM1/DM2 с названиями и причинами, а также сброс кодов DM3.
- **Фильтры SPN.** Наборы нужных параметров можно сохранять в файл и загружать обратно.
- **Графики.** Онлайн-график по выбранным параметрам с сохранением сессии в файл и загрузкой обратно.
- **Сниффер.** Запись всего трафика шины или транспортных обменов с выгрузкой в CSV для Excel.
- **Обновление по воздуху.** Прошивка обновляется из веб-интерфейса, без проводов и танцев с кнопкой BOOT.
Интерфейс сделан так, чтобы им можно было пользоваться с телефона: крупные карточки, поиск, понятные названия параметров. Но и на ноутбуке всё открывается нормально — это обычная веб-страница, которую отдаёт сама плата.
Светодиод состояния
На плате есть один адресный RGB-светодиод. Он горит не просто так, а показывает, что происходит с устройством, — по нему многое понятно без подключения к веб-интерфейсу.
Индикация двухслойная: **фон** показывает состояние шины, а **вспышки** накладываются поверх него. В паузах между вспышками всегда виден фон, поэтому одно состояние не скрывает другое.
Фон:
- **тускло-зелёный** — в шине есть J1939-трафик, устройство слышит блоки;
- **тускло-оранжевый** — шина молчит: нет питания, обрыв или не та скорость шины (битрейт);
- **тускло-красный** — при старте что-то пошло не так, аварийный режим.
Вспышки поверх фона:
- **красные раз в секунду** — аварийный режим после неудачного старта;
- **частое красное мигание** — контроллер CAN ушёл в аварию (BUS_OFF) и не может работать с шиной;
- **янтарное мигание** — CAN восстанавливается после сбоя;
- **синяя пачка раз в 3 секунды** — подключён веб-интерфейс; число вспышек равно числу подключённых клиентов.
При включении светодиод коротко вспыхивает синим — это подтверждение, что прошивка жива и стартовала. Яркость специально низкая, чтобы светодиод не слепил и не тянул лишний ток.
Быстрый старт
1. Подключитесь к Wi-Fi сети `J1939_AP` (пароль `12345678`).
2. После подключения устройство автоматически откроет свою страницу, но в режиме captive portal — с урезанным функционалом.
3. Чтобы получить полный функционал, включая скачивание и загрузку файлов, выберите «Использовать эту сеть» и откройте `http://10.10.10.10` в браузере вручную.
4. Если шина живая — параметры появятся сами. Если нет, плата честно покажет, что услышала тишину.
Прошивка
Готовая прошивка, демо и страница установки: **https://pavellz.gitverse.site/jscan/**
На странице можно установить прошивку прямо из браузера — без установки дополнительных программ и без командной строки. Нужен компьютер с Chrome или Edge, USB-кабель и подключённая плата. Там же лежат образ для ручной прошивки и архив `update.zip` для обновления по воздуху.
OTA удобна тем, что не трогает пользовательский конфиг: настройки Wi-Fi, битрейта и прочие параметры остаются на месте. Для первой установки нужен полный образ прошивки, для обновления — `update.zip` из веб-интерфейса устройства.
Демо без железа
Живое демо без платы нужно в первую очередь для того, чтобы познакомиться с текущим функционалом: лучше один раз увидеть, чем сто раз услышать. Не хочется паять и подключать? Загляните: **https://pavellz.gitverse.site/jscan/demo/**
Это полная копия интерфейса со встроенной эмуляцией J1939: двигатель, коробка, ошибки и графики генерируются прямо в браузере. Устройство не нужно — только любопытство. Здесь же можно скачать встроенную базу DBC и открыть файлы графиков, записанные ранее: сессия сохраняется в файл, а в демо её можно снова загрузить и рассмотреть.
Кому пригодится
- Диагностам, которые хотят видеть больше, чем показывает дилерский сканер.
- Интеграторам и разработчикам телематики — проверить, что именно вещает железо.
- Студентам и преподавателям — J1939 на живом примере, а не на картинке.
- Владельцам техники — понять, почему загорелась лампочка, до поездки в сервис.
- Гикам, которым просто интересно, о чём болтают блоки управления.
Честные ограничения
- Это не дилерский сканер и не диагностический прибор с сертификатом. Это инструмент для любознательных.
- J1939 — не OBD-II. Обычный автомобильный адаптер с ELM327 здесь не поможет, и наоборот.
- Встроенная база DBC знает многое, но не всё на свете. Если техника экзотическая — пригодится свой DBC.
- Тип блока определяется по сообщениям, которые он отправляет. Если блок скромничает или вещает только общесистемные PGN — устройство честно скажет «неизвестно», а не будет угадывать.
- Прошивка рассчитана на ESP32-S3-DevKitC-1 N16R8. На других платах она не проверялась.
- Устройство слушает шину и задаёт вопросы, но не предназначено для перепрошивки блоков управления. Пожалуйста, не превращайте любопытство в приключение.
Вместо заключения
Этот проект я делал не по заказу и не для продажи, а из любознательности. Хотелось понять, как разговаривает техника, и сделать инструмент, которым самому удобно пользоваться. Если вам тоже интересно — начните с демо, а если есть плата и шина под рукой, попробуйте прошивку.
Буду рад обратной связи: замечаниям, вопросам и предложениям. Особенно интересно, какие параметры и PGN оказываются бесполезными на практике, а какие, наоборот, стоит показать крупнее и понятнее.























