Boot Spring und PI4J

  • 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:

    Ich nutze als LIB den PI4J Snapshot1.3, welche ich lokal installiert habe.

    Siehe diese dazu die dependencies in meiner POM:

    Danke und viele Grüße

  • Meine Java-Zeiten sind länger her als der Siegeszug von Spring Boot. Aber augenscheinlich liegt da dein Problem. Benutz das PI4J ohne spring Boot, und wenn das geht, hast du deinen Schuldigen.

  • Hey @__deets__ ,

    danke für deine Antwort.

    Das habe ich mal Ausprobiert, leider der gleiche Fehler.

  • Na dann bleibt mir auch nicht mehr als auf den Hinweis in dem Traceback zu zeigen. Das scheint ein Problem des Paketes (vermutlich in Konjunktion mit deiner Java-Version oder so) zu sein. Wuerde ich mal in einem spezialisierteren Forum (also eben dem Projekt selbst zB) um Hilfe bitten. Denn aus Erfahrung kann ich sagen: hier ist Python, bash, C/C++ Expertise versammelt. Java auf dem Pi betreiben wenige Leute. Das mag keinen triftigen Grund haben (mir fiele keiner ein), entspricht aber hier der Realitaet.

  • Hallo zusammen,

    ich habe das Problem gefunden nach etwas längerer suche gefunden.

    Die PI4J Lib unterstützt nur bis JAVA 8, ab JAVA 9 funktioniert die I2C Schnittstelle nicht mehr.
    Ich habe eben das Spring Boot und die IDE mit JAVA 8 gebaut und siehe da es funktioniert.

    Siehe Logausgaben zum oben geposteten Code:

    Code
    <------ Start GPIO ---------->
    <------ create MCP23017 provider ---------->
    <------ Init Pins ---------->
    <------ GPIO_B0 State:LOW ---------->
    <------ GPIO_B1 State:LOW ---------->
    <------ GPIO_B2 State:LOW ---------->

    Vielen Dank fürs lesen :)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!