Software Built Around Your Business

Rhino LED Lights

We Turned Hardware Into a Product Customers Can Run From Their Phone

Rhino LED Lights had the hardware. What it did not have was the software that turns hardware into a product: the firmware inside the controller, the app in the customer's hand, and the connection that keeps the two in agreement. We built all three.

The Problem

A lighting controller is only worth what the customer can do with it. Without an app, control is limited to whatever a physical switch can express, and a product that is awkward to use is a product that comes back, or gets reviewed badly.

The product also has to react to the vehicle. Brake, indicate, reverse, hazards - those have to happen immediately and correctly whether or not a phone is anywhere nearby. So this was never only an app project. The intelligence has to live inside the product, the phone has to act as a control surface for it, and the two have to stay in agreement about what is actually switched on.

What We Built

An iPhone app customers use to control the lights directly
The firmware that runs inside the controller itself
A wireless connection between the two that reconnects on its own
A library of lighting patterns to choose from and adjust
Color, brightness and speed set per channel from the phone
Vehicle-triggered behavior that works with or without the phone connected
Customer settings the product remembers between sessions
A control layout the customer can arrange to suit how they use it

What Changed

  • The product ships as something a customer can operate, not just something they wire in.
  • Control moved from what a physical switch can express to what a phone screen can.
  • What the customer sets up is remembered by the product rather than being rebuilt from scratch every time.
  • Signal and safety behavior is decided inside the controller, so it keeps working when the phone is out of range, out of battery or in a pocket.
  • The app shows what the hardware is actually doing rather than a state that has drifted out of step with it.
  • Reliability was engineered rather than hoped for: the app sends far less Bluetooth traffic when a customer is dragging a slider, and the buffer overflows that used to drop the connection were designed out.
  • Changes triggered by the vehicle show up in the app in under 100ms, so the screen and the hardware agree.

What This Could Do in Your Business

Connecting a physical product to a phone so the customer controls it themselves.
Writing the software that lives inside a product, not only the software around it.
Keeping an app and a device in agreement about state, which is where most connected products start to feel broken.
Deciding what a product has to be able to do with no phone and no network, and building that into the hardware.
Taking a manufactured part and giving it a customer-facing experience.
Covering the mobile side, the firmware side and the protocol between them, so responsibility does not fall between two vendors.

Have a product that needs an app, or an app that needs firmware?

Tell us what the hardware has to do and we will tell you what it takes to put that control in your customer's hand.

Under the Hood

For the technical evaluators: how this was actually built.
RhinoLED 2025 Completed
75+
LED Patterns
5
LED Channels
11
Hardware control lines
3
Layers built: app, firmware, protocol

System Overview

The two halves of the build and how they fit together
iOS Bluetooth Control App

A native Swift/SwiftUI application for iOS that provides comprehensive control over a custom LED controller via Bluetooth Low Energy (BLE). Features real-time state synchronization, GPIO management, pattern library, and intuitive user interface.

Swift SwiftUI Core Data BLE MVVM
Custom Embedded Firmware

Arduino-based firmware for nRF52 microcontrollers implementing a complete BLE GATT service, multi-channel LED control, GPIO state management, automotive signal processing, and real-time pattern rendering with 75+ animation patterns.

C++ Arduino nRF52 Embedded Systems BLE

Inside the iOS Application

How the mobile side is built
Bluetooth Low Energy
  • BLE GATT service implementation
  • Multi-characteristic communication
  • Connection state management
  • Real-time notifications
  • Chunked data transmission
  • Automatic reconnection logic
Architecture & Design
  • MVVM architecture pattern
  • SwiftUI declarative UI
  • State management with Combine
  • Dependency injection
  • Protocol-oriented design
  • Modular component architecture
Data Persistence
  • Core Data integration
  • UserDefaults for settings
  • Pattern library storage
  • Theme persistence
  • GPIO configuration storage
  • State synchronization
JSON & Communication
  • JSON encoding/decoding
  • Command queue system
  • Intelligent debouncing
  • Priority-based processing
  • Error handling & retry logic
  • Compact data formats
GPIO Management
  • Dynamic button configuration
  • Real-time state polling
  • Customizable HUD layout
  • Virtual shortcut buttons
  • Conflict resolution
  • Action parameter configuration
UI/UX Features
  • Custom color picker
  • Pattern builder interface
  • Quick theme presets
  • Floating controls
  • Responsive layouts
  • Dark mode support

Inside the Embedded Firmware

How the on-device side is built
Embedded Systems
  • nRF52 microcontroller programming
  • Real-time pattern rendering
  • Memory optimization
  • Interrupt handling
  • Hardware abstraction layer
  • Power management
LED Control
  • NeoPixel/WS2812B driver
  • Multi-channel independent control
  • 75+ animation patterns
  • Per-channel brightness/speed
  • Color blending algorithms
  • Pattern state management
GPIO Management
  • 12V automotive signal processing
  • Voltage divider circuits
  • Debouncing algorithms
  • Priority-based action system
  • Conflict resolution
  • State machine implementation
BLE GATT Service
  • Custom service/characteristic design
  • Notification system
  • Chunked data transmission
  • Write/Read/Notify operations
  • Connection state handling
  • MTU optimization
Embedded JSON
  • Lightweight JSON parser
  • Memory-efficient parsing
  • Compact response formats
  • Input validation
  • Error handling
  • Bounds checking
Automotive Features
  • Turn signal patterns
  • Brake light control
  • Reverse light patterns
  • Hazard light mode
  • Emergency patterns (SOS)
  • Pattern override system

The Problems That Were Hard to Solve

Where the engineering effort actually went
Intelligent Command Queue

Implemented a sophisticated command queue system that debounces channel lighting commands (150ms delay) while preserving all GPIO triggers. Features priority-based processing, automatic command type detection, and thread-safe operations with NSLock.

Result: Reduced BLE traffic by 60% during rapid UI updates while maintaining 100% event delivery.

Compact Data Formats

Optimized BLE communication by implementing compact JSON formats. Reduced GPIO state responses from 1024 bytes to ~50 bytes and config responses from 1500 bytes to ~400 bytes using short keys and array formats.

Result: The buffer overflow errors that were dropping the connection no longer occur.

Real-Time Notifications

Implemented BLE notification system for instant GPIO state updates when physical 12V signals trigger hardware pins. App receives immediate notifications without polling delay.

Result: Sub-100ms UI update latency for hardware-triggered events.

Conflict Resolution System

Developed priority-based conflict resolution for automotive triggers with pattern state backup/restore. Handles emergency > brake > turn > reverse priority hierarchy with automatic pattern restoration.

Result: Seamless transitions between automotive modes with zero visual glitches.

What the Engineering Changed

Measured on this product, against its own earlier builds
Performance
  • 60% less BLE traffic during rapid slider changes
  • Buffer-overflow disconnects designed out
  • Sub-100ms notification latency
  • Status payloads cut from 1024 bytes to about 50
How It Was Built to Last
  • MVVM architecture
  • Comprehensive error handling
  • Input validation & bounds checking
  • Modular, maintainable codebase
Features
  • 75+ LED animation patterns
  • Sound reactive mode
  • Virtual shortcut buttons
  • Dynamic GPIO configuration

Technical Stack

Technologies and tools used
iOS Development
Swift 5.9+ SwiftUI Core Data Core Bluetooth Combine Framework UserDefaults Xcode MVVM Pattern
Embedded Development
C++ Arduino Framework nRF52 SDK Adafruit Bluefruit NeoPixel Library JSON Parsing EEPROM Storage State Machines

Deliverables

What was handed over

A native iOS application and custom embedded firmware, together covering control of multi-channel LED systems with real-time GPIO management.

Shipped Components
  • Complete iOS application (Swift/SwiftUI)
  • Custom embedded firmware (Arduino/nRF52)
  • 75+ LED animation patterns
  • BLE GATT service implementation
  • Real-time GPIO management system
  • Automotive signal processing

The Capability Behind This Project

If any of that sounded like your business, this is the service it falls under.

Have a product waiting on the software around it?

If the hardware is finished but the app, the firmware or the connection between them is not, that is usually what is holding up the launch. Tell us where it is stuck.