Cross-platform Bluetooth Low Energy (BLE) controller for an 8-channel or 16-channel thermal-control board. The repository contains native iOS, Android, and Windows applications that use the Nordic UART Service (NUS) to connect to the controller.
The apps are designed for laboratory and prototype hardware. Verify channel wiring, power limits, and emergency shutdown behavior before operating a physical device.
| Platform | Source | Install package | Notes |
|---|---|---|---|
| iOS / iPadOS | BLEThermalController/ and BLEThermalController.xcodeproj/ |
Not included | Build and sign with Xcode. |
| Android | BLEThermalControllerAndroid/ |
Debug APK in GitHub Releases | Android 8.0 (API 26) or newer. |
| Windows | BLEThermalControllerWindows/ |
win-x64 ZIP in GitHub Releases |
Windows 10 2004+ or Windows 11, 64-bit. |
The current release assets are available from GitHub Releases. The iOS project is source-only because device installation requires an Apple signing identity.
- Automatically scans for BLE devices named
ADC_nrfin 8-channel mode. - In 16-channel mode, automatically connects
ADC_nrf_Ato channels 1-8 andADC_nrf_Bto channels 9-16. - Enforces one enabled channel at a time across all connected controllers.
- Explicitly turns all channels off when a controller is first connected.
- Restores the last enabled channel, target temperature, and magnet state after an unexpected BLE reconnect.
- Uses a default target temperature of 40 C without requiring a temperature button to be selected first.
- Displays received
STATandDBGtemperature data immediately. - Does not include temperature CSV export or target-dependent temperature display filtering.
- Open
BLEThermalController.xcodeprojwith Xcode 16 or newer. - Choose your Apple ID under Signing & Capabilities.
- Change the bundle identifier to one owned by your team.
- Select a physical iPhone or iPad and run the app.
The iOS Simulator cannot test BLE hardware. A free Apple ID can install the app through Xcode on its own devices for a limited signing period; TestFlight, App Store distribution, and distributable IPAs require Apple Developer Program membership.
Open BLEThermalControllerAndroid/ in Android Studio, let Gradle sync, then
run the app target. To build from a terminal:
cd BLEThermalControllerAndroid
./gradlew assembleDebugThe output is app/build/outputs/apk/debug/app-debug.apk. It is debug-signed
for testing, not a Play Store release.
Download and fully extract the Windows ZIP from the latest GitHub Release, then
run BLEThermalController.exe. The release is not code-signed, so Windows may
show a security notice.
To build the source project on Windows:
dotnet build .\BLEThermalControllerWindows\BLEThermalControllerWindows.csproj -c Release- Power the controller board and enable Bluetooth.
- Select 8-channel or 16-channel mode in the app.
- Wait for automatic connection, or use Scan after powering a board later.
- Enable one channel, set its target temperature if needed, and select the required magnet state.
Temperature values on screen follow live controller messages. A displayed temperature is not held back until a setpoint is selected.
BLEThermalController/ iOS and iPadOS SwiftUI source
BLEThermalController.xcodeproj/ Xcode project
BLEThermalControllerAndroid/ Native Android source
BLEThermalControllerWindows/ Native Windows WPF source
The firmware is intentionally not included in this public application source repository. Generated build folders, signing files, and packaged binaries are also excluded from version control.
The 2026-08-28 source revision was verified with:
xcodebuild -project BLEThermalController.xcodeproj -scheme BLEThermalController \
-sdk iphonesimulator -configuration Debug CODE_SIGNING_ALLOWED=NO build
cd BLEThermalControllerAndroid
./gradlew assembleDebug lintDebug
dotnet build BLEThermalControllerWindows/BLEThermalControllerWindows.csproj -c ReleaseHardware BLE communication, high-current operation, and thermal-control safety must be validated on the target system before use.
No open-source license has been granted for this repository. Contact the repository owner before redistributing or reusing the source code.