Ik probeer te leren hoe ik eenvoudige servlets moet schrijven voor gebruik met een Raspberry Pi. Ik wil de I/O van het bord via web beheren. Ik gebruik de Pi4J-bibliotheek die een wrapper is voor de WiringPi C-bibliotheek. Het werkt wanneer ik het gebruik om een led lokaal te laten knipperen, dus ik neem aan dat ik iets verkeerd doe mijn servlet coderen.
Dit is de code die ik schreef:
package com.luca.servlet;
import com.pi4j.io.gpio.GpioController;
import com.pi4j.io.gpio.GpioFactory;
import com.pi4j.io.gpio.GpioPinDigitalOutput;
import com.pi4j.io.gpio.RaspiPin;
import com.pi4j.io.gpio.PinState;
public class MyServlet extends javax.servlet.http.HttpServlet {
private GpioController gpio=GpioFactory.getInstance();
private GpioPinDigitalOutput redLed=gpio.provisionDigitalOutputPin(RaspiPin.GPIO_23,PinState.LOW);
private GpioPinDigitalOutput greenLed=gpio.provisionDigitalOutputPin(RaspiPin.GPIO_22,PinState.LOW);
private GpioPinDigitalOutput blueLed=gpio.provisionDigitalOutputPin(RaspiPin.GPIO_21,PinState.LOW);
private GpioPinDigitalOutput[] pins=new GpioPinDigitalOutput[]{redLed,greenLed,blueLed};
@Override
public void doGet(javax.servlet.http.HttpServletRequest request,javax.servlet.http.HttpServletResponse response) throws java.io.IOException {
java.io.PrintWriter print=response.getWriter();
print.write("<body>"+
" Choose a color!
"+
"<form action=\"first\" method=\"POST\">"+
"<input type=\"submit\" name=\"button\" value=\"red\"/>"+
"</form>"+
"<form action=\"first\" method=\"POST\">"+
"<input type=\"submit\" name=\"button\" value=\"green\"/>"+
"</form>"+
"<form action=\"first\" method=\"POST\">"+
"<input type=\"submit\" name=\"button\" value=\"blue\"/>"+
"</form>"+
"</body>");
}
public void doPost(javax.servlet.http.HttpServletRequest request,javax.servlet.http.HttpServletResponse response) throws java.io.IOException {
java.io.PrintWriter pw=response.getWriter();
String act=request.getParameter("button");
switch(act) {
case "red":
togglePin();
redLed.high();
pw.write("the led is red!
");
break;
case "green":
togglePin();
greenLed.high();
pw.write("the led is green
");
break;
case "blue":
togglePin();
blueLed.high();
pw.write("the led is blue!
");
break;
}
}
private void togglePin() {
for (GpioPinDigitalOutput pin : pins)
if (pin.isHigh()) pin.toggle();
}
het compileert prima en ik gebruik het handmatig in tomcat, met de inzetdescriptor en alles. Maar wanneer ik verbinding maak, zegt het me dat de bron niet beschikbaar is. Als ik de GPIO-gerelateerde code verwijder, werkt het prima.