Get PJON

The following list contains all PJON releases.
If you want to partecipate to the development of PJON visit our github repository.

CHANGELOG

  • The src directory now contains all the source code
  • SimpleSwitch, Switch, Router, DynamicRouter, InteractiveRouter and VirtualBusRouter classes added to handle switching and transparent routing for tree topologies by fredilarsen
  • Any strategy added including virtual inheritance and supporting strategy dynamic handling after instantiation and dynamic collections of PJON objects using different strategies by fredilarsen
  • ThroughLoRa documentation added by Matheus-Garbelini
  • SoftwareBitBang mode 2 and 3 are more reliable and more easily applied on limited micontrollers
  • SoftwareBitBang ATMega1284P support by fabpolli
  • SoftwareBitBang examples with 2 instances now use pins of different port groups to avoid cross-talk
  • OverSampling examples with 2 instances now use pins of different port groups to avoid cross-talk
  • PJONMaster with check_slaves_presence method can discard ids of slaves that are unreachable
  • PJONMaster and PJONSlave addressing documentation added
  • ThroughSerial WINX86 example building process simplified
  • Packet id parameter added to send_packet_blocking
  • The error callback parameter data type has been changed from uint8_t to uint16_t to contain all possible packet lengths and a pointer to a custom function has been added to ease integration.

BUGFIX

  • ATtiny85 PJON_IO_PIN_TO_BIT bugfix (6f55069)
  • Many compiler warnings removed
  • Fix to WINX86 Serial interface (5c58e94) reported by sigmaeo

BUGFIX

  • PJONMaster ensure rid uniqueness on `PJON_ID_REFRESH` request (0188e8a)
  • PJONSlave `aquire_id_multimaster` bugfix (3443bc5)
  • ThroughSerial failed reception type bugfix (1a5b436)
  • ThroughSerial bytestuffing bugfix (ae58366) reported by Galitskiy
  • Fixed millis in WINX86 and LINUX interfaces (7a3fa29) by fredilarsen
  • Fixed 9 minor compiler warnings

CHANGELOG

BUGFIX

  • WINX86 interface byte redefinition error bugfix (#151) reported by gonnavis
  • LINUX interface byte redefinition fix (8b604da)
  • EthernetUdp.h inclusion error fix reported by ibantxo
  • Dynamic addressing PJON_NOT_ASSIGNED bugfix (#152) reported by maxidroms83
  • Removed packet state snooping from examples, using update call result instead

CHANGELOG

  • SoftwareBitBang ATtiny84 compatibility added
  • SoftwareBitBang ATtiny84A compatibility added
  • SoftwareBitBang Digispark ATtiny85 USB board compatiblity assessed by dontsovcmc
  • Added donation links

BUGFIX

  • PlatformIO fix broken manifest by ivankravets
  • send_packet_blocking function bugfix (c749139)

CHANGELOG

  • PJON protocol specification v2.0
  • PJON Acknowledge v1.0
  • PJON Dynamic addressing v1.0
  • PJDL v2.0 - PJDLR v2.0 - PJDLS v1.0 - TSDL v1.0
  • Frame separation feature has been added to each data link or strategy to higher reliability and avoid a set of vulnerabilities. Frame separation is obtained, in some cases, like in TSDL or PJDLS using byte-stuffing, in others like PJDL or PJDLR using a unique low level binary symbol
  • An additional CRC8 has been added after the length to avoid the length corruption vulnerability, that is affecting CAN and many other alternatives, providing with higher reliability at the cost of 1 byte of overhead
  • CRC8 0x8c polynomial used in 1-Wire and PJON older versions has been changed with 0x97, this polynomial has the largest possible length (119 bit) at which HD=4 can be achieved with 8-bit CRC, offering higher reliability on longer strings
  • CRC32 is automatically applied if packet length exceeds 15 bytes, packets requesting CRC8 longer than 15 bytes are considered unacceptable to by default higher reliability and avoid a set of vulnerabilities
  • More accurate header consistency check
  • WINX86 support and examples to EthernetTCP, LocalUDP and GlobalUDP enabling PJON to run over the internet on windows computers by fredilarsen
  • LINUX support and examples to EthernetTCP, LocalUDP and GlobalUDP enabling PJON to run over the internet on linux computers by fredilarsen
  • ESP8266 support and examples to GlobalUDP by fredilarsen
  • send_from_id added id parameter to support async ack packet routing
  • OverSampling, AnalogSampling and SoftwareBitBang communication mode names switched to numeric constants, see related specifications
  • ThroughSerial HC-12 wireless module compatibility and related examples added
  • ThroughSerial RS485 related examples added
  • SoftwareBitBang RecursiveAcknowledge example added using the recursive acknowledgment pattern
  • SoftwareBitBang PacketSeparationTest example added able to test frame separation accuracy

BUGFIX

  • Fix uninitialized response by Girgitt (b0d2711)
  • receive length check bugfix (e1b97e2)
  • PJONMaster RID condition bugfix (0f1d265)
  • receive acknowledge condition bugfix (92dcdcd)
  • Avoid async ack response if router (18a5857)

CHANGELOG

  • With AnalogSampling is now possible to communicate wirelessly or through single channel optic fiber cables up to 12658Bd or 1.52kB/s using a single LED for both transmission and reception phases, enabling users to create a wireless bus using only one analog pin and a cheap light emitting diode for each device. The range if used wirelessly is around 5 meters in ideal conditions, much more if used with optic fiber cables
  • Examples are now structured as following: architecture/mode/data-link/example or ARDUINO/local/SoftwareBitBang/Blink
  • devices directory has been added to propose a space where users can share their PJON compatible builds and propose basic implementation examples
  • Early version of the LEDAR proximity sensor device added to devices directory
  • Added dispatched method to avoid async ack response duplications in buffer (58c4672)
  • Reduced CPU load for WINX86 interface using ThroughSerial thanks to Girgitt (bfe935c)
  • RS485 pin handling for separate RX/TX enable thanks to ekarlso
  • Added a "timing hack" only for RPI to force flush method to wait for transmission and so enable the nominal use of RS485 transceivers; wiringPi flush method seems broken, not waiting for transmission end, thanks for testing to ekarlso (30b94d8)

BUGFIX

  • Removed useless buffer and condition from PJON begin method sparing some bytes of memory
  • Fix delay call in begin of AnalogSampling, OverSampling and SoftwareBitBang, using interface
  • RPI example bugfix, added missing timeout configuration (e8ab099)

CHANGELOG

  • PJON now supports Windows laptops / desktop computers (for now working only with the ThroughSerial strategy) thanks to the WINX86 interface, proposed and developed by Girgitt
  • WINX86 examples directory added
  • Raspberry Pi examples directory added
  • Documentation, specification and README enhancement

BUGFIX

  • Send packet using its original header and not the actual header configuration (d072ced)

CHANGELOG

  • PJON protocol specification v1.1
  • PJDL data-link specification v1.1
  • PJDLR data-link specification v1.1
  • Interfaces abstraction added to support cross-compilation and ease portability
  • Raspberry Pi now compatibile with ThroughSerial strategy see wiki example
  • receive_byte has been changed to receive_string to support both a single byte or a byte stream reception, eliminating the need of internal buffers in strategies and reducing program memory. Proposed and implemented by fredilarsen
  • CRC32 enforced if packet length > 15 bytes (including overhead) to by default higher reliability
  • Added unacceptable or conflicting header configuration handling
  • In case of PJON_CONNECTION_LOST error data contains the id of the packet see error handling
  • Added send_from_id to enable the most basic form of routing or tunneling. Proposed and implemented by fredilarsen
  • Extender example added by fredilarsen

BUGFIX

  • In case of CRC error, NAK is not transmitted to avoid third-party exchange disruption if the data-link used does not support strong consistency
  • Attempts counter bugfix repeated async ack packet (4ecc754)
  • Avoid resend packet with asynchronous acknowledge if synchronous acknowledge is requested and received, wait until timeout and in case throw error (0bfb888)
  • Fixed a lot of compilation errors on linux to support Raspberry Pi

CHANGELOG

  • SoftwareBitBang Arduino Mega and Leonardo timing optimization in mode SWBB_FAST (0a1c77e)
  • Now 65534 max packets supported in buffer (65fc82f)
  • Many small changes to ease portability, avoid compilation errors and warnings
  • Fix to documentation titles and links to be better viewed through readthedocs thanks to zcattacz

BUGFIX

  • Enable ThroughSerial configuration constants predefinitions (dacdd63)
  • Avoid loosing pointer to packet if repeated sending + async ack (ddfd2c1)

CHANGELOG

  • State machine optimization -200 bytes program memory (954152e)
  • Back-off now property of strategies to more efficiently handle retransmissions
  • AnalogSampling strategy added able to communicate wirelessly with LEDs, lasers and photodiodes.
  • Memory footprint optimization excluding unused strategies by 4ib3r (b5e6f34)
  • OverSampling long range half-duplex communication (#91)
  • ATtiny85 external 16MHz SoftwareBitBang compatibility (c3a77c8)
  • ATmega1280/2560 and ATmega16/32U4 OverSampling compatibility (9507cfc)
  • PJON_ prefix added to constants and types to avoid naming collision with third-party codebases
  • digitalWriteFast renamed in PJON_IO to avoid collision with older or different versions
  • Documentation updated and expanded

BUGFIX

  • Avoid ATtiny EthernetTCP/LocalUDP inclusion error
  • ESP8266 min/max bugfix by fredilarsen
  • NodeMCU compilation error (61e7ffd)
  • send_repeatedly async_ack no error bugfix (f573f99)
  • ATmega8 pin handling bugfix (ee2a21c)
  • keyword file bugfix by pantonvich (fad8c23)

CHANGELOG

  • SoftwareBitBang, thanks to optimizations made in older versions, is able now to run OVERDRIVE mode on ATmega328 at 4.87kB/s (mandatory update for all devices transmitting in this mode with older versions because timing is changed)
  • ThroughSerial optimized default configuration and can_start method, thanks for the support and extended tests over RS485 to franketto (italian arduino forum user).
  • General documentation extended including method's return values
  • Recursive acknowledgment pattern specification enhanced with graphs (fb0b161)
  • OverSampling, SoftwareBitBang and ThroughSerial documentation and codebase comments extended

BUGFIX

  • Asynchronous backoff bugfix (d08a1ec)
  • Added missing mode configuration in SIMPLEX mode examples (#104) thanks to pacproduct
  • Avoid PJONMaster reset if not receiver or error defined (#106) thanks to elusive-code

CHANGELOG

  • PJON acknowledge specification fixed v0.1
  • PJON recursive acknowledgment pattern implemented
  • Asynchronous acknowledge implementation (459cb81) and example
  • Backoff change to transmit less times and with a more distributed pattern (attemps ^ 4) (305d6c1)
  • Full extended header definition and support (29d9ac7)
  • Optional ordered sending (459cb81)
  • Configurable random seed pin with its setter (27ac427)
  • Device id is used as a part of the random seed if present (8697169)

BUGFIX

  • Keep busy jittering wave bugfix (964a27a)
  • Fixed EthernetLink ESP8266 compilation error (c107c46) by fredilarsen
  • Transmission bit transition slope bugfix (120b2c7), it reduces the need of pull down resistor and it generally higher transmission accuracy. Update suggested.

CHANGELOG

  • PJON protocol specification released v1.0
  • PJON acknowledge specification released v0.1
  • PJON is a trademark
  • Added optional 2 bytes length supporting up to 65535 bytes
  • Added optional CRC32
  • Added optional 2 bytes header
  • Updated documentation stored in documentation directory
  • SoftwareBitBang change to handle latency / CRC computation time
  • SoftwareBitBang specification update

BUGFIX

  • Fix to EthernetTCP and LocalUDP inclusion and typecast
  • ThroughSerial complete Stream abstraction and correct inclusion
  • OverSampling can_start bugfix

CHANGELOG

  • PJON dynamic addressing specification released v0.1
  • Master-slave and multi-master dynamic addressing features added in PJONMaster and PJONSlave classes to preserve PJON class low memory footprint
  • EthernetTCP strategy added. Multiple devices with Ethernet ports can use PJON to communicate with each other on a LAN, WAN or across the Internet. Proposed and developed by fredilarsen
  • LocalUDP strategy added. Multiple devices with Ethernet ports can use PJON to communicate with each other on a local subnet, wired or over WiFi or both. Proposed and developed by fredilarsen
  • EthernetTCP and LocalUDP have to be included before PJON.h or pull master for automatic inclusion
  • Extended documentation in .md files rather than in wiki

BUGFIX

  • Removed useless SoftwareSerial inclusion in ThroughSerial

CHANGELOG

  • ThroughSerial strategy able to leverage of the Software and Hardware Serial port
  • Added RS485 tx enable pin handling in ThroughSerial (71e59a)
  • receive function optimization (fd97d23)
  • Header driven sending, not configuration driven (6a8cdf9)
  • Extended documentation in .md files rather than in wiki

BUGFIX

CHANGELOG

  • PJON Protocol layer specification released v0.1 - v0.2 - v0.3
  • Padded jittering data link layer specification released v0.1
  • Complete data link layer abstraction. Now a strategy includes configuration and communication pin setter, i.e. bus.strategy.set_pin(12) and the send_string method to ease other strategies creation or extension (why not an Ethernet strategy?)
  • Packet sending optimization. From PJON v5.0 the packet is composed, and its CRC calculated, once, when dispatched. The PJON_Packet buffer has been simplified and the packet's additional info saved in the content attribute with the information
  • Documentation in README to avoid duplication
  • Dropped pow now using value * value to reduce memory footprint
  • Definitions moved in PJONDefines.h
  • Optimized execution timing optimization reduces the need of a pull-down resistor for OverSampling and SoftwareBitBang strategy, in many cases also a complex bus can run without it
  • Methods in alphabetic order

BUGFIX

  • info_overhead function definition bugfix
  • acquire_id experimental functionality removed

CHANGELOG

  • pre-allocated buffers to reduce memory usage, avoid fragmentation and finally drop malloc(). With this change, the default PJON codebase will need more memory than the previous releases, but can be tuned to fit the requirements. To reduce the memory consumption simply pre-define MAX_PACKETS and PACKET_MAX_LENGTH constants to fit your needs before PJON.h inclusion. For example if your device transmits up to one packet, you can limit MAX_PACKETS to 1

BUGFIX

  • info_overhead function definition bugfix
  • acquire_id experimental functionality removed

BUGFIX

  • can_start bugfix in ThroughHardwareSerial (1c8b71a) by DanRoad
  • Useless flush dropped in ThroughHardwareSerial (72cbfde)
  • Now agnostic header bits configuration (3266cf3) by fredilarsen
  • Wrong length in receiver function bugfix (1b594d2) by fredilarsen
  • Fix path to examples in platformio manifest file ivankravets

CHANGELOG

  • Switch to strategy.method call, 5% memory footprint reduction
  • ThroughHardwareSerial Strategy added
  • Added ThroughHardwareSerial examples

CHANGELOG

  • Shared medium functionality completion / optimization
  • Packet header added enabling configurable setup by fredilarsen
  • Packet metainfo added to receiver parameters by fredilarsen
  • reply method to be used in the receiver function by fredilarsen

BUGFIX

  • SimpleModbusMasterV2 incompatibility thanks to 4ib3r
  • Packet index 0 bugfix by shacal
  • Forcing SIMPLEX in OverSamplingSimplex by eiannone

CHANGELOG

  • Optional 4 bytes bus id to enable shared medium (512f290)
  • Local and Network bus functionality
  • 2 pin compatibility for both OverSampling and SoftwareBitBang
  • Complete physical layer abstraction from PJON.h
  • Router functionality
  • Configurable syncronous acknowledge behaviour
  • Extended Examples covering also OverSampling strategy

BUGFIX

  • OverSampling SendAndReceive example bugfix (f5299a1)

CHANGELOG

  • PJON physical layer abstraction with the use of Strategies
  • PJON is now a template class able to receive a strategy type
  • PJON_ASK integrated in PJON with the OverSampling strategy
  • 1 or 2 pin communication for twisted pair or radio transceivers
  • PJON physical layer abstracted in SoftwareBitBang strategy
  • Arduino Leonardo / Micro compatibility added
  • Teensy (MK20DX256) compatibility added by sticilface
  • Updated examples, documentation and readme
  • digitalWriteFast refactoring
  • SendAndReceive example added

CHANGELOG

  • Switch to Apache 2.0 license
  • Added CRC 8-bit table-less implementation (c22a144)
  • Multi-master auto-addressing and its examples (experimental)
  • begin method added (91c3844)
  • Arduino Zero OVERDRIVE mode timing by EsbenSoeltoft
  • ATtiny 45/85 8Mhz timing optimization (28d5a1d)
  • Switch from network to bus instance name
  • Removed useless send_bit

BUGFIX

  • Backoff bugfix (ed6c899)
  • Single byte 0 sending fail bug fixed (#59)
  • micros overflow sensitive conditions bugfix
  • update bugfix (e75689e)
  • digitalWriteFast library moved to source directory
  • 1 Second duration in all the examples to avoid ESP8266 reset

CHANGELOG

  • Variable type standardization to ease porting
  • New Timing structure to ease porting, see Timing.h
  • Arduino Zero porting (c59fa8f) by EsbenSoeltoft
  • pullDownFast cross-architecture by EsbenSoeltoft

BUGFIX

  • can_start bugfix now reading 10 bits (6ceb2cb)
  • read_byte bugfix (d2679d5)
  • Infinite collision bugfix (#43)

CHANGELOG

  • ESP8266 compatibility (d2212bb) by 240974a
  • ESP8266 example watchdog error bug fix (0f0cc84)
  • ESP8266 networkAnalysis examples (67374eb)
  • Platformio library manifest (c9bf567) by valeros
  • ESP8266 interfacing wiki page

CHANGELOG

  • ATtiny45/85 full compatibility
  • ATmega1280/2560 compatibility
  • Added complete BSD-3 License
  • Communication speed optimization
  • Memory related errors added
  • set_id method (ba9c5db)
  • get_id method thanks to S_te (de10e60)
  • Readme update

BUGFIX

  • receive(duration) bugfix (c29bedf)
  • Blink example bugfix by Shachar (45bbdab)
  • micros() overflow proof conditions (17a9069)
  • Not defined _receive bugfix (de10e60)
  • receive() bugfix by TeeTrizZz (2548e3c) see (#24)
  • Big packets bugfix by TeeTrizZz (90b025c) (#26)

CHANGELOG

  • First release of PJON communications bus system

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

ESP8266

PJON - ESP8266 compatible

Arduino Due

PJON - Arduino Due compatible

Node MCU

PJON - NodeMCU compatible

Teensy

PJON - Teensy compatible

Raspberry Pi

PJON - Raspberry Pi compatible

LINUX

PJON - LINUX compatible

WINX86

PJON - WINX86 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