Raspberry PI3(树莓派)第一课:Tomcat+pi4j远程控制led

来源:互联网 发布:程序员专用显示器 编辑:程序博客网 时间:2024/06/05 03:27
第一次写博客,写的不好,希望大家见谅啊!

      本人是大三程序猿一枚,java方向。最近自学完Android,闲来无事突然又想搞搞树莓派,所以就入手了一个最新的Raspberry Pi3。关于树莓派的解释请自行百度,我这里就不介绍了,直接开始。

    首先去Pi4J的官网http://pi4j.com/download.html 下载 jar包。然后下载Tomcat服务器,我用的是Tomcat 7,如果用的是Raspbian 系统,直接解压应该就可以了。可以进入tomcat的bin目录下执行./startup.sh看一下是否能正常启动。

   led灯的线路连接,直接复制pi4j的。

   

  完成以上步骤后,建立一个web项目,将pi4j的jar导入。首先我先建立了ServletContextListener,因为可以从pi4j的示例代码中看出来GpioController是单例的,所以在web应用启动的时候就创建一个唯一的GpioController,这一点是从web集成Spring学来的。

下面是GPIOListener的代码:

package com.joke.listener;import javax.servlet.ServletContextEvent;import javax.servlet.ServletContextListener;import javax.servlet.annotation.WebListener;import com.pi4j.io.gpio.GpioController;import com.pi4j.io.gpio.GpioFactory;import com.pi4j.io.gpio.GpioPinDigitalOutput;import com.pi4j.io.gpio.PinState;import com.pi4j.io.gpio.RaspiPin;/** * Application Lifecycle Listener implementation class GPIOListener * *///@WebListenerpublic class GPIOListener implements ServletContextListener {private GpioController gpio;/** * Default constructor. */public GPIOListener() {// TODO Auto-generated constructor stub}/** * @see ServletContextListener#contextInitialized(ServletContextEvent) */public void contextInitialized(ServletContextEvent arg0) {// TODO Auto-generated method stubSystem.out.println("GpioController init.....");gpio = GpioFactory.getInstance();GpioPinDigitalOutput pin = gpio.provisionDigitalOutputPin(RaspiPin.GPIO_01, "MyLED", PinState.LOW);arg0.getServletContext().setAttribute("pin", pin);arg0.getServletContext().setAttribute("gpio", gpio);}/** * @see ServletContextListener#contextDestroyed(ServletContextEvent) */public void contextDestroyed(ServletContextEvent arg0) {// TODO Auto-generated method stubgpio = null;System.out.println("GpioController destroyed.....");}}

然后建立一个servlet来控制led灯,当用户访问这个servlet使,led灯开始闪烁。

ControlGpioServlet:

package com.joke.servlet;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import com.pi4j.io.gpio.GpioController;import com.pi4j.io.gpio.GpioPinDigitalOutput;/** * Servlet implementation class ControlGpioServlet *///@WebServlet("/ControlGpioServlet")public class ControlGpioServlet extends HttpServlet {private static final long serialVersionUID = 1L;/** * @see HttpServlet#HttpServlet() */public ControlGpioServlet() {super();// TODO Auto-generated constructor stub}/** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse *      response) */protected void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {doPost(request, response);}/** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse *      response) */protected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {GpioController gpio = (GpioController) this.getServletContext().getAttribute("gpio");GpioPinDigitalOutput pin = (GpioPinDigitalOutput) this.getServletContext().getAttribute("pin");System.out.println("GPIO begin start....");System.out.println("after 5 second while shutdown");pin.pulse(5000, true);gpio.shutdown();if (gpio.isShutdown()) {response.sendRedirect("./index.html");} else {response.getWriter().println("Not Shutdown.....");}}}
这样就基本完成啦,是不是非常简单!

 最后注意,tomcat一定要用root用户启动,否则没有权限来驱动GPIO口。

0 0