Overview
The iOS app is designed to connect to an external device via Bluetooth and track real-time accelerometer, gyroscope, and battery usage data via either logging or streaming. The app was built with a focus on ease of use, efficient data storage, precise measurements, the ability to safely store large amounts of data over time, and the ability to easily view or download any specific subset of data when desired.
Technical Details
The app was primarily written in Swift and utilized the Swift CoreBluetooth, Swift CoreData, Swift Combine, and SwiftUI frameworks. Additionally, the external Bluetooth device was controlled with C, and custom data compression algorithms were written in C to keep the size of the locally stored logging data as low as possible without losing accuracy. The development process also involved balancing the need for accurate and precise data with efficient data storage size and battery usage. This was especially important when logging for longer periods of time and limited by onboard device storage and battery charge. Higher or lower sampling rates, as well as different data compression algorithms, were used to pick up any changes in the measurements that could last for as little time as a minute and minimize the amount of data points for long periods of stillness that could last for up to over an hour.
App Usage
When the app is launched, it immediately scans for any nearby devices that have been previously connected or new ones that are in range. If a remembered device is detected, the app automatically connects to it. If the remembered device is currently logging, the app will stop logging, download the stored data, and restart logging.
When viewing the list of nearby devices, users can connect or disconnect from them. When selecting a device, they can see if they are connected to it and if it is logging, streaming, or idle. They can control each of these functions as well as the onboard LED of the device from this interface.
The next screen displays a history of all previously logged or streamed data. From this screen, the user can view graphs of the data using custom timestamp ranges, making it easy to analyze and compare data from different time periods. The user can also download all data or any specific time period's data.
Conclusion
The iOS app provides an easy-to-use interface for connecting to an external Bluetooth device and tracking real-time accelerometer, gyroscope, and battery usage data via logging or streaming. The app's development involved the use of several programming languages and frameworks, as well as a focus on balancing data accuracy and efficient data storage. The end result is an app that provides precise measurements, safe and efficient data storage, and an easy way to view or download any specific subset of data when desired.
Technologies Used
- Swift
- C
- Swift CoreBluetooth
- Swift CoreData
- Swift Combine
- SwiftUI
- Custom data compression algorithms written in C