Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

IoT mit Java ME 8 auf Raspberry Pi: Teil 1 – GPIO Sensor-Integration

Überblick

Entdecken Sie, wie Sie Sensoren am Raspberry Pi mit Java ME 8 anschließen und steuern – für leistungsstarke IoT-Fähigkeiten.

Veröffentlicht September 2014

Das neueste Release von Java ME 8 führt eine robuste Device I/O API ein, die die Steuerung von LEDs, Relais, LCDs, Sensoren, Motoren und Schaltern vereinfacht.

Dieser Artikel startet eine dreiteilige Serie zur Integration elektronischer Sensoren mit dem Raspberry Pi Model B über GPIO, I²C, SPI oder UART-Schnittstellen.

Durch den Einsatz von Java ME 8 zur Ansteuerung von Geräten über diese Schnittstellen können Sie ein voll funktionsfähiges IoT-Ökosystem aufbauen.

In diesem Teil fokussieren wir uns auf GPIO und stellen einsatzbereite Java ME 8 Klassen für:

Hinweis: Das vollständige NetBeans IDE 8.0 Projekt inklusive aller Quelldateien kann hier heruntergeladen werden.

Device I/O API Überblick

Die Device I/O API Spezifikation definiert eine generische Peripherie-I/O-Schnittstelle für Java-Anwendungen auf eingebetteten Plattformen. Sie deckt gängige Geräte ab:

Wichtige Schaltungsüberlegungen

Alle Raspberry Pi GPIO-Pins arbeiten mit 3,3 V. Vor dem Anschließen eines Sensors dessen Spannungsanforderungen prüfen. Erwartet ein Gerät 5 V, einen Logic-Level-Converter (z. B. BSS138 MOSFET-basierten Shifter) nutzen, um Signale sicher zu übersetzen.

Flammensensor anschließen

Der DFR0076 Flammensensor detektiert Lichtwellenlängen zwischen ~760 nm und 1100 nm mit einem Erfassungsbereich von 20–100 cm. Bei Flammen-Erkennung zieht sein Signalpin High.

Sensor an Pi's 3,3 V, GND und GPIO 22 anschließen (wie in Abbildung 3 dargestellt), dann eine Java ME 8 Klasse zur Steuerung erstellen.

Listing 1 – DFR0076Device Klasse

public class DFR0076Device {
    private GPIOPin pin = null; // Pin für Flammensensor-Steuerung
}

Listing 2 – GPIO-Pin initialisieren

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

Listing 3 – Listener registrieren

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

Listing 4 – Ressourcen freigeben

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

Listing 5 – MIDlet mit Flammensensor

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

Bewegungsmelder anschließen

HC‑SR501 PIR-Sensor integrieren, der bei erkannter Bewegung einen 3,3 V Impuls ausgibt. Die drei Pins des Sensors sind GND, VCC (3–5 V) und Digital Out.

PIR-Empfindlichkeit und Verzögerung über dessen Potentiometer einstellen, Jumper auf „L“ für Einzelauslösung oder „H“ für wiederholbare Auslösung setzen.

PIR an 5 V, GND und GPIO 24 verdrahten, dann das MIDlet um eine dedizierte HCSR501Device Klasse erweitern.

Listing 6 – HCSR501Device Klasse

public class HCSR501Device {
    private GPIOPin pin = null;
}

Listing 7 – Pin-Initialisierung mit 3-Sekunden-Verzögerung

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); // Warten auf Sensor-Stabilisierung
}

Listing 8 – Motion Listener registrieren

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

Listing 9 – Cleanup

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

Listing 10 – MIDlet mit PIR-Unterstützung

// PIR-Sensor initialisieren
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!!!");
        }
    }
}

Für tieferen Einstieg lesen Sie die vollständige Serie: Java ME 8 + Raspberry Pi + Sensors = IoT World (Part 1).

Herstellungsprozess

  1. Java Hello World: Ihr erstes Programm
  2. Multichannel-Datenlogger mit Raspberry Pi bauen – Teil 1: Anforderungen & Architektur
  3. Einsteiger IoT Tutorial: Temperaturdaten vom Raspberry Pi streamen
  4. Analoge Sensoren am Raspberry Pi mit nur einem GPIO-Pin auslesen
  5. Analoge Sensoren am Raspberry Pi ohne nativen ADC auslesen – Step-Response Methode
  6. DS18B20 1-Wire Digitalthermometer an Raspberry Pi anschließen – Schritt-für-Schritt-Anleitung
  7. IoT mit Java ME 8 auf Raspberry Pi: Teil 1 – GPIO Sensor-Integration
  8. Linearen Hall-Sensor mit Raspberry Pi auslesen: Java-Anleitung & ADC0832 Einblicke
  9. Raspberry Pi Sensoren meistern: Praktischer Leitfaden zu Elektronik und Kommunikationsprotokollen
  10. Heimtemperatur mit Raspberry Pi Dashboard überwachen