The Pi4J Project

Java I/O library for the Raspberry Pi

Link to the Site: The Pi4J Project

Compatibility with the Compute Module

Pin Numbering - Raspberry Pi Compute Module (CM3+, CM3+ Lite)

Installation

Pi4J Installation
The simplest method to install Pi4J on your RaspberryPi is to execute the following command directly on your RaspberryPi.

curl -sSL https://pi4j.com/install | sudo bash
cd /opt/pi4j/examples
javac -classpath .:classes:/opt/pi4j/lib/'*' -d . ControlGpioExample.java
sudo java -classpath .:classes:/opt/pi4j/lib/'*' ControlGpioExample

Known Issues

With the example ComputeModuleGpioExample.java
See the example in /opt/pi4j/examples

cd /opt/pi4j/examples
javac -classpath .:classes:/opt/pi4j/lib/'*' -d . ComputeModuleGpioExample.java
sudo java -classpath .:classes:/opt/pi4j/lib/'*' ComputeModuleGpioExample
pi@raspberrypi:/opt/pi4j/examples $ sudo java -classpath .:classes:/opt/pi4j/lib/'*' ComputeModuleGpioExample
<--Pi4J--> GPIO Compute Module Example ... started.
Exception in thread "main" com.pi4j.io.gpio.exception.InvalidPinException: Invalid pin exception; this pin [GPIO 32] is not supported by GPIO provider [RaspberryPi GPIO Provider]
        at com.pi4j.io.gpio.GpioProviderBase.export(GpioProviderBase.java:111)
        at com.pi4j.io.gpio.WiringPiGpioProviderBase.export(WiringPiGpioProviderBase.java:90)
        at com.pi4j.io.gpio.impl.GpioPinImpl.export(GpioPinImpl.java:158)
        at com.pi4j.io.gpio.impl.GpioControllerImpl.provisionPin(GpioControllerImpl.java:566)
        at com.pi4j.io.gpio.impl.GpioControllerImpl.provisionPin(GpioControllerImpl.java:539)
        at com.pi4j.io.gpio.impl.GpioControllerImpl.provisionDigitalInputPin(GpioControllerImpl.java:640)
        at com.pi4j.io.gpio.impl.GpioControllerImpl.provisionDigitalInputPin(GpioControllerImpl.java:668)
        at com.pi4j.io.gpio.impl.GpioControllerImpl.provisionDigitalInputPin(GpioControllerImpl.java:662)
        at com.pi4j.io.gpio.impl.GpioControllerImpl.provisionDigitalInputPin(GpioControllerImpl.java:685)
        at ComputeModuleGpioExample.main(ComputeModuleGpioExample.java:95)
pi@raspberrypi:/opt/pi4j/examples $

Solved in Github by Issue #334

The InvalidPinException could be resolved by using Broadcom GPIO numbers instead:

GpioFactory.setDefaultProvider(new RaspiGpioProvider(RaspiPinNumberingScheme.BROADCOM_PIN_NUMBERING));
        // provision gpio input pins with its internal pull down resistor enabled
        GpioFactory.setDefaultProvider(new RaspiGpioProvider(RaspiPinNumberingScheme.BROADCOM_PIN_NUMBERING));
        GpioPinDigitalInput[] pins = {
                gpio.provisionDigitalInputPin(RCMPin.GPIO_00, PinPullResistance.PULL_DOWN),
                gpio.provisionDigitalInputPin(RCMPin.GPIO_01, PinPullResistance.PULL_DOWN),
pi@raspberrypi:/opt/pi4j/examples $ sudo java -classpath .:classes:/opt/pi4j/lib/'*' ComputeModuleGpioExample  <--Pi4J--> GPIO Compute Module Example ... started.
 ... complete the any GPIO circuit (00 - 45) and see the listener feedback here in the console.
^Cpi@raspberrypi:/opt/pi4j/examples $


The 'Unable to open GPIO direction interface for pin' error most likely results from the GPIO already being in use. Try commenting out the affected line and then compile and run the program again.

<--Pi4J--> GPIO Compute Module Example ... started.
Exception in thread "main" java.lang.RuntimeException: Unable to open GPIO direction interface for pin [8]: No such file or directory

        at com.pi4j.wiringpi.GpioUtil.export(Native Method)
        at com.pi4j.io.gpio.WiringPiGpioProviderBase.export(WiringPiGpioProviderBase.java:108)
        at com.pi4j.io.gpio.impl.GpioPinImpl.export(GpioPinImpl.java:158)
        at com.pi4j.io.gpio.impl.GpioControllerImpl.provisionPin(GpioControllerImpl.java:566)
        at com.pi4j.io.gpio.impl.GpioControllerImpl.provisionPin(GpioControllerImpl.java:539)
        at com.pi4j.io.gpio.impl.GpioControllerImpl.provisionDigitalInputPin(GpioControllerImpl.java:640)
        at com.pi4j.io.gpio.impl.GpioControllerImpl.provisionDigitalInputPin(GpioControllerImpl.java:668)
        at com.pi4j.io.gpio.impl.GpioControllerImpl.provisionDigitalInputPin(GpioControllerImpl.java:662)
        at com.pi4j.io.gpio.impl.GpioControllerImpl.provisionDigitalInputPin(GpioControllerImpl.java:685)
        at ComputeModuleGpioExample.main(ComputeModuleGpioExample.java:71)


If you are not able to access the GPIOs of the Pi-Tron/CM3+, try updating the wiringpi library to a version which is equal to or greater than version 2.52.

pi@raspberrypi:~ $ gpio -v
gpio version: 2.60
Copyright (c) 2012-2018 Gordon Henderson
This is free software with ABSOLUTELY NO WARRANTY.
For details type: gpio -warranty

Raspberry Pi Details:
  Type: CM3+, Revision: 00, Memory: 1024MB, Maker: Sony
  * Device tree is enabled.
  * --> Raspberry Pi Compute Module 3 Plus Rev 1.0
  * This Raspberry Pi supports user-level GPIO access.