Engineers and memes taugh us that is stupid to create a new Standard, is instead intelligent to use what is already available not necessarily understanding its principles!
Far back in 2009, while following Digital Communication, Advertising and Art Direction at NABA (New Academy of Arts in Milan), I became interested in Professor Massimo Banzi's classes and managed to get a Diecimila. In just one day my vision of the world changed and I slowly started to better understand computers and electronics while sharing results with the Arduino community both on my website www.gioblu.com and on Arduino's forum. I began building robots and this guided me to my first startup experience: a webshop of Arduino compatible, CNC machined, robot kits, boards and sensors.
Me in 2010 testing one of the firsts products developed by Gioblu Robotics, a self-balancing Arduino robot
Let's transmit data
I needed to share data through many microcontrollers (or subsystems) on a common bus, so I started developing my own software emulated data link layer because I was not satisfied by solutions available at the time. In 2010 I wrote the first implementation of the Padded jittering data link layer v0.1 which was basic, full of bugs and working by mere chance. After debugging, experiments proved it was working well through wires, human bodies, water and wirelessly through radio and infrared light while achieving robust bidirectional communication operating in spite of interference.
Me in 2010 testing Wireless communication through 1 LEDs per device used both as receiver and transmitter
I want to write my protocol
After noticing that adding quiescent devices connected to the bus was not affecting occurring communication between two other connected devices, I started experimenting an initial collision avoidance phase, a one byte device id supporting 254 (plus BROADCAST) unique device ids and a synchronous acknowledge at the end of the packet. It was shocking to see that many devices were able to send and receive data through the same wire. In 2010 I released the PJON protocol layer specification v0.1 on the Arduino forum, receiving many don't reinvent the wheel and few active contributors.
A PJON bus made of 14 Arduino boards sharing the same single wire as communication medium
With a working protocol layer and support from the community, I went further proposing a 2 level addressing: one (1 byte) to identify a device and one (optional 4 bytes) to identify a group of devices or bus, supporting up to 4.294.967.295 buses and so 1.090.921.692.930 devices. This addition released in the PJON protocol layer specification v0.2 enabled coexistence and networking for groups of devices. Thanks to Micheal Teeuw's post on his blog, PJON received contributions, testing, debugging and feature requests. Many talented contributors ported devices like ESP8266, Teensy 3.2 and Node MCU.
Micheal Teeuw in 2015 testing and sharing results with the PJON library on his blog
Let's abstract the data link layer
With Strategies, PJON had finally a way to communicate data agnostically through the data link layer below and to be instanced in parallel in the same sketch with different data links. The curiously recurring template pattern or CRTP was adopted to abstract the physical layer in separate classes called Strategies. Thanks to this change from then it was possible to instantiate a PJON object passing the preferred physical layer. Initially, I ported two Strategies, one for wired communication called SoftwareBitBang and one for noisy media (such as radio) called OverSampling. Later on, I developed together with Fred Larsen ThroughSerial able to operate through a serial port.
Me in 2015 building a 5km range ASK/FSK HALF-DUPLEX PJON packet radio
Something that seemed to be just a boy's game appeared on many relevant websites and blogs where many trolls, raging, were wondering who was this Italian guy without a PhD from MIT, who tried to approach this problem. Hackaday and the Atmel blog wrote about the PJON protocol and from that day an ongoing earthquake began. Since then, the PJON protocol layer specification has been used in academic researches and PhDs in different parts of the world, and the official PJON implementation has already been applied globally in a wide range of different systems.
Hackaday in 2016 reviewing PJON and provoking a hell of trolls in the comments
Why don't we add a header?
The release of the PJON protocol layer specification v0.3 is the result of the most interesting proposal I have received so far, by Fred Larsen, who is now a great new friend already even if we never met personally. He proposed the addition of a 1 byte header containing information on the packet and the configuration requested by the transmitter. This left a fixed configuration scenario, where interoperability was impossible, and headed to a dynamic network architecture. An entire new set of possibilities opened up and many contributors started to consider how to take advantage of this new entity.
Mauro Zancarlin in 2015 building a complex home automation system with PJON
PJON over the internet?
EthernetTCP and LocalUDP strategies proposed and developed by Fred Larsen enable multiple devices with Ethernet ports using PJON to communicate with each other on a LAN, WAN or across the Internet. So now you can also virtualize a PJON network of devices over the internet. A growing community is providing us with PJON implementations in other programming languages like PJON-python by Zbigniew Zasieczny and PJON-c by Matheus Garbelini, thanks to their work, it is now possible to run PJON on a wider range of devices.
Atmel in 2016 reviewing PJON on its official blog
Embedded systems connected
PJON™ is an Arduino compatible, multi-master, multi-media communications bus system. It proposes a Standard, it is designed as a framework and implements a software-emulated network protocol stack that can be easily cross-compiled on many architectures like ATtiny, ATmega, ESP8266, Teensy, Raspberry Pi and Windows X86. It is a valid tool to quickly and comprehensibly build a network of devices.