亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

Java ME 8 在树莓派上构建物联网:第 1 部分——GPIO 传感器集成

概述

探索如何使用 Java ME 8 在树莓派上连接和控制传感器,释放强大的物联网能力。

发布于 2014 年 9 月

Java ME 8 最新版引入了健壮的 Device I/O API,简化了 LED、继电器、LCD、传感器、电机和开关的控制。

本文开启三部分系列,介绍通过 GPIO、I²C、SPI 或 UART 接口将电子传感器与树莓派 Model B 集成。

借助 Java ME 8 驱动这些接口的设备,你可以构建一个功能完整的物联网生态系统。

本期重点关注 GPIO,提供可直接使用的 Java ME 8 类:

注: 完整的 NetBeans IDE 8.0 项目(含所有源文件)可 在此下载。

Device I/O API 概览

Device I/O API 规范为嵌入式平台上的 Java 应用定义了通用外设 I/O 接口。涵盖常见设备:

关键电路考量

所有树莓派 GPIO 引脚工作在 3.3 V。连接传感器前请核实其电压需求。若设备需要 5 V,请使用逻辑电平转换器(如基于 BSS138 MOSFET 的转换器)安全转换信号。

接入火焰探测器

DFR0076 火焰传感器检测约 760–1100 nm 波长光线,探测距离 20–100 cm。检测到火焰时,其信号引脚拉高。

按图 3 将传感器接到树莓派 3.3 V、GND 和 GPIO 22,然后创建 Java ME 8 类控制它。

代码清单 1 – DFR0076Device 类

public class DFR0076Device {
    private GPIOPin pin = null; // 火焰传感器控制引脚
}

代码清单 2 – 初始化 GPIO 引脚

public DFR0076Device(int pinGPIO) {
    pin = (GPIOPin) DeviceManager.open(new GPIOPinConfig(
        0, pinGPIO, GPIOPinConfig.DIR_INPUT_ONLY,
        GPIOPinConfig.MODE_INPUT_PULL_UP,
        GPIOPinConfig.TRIGGER_RISING_EDGE, false));
}

代码清单 3 – 注册监听器

public void setListener(PinListener flameListener) {
    if (pin != null) {
        pin.setInputListener(flameListener);
    }
}

代码清单 4 – 资源清理

public void close() {
    if (pin != null) {
        pin.setInputListener(null);
        pin.close();
    }
}

代码清单 5 – 使用火焰传感器的 MIDlet

public class TestSensors extends MIDlet {
    private DFR0076Device flame;
    private static final int FLAME_DETECTOR_PIN = 22;
    public void startApp() {
        flame = new DFR0076Device(FLAME_DETECTOR_PIN);
        flame.setListener(new FlameSensor());
    }
    public void destroyApp(boolean unconditional) {
        flame.close();
    }
    private static int waitNext = 1;
    private class FlameSensor implements PinListener {
        public void valueChanged(PinEvent event) {
            if (event.getValue() && --waitNext == 0) {
                System.out.println("WARNING Flame detected!!!");
                waitNext = 10;
            }
        }
    }
}

接入运动探测器

集成 HC‑SR501 PIR 传感器,检测到运动时输出 3.3 V 脉冲。传感器三引脚为 GND、VCC(3–5 V)和数字输出。

通过电位器调节 PIR 灵敏度和延时,跳线帽设为 “L” 单次触发或 “H” 重复触发。

将 PIR 接到 5 V、GND 和 GPIO 24,然后用专用 HCSR501Device 类扩展 MIDlet。

代码清单 6 – HCSR501Device 类

public class HCSR501Device {
    private GPIOPin pin = null;
}

代码清单 7 – 带 3 秒延时的引脚初始化

public HCSR501Device(int pinGPIO) {
    pin = (GPIOPin) DeviceManager.open(new GPIOPinConfig(
        0, pinGPIO, GPIOPinConfig.DIR_INPUT_ONLY,
        GPIOPinConfig.MODE_INPUT_PULL_DOWN,
        GPIOPinConfig.TRIGGER_RISING_EDGE, false));
    I2CUtils.I2Cdelay(3000); // 等待传感器稳定
}

代码清单 8 – 注册运动监听器

public void setListener(PinListener pirListener) {
    if (pin != null) {
        pin.setInputListener(pirListener);
    }
}

代码清单 9 – 清理

public void close() {
    if (pin != null) {
        pin.setInputListener(null);
        pin.close();
    }
}

扩展 TestSensors MIDlet 处理运动事件:

代码清单 10 – 支持 PIR 的 MIDlet

// 初始化 PIR 传感器
private HCSR501Device pir;
private static final int MOTION_DETECTOR_PIN = 24;
@Override
public void startApp() {
    pir = new HCSR501Device(MOTION_DETECTOR_PIN);
    pir.setListener(new PirSensor());
}
@Override
public void destroyApp(boolean unconditional) {
    pir.close();
}
private class PirSensor implements PinListener {
    public void valueChanged(PinEvent event) {
        if (event.getValue()) {
            System.out.println("WARNING Motion detected!!!");
        }
    }
}

深度解析请阅读完整系列:Java ME 8 + Raspberry Pi + Sensors = IoT World (Part 1)。

制造工艺

  1. 树莓派多通道数据记录仪构建——第1部分:需求与架构
  2. IoT 入门教程:树莓派流式传输温度数据
  3. 树莓派单 GPIO 引脚读取模拟传感器:RC 充电法实战
  4. 树莓派无原生 ADC 读取模拟传感器:阶跃响应法实战
  5. 树莓派接入 DS18B20 单总线数字温度计:分步实战指南
  6. Java ME 8 在树莓派上构建物联网:第 1 部分——GPIO 传感器集成
  7. 树莓派读取线性霍尔传感器:Java 指南与 ADC0832 深度解析
  8. 精通树莓派传感器:电子与通信协议实战指南
  9. 树莓派家庭温度监测仪表盘:实时图表展示
  10. 树莓派用 MCP3008 ADC 读取模拟传感器:LDR 与 TMP36 实例
  11. 树莓派 3 接 DHT11 传感器上传数据到 ThingsIo.ai 云平台
  12. Java Hello World:你的第一个程序