使用java实现树莓派红绿灯控制

558 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第26天,点击查看活动详情

以前用Python和Go实现了GPIO的操作,现在想通过JAVA来试一下。总体上完成了通过web页面来操作树莓派,作为demo示例来演示下。

需求与设计

需求描述

通过web页面实现对连接树莓派的红绿灯进行控制。

设计

应用端为一个web页面,页面提供两个功能:显示红绿灯的的实时状态、实时控制小灯的开关状态。

服务端提供两个接口:实时状态接口:lightState,负责返回红绿灯的状态;实时控制接口:controlLight,根据参数控制小灯的状态。

1.png

架构图

浏览器:通过web页面展示

ManageServer:提供服务操作红绿灯

2.png

UI原型

三个颜色的小圆对应为红绿灯的3个小灯,亮灯是为相应的颜色,闭灯时为灰色; 3.png

项目

基本介绍:

相关代码已经放在了github上,各位同学可以pull下看一下

项目地址github.com/wangwei5732…

演示效果: 这是效果演示,ui设计的比较简单:

4.gif

部署运行:

1.maven打包项目

5.png

2.将target中的manager-server-0.0.1-SNAPSHOT.jar 拷贝到树莓派

3.执行:

sudo java -jar manager-server-0.0.1-SNAPSHOT.jar

4.访问地址:http://localhost:8888/trafficLight.html

框架

使用框架如下,具体请查看pom.xml

  • Pi4j:

    • **简介:**java I/O API和实现库,用来访问Raspberry Pi 平台的完整功能

    • 官网:pi4j.com/ 6.png

  • spring boot、lombok、fastjson

树莓派配置:

1.安装树莓派系统,并安装jdk11。

2.连接好红绿灯引脚,如下图,注意使用的代码中使用的pi4j使用的是PCM编码:

7.png 8.png

代码结构:

9.png

关键类解释:

Pi4jConfig.java 初始化GPIO操作对象

/**
     * 红绿灯操作bean
     *
     * @return
     */
    @Bean("trafficLightOperator")
    public TrafficLightOperator trafficLightOperator() {
        TrafficLightOperator trafficLightOperator = new TrafficLightOperator();

        trafficLightOperator.lightInputR = pi4j.din().create(R);
        trafficLightOperator.lightOutputR = pi4j.dout().create(R);
        trafficLightOperator.lightOutputY = pi4j.dout().create(Y, "lightOutputY", "lightOutputY");
        trafficLightOperator.lightInputY = pi4j.din().create(Y, "lightInputY", "lightInputY");
        trafficLightOperator.lightOutputG = pi4j.dout().create(G, "lightOutputG", "lightOutputG");
        trafficLightOperator.lightInputG = pi4j.din().create(G, "lightInputG", "lightInputG");
        return trafficLightOperator;
    }

    @Override
    protected String[] getProviders() {
        return new String[]{};
    }
}