Hallo zusammen,
ich habe in den letzten Tagen ein bisschen mit dem Raspi und Boot Spring herumexperimentiert.
Die Nutzung der PI4J Lib funktionierte bei einfachen Sachen sehr gut. Jedoch habe ich nun ein Problem wenn ich explizit den MCP23017 nutzen möchte um Relais etc. über den I2C Bus zu steuern.
Einzelne Pins in einem Projekt vorher anzusprechen funktionierte.
Über Tipps wäre ich sehr Dankbar.
Als IDE Nutze ich Intellij und baue mit Maven das Jar-File zusammen.
Hier die Infos:
I2C ist freigeschaltet
sudo i2cdetect -y 1
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- 27 -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
Ich bekomme folgende Fehlermeldung wenn ich den MCP23017 provider erstellen möchte:
JVM running for 19.744)
<------ Start GPIO ---------->
<------ create MCP23017 provider ---------->
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by com.pi4j.io.file.LinuxFile (jar:file:/home/pi/Downloads/RelaisSteuerungBackend-0.0.4-SNAPSHOT.jar!/BOOT-INF/lib/pi4j-core-1 .3-SNAPSHOT.jar!/) to field java.nio.Buffer.address
WARNING: Please consider reporting this to the maintainers of com.pi4j.io.file.LinuxFile
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
Exception in thread "main" java.lang.reflect.InvocationTargetException
at http://java.base/jdk.internal.r…sorImpl.invoke0(Native Method)
at http://java.base/jdk.internal.r…orImpl.java:62)
at http://java.base/jdk.internal.r…orImpl.java:43)
at http://java.base/java.lang.refl…ethod.java:566)
at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:49)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:107)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:58)
at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:88)
Caused by: java.lang.NoClassDefFoundError: sun/misc/SharedSecrets
at com.pi4j.io.file.LinuxFile.getFileDescriptor(LinuxFile.java:215)
at com.pi4j.io.file.LinuxFile.ioctl(LinuxFile.java:103)
at com.pi4j.io.i2c.impl.I2CBusImpl.selectBusSlave(I2CBusImpl.java:291)
at com.pi4j.io.i2c.impl.I2CBusImpl.runBusLockedDeviceAction(I2CBusImpl.java:258)
at com.pi4j.io.i2c.impl.I2CBusImpl.readByte(I2CBusImpl.java:153)
at com.pi4j.io.i2c.impl.I2CDeviceImpl.read(I2CDeviceImpl.java:205)
at com.pi4j.gpio.extension.mcp.MCP23017GpioProvider.<init>(MCP23017GpioProvider.java:129)
at com.pi4j.gpio.extension.mcp.MCP23017GpioProvider.<init>(MCP23017GpioProvider.java:113)
at com.pi4j.gpio.extension.mcp.MCP23017GpioProvider.<init>(MCP23017GpioProvider.java:108)
at com.example.RelaisSteuerungBackend.controller.InitGpios.initGpioPins(InitGpios.java:23)
at com.example.RelaisSteuerungBackend.RelaisSteuerungBackendApplication.main(RelaisSteuerungBackendApplication.java:18)
... 8 more
Caused by: java.lang.ClassNotFoundException: sun.misc.SharedSecrets
at http://java.base/java.net.URLCl…oader.java:471)
at http://java.base/java.lang.Clas…oader.java:589)
at org.springframework.boot.loader.LaunchedURLClassLoader.loadClass(LaunchedURLClassLoader.java:151)
at http://java.base/java.lang.Clas…oader.java:522)
... 19 more
Hier mein Code:
package com.example.RelaisSteuerungBackend.controller;
import com.pi4j.gpio.extension.mcp.MCP23017GpioProvider;
import com.pi4j.gpio.extension.mcp.MCP23017Pin;
import com.pi4j.io.gpio.*;
import com.pi4j.io.gpio.GpioController;
import com.pi4j.io.i2c.I2CBus;
import com.pi4j.io.i2c.I2CFactory;
import java.io.IOException;
public class InitGpios {
public static void initGpioPins() throws IOException, I2CFactory.UnsupportedBusNumberException {
System.out.println("<------ Start GPIO ---------->");
// create gpio controller
final GpioController gpio = GpioFactory.getInstance();
System.out.println("<------ create MCP23017 provider ---------->");
// create custom MCP23017 GPIO provider
final MCP23017GpioProvider provider = new MCP23017GpioProvider(I2CBus.BUS_1, 0x27);
System.out.println("<------ Init Pins ---------->");
GpioPinDigitalOutput pinB1 = gpio.provisionDigitalOutputPin(provider, MCP23017Pin.GPIO_B0, PinState.LOW);
System.out.println("<------ GPIO_B0 State:" + pinB1.getState().toString() + " ---------->");
GpioPinDigitalOutput pinB2 = gpio.provisionDigitalOutputPin(provider, MCP23017Pin.GPIO_B1, PinState.LOW);
System.out.println("<------ GPIO_B1 State:" + pinB2.getState().toString() + " ---------->");
GpioPinDigitalOutput pinB3 = gpio.provisionDigitalOutputPin(provider, MCP23017Pin.GPIO_B2, PinState.LOW);
System.out.println("<------ GPIO_B2 State:" + pinB3.getState().toString() + " ---------->");
}
}
Alles anzeigen
Ich nutze als LIB den PI4J Snapshot1.3, welche ich lokal installiert habe.
Siehe diese dazu die dependencies in meiner POM:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.pi4j</groupId>
<artifactId>pi4j-core</artifactId>
<version>1.3-SNAPSHOT</version>
<scope>system</scope>
<systemPath>${basedir}/lib/pi4j-1.3-SNAPSHOT/pi4j-core.jar</systemPath>
</dependency>
<dependency>
<groupId>com.pi4j</groupId>
<artifactId>pi4j-device</artifactId>
<version>1.3-SNAPSHOT</version>
<scope>system</scope>
<systemPath>${basedir}/lib/pi4j-1.3-SNAPSHOT/pi4j-device.jar</systemPath>
</dependency>
<dependency>
<groupId>com.pi4j</groupId>
<artifactId>pi4j-gpio-extension</artifactId>
<version>1.3-SNAPSHOT</version>
<scope>system</scope>
<systemPath>${basedir}/lib/pi4j-1.3-SNAPSHOT/pi4j-gpio-extension.jar</systemPath>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration><includeSystemScope>true</includeSystemScope></configuration>
</plugin>
</plugins>
</build>
Alles anzeigen
Danke und viele Grüße