Square Off Pro BLE Protocol (Reverse Engineered)
This project is based on independent reverse engineering for interoperability purposes.
No proprietary code, firmware, or assets from Square Off are included.
This repository only documents observed communication behavior.
If you are the rights holder and have concerns, please open an issue.
This document describes the reverse engineered BLE protocol of the Square Off Pro smart chessboard. All information was obtained through real BLE sniffing, testing, and validation on hardware.
Overview
The board does not handle chess logic internally. It behaves as:
A sensor (detects piece movements)
An actuator (LEDs + buzzer)
A state reporter
All game logic (legal moves, rules, AI, etc.) is handled externally (mobile app or custom software).
BLE Service
The board uses the Nordic UART Service (NUS):
Service UUID 6e400001-b5a3-f393-e0a9-e50e24dcca9e
TX (board → app, notifications) 6e400003-b5a3-f393-e0a9-e50e24dcca9e
RX (app → board, write) 6e400002-b5a3-f393-e0a9-e50e24dcca9e
Protocol Commands Connection / Initialization
14#GO* → Board ready, connection validated, initial sync OK
30#* → Send full board state (used for initial synchronization)
Piece Events (Board → App)
0#e2u* → Piece lifted from e2 (u = up)
0#e4d* → Piece placed on e4 (d = down)
Board State
30#R* → Request current board state
30#* → Board returns full state (64-bit representation)
Used for:
state reading
synchronization
validation
Error Handling & Buzzer
0#e2e2* → Mark square e2 as incorrect → Triggers a beep → Causes persistent blinking
General format: 0#*
Examples: 0#a5a5* 0#d8d8*
Behavior:
Each command triggers a beep
LEDs remain blinking until correction
Board LEDs (Squares)
25#e2e4* → Highlight squares e2 and e4
25#e2e3e4* → Highlight multiple squares
General format: 25#...*
Used for:
move guidance
highlighting legal moves
animations
Status LED (Control Module)
Controls the LED on the side module (not the board squares):
26#ISG* → Green 26#ISR* → Red 26#ISB* → Blue
Notes:
No OFF command found
Only changes color
Keep-Alive / Anti-Sleep
27#po* → Keeps the board awake → Prevents low-power mode → Improves responsiveness
No visible LED or sound effect
End of Game
27#wt* → White wins 27#bl* → Black wins 27#dw* → Draw
Typical Communication Flow Initialization
APP → 30#<initial_state>* BOARD → 14#GO*
Move Example (e2 → e4)
APP → 25#e2e4* BOARD → 0#e2u* BOARD → 0#e4d* APP → 30#R* BOARD → 30#*
Error Example
APP → 0#a5a5* APP → 0#d8d8*
Effect:
Beep on each command
Persistent blinking until corrected
Key Insights
The board does not validate moves
It only reports physical actions
Game logic is entirely external
Beep is triggered by 0#...* commands
LEDs are controlled separately:
25# → board squares
26# → status LED
Command Summary
14#GO* → init OK 0#...u* → piece lifted 0#...d* → piece placed 0#xx* → error + beep 25#...* → board LEDs 26#ISX* → status LED color 30#R* → read state 30#...* → state data 27#po* → keep-alive 27#wt* → white win 27#bl* → black win 27#dw* → draw
Disclaimer
This protocol is based on reverse engineering and testing. It is not official documentation from Square Off. Behavior may vary depending on firmware versions.