Java auf Raspberry Pi

Ja kann man musst du ändern. Ich hoffe du hast die LED auch an den Anschluß wie im link
Kommt immer der Fehler
[main] INFO com.pi4j.Pi4J - New auto context [main] INFO com.pi4j.Pi4J - New context builder [main] INFO com.pi4j.platform.impl.DefaultRuntimePlatforms - adding platform to managed platform map [id=raspberrypi; name=RaspberryPi Platform; priority=5; class=com.pi4j.plugin.raspberrypi.platform.RaspberryPiPlatform] Exception in thread "main" com.pi4j.provider.exception.ProviderNotFoundException: Pi4J provider [pigpio-digital-output] could not be found. Please include this 'provider' JAR in the classpath. at com.pi4j.provider.impl.DefaultRuntimeProviders.get(DefaultRuntimeProviders.java:238) at com.pi4j.provider.impl.DefaultProviders.get(DefaultProviders.java:147) at com.pi4j.provider.Providers.get(Providers.java:253) at com.pi4j.context.Context.create(Context.java:316) at com.pi4j.internal.IOCreator.create(IOCreator.java:58) at com.pi4j.internal.IOCreator.create(IOCreator.java:96) at com.pi4j.internal.IOCreator.create(IOCreator.java:176) at neu.Gpio.main(Gpio.java:35)

Wie gesagt, bei der Version 1.4 und deren Examples ging es immer.

Hier nochmal der Code den ich jetzt habe:
Java:
package neu;

import com.pi4j.Pi4J;

import com.pi4j.io.gpio.digital.DigitalOutput;
import com.pi4j.io.gpio.digital.DigitalState;
import com.pi4j.io.gpio.digital.PullResistance;
import com.pi4j.util.Console;
import com.pi4j.Pi4J;
import com.pi4j.io.IOType;
import com.pi4j.io.gpio.digital.DigitalOutput;
import com.pi4j.io.gpio.digital.DigitalOutputConfig;
import com.pi4j.io.gpio.digital.DigitalOutputProvider;
import com.pi4j.io.gpio.digital.DigitalStateChangeListener;
import com.pi4j.platform.Platform;

import java.util.concurrent.TimeUnit;


public class Gpio{

 
    public static final int PIN_LED = 18;

    public static void main(String[] args) throws InterruptedException {
        var pi4j = Pi4J.newAutoContext();
        var ledConfig = DigitalOutput.newConfigBuilder(pi4j)
                  .id("led")
                  .name("LED Flasher")
                  .address(PIN_LED)
                  .shutdown(DigitalState.LOW)
                  .initial(DigitalState.LOW)
                  .provider("pigpio-digital-output");
                  
            var led = pi4j.create(ledConfig);
            
            
            int pressCount = 0;     
            while (pressCount < 5) {
                  if (led.equals(DigitalState.HIGH)) {
                       led.low();
                  } else {
                       led.high();
                  }
                  Thread.sleep(500 / (pressCount + 1));
            }
                  pi4j.shutdown();
    
}}

Aber habe den GPIO BCM 18 statt 22.
 
Benutze doch mal das Projekt von github was im link verlinkt ist.
Und baue es auch so auf mit den Anschlüssen wenn du keinen Button hast tuen es ja auch zwei Drähte. Für den test.
 
com.pi4j.provider.exception.ProviderNotFoundException: Pi4J provider [pigpio-digital-output] could not be found. Please include this 'provider' JAR in the classpath.

Das sollte dir zu denken geben.
 
Vermutlich fehlen in der Pom Abhängigkeiten - schon in #61 wurde das aber klar gesagt. Daher wundert es mich wirklich sehr, dass man sich hier so extrem im Kreis dreht.

Aber es ist nicht nur de pom wichtig sondern auch die Frage: Was genau machst Du eigentlich?
Denn eine gute Möglichkeit ist auch, dass ein jar gebaut wird ohne Abhängigkeiten und dann nur das jar File kopiert wurde.. Aber das Thema hatten wir doch auch in diesem Therad doch auch schon meine ich.
 
Also hier nochmal die pom.xml
XML:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>neu</groupId>
  <artifactId>neu</artifactId>
  <version>0.0.1-SNAPSHOT</version>
 
 
      <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-pigpio</artifactId>
        <version>${pi4j.version}</version>
    </dependency>
</dependencies>
 
 
 


 <properties>
  <slf4j.version>1.7.32</slf4j.version>
    <pi4j.version>2.0</pi4j.version>
        <main.class>neu.Gpio</main.class>
        <java.version>17</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>${java.version}</maven.compiler.source>
        <maven.compiler.target>${java.version}</maven.compiler.target>

        <!-- plugin versions -->
        <maven.compiler.version>3.8.1</maven.compiler.version>
        <maven.jar.version>2.1</maven.jar.version>
        <maven.shade.version>3.2.4</maven.shade.version>
    </properties>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>${maven.compiler.version}</version>
                <configuration>
                    <release>${java.version}</release>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>${maven.jar.version}</version>
                <configuration>
                    <archive>
                        <manifest>
                            <mainClass>${main.class}</mainClass>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>${maven.shade.version}</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

        </plugins>
        
      
        
    </build>
 
 
 
 
</project>

Der dependency Abschnitt steht steht auch auf der oben verlinkten Seite.
Und als Anhang die gebaute .jar Datei.
 

Anhänge

OK, das Problem dürfte sein, dass Du zwei Plugins verwendest. Das sollte sich mit einer Konfiguration des shade-Plugins im POM beheben lassen. Oben in der XML müsstest Du dazu nach Zeile 95 (also innerhalb des plugin-Deklaration aber nach den executions) einfügen
XML:
            <configuration>
              <transformers>
                <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
              </transformers>
            </configuration>

Zum Hintergrund: Java bietet eine relativ einfache Möglichkeit für Plugins. Für diesen Zweck definiert die zu erweiternde Anwendung ein sog. Service Provider Interface, das vom Plugin implementiert werden muss. Das Plugin legt unter META-INF/services eine Datei mit dem vollqualifizierten Namen des Interface ab und trägt dort die Klasse ein, die das Interface implementiert. Problem ist jetzt: Du hast zwei Plugins in zwei JARs und damit zweimal die selbe Datei -> beim Zusammenfügen gewinnt eine, die andere ist weg. Der oben definierte Transformer des shade-Plugins soll dafür sorgen, dass die Dateien zusammengeführt werden.
 
Ja, aus Sicht von Maven ist das einfach eine zusätzliche Abhängigkeit: es sind einfach JARs, die dazugenommen werden. Aus Sicht von PI4J sind das Plugins. Bei plugins würde man im POM die Maven-Plugins angeben.
 

Zurück
Oben