一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第26天,点击查看活动详情。
以前用Python和Go实现了GPIO的操作,现在想通过JAVA来试一下。总体上完成了通过web页面来操作树莓派,作为demo示例来演示下。
需求与设计
需求描述
通过web页面实现对连接树莓派的红绿灯进行控制。
设计
应用端为一个web页面,页面提供两个功能:显示红绿灯的的实时状态、实时控制小灯的开关状态。
服务端提供两个接口:实时状态接口:lightState,负责返回红绿灯的状态;实时控制接口:controlLight,根据参数控制小灯的状态。
架构图
浏览器:通过web页面展示
ManageServer:提供服务操作红绿灯
UI原型
三个颜色的小圆对应为红绿灯的3个小灯,亮灯是为相应的颜色,闭灯时为灰色;
项目
基本介绍:
相关代码已经放在了github上,各位同学可以pull下看一下
演示效果: 这是效果演示,ui设计的比较简单:
部署运行:
1.maven打包项目
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/
-
-
spring boot、lombok、fastjson
树莓派配置:
1.安装树莓派系统,并安装jdk11。
2.连接好红绿灯引脚,如下图,注意使用的代码中使用的pi4j使用的是PCM编码:
代码结构:
关键类解释:
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[]{};
}
}