menu home
 
  Derniers projets :

•   Serveur mail Postfix/Dovecot sur Raspberry Pi sous Raspbian

•   Circuit vidéo anti-Macrovision / Macrovision remover

•   Indicateur de niveau d'humidité de la terre pour plante

•   Récupération consommation EDF via Raspberry Pi

•   Station Météo avec Raspberry Pi

•   ...

[ Voir la suite ... ]    

 
  Derniers projets :

•   Manipuler les GPIO d'un RaspberryPi sous Raspbian en Java

•   Programme pour le convertisseur impulsions téléphoniques en signal DTMF pour téléphone à cadran

•   ...

[ Voir la suite ... ]    

 
  •   Cathode Corner
 
•   Kosbo
 
•   Semageek
 
 
a propos
 
contact
 
  categorie
  Manipuler les GPIO d'un RaspberryPi sous Raspbian en Java
  > Java
img avancement
Commencé le 08/04/2017 à 22:25  


Voici un code pour manipuler les sorties GPIO d'un RaspberryPi sous Raspbian en Java.
Si vous n'avez modifié les droits sur les fichiers de ports GPIO, vous devrez appeler votre application Java avec sudo.

C'est un code sans grande prétention que je me suis fait juste pour manipuler les GPIO facilement sans avoir à installer autre chose que Java.
Je l'ai fait juste pour moi à la base, je me suis dit que ça pourrait servir également à d'autres.

GPIOTools.java
package fr.jlr.raspberrypi.gpio;

import java.io.File;
import java.io.FileInputStream;
import java.io.PrintWriter;

import org.apache.commons.io.IOUtils;

import fr.jlr.raspberrypi.RaspPiPin;

public class GPIOTools {
 
  public boolean init(RaspPiPin pin, GPIODirection direction){
    return this.init(pin, direction, false, false);
  }
 
  public boolean init(RaspPiPin pin, GPIODirection direction, boolean value){
    return this.init(pin, direction, false, value);
  }
 
  public boolean init(RaspPiPin pin, GPIODirection direction, boolean activeLow, boolean value){
    boolean gpioInitialise = false;
    try{
      if ( pin != null && direction != null ){
        if ( pin.getIdGPIO() > 0 ){
          File fileExport = new File("/sys/class/gpio/export");
          if ( fileExport.exists() ){
            if ( fileExport.canWrite() ){
              PrintWriter writerExport = new PrintWriter(fileExport);
              writerExport.print(pin.getIdGPIO() + "");
              writerExport.close();
            }
           
            File dossierGPIO = new File("/sys/class/gpio/gpio" + pin.getIdGPIO());
            if ( dossierGPIO.exists() ){
              if ( dossierGPIO.isDirectory() ){
                if ( this.setDirection(pin, direction) ){
                  if ( this.setActiveLow(pin, activeLow) ){
                    if ( this.setValue(pin, value) ){
                      gpioInitialise = true;
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
    catch(Exception e){
      e.printStackTrace();
    }
    return gpioInitialise;
  }
 
  public boolean setDirection(RaspPiPin pin, GPIODirection direction){
    boolean result = false;
    try{
      if ( pin != null && direction != null ){
        if ( pin.getIdGPIO() > 0 ){
          File fileDirection = new File("/sys/class/gpio/gpio" + pin.getIdGPIO() + "/direction");
          if ( fileDirection.exists() ){
            PrintWriter writerDirection = new PrintWriter(fileDirection);
            writerDirection.print(direction.toString());
            writerDirection.close();
               
            result = true;
          }
        }
      }
    }
    catch(Exception e){
      e.printStackTrace();
    }
    return result;
  }
 
  public boolean setActiveLow(RaspPiPin pin, boolean activeLow){
    boolean result = false;
    try{
      if ( pin != null ){
        if ( pin.getIdGPIO() > 0 ){
          File fileActiveLow = new File("/sys/class/gpio/gpio" + pin.getIdGPIO() + "/active_low");
          if ( fileActiveLow.exists() ){
            PrintWriter writerActiveLow = new PrintWriter(fileActiveLow);
            if ( activeLow ){
              writerActiveLow.print("1");
            }
            else{
              writerActiveLow.print("0");
            }
            writerActiveLow.close();
           
            result = true;
          }
        }
      }
    }
    catch(Exception e){
      e.printStackTrace();
    }
    return result;
  }
 
  public boolean setValue(RaspPiPin pin, boolean value){
    boolean result = false;
    try{
      if ( pin != null ){
        if ( pin.getIdGPIO() > 0 ){
          File fileValue = new File("/sys/class/gpio/gpio" + pin.getIdGPIO() + "/value");
          if ( fileValue.exists() ){
            PrintWriter writerActiveLow = new PrintWriter(fileValue);
            if ( value ){
              writerActiveLow.print("1");
            }
            else{
              writerActiveLow.print("0");
            }
            writerActiveLow.close();
           
            result = true;
          }
        }
      }
    }
    catch(Exception e){
      e.printStackTrace();
    }
      return result;
  }
 
  public boolean getValueBoolean(RaspPiPin pin){
    boolean value = false;
    try{
      Integer valueInteger = this.getValueInteger(pin);
      if ( valueInteger != null ){
        if ( valueInteger == 1 ){
          value = true;
        }
      }
    }
    catch(Exception e){
      e.printStackTrace();
    }
    return value;
  }
 
  public Integer getValueInteger(RaspPiPin pin){
    Integer value = null;
    try{
      if ( pin != null ){
        if ( pin.getIdGPIO() > 0 ){
          File fileValue = new File("/sys/class/gpio/gpio" + pin.getIdGPIO() + "/value");
          if ( fileValue.exists() ){
            FileInputStream inputStream = new FileInputStream(fileValue);
            value = Integer.parseInt(IOUtils.toString(inputStream).trim());
          }
        }
      }
    }
    catch(Exception e){
      e.printStackTrace();
    }
    return value;
  }
 
  public boolean closeGPIO(RaspPiPin pin){
    boolean gpioFerme = false;
    try{
      if ( pin != null ){
        if ( pin.getIdGPIO() > 0 ){
          File fileUnexport = new File("/sys/class/gpio/unexport");
          if ( fileUnexport.exists() ){
            if ( fileUnexport.canWrite() ){
              PrintWriter writerUnexport = new PrintWriter(fileUnexport);
              writerUnexport.print(pin.getIdGPIO() + "");
              writerUnexport.close();
             
              gpioFerme = true;
            }
          }
        }
      }
    }
    catch(Exception e){
      e.printStackTrace();
    }
    return gpioFerme;
  }
}




RaspPiPin.java
package fr.jlr.raspberrypi;

public enum RaspPiPin {
 GPIO_2(2),
 GPIO_3(3),
 GPIO_4(4),
 GPIO_5(5),
 GPIO_6(6),
 GPIO_7(7),
 GPIO_8(8),
 GPIO_9(9),
 GPIO_10(10),
 GPIO_11(11),
 GPIO_12(12),
 GPIO_13(13),
 GPIO_14(14),
 GPIO_15(15),
 GPIO_16(16),
 GPIO_17(17),
 GPIO_18(18),
 GPIO_19(19),
 GPIO_20(20),
 GPIO_21(21),
 GPIO_22(22),
 GPIO_23(23),
 GPIO_24(24),
 GPIO_25(25),
 GPIO_26(26),
 GPIO_27(27);
 
 private int idGPIO;
 
 private RaspPiPin(int idGPIO){
  this.idGPIO = idGPIO;
 }

 public int getIdGPIO() {
  return idGPIO;
 }

 public void setIdGPIO(int idGPIO) {
  this.idGPIO = idGPIO;
 }
}



GPIODirection.java
package fr.jlr.raspberrypi.gpio;

public enum GPIODirection {
 in,
 out;
}






Exemples d'utilisation:
GPIOTools gpioTools = new GPIOTools();

// Input
gpioTools.init(RaspPiPin.GPIO_17, GPIODirection.in); // Init port 17 en entrée
System.out.println(gpioTools.getValueInteger(RaspPiPin.GPIO_17)); // Retourne 1 ou 0 ou null
System.out.println(gpioTools.getValueBoolean(RaspPiPin.GPIO_17)); // Retourne true ou false

// Output
gpioTools.init(RaspPiPin.GPIO_23, GPIODirection.in, false, true); // Init port 23 en sortie avec sortie à 1
gpioTools.setValue(RaspPiPin.GPIO_23, false); // Sortie à 0


    Aucun commentaire
Commencé le 08/04/2017 à 22:25  

Nom:  
E-Mail:  
Site Web:  

 
Vérification:  
 
Recopiez les lettres/chiffres et donnez le résultat du calcul :
captcha


 


JLR's Blog   |   Programmation et design: JLR   |   Version 2.0   |   Généré en 0.02 seconde(s)