Skip to content

Pi4J v3.0.2 GpioD: "No gpio chip yet initialized!" on Tinker Board 3S despite /dev/gpiochip0 available #14

Description

@maythitsarzaw

Hi,

I'm using Pi4J v3.0.2 on a Tinker Board 3S (Debian 11, 64-bit, kernel 5.10.209) with Java 21. My app configures GPIO using GpioDDigitalInputProvider and GpioDDigitalOutputProvider, targeting /dev/gpiochip0.

However, I get this error:
Exception in thread "main" java.lang.IllegalStateException: No gpio chip yet initialized!

Despite this, sudo gpiodetect lists all gpiochips correctly (gpiochip0–gpiochip5) and gpioinfo confirms 32 available lines on gpiochip0.

Logs show:
[main] WARN com.pi4j.library.gpiod.internal.GpioDContext - Can't initialize GpioD context, board model is unknown

Any suggestions to initialize GpioD?

package org.example;

import com.pi4j.Pi4J;
import com.pi4j.boardinfo.util.BoardInfoHelper;
import com.pi4j.context.Context;
import com.pi4j.io.gpio.digital.DigitalInput;
import com.pi4j.io.gpio.digital.DigitalOutput;
import com.pi4j.plugin.gpiod.GpioDPlugin;
import com.pi4j.plugin.gpiod.provider.gpio.digital.GpioDDigitalInputProvider;
import com.pi4j.plugin.gpiod.provider.gpio.digital.GpioDDigitalOutputProvider;
import com.pi4j.boardinfo.util.BoardInfoHelper;

public class GpioTest{
private static final int PIN_BUTTON = 23;
private static final int PIN_LED = 24;
private static int pressCount = 0;

public static void main(String[] args) throws InterruptedException {

    System.setProperty("pi4j.gpio.provider.gpiod.chip", "/dev/gpiochip0");
    System.out.println("Forcing chip: "+System.getProperty("pi4j.gpio.provider.gpiod.chip"));

    Context pi4j = Pi4J.newContextBuilder()
            .noAutoDetect()
            .add(GpioDDigitalInputProvider.newInstance())
            .add(GpioDDigitalOutputProvider.newInstance())
            .build();

    var ledConfig = DigitalOutput.newConfigBuilder(pi4j)
            .id("led")
            .name("LED output")
            .address(PIN_LED)
            .provider("gpiod-digital-output")
            .build();

    var led = pi4j.create(ledConfig);

    var buttonConfig = DigitalInput.newConfigBuilder(pi4j)
            .id("button")
            .name("Button")
            .address(PIN_BUTTON)
            .provider("gpiod-digital-input")
            .build();

    var button = pi4j.create(buttonConfig);

    button.addListener(e->{
        System.out.println("Button pressed "+pressCount+" times.");
    });

    while(pressCount < 5){
        led.toggle();
        System.out.println("LED is "+(led.isOn() ? "ON" : "OFF"));
        Thread.sleep(500/(pressCount+1));
    }
   pi4j.shutdown();
}

}


4.0.0

<groupId>org.example</groupId>
<artifactId>May</artifactId>
<name>Pi4J :: MINIMAL EXAMPLE :: Sample minimal project</name>
<description>Pi4J Sample Code</description>
<version>0.0.1</version>

<!-- BUILD PROPERTIES -->
<properties>
    <maven.compiler.source>21</maven.compiler.source>
    <maven.compiler.target>21</maven.compiler.target>
    <exec-maven-plugin.version>3.4.1</exec-maven-plugin.version>
    <maven-compiler-plugin.version>3.13.0</maven-compiler-plugin.version>
    <slf4j.version>2.0.16</slf4j.version>
    <pi4j.version>3.0.2</pi4j.version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>${slf4j.version}</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-simple</artifactId>
        <version>${slf4j.version}</version>
    </dependency>

    <!-- include Pi4J Core -->
    <dependency>
        <groupId>com.pi4j</groupId>
        <artifactId>pi4j-core</artifactId>
        <version>${pi4j.version}</version>
    </dependency>

    <!-- include Pi4J Plugins (Platforms and I/O Providers) -->
    <dependency>
        <groupId>com.pi4j</groupId>
        <artifactId>pi4j-plugin-raspberrypi</artifactId>
        <version>${pi4j.version}</version>
    </dependency>
    <dependency>
        <groupId>com.pi4j</groupId>
        <artifactId>pi4j-plugin-gpiod</artifactId>
        <version>${pi4j.version}</version>
    </dependency>

</dependencies>
Thanks!

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions