PJON 12.0 – Networking freedom for hackers, makers and experimenters
github.com
github.com
In the case of global addressing, don’t we already have an open and free protocol in the form of IPv6? Some quick googling found LWIP which provides an IPv6 stack in “tens of kB” which seems comparable to PJON’s “4kB to 8kB” but maybe that size difference really is important?
LWIP project: https://savannah.nongnu.org/projects/lwip/
"The PJON protocol v3.1 in local mode supports connectivity for up to 254 devices, in shared mode supports connectivity for up to 4.294.967.295 buses (groups of devices) and up to 1.090.921.692.930 devices."
That means 32 bits for the bus id, and 8 bits for the device id.
Another interesting side-effect of the address-space scheme and the dynamic meta-data inclusion in the packet is the overhead:
"It supports interoperability between systems that use a different configuration and provides with high efficiency including only the protocol's features used and the overhead effectively required (5-22 bytes)"
In terms of minimum requirements PJON is uncomparable to IPv4 or IPV6 needing only in the most limited configuration: 1 IO pin, 16MHz clock frequency, 4144 bytes of program memory and 46 bytes of RAM
With 32 bits of global addressing space, is that for routing, or more to avoid address collisions when two networks are joined in an ad-how way?
I noticed the PJON bus-ID assignment process and it seems a bit like MAC vendor ID assignment, so I’m guessing the latter?
I don’t have much experience in this space, but it feels like it would be useful if the bus-addressing could be optionally extended to incorporate IP addressing and routing infrastructure. Perhaps IP to PJON bridging is already very easy?
here: https://www.pjon.org/get-bus-id.php we distribute bus ids for free, for everyone who could need it.
I have never thought about the bridging strategy you propose, yes effectively it may not be hugely complicated :) if you would like to share your idea with other users feel free to open an issue here: https://github.com/gioblu/PJON/issues
It could easily cross the Internet as well but in that case I would recommend using site-to-site VPN commections for security as the PJON traffic is not encrypted (encryption is a little too heavy when running on limited devices like Arduino).
I have shared my PJON-based automation library here for those interested: https://github.com/fredilarsen/ModuleInterface
This seems like it would be very compelling, especially for small scale stuff. Being able to wire something as small as an ATiny85 into a computer and communicate over a relatively high-level protocol would be very useful for interfacing with sensors and other peripherals.
I wonder how difficult it would be to adapt something like USBtiny[0] build an adapter. For potentially a few $ worth of parts, you could connect to all kinds of nifty embedded peripherals, albeit at relatively slow speeds. One obvious use case that comes to mind would be controlling lights / sensors / fans etc. in custom computer builds.
This is for talking to things like lightbulbs with some US$0.50 CPU inside. It's for really low end devices. It's best for idempotent operations that can be requested repeatedly without harm and are timeout-tolerant.
[1] https://github.com/gioblu/PJON/blob/master/specification/PJO...
Also, the ACK implementation depends on the strategy (physical media type), and it is not a single bit but a single byte, and it seems to me to be robust. I am sure the creator, gioblu, has some more comments about this.
> ... during development its scope and features have been extended to cover use cases where IP is generally applied
I understand the point is having minimal requirements, but how do you interoperate w/ IP?
There are also strategies for TCP and UDP based communication, essentially using the same packet structure but sending them as TCP or UDP over a LAN or WAN. These strategies need the Ethernet library, and use more memory.
Still, the memory requirement is small enough to run a router with two PJON objects with the strategies SoftwareBitBang and DualUDP on an Arduino Nano with a W5500 Ethernet shield. This allows easy traversal between different physical media, and IP-based communication, also with PJON-based software running on a Windows or Linux computer.