how dare you?

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!

Digital communication?

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 start­up 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

Let's network

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.

PJON protocol usecase example 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.

PJON 3 dollars 5km range 433Mhz packet radio Me in 2015 building a 5km range ASK/FSK HALF-DUPLEX PJON packet radio

It's mainstream!

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 PJON blogpost with raging trolls 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.

Mauroz home automation system powered by PJON 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 blog reviews PJON in 2016 Atmel in 2016 reviewing PJON on its official blog

Compatible devices

ATtiny85

PJON - ATtiny85 compatible

Arduino Uno

PJON - Arduino uno compatible

Arduino Leonardo

PJON - Arduino Leonardo compatible

Arduino Mega

PJON - Arduino Mega compatible

Arduino Nano

PJON - Arduino Nano compatible

Arduino Micro

PJON - Arduino Micro compatible

Arduino Esplora

PJON - Arduino Esplora compatible

ESP8266

PJON - ESP8266 compatible

Node MCU

PJON - NodeMCU compatible

Teensy

PJON - Teensy compatible

Raspberry Pi

PJON - Raspberry Pi compatible

WINX86

PJON - WINX86 compatible

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.

GET PJON