This week folded directly into my final project. The goal was to have two Xiao Seeed ESP32-C3 boards communicate with each other. One board lives inside the monolith and acts as the sender, with motion sensing and data output when movement is detected. The second board lives inside the orb and acts as the receiver, triggering five LEDs that produce the sunrise effect when motion occurs.
I chose the C3s because they already support a built-in radio communication protocol. WiFi was available, but not relevant. What mattered was that the radio protocol is Bluetooth-based, which allowed communication through objects. This was essential for a system where one board is sealed inside a wooden monolith and the other is spatially separate.
The communication logic was developed through a lot of back-and-forth with ChatGPT. I was nervous about the code, so I structured the process with checks at each stage, treating the two boards as independent systems first.
For the sender (the monolith board), I focused on verifying radar BLE connectivity. I was able to scan the device using my phone and confirm that it was broadcasting correctly using the nRF Connect app. This made the system feel legible before introducing the second board.
For the receiver (the orb), the goal was simpler but less forgiving. It needed to reliably receive the BLE signal and trigger the LEDs. Once that worked in isolation, I connected the two systems.
The full setup consists of two programs:
Sender (Monolith): Motion
Receiver (Orb): Sunrise
Debugging revealed a few non-obvious issues:
• D1 is not the same as GPIO3. Pin naming matters more than intuition.
• I initially designed for a NeoPixel ring with many LEDs, then switched to five independent LEDs and had to update the pin logic accordingly.
• At one point nothing worked because I uploaded the sender code to the receiver and the receiver code to the sender. I spent about an hour and a half debugging that.
What ultimately made this manageable was running both boards simultaneously in the IDE and watching their serial outputs live. Seeing one board report motion and the other respond with light confirmed that the system was actually communicating. When it finally worked, it felt less like a trick and more like a conversation between two objects.