android-obd

Initialize ELM327 adapters, negotiate protocols, and parse OBD2 PID and DTC responses.

8|1|Updated Mar 30, 2026
One-click install
npx skills add https://github.com/drewid74/ai_skills --skill android-obd
Or copy as Structured Prompt for Agent
Please help me install this Agent Skill.
Skill: android-obd
Source: https://github.com/drewid74/ai_skills/tree/main/android-obd
Command: npx skills add https://github.com/drewid74/ai_skills --skill android-obd

SYSTEM DOCUMENTATION & REQUIREMENTS

💡 This Skill includes references (resource) components.

What problem does it solve?

This Skill helps Android developers reliably connect to an OBD2 adapter (ELM327 and compatible) and obtain valid vehicle data by using the correct init sequence, response handling, and protocol negotiation.

Core Features & Use Cases

  • ELM327 init sequence: Ensures the adapter is reset and configured in the right order (ATZ, ATE0, ATL0, ATH0, ATSP0, ATAT1) before any PID polling.
  • Robust response parsing: Reads until the ELM327 prompt character (>) and correctly strips command echo to prevent broken payload parsing.
  • Vehicle protocol detection & recovery: Interprets SEARCHING/BUS INIT as expected negotiation steps, extends wait time for first-connect, and uses ATSP protocol fallbacks when UNABLE TO CONNECT occurs.
  • Mode 01 PID polling + Mode 03 DTC reading: Provides PID constants, parsing patterns for common live data (RPM/speed/temp/etc.), and decoding logic for DTCs.
  • Adapter-specific quirks: Includes guidance for OBDLink MX+ behavior (e.g., reflection RFCOMM channel-1, Classic vs BLE path choice, extended AT commands, one-connection-at-a-time constraints).
  • Android Auto / Car App Library integration hooks: Points to Android Auto display integration patterns for live PID rendering and troubleshooting when OBD is “connected” but data is missing.

Quick Start

Ask your AI assistant to implement the full ELM327 init + PID polling loop on Android using ATZ → ATE0 → ATL0 → ATH0 → ATSP0 → ATAT1, then read responses until the > prompt and parse Mode 01 and Mode 03 reliably.

Frequently Asked Questions about android-obd

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
Why does my ELM327 OBD2 adapter say NO DATA or get stuck on BUS INIT on Android?

OBD2 returns NO DATA or stuck BUS INIT on Android when the client skips the required ELM327 AT initialization sequence or fails to allow extended first-connect protocol negotiation time. Sending ATZ, ATE0, ATL0, ATH0, ATSP0, and ATAT1 before polling resolves this by configuring the adapter correctly.

How do I parse Mode 01 live data and Mode 03 DTC responses from an ELM327 on Android?

To parse Mode 01 live data and Mode 03 DTC responses on Android, read the Bluetooth RFCOMM stream until the ELM327 prompt character (>) appears, then strip the command echo to isolate the payload. Apply PID constants and decoding logic to extract RPM, speed, temp, or diagnostic trouble codes reliably.

What is the correct ELM327 initialization sequence for reliable Android OBD2 communication?

The correct ELM327 initialization sequence for Android OBD2 communication is ATZ, ATE0, ATL0, ATH0, ATSP0, and ATAT1. This sequence resets the adapter, disables echo and headers, sets automatic protocol detection, and configures timing to ensure subsequent PID polling returns valid data.

Can I use an OBDLink MX+ adapter with Android Auto for live PID rendering?

OBDLink MX+ adapters work with Android Auto for live PID rendering, but require handling specific Classic Bluetooth versus BLE path choices, extended AT commands, and one-connection-at-a-time constraints. Integrating Android Auto Car App Library hooks allows displaying parsed Mode 01 data while managing these adapter quirks.

Why does my Android OBD2 app fail to connect or return UNABLE TO CONNECT?

Android OBD2 apps return UNABLE TO CONNECT when vehicle protocol negotiation fails or the first-connect wait time is too short. Treat SEARCHING and BUS INIT as expected negotiation steps, allow extended response time, and apply ATSP protocol fallbacks to recover the connection successfully.

Do I need to strip command echo when reading OBD2 responses over Android Bluetooth RFCOMM?

You must strip command echo when reading OBD2 responses over Android Bluetooth RFCOMM because the ELM327 echoes sent AT commands back by default unless disabled. Reading until the prompt character (>) and removing echoed text prevents broken payload parsing for Mode 01 and Mode 03 data.