I am trying to use the GPIO pins
on the Raspberry Pi
. Currently I am using ProcessBuilder
to execute the commands. However, whenever I run it it always says:
Exception in thread "main" java.io.IOException: Cannot run program "echo 18 > /sys/class/gpio/export": error=2, No such file or directory
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1041)
at Testing.initiate(Testing.java:32)
at Testing.main(Testing.java:8)
Caused by: java.io.IOException: error=2, No such file or directory
at java.lang.UNIXProcess.forkAndExec(Native Method)
at java.lang.UNIXProcess.<init>(UNIXProcess.java:135)
at java.lang.ProcessImpl.start(ProcessImpl.java:130)
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1022)
... 2 more
Here is the code I am using:
ProcessBuilder pb = new ProcessBuilder("echo " + gpiopin + " > /sys/class/gpio/export");
ProcessBuilder pb1 = new ProcessBuilder("echo out > /sys/class/gpio/gpio" + gpiopin + "/direction");
ProcessBuilder pb2 = new ProcessBuilder("echo 1 > /sys/class/gpio/gpio" + gpiopin + "/value");
pb.redirectErrorStream(true);
pb1.redirectErrorStream(true);
pb2.redirectErrorStream(true);
Process ps = pb.start();
Process ps1 = pb1.start();
Process ps2 = pb2.start();
Why is this happening? Also, if there is a better way of doing this how?
Thanks
Edit: Seems like there are no more errors, but the commands are not running. Could someone please look at my code to make sure i'm not being stupid?
import java.util.Scanner;
public class Testing {
public static void main(String[] args) throws Exception {
Scanner scan = new Scanner(System.in);
initiate(18);
while(true) {
String input = scan.nextLine();
if(input.equals("on")) {
System.out.println("on");
bellOn();
}else if(input.equals("off")) {
System.out.println("off");
bellOff();
}
}
}
static int gpio = 18;
static String gp = "" + gpio;
static boolean initiated = false;
public static boolean initiate(int gpiopin) throws Exception {
gpio = gpiopin;
ProcessBuilder pb = new ProcessBuilder("echo", gp, ">", "/sys/class/gpio/export");
ProcessBuilder pb1 = new ProcessBuilder("echo", "out", ">", "/sys/class/gpio/gpio" + gp + "/direction");
//ProcessBuilder pb2 = new ProcessBuilder("echo", "1", ">", "/sys/class/gpio/gpio" + gpiopin + "/value");
pb.redirectErrorStream(true);
pb1.redirectErrorStream(true);
//pb2.redirectErrorStream(true);
Process ps = pb.start();
Process ps1 = pb1.start();
//Process ps2 = pb2.start();
initiated = true;
return true;
}
public static boolean bellOn() throws Exception {
if(initiated != true) {
return false;
}else{
ProcessBuilder pb = new ProcessBuilder("echo", "0", ">", "/sys/class/gpio/gpio" + gp + "/value");
pb.redirectErrorStream(true);
Process ps = pb.start();
return true;
}
}
public static boolean bellOff() throws Exception {
if(initiated != true) {
return false;
}else{
ProcessBuilder pb = new ProcessBuilder("echo", "1", ">", "/sys/class/gpio/gpio" + gp + "/value");
pb.redirectErrorStream(true);
Process ps = pb.start();
return true;
}
}
}