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使用要点:

  1. 资源管理:使用try-with-resources自动释放资源
  2. 丰富驱动:内置大量传感器和设备驱动
  3. 简洁API:API设计简洁易用
  4. 跨平台:支持多种硬件平台

下一章我们将学习Eclipse Kura物联网网关框架。

最后更新:2026-03-27