← Back to Portfolio
Embedded Systems

CAN Module with Android Application

Role Sole Engineer (Embedded and Software Engineering)
Tools KiCAD, VS Code (ESP-IDF), MLPAB, and Android Studio (Kotlin)
Disciplines
Software Embedded

Problem & Context

The legacy system’s PCBs communicate exclusively over a Controller Area Network (CAN) bus, which carries system state, sensor values, and other parameters. However, there was no simple way to access this data being transmitted back and forth between the systems PCBs. Creating a wireless CAN module would enable new functionality such as real-time debugging, peripheral control, modular subsystem design, and potential remote firmware updates-without altering existing firmware.

Scope of Work

Technical Approach

Determined the nonstandard CAN bus baud rate on the PIC microcontrollers by reviewing the source code in MPLAB and verifying the calculated value using a logic analyzer configured to the rate.

Integrated an external MCP2515 CAN controller and a 12MHz crystal oscillator to generate the precise clock signal required for bus synchronization.

Built and tested firmware in ESP-IDF (VS Code), decoding CAN frames and mapping signal data to system state variables.

Packaged decoded values into JSON objects, broadcast over Wi-Fi from the ESP32 acting as an AP.

Created an Android companion app to connect via Wi-Fi, receive JSON messages, and display parsed system diagnostics in a user-friendly interface.

Designed a custom PCB with integrated CAN transceiver, ESP32, USB-C interface, and GPIO screw terminal breakouts for connecting external peripherals.

📐

Technical diagram or schematic would be displayed here

Results

📊

Project results visualization

The module successfully reads real-time CAN messages and broadcasts them wirelessly for diagnostic review.

ESP32 firmware includes basic control logic to toggle peripheral outputs based on “System State” signals.

Any device can now connect to the ESP32’s AP which expands the potential of the legacy system. Other wireless modules can be added, which feed data to the legacy system and adds overall functionality.

The Android app currently displays live CAN data; future iterations will expand functionality for configuration, control, and automated reporting. There is even the possibility to perform legacy system firmware updates through this app now.