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
Navigate; Compile; Execute
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.