Link Search Menu Expand Document

Release History


  • Devices
    • Complete MAX30102
    • Tidy up ADS112C04
    • Tidy up IMU devices
    • ST7735 / ST7789 displays
    • Stepper motors
    • MFRC522 cleanup and testing, in particular write operations
    • SHT40 High-Accuracy, Ultra-Low-Power, 16-bit Relative Humidity and Temperature Sensor
    • TMP117 High-Accuracy, Low-Power, Digital Temperature Sensor
    • Waveshare 7.5” e-ink display
  • Refactor / cleanup
    • Tidy up sampleapps with sub-packages as per diozero core (api, devices, motor, util, sbc, …)
    • Optimise GpioExpander when used for Software PWM output on multiple pins. Currently GpioExpander.setValues() will be invoked multiple times, once per pin, whereas a single call for multiple pins should be used instead. MultiplexedSoftwarePwmOutput?
    • Refactor DeviceFactory interfaces to use a default registration method and Supplier #132
  • SPI support for Arduino devices over Firmata
  • Introduce PrimitiveDevice and Device interfaces / classes (“.api” and “.device” packages respectively)
  • Ensure that all devices (“.devices” package) use composition rather then inheritance of PrimitiveDevice (“.api” package), i.e. LED, LDR, etc.
  • A device registry to provide info on all available PrimitiveDevices. Use the existing DeviceStates class for info on provisioned state
  • Additional interfaces representing generic physical behaviour, e.g. movement, acceleration, similar to existing MotorInterface, BarometerInterface, etc.
    • Simplify MmapGpio implementation classes by extracting common behaviour into a base class
    • Add GPIO iomux mode mapping information in the board def file (in the list of supported device modes, e.g. PWM_OUTPUT(2)?)
    • Create common MmapGpioInterface sample app

1.4.1 (In progress)

  • MICS6814 CO/NH3/NO2 gas sensor
  • ServoTrim constructors
  • Bug fix to SSD1351


  • Boards
    • Remove the need to add board provider classes - have a generic one that works off the detected System on a Chip (SoC)
    • Use uname -m / lscpu for board detection (LocalSystemInfo)
  • General
    • Reduce duplication of code in device / pin factory (PR #133)
    • #135 only call LocalSystemInfo when really necessary
    • #136 corrected defaults for servo SG90
  • Raspberry Pi 5 support


  • Tweaked cross compilation toolchain - switched to podman
  • Orange Pi 3 LTS - untested
  • Support for Rock 4 (Rockchip RK3399 SoC)
  • Allow for mapping automatically detected GPIO chips via the GPIO Chip label (Pi 3B) - #121
  • Bug fix to HD44780 LCDs connected via GPIO expansion boards (e.g. PCF8574) - #116
  • Docs build fix (updated the JTD branch)
  • Don’t initialise MCP23x17 pins to 0 - #88
  • Extracted common LcdInterface (thank you EAGrahamJr)
  • Improved accuracy of software PWM - required for servo control
  • Removed jitter in Software PWM output (thank you EAGrahamJr)
  • MPU-6050 support (thank you EAGrahamJr)
  • Internal - separated boards from SoC


  • Active high flag in DebouncedDigitalInputDevice (#93)
  • Interface for setting arbitrary GPIO alt functions (#90) - MmapGpioInterface.setModeUnchecked
  • Corrected board definition file for Pi ZeroW2
  • Mock device factory provider
  • Refactor GenericLinuxArmBoardInfo to improve processing of the compatibility file and load DAC info
  • Bug fix to PCA9685.setDutyUs (#97)


  • Ordoid N2+ (thanks to btajuddin)


  • HD44780 cleanup - optimising use of GpioExpander interface plus added option to connect via GPIOs
  • BBB - fix PWM module lookup for all PWM numbers
  • Firmata scheduler support
  • Garmin LIDAR Lite v4
  • VL6180 time of flight sensor
  • Support multiple instances of remote device factories (pigpioJ, Firmata, gRPC)
  • I2C exceptions - throw an UnsupportedOperationException if the returned I2CFuncs indicate that the function isn’t support; remote I/O response aren’t retried
  • DebouncedDigitalInputDevice allows a device factory to be specified.


  • Fully removed dependency on Firmata4j + plus fixes to the built-in implementation
  • Fix for SerialDevice shutdown
  • Pi PWM - support use of PWM kernel module
  • Switch from Apache Commons Math to Hipparchus (ref Hipparchus vs Apache Commons Math)
  • Servo - add as a first-class device type (as supported by PiconZero and Arduino)
  • Added Diozero.getVersion
  • Bug fix to DigitalOutputDevice when active low
  • Support for output shift registers
  • Support for 7-segment displays
  • Added GPIO based LCD connection class
  • Allow other serial connection parameters to be configured in Firmata adapter


  • I2C read-write support with the pigpio provider (JNI and sockets) - pigpioj v2.5.9
  • I2C read-write utility method
  • Introduced diozero.util.Diozero as a more logical place for initialisation and shutdown utilities
  • Replace all of the diozero-remote protocol variants with just gRPC
  • Switch from Firmata4j to the Diozero Firmata implementation (to use the builtin serial library rather than java-native/JSSC)
  • Add getGpioMode(gpio) and getGpioValue(gpio) to NativeDeviceFactoryInterface so that GpioReadAll works without mmap
  • Add remote CPU temperature to NativeDeviceFactoryInterface and gRPC protocol


  • Use of BlockingQueue within GpioChip
  • Support for Orange Pi Zero Plus and Orange Pi One Plus
  • MFRC522 bug fix (#71) - allow antenna gain to be set prior to turning on the antenna
  • Support for BME688
  • Improvements to SGP30
  • Moved DebouncedDigitalInputDevice out of sandpit


  • Docker based build system for system-utils-native
  • Separate libraries for armv6 and armv7
  • DigitalOutputDevice:
    • Renamed setValueUnsafe to just setValue - the unsafe was a legacy from when the class had synchronisation
    • setOn/off no longer calls stopOnOffLoop - it is now the caller’s responsibility to do this
  • MmapIntBuffer.intBuffer is no longer volatile, need to validate with an oscilloscope
  • Use of ThreadLocalRandom rather than Random where possible
  • Added a call to start() when reopening a device factory (#70)
  • Bug-fix to NativeGpioInputDevice when setting pud value - line offset was being used rather than gpio (#70)
  • Added diozero-bom


  • Tweaked mmap for 64-bit systems - map pointer was an int, changed to long
  • mmap int buffer is volatile to ensure main memory is written
  • DigitalOutputDevice on-off loop enhancements courtesy of Greg Flurry
  • gpio chardev cleanup improvements
  • Fixing DiozeroScheduler - pool size of 0 to allow safe shutdown


  • Moved all IMU devices out of diozero-core to diozero-imu-devices to remove dependency on commons-math3 (Quaternion) from diozero-core
  • Removed deprecated methods in DigitalInputDevice and MmapIntBuffer and the deprecated class WaitableDigitalInputDevice
  • Added BoardPinInfo getByPhysicalPin()
  • Added AnalogOutputDevice
  • Switched to non-daemon threads
  • Changed DiozeroScheduler to only create a single (scheduled) thread pool - the cached thread pool was blocking the JVM from terminating for 60 seconds
  • Improvements to DigitalOutputDevice on-off loops


  • Tweaks to native library cross compilation
  • #68 bug-fix for I2C on 64-bit systems
  • Fix to SystemInformation coloured output with Jansi on armv6


  • Shutdown logic moved to DeviceFactoryHelper.shutdown
  • Deprecated WaitableDigitalInputDevice and moved waitable logic up to AbstractDigitalInputDevice
  • New Debounced DigitalInputDevice added to api.sandpit
  • Added Builder to Button
  • Use mmap (if available) when getting / setting GPIO values using built-in sysfs
  • Ensure all nano timestamp values use CLOCK_MONOTONIC rather than CLOCK_REALTIME


  • Fixed system-utils-native library for aarch64
  • Added PWM setFrequency operation
  • Detect RPi400 and CM4


  • Added operation to allow AutoCloseable interfaces to be automatically invoked on shutdown


  • Refactored the way that GPIO devices are provisioned internally - all now use PinInfo rather than a GPIO number
  • DigitalInputDevices allow activeHigh to be overridden
  • Fix for Raspberry Pi Zero W - now loads the correct boarddefs file, rather than the generic Raspberry Pi one
  • Bugix for PwmOutputDevice cleanup


  • Bugfix for BME280 humidity reads - config registers need to be written to in the correct order
  • Enhancements to ADS112C04 - support for input multiplexer configuration (differential reads)
  • Renamed util.Event to util.EventLock
  • Preview / sandpit introduction of a new generic FIFO event queue


  • Bugfix release - fix for I2C retry logic
  • GPIO event Epoch time is calculated from nano time


  • Bugfix release - fixes to GPIO
  • I2C retries


  • Changed whenPressed / whenReleased to receive nano time rather than epoch time


  • Changed whenPressed / whenReleased to receive epoch time; removed readBlocked, minReadChars and readTimeout from SerialDevice constructors


  • Minor bug fix to support Raspberry Pi 1 Model B
  • Introduce readFully method for serial devices to read specified number of bytes before returning


  • Refactored package hierarchy to clearly distinguish between devices, API and SPI
  • Documentation update - moved from readthedocs to GitHub pages


  • Serial devices
  • gpiod character device incorporated
  • Renamed the “sysfs” internal provider to built-in


  • Upgrade dependencies, minor bug fixes


  • Bug fix release - ws281x LED strips and analog input on BBB


  • New devices: BH1750 luminosity sensor, SSD1331 96x64 & SSD1351 128x128 65k colour OLEDs.
  • Moved classes in com.diozero to com.diozero.devices.
  • Changed the SPI interface from ByteBuffer to byte array.
  • Added support for Particle Photon using the VoodooSpark Firmware.
  • Flexible APIs for remotely accessing devices over a variety of protocols.
  • Optimised GPIO input interrupt handling.
  • Updated rpi_ws281x library.
  • Experimental support for 433MHz receivers.
  • I2C detect capability.


  • Firmata I2C.
  • Improvements to MFRC522.
  • SDL Joystick JNI wrapper library.
  • MFRC522 fully supported (finally).
  • Added support for MCP EEPROMs.
  • I2C SMBus implementation in the internal sysfs provider.


  • Native support for I2C and SPI in the sysfs provider.
  • Support for CHIP, BeagleBone Black and ASUS Tinker Board.
  • Moved sysfs provider into diozero-core, use as the default provider.
  • Preliminary support for devices that support the Firmata protocol (i.e. Arduino).


  • Added Analog Output device support (added for the PCF8591).
  • Introduced Java based sysfs and jpi providers. Bug fix to I2CLcd.
  • Added support for BME280.


  • Support for non-register based I2C device read / write.


  • Stability improvements.


  • Testing improvements.


  • Bug fixes, experimental servo support.


  • API change - analogue to analog.


  • First tagged release.