This project is a Flutter-based mobile application implementing a complete Bluetooth Low Energy (BLE) workflow - from device discovery and connection management to data exchange and communication diagnostics. The application was developed by a four-person team with a clear division of responsibilities and development stages, resulting in a clean and extensible architecture.
Lidia - device list screen, CMD_GET_LINK_STATUS
Mateusz - ble manager, CMD_LED_TEST
Kacper - device control screen, CMD_GET_FW_BUILD
Gerard - integration, CMD_GET_RSSI
The application demonstrates a practical approach to integrating BLE communication into a mobile app while maintaining strict separation between the UI layer and communication logic. The design follows principles commonly used in embedded systems, where higher layers interact with hardware through well-defined interfaces instead of protocol-specific details.
At the initial stage, the overall structure and navigation flow of the application were defined. The project was organized to separate UI components from BLE logic. Screens were designed to be lightweight and state-driven, while all BLE-related operations were delegated to a dedicated manager. This ensured a stable foundation for further development and simplified testing and maintenance.
A central BLE manager module was implemented to handle scanning, device discovery, connection lifecycle management, and basic data exchange. This module serves as the single point of interaction with the BLE stack, encapsulating platform-specific details and exposing a clean, consistent API to the UI layer.
The application consists of three main screens, each with a clearly defined role:
-
Device List Screen
Responsible for initiating BLE scans and displaying discovered devices in real time. It reflects scanning state and device availability without embedding communication logic. -
Device Control Screen
Manages the connection lifecycle (connect and disconnect) and provides a control interface for sending commands to the selected device. User actions are mapped to BLE operations via the manager layer. -
Logs Screen
Displays a chronological view of BLE events and data exchange. This screen acts as a diagnostic tool, enabling analysis of communication flow and simplifying debugging on both the application and firmware sides.
Each screen is implemented as an independent component, allowing future extensions or refactoring with minimal impact on the rest of the application.
After installing the Flutter SDK and required platform tools, verify that the environment is correctly configured and run the application using the following commands:
flutter doctor
flutter pub get
flutter runThe application is platform-agnostic at the application layer and relies on Flutter’s cross-platform BLE support to run on both Android and iOS devices. This project can be used both as a starting point for further BLE-based mobile development and as a reference architecture for teams working at the intersection of mobile applications and embedded systems.
The final stage focused on improving code clarity, consistency, and observability. A structured logging mechanism was introduced to provide insight into BLE operations, effectively acting as a software-level logic analyzer for communication. The resulting architecture is ready for extension with additional BLE services, characteristics, or advanced application logic.


