This repository demonstrates a wireless multi-node synchronization system implemented on nRF52832 using the nRF52 DK (PCA10040).
The system synchronizes LED blinking patterns across multiple boards using a simple proprietary radio protocol, without node IDs or parent/child roles.
This wireless synchronization system operates by having each radio node periodically transmit a synchronization request signal to other nodes, while all nodes perform reception at intervals that are integer multiples of that transmit period.
By executing this common behavior across all nodes, synchronization is established naturally without requiring a master node or centralized control.
In this process, multiple nodes may transmit synchronization request signals at nearly the same time, which can lead to signal collisions.
However, this system utilizes the capture effect inherent in wireless communication. Even when multiple signals overlap, the receiver locks onto a single synchronization request signal that arrives slightly earlier or has a relatively stronger signal level, enabling stable reception of that signal.
As a result, even in the presence of interference from other nodes, the desired signal is preferentially demodulated, and the effects of collisions are effectively mitigated.
This system is based on the principle that when all nodes attempt to synchronize using the same behavior, the network naturally becomes aligned. We refer to this concept as the “alignment principle.”
Within this framework, the capture effect plays an essential role by suppressing mutual interference among nodes and supporting robust and stable synchronization across the system.
- No parent / child roles and no node addressing
- Automatic clock drift compensation between nodes
- Intermittent RX/TX operation for low average power consumption
- Natural multi-hop (daisy-chain) propagation when nodes are not all in RF range
- Any node can update the shared LED pattern
- One node periodically transmits a sync + data frame.
- Other nodes receive at intervals that are integer multiples of the transmit interval.
- Each receiver aligns its local timing based on the received sync information.
- Once synchronized, each node also transmits its own sync frame.
- Repeating this behavior across all nodes results in system-wide synchronization.
This timing structure causes nodes to naturally line up over time without explicit scheduling or addressing.
Time
Node A (TX): |TX| |TX| |TX| |TX| |TX| ... ^ ^ |----- 250 ms period -----| Node B (RX): |---------------- RX window ----------------| (every 10 seconds) Result: Node B gradually aligns its timing to Node A.
+------------+------------+----------------------+------------+------------+ | Header | Sync (2B) | RTC Timestamp (4B) | Pattern 1B | Checksum | | "@wp1@" | "00"-"95" | 32-bit counter | LED mode | Sum(5..15) | +------------+------------+----------------------+------------+------------+
- Sync: cyclic counter (0?95) used for LED timing alignment
- RTC timestamp: helps compensate clock drift
- Pattern: LED blinking pattern
- Checksum: simple byte sum for frame validation
Nodes do not need to be within direct RF range of all other nodes.
[Node A] ---> [Node B] ---> [Node C] ---> [Node D] Sync and pattern propagate hop-by-hop
The system uses intermittent communication after synchronization.
- TX interval: every 250 ms (TX duration ≈ 3 ms)
- RX interval: every 10 seconds (RX duration ≈ 25 ms)
- Supply voltage: 3.0 V
- DC/DC converter: Enabled
- TX output power: +4 dBm (radio current ≈ 12–16 mA during TX)
Average current consumption:
** 0.3 mA @ 3.0 V (UART OFF)**
UART output significantly increases current consumption.
The above value is measured with UART disabled.
- Use nRF5 SDK v12.3.0 (legacy SDK).
- Copy
main.cinto
examples/proprietary_rf/esb_prx/
replacing the original file. - Build the example to generate a HEX file.
- Flash three or more nRF52 DK boards.
- LED3 on all boards will blink in sync.
- LED2 / LED4 may turn on for internal status indication.
- Press Button1 on any board to change the blinking pattern.
- The new pattern propagates to all nodes and re-synchronizes.
? Note:
Because button timing itself is not transmitted,
wait at least 60 seconds between button presses for stable operation.
- Fixed RF channel and simple application-layer checksum
- No collision avoidance or node identification
- Designed as a demonstration of timing alignment and low-power scheduling
- nRF5 SDK 12.3.0 is legacy; porting to newer SDKs is future work
main.c: main source file- HEX file can be provided upon request
This project is based on Nordic Semiconductor example code.
The original Nordic license header is retained in main.c.