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

Java ME 8 + Raspberry Pi + 传感器 =物联网世界(第 1 部分)

了解如何将传感器连接到 Raspberry Pi 并使用 Java 控制它们。

2014 年 9 月发布

最新版本的 Java ME 8 包含一个强大的 API,用于控制 LED、继电器、LCD、传感器、电机和开关等设备。

本文是关于如何使用通用输入/输出 (GPIO)、内部集成电路总线 (I2C)、串行外围接口总线 (SPI) 将电子传感器连接到 Raspberry Pi Model B 的三部分系列文章中的第一篇,或通用异步接收器/发送器 (UART) 接口。

通过使用 Java ME 8 控制具有不同类型接口的设备并将设备连接到 Raspberry Pi,我们可以创建一个物联网 (IoT) 世界。

本文重点介绍 GPIO 的使用,并展示了如何在 Java ME 8 中开发类的示例

注意 :可以在此处下载此 NetBeans IDE 8.0 项目的完整示例代码。

设备 I/O API

设备 I/O API 规范为在小型嵌入式设备上运行的 Java 应用程序定义了通用外围设备 I/O API。它为一些最常见的外围设备定义了 API,包括以下内容:

我们将创建的电路

GPIO 设备可用作数字输入或数字输出,可禁用或启用,还可用于驱动“中断”线。但是,一个非常重要的考虑是所有 Raspberry Pi GPIO 引脚都在 3.3 V 下运行。因此,检查您要连接的设备的技术规格以确定它们使用的是 3.3 V 还是 5 V 非常重要。在某些情况下,您将需要使用这样的逻辑电平转换器。

连接火焰探测器

DFRobot 的 DFR0076 火焰传感器可用于检测大约 760 nm 至 1100 nm 之间的火焰或其他波长的光。我们可以将其连接到 3.3 V 或 5 V,检测范围约为 20 cm (4.8 V) 至 100 cm (1 V)。当检测到火灾时,它会拉高信号引脚。

让我们将火焰传感器连接到 Raspberry Pi 的 3.3 V、Gnd 和 GPIO 22 引脚,如图 3 所示,并为火焰探测器传感器控制创建一个 Java ME 8 类。

首先,创建一个类DFR0076Device 使用设备访问 API,并定义一个变量 pin 支持GPIO接口,如清单1所示。

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

清单 1. 火焰探测器传感器控件的类

接下来,创建一个使用 DeviceManager 初始化和激活 GPIO 22 引脚的类构造函数 API 和 GPIOPinConfig 类(参见清单 2)来建立以下条件:

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));...} 

清单 2. 建立初始条件

现在,创建一个接收支持火焰检测事件的已定义侦听器类的方法,如清单 3 所示。

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

清单 3. 支持火焰检测事件的方法

完成后关闭 pin 并确保释放 pin 侦听器也很重要,如清单 4 所示。

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

清单 4. 关闭 pin 并释放监听器

现在,创建一个调用我们的代码的主 MIDlet,并定义一个用于处理火焰检测事件的侦听器类,如清单 5 所示。

公共类 TestSensors 扩展 MIDlet { DFR0076Device 火焰;私有静态最终 int FLAME_DETECTOR_PIN =22; public void startApp() { //初始化火焰传感器flame =new DFR0076Device(FLAME_DETECTOR_PIN);火焰.setListener(新火焰传感器()); } public void destroyApp(boolean unconditional) {flame.close();私有静态 int waitnext =1; class FlameSensor 实现 PinListener { public void valueChanged(PinEvent event) { if (event.getValue() &&--waitnext ==0) { System.out.println("WARNING Flame detected!!!");等待下一个 =10; } } }}

清单 5. 创建一个 MIDlet 来调用我们的代码

连接移动检测器

现在让我们为 TestSensors 添加运动检测器功能 中间件。为此,我们需要一个运动传感器,例如图 2 中所示的 HC-SR501。

PIR 传感器使您能够感知运动。任何东西都会发出少量的红外线辐射,越热的东西发出的辐射就越多。 PIR 传感器能够检测其检测区域内发生的 IR 水平变化(例如,当人类进入房间时),从而感知运动。

我们将使用的 PIR 传感器具有三个引脚:接地、数字输出和 3-5 Vdc 输入。空闲时,当未检测到运动时,数字输出信号将保持低电平。但是,当检测到运动时,数字输出信号将产生高电平脉冲 (3.3 V)。可以将数字输出引脚直接连接到 Raspberry Pi。

为了测试,PIR 传感器有一个跳线(见图 4)。

  • 将跳线设置到“L”位置会创建一个(不可重复的)触发器。当跳线处于此位置时,感测事件发生后启用感测,从而允许连续运动检测。不再检测到运动后,输出仍保持低电平 3 秒。
  • 将跳线设置到“H”位置可创建可重复触发。当跳线设置为“H”(默认)位置时,感应事件发生后(即一旦输出为高电平)将禁用感应。

您可以进行以下调整:

  • 顺时针调节灵敏度电位器,感应距离增加到7米左右;逆时针调整可将感应距离缩短至 3 米左右。
  • 顺时针调节延时电位器,感应延时延长至300秒;逆时针调整可将感应延迟缩短至 5 秒。

让我们将 PIR 传感器连接到 Raspberry Pi 5 V、Gnd 和 GPIO 24 引脚,如图 3 所示,并创建一个 Java ME 8 类HCSR501Device 使用设备访问 API 对其进行控制,如清单 6 所示。

public class HCSR501Device { private GPIOPin pin =null;

清单 6. HCSR501Device 班级

然后,创建一个使用 DeviceManager 初始化和激活 GPIO 24 引脚的类构造函数 API 和 GPIOPinConfig 类(参见清单 7)来建立以下条件:

  • 设备名称:0
  • 引脚编号:GPIO 24(通过pinGPIO指定) )
  • 方向:仅输入
  • 模式:下拉
  • 触发:上升沿
  • 初始值:false
  • 在初始化 PIR 之前等待三秒钟
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); //等待3秒...}

清单 7. 建立初始条件

现在,创建一个接收支持运动检测事件的已定义侦听器类的方法,如清单 8 所示。

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

清单 8. 支持运动检测事件的方法

完成后关闭 pin 并确保释放 pin 侦听器也很重要,如清单 9 所示。

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

清单 9. 关闭 pin 并释放监听器

让我们扩展 MIDlet 类以支持 PIR 传感器及其侦听器,如清单 10 所示。

//定义HCSR501设备对象HCSR501Device pir;private static final int MOTION_DETECTOR_PIN =24;@Overridepublic void startApp() {... //初始化PIR传感器pir =new HCSR501Device(MOTION_DETECTOR_PIN); pir.setListener(new PirSensor());... }@Overridepublic void destroyApp(boolean unconditional) {... pir.close();...}//检查PIR Sensor是否有运动检测class PirSensor implementations PinListener { @Override public void valueChanged(PinEvent event) { if (event.getValue()) { System.out.println("WARNING Motion detection!!!"); } }}

清单 10. 扩展 MIDlet 类以支持 PIR 传感器及其侦听器

有关更多详细信息:Java ME 8 + Raspberry Pi + 传感器 =IoT World(第 1 部分)


制造工艺

  1. Java Hello World 程序
  2. Raspberry Pi 上的多通道专业数据记录器 – 第 1 部分
  3. IoT 101 项目:来自 Raspberry Pi 的流温度
  4. 使用一个 GPIO 引脚读取模拟传感器
  5. Raspberry Pi 上没有模拟输入的模拟传感器
  6. Raspberry Pi 1-Wire 数字温度计传感器 (DS18B20)
  7. Java ME 8 + Raspberry Pi + 传感器 =物联网世界(第 1 部分)
  8. JAVA 中的树莓派数字霍尔传感器
  9. Raspberry Pi 传感器
  10. 使用 Raspberry Pi 监控家中温度
  11. 使用 MCP3008 的 Raspberry Pi 上的模拟传感器
  12. 基于 Raspberry PI 的 IoT 项目连接 DHT11 传感器