Inventing a comms. protocol

I designed and implemented a novel communications protocol for the infra-red spectrum in my second year of university. The zeroG PHY communications protocol allows for cheap, asynchronous low-power, communications across microprocessors which don’t have wireless modules.

ZeroG was born out of frustration — my Arduino microcontrollers were collecting data, but I had no way of sending it to the cloud. If I installed cool sensors around my house, I could only access the data by standing right next to them. WiFi modules for microcontrollers aren’t ubiquitous, nor are they cheap or easy to use. That got me thinking: what if I could create a communication protocol that didn’t rely on WiFi at all?

I set out to design a system where microcontrollers could talk to each other using only an infrared LED and an infrared receiver — components that are dirt-cheap and widely available. After researching the hardware, I crafted a high-level design (HLD) for a protocol that could support up to 16 devices in a single area, with 16-bit packets and built-in features like:

  • Packet IDs for ordering out-of-sequence transmissions,
  • Forward Error Correction (FEC) to handle noisy environments, and
  • Asynchronous Communication, where devices could signal their intent to transmit using a PRACH-like mechanism, ensuring everyone got a turn to talk.

When it came to implementation, I built a generic codebase (here) that could be compiled for a variety of microcontrollers, making the protocol flexible across different architectures. This was key because I wanted it to work on both WiFi-capable ESP32 devices (RISC-V architecture) and simpler devices like the Arduino Uno (ATmega328P chip).