370 likes | 513 Views
Modernize Your Home or Garage with Java ME Embedded: Tutorial. Alexander Mironenko , Denis Magda Java ME Embedded Team.
E N D
Modernize Your Home or Garage with Java ME Embedded: Tutorial Alexander Mironenko, Denis MagdaJava ME Embedded Team
The following is intended to outline our general product direction. It is intended for information purposes only, and may not be incorporated into any contract. It is not a commitment to deliver any material, code, or functionality, and should not be relied upon in making purchasing decisions. The development, release, and timing of any features or functionality described for Oracle’s products remains at the sole discretion of Oracle.
Program Agenda • Java ME Embedded 3.4 • Light System • Temperature System • Alarm System • Remote Control • Write Once Run Anywhere
Java ME Embedded 3.4 What’s New? • New supported platform! • Qualcomm Internet of Everything (IoE) Development Platform • Full-featured tooling over Serial/USB • Debugging/profiling directly from NetBeans and Eclipse • Logging • Command Line Interface • Available only for Qualcomm IoE Development Platform • Java API is the same as in Java ME Embedded 3.3
Qualcomm IoT Development Platform Modular & flexible Complete development and prototyping platform CPU, RAM/Flash, I/O, GPS, 3G, WiFi Extensible through pluggable modules Universal IoT/M2M platform Quickly and easily start building advanced IoT concepts with Java Leverage Qualcomm“Internet of Everything” developer programm Running Oracle Java ME Embedded 3.4
Java ME SDK 3.4 What’s new? • Complete emulation of Qualcomm IoE Development Platform • Sensors: g-sensor, temperature sensor, accelerometer • Peripherals: ADC, DAC, GPIO pins and ports, pulse counter • Emulated device name is Qualcomm_IoE_Device • Tooling over Serial/USB support on the SDK side • Can be leveraged from both NetBeans and Eclipse • Just connect to an appropriate COM port with SDK’s Device Manager!
Oracle Java ME Embedded 3.4 Stack A rich embedded application platform
JSRs supported on IoE Platform Rich, standardized functionality for embedded solutions
Device Access API Access Peripheral I/O Hardware directly from Java applications • Generic API to access peripheral I/O in a platform-neutral manner • ‘Late binding’ allows addition of new peripheral types without changing API • Enables development of Java-based ‘device drivers’ (non-real time) • No native application code • Also planned for availability on Java SE Example 2 Simple GPIO Pin- basedsensor reader (low level application) Example 1 Real-Time Clock Peripheral Implementation (High Level Driver) Application Layer Device Access API On-Device I/O Peripheral Access Application Environment Java VM CLDC
Light System Components Relay Connect and … Control? LEDs
Light System GPIO(General-Purpose Input/Output) Introduction • GPIO is a logical pin that is used for read/write operations • Individual pins have a voltage value of either high or low • GPIO pins are commonly used to read buttons (switches) and to drive TTL-level devices such as light-emitting diodes.
Light System Physical connection
Light System Turning on and off the light // Configuration for a GPIO that controls the light • GPIOPingConfiggpioConfig = newGPIOPinConfig(PeripheralConfig.DEFAULT, 11, • GPIOPinConfig.DIR_OUTPUT_ONLY, • GPIOPinConfig.DEFAULT, GPIOPinConfig.TRIGGER_NONE, false) • // Open GPIO GPIOPin pin = (GPIOPin) PeripheralManager.open(gpioConfig); // Turning on the light pin.setValue(true); Thread.sleep(5000); // Turning off the light pin.setValue(false); Thread.sleep(5000); pin.close();
Temperature System Components • Temperature sensor connected to a SPI bus is used for measurements • Advantages: • Simple connection • Easy to configure • Fast measurement
Temperature System SPI Bus Introduction • SPI (Serial Peripheral Interface) – synchronous serial data interface used for communication between multiple peripheral devices and single main device • Key features: • MOSI(master output slave input), MISO(master input slave output) lines for data transmission • Clock of bus is controlled by master • Dedicated physical lines for slave addressing
Temperature System Retrieving Temperature // SPI configuration for the temperature sensor SPIDeviceConfigspiConfig = newSPIDeviceConfig(1, 256, 2000000, 1, 8, Peripheral.BIG_ENDIAN) // Get access to the sensor SPIDevicetempSensor = (SPIDevice) PeripheralManager.open(spiConfig); // Retrieve current temperature tempSensor.begin(); tempSensor.write(0x02); tempValue = tempSensor.read(); tempSensor.end()
Alarm System Components • Optical photo interrupter is used as a an alarm sensor • Connected to a GPIO pin • Read values in a loop… Activate triggering and wait for events!
Alarm System Leveraging GPIO Callbacks // Configuration for a GPIO: direction – input, trigger type - rising edge • GPIOPinConfigpinConfig = newGPIOPinConfig(PeripheralConfig.DEFAULT, 15, • GPIOPinConfig.DIR_INPUT_ONLY, GPIOPinConfig.DEFAULT, • GPIOPinConfig.TRIGGER_RISING_EDGE, false) // Open GPIO pin GPIOPin pin = (GPIOPin) PeripheralManager.open(pinConfig); // Listen for notifications pin.setInputListener(new PinListener() { public void valueChanged(PinEventpe) { // Receive and process an event } });
Remote Control Components • Flexible external GSM/GPRS modem will be used as network wireless device • Key features: • Can be easily connected to the board through UART • AT commands are used to manage the modem • No registers, no direct memory, just send, receive and parse strings!
Remote Control UART introduction • UART (Universal Asynchronous Receiver/Transmitter) is a module used for serial communications • Key features: • No addresses like in buses, just connect and send data • Supported by wide range of devices • Fully asynchronous reading and writing • Use only two physical lines
Remote Control UART usage example // UART configuration to use • UARTConfigconfig = newUARTConfig(PeripheralConfig.DEFAULT, 115200, UARTConfig.DATABITS_8, UARTConfig.PARITY_NONE, UARTConfig.STOPBITS_1, UARTConfig.FLOWCONTROL_NONE); • // Open UART • UART uart = (UART) PeripheralManager.open(config); • // Open input and output streams • InputStream is = uart.getInputStream(); • OutputStreamos = uart.getOutputStream(); • // Perform read/write • is.read(inBuffer); • os.write(outBuffer);
Target Platform Raspberry Pi • Rasbperry Pi (model B) • Broadcom BCM2835 (ARM1176JZF) SOC • 700 MHz, 512 MB RAM, Linux (Debian) • ~1 million devices sold, US $35 • Java ME Embedded 3.3 • Device Access v B • Java ME Embedded 8 EA available • Device Access v C
Let’s Run the App on the Pi during 5 mins Single application on different boards
Target Platform STM32F4Discovery Board • STM32F407VGT6 microcontroller • 168 MHz Cortex-M4 • 192 KB RAM • 1 MB Flash • ~ US 20$ per board • Java ME Embedded 8 EA • CLDC 8.0 • MEEP 8.0 – Minimal Profile Set • Device Access API v C: GPIO, I2C, SPI, UART
Useful Links • Oracle Java ME Embedded • http://www.oracle.com/technetwork/java/embedded/overview/javame/index.html • Java ME SDK • http://www.oracle.com/technetwork/java/javame/javamobile/overview/getstarted/index.html • Qualcomm IoE Development Platform • https://developer.qualcomm.com/mobile-development/development-devices-boards/development-boards/internet-of-everything-development-platform