Membangun IoT dengan Java ME 8 pada Raspberry Pi: Bagian 1 – Integrasi Sensor GPIO
Temukan cara menghubungkan dan mengontrol sensor pada Raspberry Pi menggunakan Java ME 8, membuka kemampuan IoT yang canggih.
Diterbitkan September 2014
Rilis terbaru Java ME 8 memperkenalkan API Device I/O yang kuat yang menyederhanakan kontrol LED, relay, LCD, sensor, motor, dan saklar.
Artikel ini memulai seri tiga bagian tentang integrasi sensor elektronik dengan Raspberry Pi Model B melalui antarmuka GPIO, I²C, SPI, atau UART.
Dengan memanfaatkan Java ME 8 untuk menggerakkan perangkat melalui antarmuka ini, Anda dapat membangun ekosistem IoT yang fungsional sepenuhnya.
Dalam edisi ini kita fokus pada GPIO dan menyediakan kelas Java ME 8 siap pakai untuk:
- Mendeteksi api dengan sensor api DFRobot DFR0076
- Mendeteksi gerak dengan sensor PIR HC-SR501
- Mengukur jarak dengan modul ultrasonik HC-SR04
Catatan: Proyek lengkap NetBeans IDE 8.0, termasuk semua berkas sumber, dapat diunduh di sini.
Ringkasan API Device I/O
Spesifikasi API Device I/O mendefinisikan antarmuka I/O periferal generik untuk aplikasi Java pada platform embedded. Ini mencakup perangkat umum seperti:
- GPIO, I²C, SPI, UART
- ADC dan DAC
- Memory-mapped I/O
- Modul perintah AT
- Timer watchdog dan counter pulsa
- Generator PWM dan perangkat generik
Pertimbangan Rangkaian Utama
Semua pin GPIO Raspberry Pi beroperasi pada 3,3 V. Sebelum menghubungkan sensor, verifikasi persyaratan tegangannya. Jika perangkat mengharapkan 5 V, gunakan konverter level logika (misalnya, penggeser berbasis MOSFET BSS138) untuk menerjemahkan sinyal dengan aman.
Menghubungkan Detektor Api
Sensor api DFR0076 mendeteksi panjang gelombang cahaya antara ~760 nm dan 1100 nm, dengan rentang deteksi 20–100 cm. Saat api ada, pin sinyal-nya menarik tinggi.
Rangkaikan sensor ke 3,3 V, GND, dan GPIO 22 Pi seperti yang diilustrasikan dalam Gambar 3, lalu buat kelas Java ME 8 untuk mengontrolnya.
Listing 1 – Kelas DFR0076Device
public class DFR0076Device { private GPIOPin pin = null; // Pin untuk kontrol sensor api }
Listing 2 – Inisialisasi 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)); }
Listing 3 – Pendaftaran listener
public void setListener(PinListener flameListener) { if (pin != null) { pin.setInputListener(flameListener); } }
Listing 4 – Pembersihan sumber daya
public void close() { if (pin != null) { pin.setInputListener(null); pin.close(); } }
Listing 5 – MIDlet yang menggunakan sensor api
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("PERINGATAN Api terdeteksi!!!"); waitNext = 10; } } } }
Menghubungkan Detektor Gerak
Integrasikan sensor PIR HC-SR501, yang mengeluarkan pulsa 3,3 V saat gerak terdeteksi. Tiga pin sensor adalah GND, VCC (3–5 V), dan digital out.
Sesuaikan sensitivitas dan penundaan PIR melalui potensiometer-nya, dan atur jumper ke “L” untuk trigger tunggal atau “H” untuk trigger berulang.
Rangkaikan PIR ke 5 V, GND, dan GPIO 24, lalu perluas MIDlet dengan kelas HCSR501Device khusus.
Listing 6 – Kelas HCSR501Device
public class HCSR501Device { private GPIOPin pin = null; }
Listing 7 – Inisialisasi pin dengan penundaan 3 detik
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); // Tunggu stabilisasi sensor }
Listing 8 – Mendaftarkan listener gerak
public void setListener(PinListener pirListener) { if (pin != null) { pin.setInputListener(pirListener); } }
Listing 9 – Pembersihan
public void close() { if (pin != null) { pin.setInputListener(null); pin.close(); } }
Perluas TestSensors MIDlet untuk menangani peristiwa gerak:
Listing 10 – MIDlet dengan dukungan PIR
// Inisialisasi 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("PERINGATAN Gerak terdeteksi!!!"); } } }
Untuk penjelasan lebih dalam, baca seri lengkap: Java ME 8 + Raspberry Pi + Sensor = Dunia IoT (Bagian 1).