Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

Construyendo IoT con Java ME 8 en Raspberry Pi: Parte 1 – Integración de Sensores GPIO

Descubra cómo conectar y controlar sensores en una Raspberry Pi usando Java ME 8, desbloqueando potentes capacidades IoT.

Publicado septiembre 2014

La última versión de Java ME 8 introduce una robusta API Device I/O que simplifica el control de LEDs, relés, LCDs, sensores, motores e interruptores.

Este artículo inicia una serie de tres partes sobre integración de sensores electrónicos con la Raspberry Pi Modelo B vía GPIO, I²C, SPI o interfaces UART.

Al aprovechar Java ME 8 para controlar dispositivos a través de estas interfaces, puede construir un ecosistema IoT totalmente funcional.

En esta entrega nos centramos en GPIO y proporcionamos clases Java ME 8 listas para usar para:

Nota: El proyecto completo de NetBeans IDE 8.0, incluyendo todos los archivos fuente, puede descargarse aquí.

Visión General de la API Device I/O

La especificación de la API Device I/O define una interfaz genérica de E/S periférica para aplicaciones Java en plataformas embebidas. Cubre dispositivos comunes como:

Consideraciones Clave de Circuito

Todos los pines GPIO de Raspberry Pi operan a 3.3 V. Antes de conectar un sensor, verifique sus requisitos de voltaje. Si un dispositivo espera 5 V, use un conversor de nivel lógico (ej. un shifter basado en MOSFET BSS138) para traducir señales de forma segura.

Conexión del Detector de Llama

El sensor de llama DFR0076 detecta longitudes de onda entre ~760 nm y 1100 nm, con rango de detección de 20–100 cm. Cuando hay llama presente, su pin de señal se pone en alto.

Cablee el sensor a 3.3 V, GND y GPIO 22 de la Pi como se ilustra en la Figura 3, luego cree una clase Java ME 8 para controlarlo.

Listado 1 – Clase DFR0076Device

public class DFR0076Device {
    private GPIOPin pin = null; // Pin para control de sensor de llama
}

Listado 2 – Inicialización del pin 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));
}

Listado 3 – Registro de listener

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

Listado 4 – Limpieza de recursos

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

Listado 5 – MIDlet que usa el sensor de llama

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("¡ADVERTENCIA Llama detectada!!!");
                waitNext = 10;
            }
        }
    }
}

Conexión del Detector de Movimiento

Integre el sensor PIR HC‑SR501, que emite un pulso de 3.3 V al detectar movimiento. Los tres pines del sensor son GND, VCC (3–5 V) y salida digital.

Ajuste la sensibilidad y retardo del PIR mediante sus potenciómetros, y configure el jumper a "L" para disparos únicos o "H" para disparos repetibles.

Cablee el PIR a 5 V, GND y GPIO 24, luego extienda el MIDlet con una clase dedicada HCSR501Device.

Listado 6 – Clase HCSR501Device

public class HCSR501Device {
    private GPIOPin pin = null;
}

Listado 7 – Inicialización del pin con retardo de 3 segundos

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); // Espera estabilización del sensor
}

Listado 8 – Registro de listener de movimiento

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

Listado 9 – Limpieza

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

Extienda el MIDlet TestSensors para manejar eventos de movimiento:

Listado 10 – MIDlet con soporte PIR

// Inicializar sensor 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("¡ADVERTENCIA Movimiento detectado!!!");
        }
    }
}

Para un análisis más profundo, lea la serie completa: Java ME 8 + Raspberry Pi + Sensores = Mundo IoT (Parte 1).

Proceso de manufactura

  1. Construcción de un registrador de datos multicanal con Raspberry Pi – Parte 1: Requisitos y arquitectura
  2. Tutorial IoT para principiantes: Streaming de datos de temperatura desde Raspberry Pi
  3. Medición de Sensores Analógicos en Raspberry Pi con un Solo Pin GPIO
  4. Mida Sensores Analógicos en Raspberry Pi sin ADC Nativo
  5. Cómo Conectar un Termómetro Digital DS18B20 One‑Wire a Raspberry Pi – Guía Paso a Paso
  6. Construyendo IoT con Java ME 8 en Raspberry Pi: Parte 1 – Integración de Sensores GPIO
  7. Lectura de Sensor Hall Lineal con Raspberry Pi: Guía Java y Análisis del ADC0832
  8. Dominando Sensores en Raspberry Pi: Guía Práctica de Electrónica y Protocolos de Comunicación
  9. Monitoriza la temperatura de tu casa con un panel Raspberry Pi
  10. Usar ADC MCP3008 para leer sensores analógicos con Raspberry Pi
  11. Java Hello World: Tu Primer Programa