Реализация мониторинга состояния автомобиля через мобильное приложение

TRUETECH занимается разработкой, поддержкой и обслуживанием мобильных приложений iOS, Android, PWA. Имеем большой опыт и экспертизу для публикации мобильных приложений в популярные маркеты Google Play, App Store, Amazon, AppGallery и другие.
Разработка и поддержка любых видов мобильных приложений:
Информационные и развлекательные мобильные приложения
Новостные приложения, игры, справочники, онлайн-каталоги, погодные, фитнес и здоровье, туристические, образовательные, социальные сети и мессенджеры, квиз, блоги и подкасты, форумы, агрегаторы
Мобильные приложения электронной коммерции
Интернет-магазины, B2B-приложения, маркетплейсы, онлайн-обменники, кэшбэк-сервисы, биржи, дропшиппинг-платформы, программы лояльности, доставка еды и товаров, платежные системы
Мобильные приложения для управления бизнес-процессами
CRM-системы, ERP-системы, управление проектами, инструменты для команды продаж, учет финансов, управление производством, логистика и доставка, управление персоналом, системы мониторинга данных
Мобильные приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, платформы предоставления электронных услуг, платформы кешбека, видеохостинги, тематические порталы, платформы онлайн-бронирования и записи, платформы онлайн-торговли

Это лишь некоторые из типы мобильных приложений, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента.

Предлагаемые услуги
Показано 1 из 1 услугВсе 1735 услуг
Реализация мониторинга состояния автомобиля через мобильное приложение
Простая
от 4 часов до 2 рабочих дней
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_mobile-applications_feedme_467_0.webp
    Разработка мобильного приложения для компании FEEDME
    756
  • image_mobile-applications_xoomer_471_0.webp
    Разработка мобильного приложения для компании XOOMER
    624
  • image_mobile-applications_rhl_428_0.webp
    Разработка мобильного приложения для компании RHL
    1054
  • image_mobile-applications_zippy_411_0.webp
    Разработка мобильного приложения для компании ZIPPY
    947
  • image_mobile-applications_affhome_429_0.webp
    Разработка мобильного приложения для компании Affhome
    864
  • image_mobile-applications_flavors_409_0.webp
    Разработка мобильного приложения для компании FLAVORS
    445

Реализация мониторинга состояния автомобиля через мобильное приложение

OBD-II порт есть в любом автомобиле, выпущенном после 1996 года. Через него ELM327-совместимый адаптер (Viecar, KONNWEI, Veepeak) по Bluetooth или Wi-Fi отдаёт PID-запросы — и приложение получает обороты двигателя, нагрузку, температуру охлаждающей жидкости, скорость, напряжение бортовой сети, коды ошибок DTC. Задача звучит просто, но реализация упирается в несколько нетривиальных моментов.

Протокол ELM327 и типичные грабли

Адаптеры ELM327 говорят через AT-команды поверх последовательного порта. Подключение через Classic Bluetooth — BluetoothSocket на Android с UUID 00001101-0000-1000-8000-00805F9B34FB (SPP профиль). На iOS Classic Bluetooth для сторонних приложений закрыт; единственный путь — BLE ELM327 адаптеры (Viecar EA400-P, OBDLink CX) через Core Bluetooth.

Самая частая ошибка при работе с ELM327 — отправить следующий PID-запрос, не дождавшись > (prompt) в ответе. Адаптер буферизует команды непредсказуемо, и вместо значения RPM приложение получает ? или NO DATA. Правильный цикл опроса — последовательный, с таймаутом ожидания промпта ~200 мс:

class OBDConnection(private val socket: BluetoothSocket) {
    private val input = socket.inputStream.bufferedReader()
    private val output = socket.outputStream

    suspend fun sendCommand(command: String): String = withContext(Dispatchers.IO) {
        output.write("$command\r".toByteArray())
        val sb = StringBuilder()
        var char: Int
        while (input.read().also { char = it } != -1) {
            val c = char.toChar()
            sb.append(c)
            if (c == '>') break
        }
        sb.toString().trim().removeSuffix(">").trim()
    }

    suspend fun readPID(mode: String, pid: String): String {
        return sendCommand("$mode$pid")
    }
}

Инициализация адаптера перед опросом обязательна: ATZ (сброс), ATE0 (отключить эхо), ATL0 (без переноса строк), ATSP0 (автовыбор протокола). Без ATE0 парсить ответы значительно сложнее — команда возвращается в потоке вместе с ответом.

PID-опрос: что реально читается

Стандарт SAE J1979 определяет Mode 01 (текущие данные) и Mode 03 (коды ошибок). Не все PID поддерживаются всеми автомобилями — сначала запрашиваем PID 0x00 (supported PIDs 01-20), затем 0x20, 0x40, 0x60, чтобы построить карту доступных параметров.

PID Параметр Формула
0x04 Нагрузка двигателя A * 100 / 255 %
0x05 Температура охлаждающей жидкости A - 40 °C
0x0C Обороты двигателя (256*A + B) / 4 RPM
0x0D Скорость A км/ч
0x11 Положение дроссельной заслонки A * 100 / 255 %
0x42 Напряжение бортовой сети (256*A + B) / 1000 В
0x5E Расход топлива (256*A + B) / 20 л/ч

Коды ошибок (Mode 03) возвращают список DTC в формате 2 байта на код. Первые два бита определяют систему: 00 — двигатель (P), 01 — трансмиссия (P1xxx), 10 — шасси (C), 11 — кузов (B). Декодирование кодов в читаемые описания требует базы данных — открытые варианты: CSV из репозитория hfreire/ecu-can-bus-decoder или платная база от OBD Solutions.

Архитектура приложения

На Android — foreground service с PRIORITY_LOW уведомлением (иначе Android 8+ убьёт процесс через несколько минут). Service управляет подключением к адаптеру и циклом опроса, UI подписывается через StateFlow. На iOS — foreground-only, поскольку Core Bluetooth работает в фоне только для Heart Rate и некоторых других профилей; опрос идёт пока экран активен.

Частота опроса: RPM и скорость — каждые 100-200 мс, температура и расход — каждые 1-2 секунды. Не опрашивайте все PID с одинаковой частотой — это перегружает адаптер и заметно замедляет шину CAN.

Дополнительно: TPMS и камера салона

Датчики давления шин (TPMS) на большинстве автомобилей работают через отдельный радиочастотный протокол (315/433 МГц) и не доступны через OBD-II. Для их мониторинга нужны внешние BLE-датчики (например, Meneea, Fobo Tire Plus), которые стикуются на вентиль и передают давление и температуру. Интегрируются через стандартный Core Bluetooth / Android BLE API.

Разработка базового мобильного приложения с подключением к ELM327, мониторингом 10-15 PID и чтением DTC: 3-4 недели. Полноценное приложение с историей поездок, геолокацией, расчётом расхода топлива и TPMS: 6-8 недель. Стоимость рассчитывается индивидуально после уточнения целевых платформ и списка поддерживаемых параметров.