Java servlet和树莓皮IO
我正在尝试学习如何编写简单的servlet来与Raspberry Pi一起使用。 我想通过web控制板I/O。我使用的是Pi4J库,它是WiringPi C库的包装。当我使用它在本地闪烁led时,它会工作,所以我假设我在编写servlet时出错 这是我写的代码:Java servlet和树莓皮IO,java,tomcat,servlets,io,raspberry-pi2,Java,Tomcat,Servlets,Io,Raspberry Pi2,我正在尝试学习如何编写简单的servlet来与Raspberry Pi一起使用。 我想通过web控制板I/O。我使用的是Pi4J库,它是WiringPi C库的包装。当我使用它在本地闪烁led时,它会工作,所以我假设我在编写servlet时出错 这是我写的代码: package com.luca.servlet; import com.pi4j.io.gpio.GpioController; import com.pi4j.io.gpio.GpioFactory; import com.pi4
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>"+
"<p> Choose a color! </p>"+
"<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("<p>the led is red!</p>");
break;
case "green":
togglePin();
greenLed.high();
pw.write("<p>the led is green</p>");
break;
case "blue":
togglePin();
blueLed.high();
pw.write("<p>the led is blue!</p>");
break;
}
}
private void togglePin() {
for (GpioPinDigitalOutput pin : pins)
if (pin.isHigh()) pin.toggle();
}
package com.luca.servlet;
导入com.pi4j.io.gpio.GpioController;
导入com.pi4j.io.gpio.gpio工厂;
导入com.pi4j.io.gpio.gpiopingitaloutput;
导入com.pi4j.io.gpio.RaspiPin;
导入com.pi4j.io.gpio.PinState;
公共类MyServlet扩展了javax.servlet.http.HttpServlet{
私有GpioController gpio=GpioFactory.getInstance();
private gpiopingitaloutput redLed=gpio.provisionDigitalOutputPin(RaspiPin.gpio_23,PinState.LOW);
private gpiopingitaloutput greenLed=gpio.provisionDigitalOutputPin(RaspiPin.gpio_22,PinState.LOW);
私有gpiopingitaloutput blueLed=gpio.provisionDigitalOutputPin(RaspiPin.gpio_21,PinState.LOW);
私有GPIOPIIndigitaLoutput[]引脚=新GPIOPIIndigitaLoutput[]{redLed、greenLed、blueLed};
@凌驾
public void doGet(javax.servlet.http.HttpServletRequest请求,javax.servlet.http.HttpServletResponse响应)抛出java.io.IOException{
java.io.PrintWriter print=response.getWriter();
打印。写入(““+
“选择一种颜色!”+
""+
""+
""+
""+
""+
""+
""+
""+
""+
"");
}
public void doPost(javax.servlet.http.HttpServletRequest请求,javax.servlet.http.HttpServletResponse响应)抛出java.io.IOException{
java.io.PrintWriter pw=response.getWriter();
String act=request.getParameter(“按钮”);
开关(act){
案例“红色”:
togglePin();
红色。高();
pw.写入(“led为红色!”;
打破
案例“绿色”:
togglePin();
绿色。高();
pw.写入(“led为绿色””;
打破
案例“蓝色”:
togglePin();
蓝色。高();
pw.写入(“led为蓝色!”);
打破
}
}
私有void togglePin(){
用于(GPIOPIIndigitaLoutput引脚:引脚)
if(pin.isHigh())pin.toggle();
}
它编译得很好,我在tomcat中手动部署了它,并使用部署描述符和其他所有工具。
但当我连接时,它告诉我资源不可用。
如果我删除与GPIO相关的代码,它就可以正常工作
有人能帮我一下吗?谷歌搜索似乎没有什么帮助你需要设置一个Url模式,以便访问你的servlet方法,如POST和GET 例如,使用:
@WebServlet("/raspberryServelt")
public class MyServlet extends javax.servlet.http.HttpServlet {
...
然后访问执行POST或GET请求的servlet方法
例如,进行一次访问:
本地主机:8080/yourWebAppName/raspberryServelt
将工作…您必须在项目中放置路径WEB-INF/lib中的pi4j库当tomcat启动时,您是否看到日志?启动时可能有一些错误…。当我使用它在本地闪烁led时,它工作”-这确切地说是什么意思?当您从客户端Java应用程序测试库时,它工作(使用公共静态void main())?这听起来好像你没有加载GPIO代码所在的库。这个链接指向Ubuntu,但它可能会为你指明正确的方向。从catalina.log发布输出将帮助我们诊断这个问题。@DaveH是的,这很正确!我忘了在lib文件夹中添加Pi4J JAR。如果它能与GPIO代码一起工作,那真是愚蠢:D删除,这不太可能是映射问题吗?我将servlet映射到web.xml文件中。这不是映射问题