DioZero使用指南 #
一、DioZero概述 #
1.1 DioZero简介 #
DioZero是一个高性能的Java设备I/O库,提供了丰富的设备驱动和简洁的API。
1.2 添加依赖 #
xml
<dependency>
<groupId>uk.pigpioj</groupId>
<artifactId>diozero-core</artifactId>
<version>1.3.5</version>
</dependency>
二、GPIO操作 #
2.1 数字输出 #
java
package com.example.diozero;
import com.diozero.api.DigitalOutputDevice;
import com.diozero.util.SleepUtil;
public class DigitalOutputExample {
public static void main(String[] args) {
try (DigitalOutputDevice led = new DigitalOutputDevice(17)) {
System.out.println("LED闪烁");
for (int i = 0; i < 10; i++) {
led.on();
SleepUtil.sleepSeconds(0.5);
led.off();
SleepUtil.sleepSeconds(0.5);
}
}
}
}
2.2 数字输入 #
java
package com.example.diozero;
import com.diozero.api.DigitalInputDevice;
import com.diozero.api.GpioPullUpDown;
import com.diozero.api.PinInfo;
public class DigitalInputExample {
public static void main(String[] args) {
try (DigitalInputDevice button = new DigitalInputDevice(
18, GpioPullUpDown.PULL_UP)) {
button.addListener((oldValue, newValue) -> {
System.out.println("按钮状态: " + newValue);
});
System.out.println("按钮监听已启动");
SleepUtil.sleepSeconds(30);
}
}
}
三、传感器驱动 #
3.1 温湿度传感器 #
java
package com.example.diozero.sensor;
import com.diozero.devices.BME280;
import com.diozero.util.SleepUtil;
public class BME280Example {
public static void main(String[] args) {
try (BME280 bme280 = new BME280()) {
System.out.println("BME280传感器测试");
while (true) {
float temperature = bme280.getTemperature();
float pressure = bme280.getPressure();
float humidity = bme280.getHumidity();
System.out.printf("温度: %.2f°C, 气压: %.2f hPa, 湿度: %.2f%%%n",
temperature, pressure, humidity);
SleepUtil.sleepSeconds(1);
}
}
}
}
3.2 距离传感器 #
java
package com.example.diozero.sensor;
import com.diozero.devices.HCSR04;
import com.diozero.util.SleepUtil;
public class HCSR04Example {
public static void main(String[] args) {
try (HCSR04 hcsr04 = new HCSR04(17, 18)) {
System.out.println("HC-SR04超声波测距");
while (true) {
float distance = hcsr04.getDistanceCm();
System.out.printf("距离: %.2f cm%n", distance);
SleepUtil.sleepSeconds(1);
}
}
}
}
四、显示设备 #
4.1 OLED显示 #
java
package com.example.diozero.display;
import com.diozero.devices.Ssd1306;
import com.diozero.util.SleepUtil;
public class OLEDExample {
public static void main(String[] args) {
try (Ssd1306 oled = new Ssd1306(128, 64)) {
oled.clear();
oled.invertDisplay(false);
oled.setContrast((byte) 0xFF);
oled.setTextXY(0, 0);
oled.putString("Hello DioZero!");
oled.setTextXY(2, 0);
oled.putString("Java Embedded");
oled.display();
SleepUtil.sleepSeconds(5);
}
}
}
五、电机控制 #
5.1 直流电机 #
java
package com.example.diozero.motor;
import com.diozero.devices.Motor;
import com.diozero.util.SleepUtil;
public class MotorExample {
public static void main(String[] args) {
try (Motor motor = new Motor(17, 18, 22)) {
System.out.println("电机控制测试");
System.out.println("正转");
motor.forward(0.5f);
SleepUtil.sleepSeconds(2);
System.out.println("停止");
motor.stop();
SleepUtil.sleepSeconds(1);
System.out.println("反转");
motor.backward(0.5f);
SleepUtil.sleepSeconds(2);
motor.stop();
}
}
}
5.2 舵机控制 #
java
package com.example.diozero.motor;
import com.diozero.devices.Servo;
import com.diozero.util.SleepUtil;
public class ServoExample {
public static void main(String[] args) {
try (Servo servo = new Servo(18)) {
System.out.println("舵机控制测试");
System.out.println("转到0度");
servo.setAngle(0);
SleepUtil.sleepSeconds(1);
System.out.println("转到90度");
servo.setAngle(90);
SleepUtil.sleepSeconds(1);
System.out.println("转到180度");
servo.setAngle(180);
SleepUtil.sleepSeconds(1);
}
}
}
六、总结 #
DioZero使用要点:
- 资源管理:使用try-with-resources自动释放资源
- 丰富驱动:内置大量传感器和设备驱动
- 简洁API:API设计简洁易用
- 跨平台:支持多种硬件平台
下一章我们将学习Eclipse Kura物联网网关框架。
最后更新:2026-03-27