how dare you?

Engineers and memes taught us that it is stupid to create a new Standard, it 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 Fine Arts of 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 and on Arduino's forum. I began building robots and after few years of experiments I have launched my first start­up experience with a webshop of Arduino compatible, CNC machined robot kits, boards and sensors.

Me in 2010 testing a robot kit prototype

Let's transmit data

I needed to connect many microcontrollers on a common bus and I was not satisfied by the solutions available at the time so I started developing my own data link. In 2010 I wrote the first implementation of the Padded jittering data link v0.1 which was basic, full of bugs and working by mere chance. After debugging, experiments proved it was working well not only through wires and the human body, but also wirelessly through radio and infrared light. It showed to be robust operating bidirectionally 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 connecting quiescent devices to the bus was not affecting communication between other devices, I started experimenting with an initial collision avoidance phase, a single byte device id supporting 254 (plus BROADCAST) unique 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 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 developing the addressing adding to the 1 byte device id and optional 4 bytes id used to identify a group of up to 255 devices or bus, supporting up to 4.294.967.295 buses and a total of 1.090.921.692.930 devices. This addition released in the PJON protocol 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 the PJON library and sharing results on his blog

Let's abstract the data link layer

With Strategies, PJON had finally a way to communicate data agnostically through many different media and to support more than one PJON instance running in the same program. 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 data-link. 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 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 create a PJON network of devices using an internet connection. 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. At the same time the protocol reached is first stable version with the release of the PJON protocol specification v1.0 which added a lot of new features.

Atmel blog reviews PJON in 2016 Atmel in 2016 reviewing PJON on its official blog

Let's make it universal

Implementing the interfaces abstraction, PJON can run and be cross-compiled on different platforms and architectures simply defining a dedicated set of interfaces to system calls. I have developed the RPI interface to support Raspberry Pi, after few weeks Zbigniew Zasieczny developed the WINX86 interface enabling PJON communication on computers running Windows, and soon after, Fred Larsen developed the LINUX interface enabling PJON communication on computers running Linux. Finally, the same codebase running on ATtiny85 can be executed on a real time operative system supporting full interoperability.

Me in 2017 testing SoftwareBitBang operating in spite of AC interference

Distributed field test

Although PJON is licensed "AS IS", the more was applied in the real world, the more I was feeling the responsibility for possible failures. When in 2016 Fred Larsen used PJON and ModuleInterface to handle the life support systems of his hens' house in Norway I started to be preoccupied for those animals and finally aware of the potential consequencies and the risks involved in PJON real world applications, specially if dealing with living beings. If for whatever reason the temperature value transmitted was corrupted by interference or because of a bug, the hens could have ended up frozen or roasted. The conception of this possibility has pushed me to study deeper the implementation and make better software. The hens are alive and no failures have been recorded.

Fred's hen Fred's "The Boss" hen in 2018, his life support systems are handled by PJON and ModuleInterface since 2016

Compatible devices

ATtiny85

PJON - ATtiny85 compatible

ATtiny84/84A

PJON - ATtiny84/84A 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

Teensy

PJON - Teensy compatible

Arduino Due

PJON - Arduino Due compatible

Bluepill STM32

PJON - Bluepill STM32F103 compatible

ESP8266

PJON - ESP8266 compatible

Node MCU

PJON - NodeMCU compatible

ESP32

PJON - ESP32 compatible

Raspberry Pi

PJON - Raspberry Pi compatible

LINUX

PJON - LINUX compatible

WINX86

PJON - WINX86 compatible

Mac OS X

PJON - Apple MACOSX compatible

Embedded systems connected

PJON® is the first open-source network protocol able to be executed on virtually every computer or microcontroller and to transmit data through every sort of communication protocol or physical medium, such as wires (PJDL, Ethernet TCP/UDP, Serial and RS485), radio (ASK, FSK, OOK, LoRa and WiFi) and light pulses (PJDLS). It 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 build a network of devices.

GET PJON

The PJON protocol handbook

This is the first publication about PJON, it contains the documentation, the specification, many application examples and troubleshooting techniques. The book is made in Italy and within its 216 pages the whole PJON network protocol stack and its strategies are accurately described with graphs and color pictures. If you are interested in the PJON protocol and you would like a printed copy, pre-order an early version personally signed by Giovanni Blu Mitolo filling in the form below: