Before building a real app, I validated everything with nRF Connect first. Scan, connect, discover services, send commands, verify response. This caught firmware bugs before I ever touched Flutter - saved hours of debugging the wrong layer.
Once the device protocol was solid, I moved to Flutter. The BLE part was actually easy. The fight was Android itself: permission handling across OS versions, background scan behavior, and write/notification timing quirks. Classic mobile pain.
My approach: get scan + connect + one confirmed write working reliably before building anything else. Once that foundation was solid, the rest was normal app development - state management, UI, logging, graphs.
This was also my first Flutter app. Figured I'd learn on something real instead of another tutorial project.
What the app does:
- Connect & manage multiple filters (up to 6 units) — quick select, reconnect, and keep each one's identity straight
- Live dashboard control — fan PWM / auto mode, basic settings, and "is it actually running right now" status
- Real-time sensor streaming — inlet/outlet VOC, temp/humidity, with smooth updates
- Built-in graphing / trending — time-series plots for sensor data and filter performance so you can see what's happening, not guess
- Tap-to-inspect graph data — click a point to pull exact values + timestamp (nice for debugging and "what happened here?" moments)
- Export / share logs — CSV output for deeper analysis, backups, or sending to someone without screenshots
Nothing fancy, but it works because I didn't skip the nRF validation step.


Apollo Timbers
Discussions
Become a Hackaday.io Member
Create an account to leave a comment. Already have an account? Log In.