Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Создание IoT с Java ME 8 на Raspberry Pi: Часть 1 — интеграция GPIO-датчиков

Узнайте, как подключать и управлять датчиками на Raspberry Pi с помощью Java ME 8, раскрывая мощные возможности IoT.

Опубликовано сентябрь 2014 года

Последний релиз Java ME 8 вводит надежный Device I/O API, упрощающий управление светодиодами, реле, LCD, датчиками, двигателями и переключателями.

Эта статья начинает трехчастную серию об интеграции электронных датчиков с Raspberry Pi Model B через интерфейсы GPIO, I²C, SPI или UART.

Используя Java ME 8 для управления устройствами через эти интерфейсы, можно построить полнофункциональную экосистему IoT.

В этой части мы фокусируемся на GPIO и предоставляем готовые к использованию классы Java ME 8 для:

Примечание: Полный проект NetBeans IDE 8.0, включая все исходные файлы, можно скачать здесь.

Обзор Device I/O API

Спецификация Device I/O API определяет общий интерфейс периферийного ввода-вывода для Java-приложений на встраиваемых платформах. Она охватывает распространенные устройства, такие как:

Ключевые соображения по схеме

Все GPIO-пины Raspberry Pi работают на 3,3 В. Перед подключением датчика проверьте его требования к напряжению. Если устройство ожидает 5 В, используйте преобразователь уровней (например, на базе MOSFET BSS138) для безопасного преобразования сигналов.

Подключение детектора пламени

Датчик DFR0076 обнаруживает длины волн света примерно от 760 нм до 1100 нм, с диапазоном обнаружения 20–100 см. При наличии пламени его сигнальный пин переходит в высокое состояние.

Подключите датчик к 3,3 В, GND и GPIO 22 Pi, как показано на рисунке 3, затем создайте класс 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;
            }
        }
    }
}

Подключение детектора движения

Интегрируйте PIR-датчик HC‑SR501, который выдает импульс 3,3 В при обнаружении движения. У датчика три пина: GND, VCC (3–5 В) и цифровой выход.

Настройте чувствительность и задержку PIR через его потенциометры, и установите перемычку на «L» для единичных срабатываний или «H» для повторяющихся.

Подключите PIR к 5 В, GND и GPIO 24, затем расширьте MIDlet с выделенным классом HCSR501Device.

Листинг 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();
    }
}

Расширьте MIDlet TestSensors для обработки событий движения:

Листинг 10 – MIDlet с поддержкой PIR

// Инициализация 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. Java Hello World: ваша первая программа
  2. Построение многоканального логгера данных на Raspberry Pi — Часть 1: Требования и архитектура
  3. Учебник для начинающих по IoT: стриминг данных температуры с Raspberry Pi
  4. Измерение аналоговых датчиков на Raspberry Pi с одним GPIO-пином
  5. Чтение аналоговых датчиков на Raspberry Pi без встроенного АЦП
  6. Подключение цифрового термометра DS18B20 1-Wire к Raspberry Pi — пошаговое руководство
  7. Создание IoT с Java ME 8 на Raspberry Pi: Часть 1 — интеграция GPIO-датчиков
  8. Чтение линейного Холловского датчика с Raspberry Pi: руководство по Java и особенности ADC0832
  9. Мастерство датчиков Raspberry Pi: практическое руководство по электронике и протоколам связи
  10. Мониторинг домашней температуры с панелью управления на Raspberry Pi