Wednesday Apr 09, 2014

Java SE Embedded 8 - Compact Profile

Java SE Embedded 8 의 주요 기능 중 하나인, Compact Profile에 대한 소개입니다. 

Sunday Mar 23, 2014

라스베리파이와 Java SE Embedded 8을 이용한 Serial 통신

이번에는 Java SE Embedded를 이용해서 Serial 통신을 이용하는 방법을 알아보도록 하겠습니다.

준비해야 할 사항들은 아래와 같습니다.

l 리눅스가 탑재된 라스베리파이

l 라스베리파이를 연결할 수 있는 Serial 케이블

l JDK 8

l Java SE Embedded 8

l Java-simple-serial-connector

라스베리파이에서 리눅스를 탑재하는 방법은 아래 링크에 자세히 나와 있습니다.

http://www.oracle.com/technetwork/articles/java/raspberrypi-1704896.html

JDK 8의 경우, 아래 링크를 이용해서 최신 버전의 JDK 8을 다운로드해서 설치합니다.

http://www.oracle.com/technetwork/java/javase/downloads/index.html

다음으로는 아래 링크를 이용해서 Java SE Embedded 8을 다운로드 합니다.

http://www.oracle.com/technetwork/java/embedded/downloads/javase/index.html

아래 HardFloat를 지원용 binary를 다운로드 합니다.

다음 단계로는 Serial Connector library를 다운로드 받습니다.

웹 상에 여러 open source project가 있지만, java-simple-serial-connector 를 다운로드 받아서 사용해 보도록 하겠습니다. 아래 링크는 jssc 홈페이지입니다.

https://code.google.com/p/java-simple-serial-connector/

실제 바이너리는 아래 GitHub 링크에서 다운받으실 수 있습니다.

https://github.com/scream3r/java-simple-serial-connector/releases

다운로드한 jSSC-2.8.0-Release.zip의 압축을 풀게 되면, jssc.jar 파일이 들어있음을 확인하실 수 있습니다.

Jssc.jar 파일의 압축을 풀게 되면 아래 그림과 같이 , Windows(x86, x86-64), Linux(x86, x86-64, ARM soft & hard float), Solaris(x86, x86-64), Mac OS X(x86, x86-64, PPC, PPC64) 등 다양한 플랫폼을 지원하는 Native library들을 포함하는 것을 확인하실 수 있습니다.

다음으로는 JDK8을 이용해서 java-simple-serial-connector 라이브러리의 dependency를 체크합니다. Java SE Embedded 8부터는 Java SE API들이 subset으로 그룹이 지어진 Compact Profile 1/2/3 그리고 모든 API들이 포함된 Full 로 구성하는 것이 가능합니다. Compact Profile 1의 경우는 가장 적은 수의 API를 가지고, 여기에 API가 추가되는 Compact 2/3/Full 을 선택해서 사용할 수 있습니다.

아래 표는 각 Compact Profile의 주요 기능들을 표시한 표입니다.

Full SE API

Beans

JNI

JAX-WS

Preferences

Accessibility

IDL

RMI-IIOP

CORBA

Print Service

Sound

Swing

Java 2D

AWT

Drag and Drop

Input Methods

Image I/O

compact3

Security1

JMX

XML JAXP2

Management

Instrumentation

compact2

JDBC

RMI

XML JAXP

compact1

Core (java.lang.*)

Security

Serialization

Networking

Ref Objects

Regular Expressions

Date and Time

Input/Output

Collections

Logging

Concurrency

Reflection

JAR

ZIP

Versioning

Internationalization

JNDI

Override Mechanism

Extension Mechanism

Scripting

Compact Profile에 대한 자세한 내용은 아래 링크를 통해 확인할 수 있습니다.

http://www.oracle.com/technetwork/java/embedded/resources/tech/compact-profiles-overview-2157132.html

자신이 사용하는 library가 어떤 Compact Profile을 사용해야 하는지, JDK8에서는 jdeps라는 명령어로 확인이 가능합니다. 아래 그림과 같이 명령어를 실행해 보았고, jssc.jar를 사용하기 위해서는 최소한 Compact Profile1 이 필요하다는 것을 알 수 있습니다.

물론 Compact Profile 2/3/Full 은 모두 사용이 가능합니다.

다음으로는 Java SE Embedded 8 Compact Profile 1을 구성해 보도록 하겠습니다. Java SE Embedded 8 의 압축을 풀면, 아래와 같이 bin 폴더에 jrecreate.bat 을 찾을 수 있습니다. 이 명령어를 사용해서 여러분이 원하는 Compact Profile로 구성을 하실 수 있습니다.

Bin 폴더에서 아래와 같이 jrecreate.bat 파일을 실행하면 원하는 Compact Profile VM 타입, 그리고 폴더에 Java SE Embedded가 재구성이 됩니다. 이때 주의할 사항은 폴더가 존재하지 않는 폴더의 이름을 적어 주어야 합니다.

이렇게 생성된 폴더를 라스베리파이로 전송합니다. 저의 경우에는 /opt/jme8 폴더에 생성된 폴더 및 파일들을 전송하였습니다.

라스베리파이를 Serial로 연결하기 위해서, 저는 아래 사진의 “USB to TTL Serial Cable”을 사용하였습니다. 이 케이블은 USB<->Serial conversion chip을 내장하고 있고, 5V usb power 3.3v의 라스베리파이 파워로 level shift하는 기능도 가지고 있습니다.

USB to TTL Serial Cable - Debug / Console Cable for Raspberry Pi

해당 케이블은 아래 링크를 통해서 구매하실 수 있습니다.

http://www.adafruit.com/products/954

해당 케이블을 아래 그림과 같이 연결합니다.

Rasbperry Pi

녹색-TX, 흰색-RX, 검정-Ground, 붉은색-Power로 연결이 됩니다. 이 경우, Serial을 통해 파워가 제공되기 때문에, micro-USB 파워케이블을 사용하지 않아야 합니다.

이렇게 연결한 상태에서 PuTTy와 같은 터미널 프로그램과 연결해서 라스베리파이의 Linux에 접근을 할 수 있습니다. UART(Serial 포트)/dev/ttyAMA0 로 확인을 할 수 있으며, Linux로부터 해당 Serialcontrol을 가져오는 과정이 필요합니다.

아래 링크에 자세한 방법이 나와 있지만 복잡하고,

http://elinux.org/RPi_Serial_Connection#Preventing_Linux_using_the_serial_port

아래 링크의 rpi-serial-console을 사용하는 방법을 권장한다.

https://github.com/lurch/rpi-serial-console

아래 명령어를 이용해서 rpi-serial-console script를 다운로드하고,

sudo wget https://raw.github.com/lurch/rpi-serial-console/master/rpi-serial-console -O /usr/bin/rpi-serial-console && sudo chmod +x /usr/bin/rpi-serial-console

현재 serial console의 상태를 확인하기 위해 다음의 명령어를 사용한다.

rpi-serial-console status

마지막으로 serial console disable 시키기 위해서, 아래의 명령어를 사용한다.

sudo rpi-serial-console disable

이런 방법으로 Linux로부터 control을 가져오고, 터미널 프로그램에서는 더 이상 로그나 메시지를 볼 수 가 없게 됩니다.

이제 샘플 프로젝트를 하나 만들어서 Serial을 테스트해 보도록 하겠습니다.

프로젝트를 만드는 법이나, 프로젝트 source code는 아래에 잘 나와 있습니다.

https://code.google.com/p/java-simple-serial-connector/wiki/jSSC_Start_Working

NetBean 프로젝트의 dist 폴더를 확인해 보면, 예제를 이용해서 만들어진 SE8SerialTest.jar(프로젝트명을 SE8SerialTest로 만들었다) 파일과 lib 디렉토리에 jssc.jar를 확인할 수 있다.

이 파일 및 폴더를 라스베리파이의 적당한 폴더에 옮기고, 실행 해 보면 아래와 같은 결과를 얻을 수 있습니다.

이때, PuTTy를 통해서, 아래와 같은 결과를 볼 수 있습니다.

Tuesday Mar 18, 2014

Java SE 8 is Now Available!!

어제 밤 사이에 Java SE 8이 릴리즈 되었습니다. 

Java SE 8 과 함께 Java SE Embedded 8 도 함께 릴리즈 되었습니다.

Java SE 8 download

Java SE Embedded 8 download

이번 릴리즈의 주요 특징 중의 하나는 임베디드 디바이스를 위한 Java SE Embedded의 Compact Profiles입니다.

간단히 말씀드리면, Java SE Embedded를 기능별로 Compact1/Compact2/Compact3/Full 로 나누고, 그 크기도 약 10M까지 줄어들게 됩니다.

자세한 내용은 아래  Java Source Blog를 참조하세요.

Java SE 8 is Now Available

Java ME Embedded 8 Online Course start March 31st

MOOC video라스베리파이를 활용한 온라인 Java ME Course 3 31일부터 시작한다.

이 코스의 소개 동영상은 왼쪽 이미지를 클릭하면 볼 수 있다.

해당 코스에 대한 자세한 내용은 아래 링크를 통해서 가입할 수 있고, 이후 이 블로그를 통해서 자세한 내용을 공유할 예정이다.

Online Course Link

이 코스의 내용은 다음과 같다.

농부들이 경작한 곡물들을 안전하게 유통회사에 전달하기 원하지만, 농작물이 변질되는 경우가 발생한다. 운반회사는 컨테이너로부터 정보를 수집할 수 있는 값싼 솔루션을 개발의뢰를 하게 된다.

이런 시나리오에 맞추어, 라스베리파이와 여러 센서 (온도, 압력, GPS)와 스위치 및 LED를 자바를 이용해서 제어 및 정보를 받고, 이 정보들을 저장하거나 여러 통신 채널을 통해서 전송한다.

이 코스를 통해 학습하기 위해서는 라스베리파이와 주변기기들을 구매해야 하고, 라스베리파이가 있을 경우, 주변기기들만을 구매하면 된다.

각각의 링크는 아래와 같다.

한 full kit 구매

기기 구매

Thursday Mar 13, 2014

Java SE 8 발표

자바 개발자들이 오랫동안 기다리던 Java 8 이 이제 곧 발표될 예정이다.

이를 축하하기 위해, 이클립스 재단과 오라클이 EclipseCon 2014 행사에서 Java 8 Day를 열 예정이다.


https://www.eclipsecon.org/na2014/javaday

행사의 내용은 아래를 참조하시기 바란다.


Java SE 8 에 대한 자세한 정보를 원하시는 분들은 아래 오라클 Java SE 사이트를 통해 자세한 정보를 얻으실 수 있다.


http://www.oracle.com/technetwork/java/javase/overview/java8-2100321.html?ssSourceSiteId=otnes

Tuesday Feb 25, 2014

Java ME Embedded 8 Early Access 2 Release

작년 자바원에 발표된 Java ME Embedded Early Access 버전에 이어, Java ME Embedded 8 Early Access 2가 릴리즈 되었다.

이번에 릴리즈된 Early Access 2의 가장 큰 특징은 Raspberry Pi 이외에, Qualcomm IoT 디바이스 용으로도 같이 릴리즈 되었다는 것이다. 현재 지원되는 HW는 아래와 같다.

l Raspberry Pi Model B (ARM11/Linux)

l Qualcomm IoE (ARM9/Brew MP)

l Windows (via Java ME SDK)

binary document를 받을 수 있는 링크는 아래와 같다.

l Binary Download
http://www.oracle.com/technetwork/java/javame/javamobile/download/sdk/index.html

l Java ME SDK 8 Early Access 2
http://www.oracle.com/technetwork/java/javame/javamobile/download/sdk/java-embedded-me-sdk-8ea-download-2015112.html

l Documentation
http://docs.oracle.com/javame/embedded/embedded.html

Java ME Embedded 8

Java ME Embedded 8을 간단히 소개하자면, Oracle이 작은 Embedded Device를 위해 만든 Platform이고, 3.2, 3.3, 3.4를 거쳐, version 8으로 발전하였다.

3.4에서 8으로 version numbering의 큰 변화를 준 것은, 바로 이 버전이 올해 예정되어 있는 Java SE 8과 같은 연결선 상에 있기 때문이다. 기존의 Java ME Embedded 3.x Language API SUN Microsystems 시절의 Java SE 1.3을 기본으로 하고 있다면, Java ME Embedded 8의 경우, Language API 등 여러 측면에서 Java SE 8을 기반으로 새롭게 구성이 되어 있다.

다시 말하면, 기존에는 Java SE Java ME 간의 code 호환성이 떨어졌기 때문에, 서로 간의 라이브러리 교환이 어려웠다면, 지금은 완벽하지는 않지만, 많은 code들이 Java SE ME 구분 없이 사용 가능할 것으로 본다.

Java ME Embedded에 대해서는 앞선 blog에서 이미 설명을 하였기 때문에, 이번에는 ME Embedded 8 만의 특징을 다루어 보기로 하겠다.

우선 Java ME Embedded는 크게 CLDC 8(Connected Limited Device Configuration) MEEP 8(ME Embedded Profile)로 나뉜다. CLDC의 경우, Java ME Embedded의 심장, 자동차로 말하면 엔진에 해당하는 부분이고, MEEP는 기타 Embedded 환경에 맞추어 필요한 부가 기능이라고 보면 되겠다.

이런 기본 구조 위에, 아래 그림과 같이 여러 기능을 제공하는 API들을 제공해 준다.

[그림 1 Java ME 8 Platform Overview]

Shared Library & Service Provider

Java ME Embedded 8 에서 가장 눈에 띄는 기능은 Shared Library Service Provider 모델이다.

기존 Java ME App의 경우, 자신의 Application Package를 벗어나 다른 Java Library를 동적으로 로딩하거나 참조하는 것이 불가능하였지만, Shared Library를 통해 이제 Library를 다운로드 받아서 사용하고, 다른 Application과 공유하는 것이 가능해졌다.

그리고, Service Provider 모델을 통해, 추상화된 API Service를 통해서, 여러 Service Provider들로부터 서로 다른 구현이 된 라이브러리들을 선택할 수 있는 구조를 가지게 되었다.

이 두 가지 기능을 통해서, Application의 부분 업데이트 및 library 공유 등이 가능해졌다.

[그림 2 Java ME 8: A Service-Enabled Platform]

GCF 8

CLDC 8의 경우, GCF (Generic Connection Framework)의 업그레이드가 눈에 띈다.

아래는 CLDC 8에서 지원하는 Connection API 들이다.

l SecureServerConnection

l SecureDatagramConnection

l ModemConnection

l UDPMulticastConnection

l CommConnection

l HttpConnection

l HttpsConnection

l SecureConnection

l ServerSocketConnection

l SocketConnection

l UDPDatagramConnection

다른 GCF의 추가된 기능들을 정리해 보면 다음과 같다

l IPv6

l UDP Multicast

l TLS protocol enhancements

l DTLS protocol support for TLS over UDP

l Network Utilities like ping

l Modem Connection

l Connection options/parameters support

l Access Point

다양한 Network API들과 보안 관련된 부분이 보완되었다.

MEEP 8

MEEP 8의 가장 큰 특징은 다양한 devicefootprint에 맞추기 위해, 3개의 profile set으로 구분이 되었다는 것이다. profile별로 요구되는 메모리 사이즈도 다르고, 포함되는 기능들도 다르기 때문에, 각 디바이스 제조사들이 자신에게 주어진 디바이스 환경과 기능에 맞추어 선택할 수 있는 폭이 넓어졌다. profile footprint와 기능들은 아래 그림을 참조하시길 바란다.

[그림 3 MEEP 8 Profiles]

이외에, 디바이스 환경에 맞는 여러 API들이 option으로 선택 가능해 졌고, 아래 API들을 나열해 보았다.

l Javax.microedition.swm – software management

l Javax.microedition.cellular – cellular network information

l Javax.microedition.event

l Javax.microedition.power – power management

l Javax.microedition.io – GCF based io

l Javax.microedition.lui – line based ui

l Javax.microedition.key – device key input

l Javax.microedition.media – audio support

l Javax.microedition.rms – data store

Security

앞으로 IoT가 활성화되면, 누구나가 걱정하는 것이 바로 보안문제일 것이다. Java ME Embedded 8의 경우, 특히 보안에 대해 많이 고민하고, Application 설치부터 동작 및 통신에까지 높은 보안 환경을 제공하고 있다.

아래는 ME 8 Application 설치과정을 도식화한 것이다. Authentication Provider, Security Policy Provider들이 Application 설치과정에서 안전한 설치를 돕는다.

[그림 4 Application Provisioning & Management]

Java ME 8의 보안과 관련된 기능들을 아래 간단히 나열해 보면 아래와 같다.

l Trust Model

l Runtime Security

l Security Services – Advanced Cryptography and PKI, TLS 1.2 support

혹시, 영어에 자신이 있거나, 좀 더 자세한 내용을 확인을 원하시는 분은 아래 Terrence Barr의 동영상과 Slide 링크가 있으��� 참조하시기 바란다.

“Introduction into Java Micro Edition (ME) 8″

“Java ME 8 and The Rise of the Internet of Things”

Saturday Feb 22, 2014

자바를 활용한 M2M 디바이스 제어

웨어러블 디바이스, 스마트워치, 스마트그리드, 전기자동차 등 M2M 열풍이 불고 있다. 한 조사에 의하면, 2020년경에는 M2M 디바이스의 개수가 500억 개를 넘어설 것이라고 말한다. 이제 M2M은 우리와 멀리 떨어진 기술이 아닌, 우리 생활 속에서 개개인의 생활 패턴이나, 기호를 분석하고, 이를 바탕으로 삶을 더욱 편리하고 의미 있게 만드는 여러 형태의 서비스의 가장 기본이 된다고 볼 수 있다.

이런 다양한 디바이스의 출현의 바탕은 여러 가지 이유가 있겠지만, 우선 HW 기술의 발달로, 우수한 성능의 하드웨어를 개발자들이 값싸게 구입할 수 있고, 이를 바탕으로 다양한 디바이스를 제공하는 것이 가능해졌다. 많은 개발자들이 과거에 많은 비용과 노력이 들어가서 시도하지 못 했던 여러 아이디어들을 값싸고 구하기 쉬운 하드웨어를 바탕으로, 개인이 M2M 프로젝트를 시작할 수 있는 환경이 만들어진 것이다.

최근에 이런 다양한 개발용 디바이스들을 우리 주변에서 값싸고 쉽게 구입할 수 있다.

대표적인 것이 2012년 첫 출시가 되어, 1년 동안 백 만대 이상이 팔린 라즈베리파이(Raspberry Pi)를 들 수 있다.

라스베리 파이의 경우, 25~35$라는 저렴한 가격에서도, 우수한 성능의 ARM 프로세서를 내장하고 있으며, HDMI, Ethernet, USB, Audio, RCA Video 등 다양한 Output 단자를 가지고 있으며, GPIO, UART, I2C, SPI 등과 같은 주변기기 인터페이스를 지원해서, 다른 기기들의 제어하거나, 통신하는데 우수한 환경을 가지고 있다. 이 디바이스 하나로 1080p full hd 동영상 재생이 가능하면서, 최대 3.5W의 전력소모를 가진다는 것은 여러 면에서 많은 가능성을 보여준다.

[그림1]은 필자가 현재 보유하고 있는 HW의 종류들로, 현재 다양한 데모나 테스트 용도로 사용하고 있다.


[그림1] M2M 개발용 하드웨어

이렇게 다양한 HW 환경 속에서, M2M에 대한 개발환경은 나날이 좋아가고 있지만, 실제 현업에서 일하고 있는 SW 엔지니어들의 이야기를 들어보면, 디바이스 개발이 그리 쉬운 것만은 아니다. 이전보다는 많은 개발환경이 개선이 되었지만, 아직 개인이 아이디어 하나만을 가지고 프로젝트를 시작하기에는 많은 어려움이 있다.

각 디바이스들이 가지는 표준화되지 않은 API들과 개발환경, 빠르게 발전하는 하드웨어 환경과 부족한 라이브러리, 아직 활성화되지 않은 개발자 커뮤니티들은, 서로 비슷한 프로젝트를 하더라도 전혀 다른 개발환경에 적응해야 하는 결과를 종종 볼 수 있다.


[그림2] M2M 개발을 위한 SW환경

이에 이들 M2M 디바이스들의 환경을 통합할 수 있는 플랫폼에 대한 시도가 많아지고 있고, 현재까지 Java Embedded 솔루션의 경우, 표준화된 API를 지원하면서, 다양한 HW 사양과 우수한 개발환경을 지원하는, M2M 의 주요 플랫폼으로 자리잡고 있다.

Java ME Embedded

Java ME Embedded는 스마트미터와 같은 작은 M2M 디바이스를 대상으로 만든 오라클의 Java Embedded 솔루션들 중의 하나이다.

Java ME(Mobile Edition) 의 경우, 이미 오랜 기간, 수 많은 휴대폰에 탑재되어, 게임, 미디어 플레이어, 네비게이션 등 다양한 어플리케이션이 만들어져 왔고, 지금도 많은 개발자들이 이 환경 아래서 여러 어플리케이션들을 만들고 있다.

Java ME Embedded 의 경우, 기존 Java ME 에서 M2M에 필요한 기능들을 가져오고, 새롭게 M2M에 특화된 기능들을 추가하여 만들어졌다.

다음은 Java ME Embedded SW 구조이다.

아래 그림에서 보면, 녹색으로 된 부분이 Java ME로부터 가져온 부분이고, 녹색으로 표시된 부분이 M2M을 위해 새롭게 구현된 부분이라고 할 수 있다.


[그림3] Java ME Embedded SW 구조

그럼 작은 M2M 디바이스에 탑재가 가능한 Java ME Embedded를 이용하여 개발하는 방법에 대해 알아보자.

Java ME Embedded의 경우, Emulator를 포함한 SDK를 제공해 주기 때문에, 디바이스가 아직 준비가 되어 있지 않다고 하더라도, 어플리케이션 개발을 시작할 수가 있다. 그리고 Eclipse Netbeans 와 같은 통합환경을 지원하는 Plug-in도 지원이 되기 때문에, 프로그램의 디버깅과 프로파일링, 디바이스로의 어플리케이션 설치 및 관리가 쉽게 이루어진다.

개발 환경 준비

Java ME SDK의 경우에는 자바가 탑재된 휴대폰을 위한 Java ME Mobile Emulator M2M 디바이스를 위한 Java ME Embedded Emulator가 들어 있다. 하나의 환경으로 2가지 종류의 서로 다른 어플리케이션이 가능한 것이다.


[그림 4] Java ME Embedded / Mobile Emulator

Java ME SDKJava ME 다운로드사이트(http://www.oracle.com/technetwork/java/javame/javamobile/download/sdk/index.html)에서 다운로드를 할 수 있으며, 가장 최신 버전은 Java ME SDK 3.3 Early Access 버젼이다. 미리 말씀드리지만, 이 글이 세상에 나올 때는 Early Access 버전이 아닌, 공식 버전이 나와 있을 수 있다.

Java ME SDK 3.3 Early Access 버전은 공식 버전은 아니지만, 정식 버전인 Java ME SDK 3.2에 비해아래와 같은 주요 기능들이 추가가 되었다.

l 라즈베리파이, KEIL보드(MCBSTM32F20) Java ME 3.3 바이너리 호환

l Java ME Embedded 3.3 주변기기 IO API 추가: UART, ADC/DAC, AT command

l 어플리케이션 메모리 사용 모니터링, 어플리케이션 로그 기능 추가

l 이클립스 Plug-in 기능 보강

Java SE SDK 설치

자바 어플리케이션을 개발하기 위해서는 자바 컴파일러와 여러 툴들이 포함된 JDK(Java Development Kit)이 필요하다. Java SE 다운로드 사이트(http://www.oracle.com/technetwork/java/javase/downloads/index.html) 에서 JDK를 다운받아 설치를 한다.

Java ME SDK 설치

JDK를 설치 완료하였다면, 앞서 언급한 Java ME 다운로드 링크에서 Java ME SDK 3.3 Early Access 버전(oracle-java-me-sdk-3-3-rr-win-bin.exe)Java ME SDK 3.3 Plugins for NetBeans(nb-build-uc-oracle-java-me-sdk-3-3)를 다운로드 받고, Java ME SDK 3.3 Early Access 버전을 설치한다.

NetBeans 설치

NetBeans 의 경우, 다양한 종류의 자바 어플리케이션을 지원하는 통합개발환경이다. 최근에는 HTML5 개발에 대한 기능들을 추가 지원하는 NetBeans 7.3 버전을 발표하였다. NetBeans 공식 사이트(http://netbeans.org/)를 통해 다운로드하고 설치해보자.

NetBeans Plugin 설치

nb-build-uc-oracle-java-me-sdk-3-3.zip 파일의 압축을 원하는 디렉토리에 풀고, NetBeans를 실행하여, NetBeans의 메뉴 Tools > Plugins를 선택해서 Plugin Manager를 연다.

Plugin 메뉴는 아래와 같이 구성되어 있는데, 아래와 같이 “Downloaded” 탭을 선택하고, “Add Plugins” 버튼을 눌러서 압축해제된 모든 “.nbm”(NetBeans Modules) 파일들을 선택한다.


[그림5] NetBeans Plug-in Manager

아래와 같이 모듈들이 선택한 상태에서, “Install” 버튼을 눌러 플러그인 들을 설치한다.


[그림6] NetBeans Plug-in Installation

지금까지 Java ME Embedded 개발 환경을 구성하는 방법에 대해서 알아보았다. 이제 실제로 Java ME Embedded 어플리케이션을 개발해 보자.

자바 어플리케이션 개발

본격적으로 Java ME Embedded 어플리케이션을 만들어 볼 차례이다.

NetBeans를 실행하여, 메뉴 File > New Project를 선택해서 Categories에서 Java ME를 선택한다.

아래 그림 오른쪽 창의 Projects: 에서 Embedded Application 을 선택해서, 프로젝트를 만들게 되면 새로운 Java ME Embedded 어플리케이션을 만들 수 있다.


[그림7 새로운 Java ME Embedded 생성]

Next 버튼을 누르고, 다음 창에서 Finish를 눌러, 어플리케이션을 만들어 보자.

아래와 같은 기본 코드가 생성되면서 프로젝트가 생성되었다.

아래 코드에서 볼 수 있듯이, Java ME Embedded 어플리케이션의 경우, 모두 MIDlet 클래스로부터 상속을 받고, start/pause/destroy 와 같은 기본 라이프사이클을 가진다. 어플리케이션이 시작할 때 필요한 동작은 startApp() 메서드 안에, 멈출 때 동작을 pauseApp(), 마칠 때 동작을 destroyApp() 안에 정의를 한다.

 public class IMlet extends MIDlet {

public void startApp() {
}

public void pauseApp() {
}

public void destroyApp(boolean unconditional) {
}
}

다음은 Java ME Embedded 어플리케이션의 라이프사이클을 그림으로 표현한 것이다.


[그림8 Java ME Embedded 어플리케이션 라이프사이클]

SDK 안에는 기본적으로 제공되는 샘플 어플리케이션들이 포함되어 있다. 이 샘플 어플리케이션을통해 Java ME Embedded 어플리케이션의 기본 동작을 확인하실 수 있다.

아래와 같이, New Project 창에서 SamplesJava ME SDK 3.3를 선택하고, GPIO Demo를 선택해서 프로젝트를 만들어 보자.


[그림9 샘플 어플리케이션, GPIO Demo 생성]

GPIODemo 프로젝트가 생성되면서, GPIODemo.java 를 통해, Java ME Embedded API를 사용한 예제 코드를 확인해 볼 수 있다.

이제 GPIODemo 프로젝트를 선택하고, 마우스 오른쪽 클릭하여 서브메뉴에서 Run을 선택하여, 실행시켜보자.


[그림10 GPIODemo 실행하기]

Java ME Embedded Emulator

아래 그림과 같이 여러 개의 tab이 보이는 Java ME Embedded 에뮬레이터가 동작을 하고, 에뮬레이터를 통해 GPIODemo의 상태나 동작을 확인해 보실 수 있다.


[그림11 GPIODemo가 실행된 Java ME SDK emulator]

각 탭의 내용은 다음과 같다.

l AMS : 설치된 Java ME Embedded 어플리케이션의 상태 및 동작을 제어할 수 있다.

l GPIO Pins : GPIO (General Purpose I/O) 핀들이 Input/Output용인지, 그리고 그 상태를 보여준다.

l GPIO Ports : GPIO Port Input/Output 용인지, 최대값과 현재 값을 보여준다.

l I2C : I2C(Inter-Integrated Circuit)을 통해 보내진 데이터를 다시 전달하는 단순한 에뮬레이션을 지원한다.

l SPI : SPI(Serial Peripheral Interface) I2C와 마찬가지로 보내진 데이터를 에코, 다시 돌려받는 기능을 지원한다.

l MMIO : MMIO(Memory-Mapped I/O)의 경우, 4(TEST_DEVICE, WDOGLOG, RTC, BIG_ENDIAN_DEVICE)의 다른 디바이스 종류를 지원한다.

l ADC : ADC(Analog-to-Digital Converter)의 경우, 각 채널의 정보를 보여주고, 그 값을 보여준다.

l DAC : DAC(Digital-to-Analog Converter) 의 경우, 각 채널의 정보를 보여주고, 해당 데이터를 그래프로 보여준다.

l Pulse Counters : 입력에 대해, Rising Edge/Falling Edge를 선택해서 그 횟수를 센다.

External Events Generator

아래 그림에서 붉은 원으로 표시된, External Events Generator Icon을 누르게 되���, External Events Generator 창이 열리게 된다.

External Events Generator는 에뮬레이션할 때, 외부 장치(버튼, GPIO Input, GPS , )에 의한 값을 가상으로 입력 받아 어플리케이션에게 전달할 수 있도록 만들 프로그램이다.

이 중에서 GPIO가 연결된 버튼을 조작해서, Application에서의 동작을 확인해 보겠다.

아래 그림과 같이 어플리케이션 창과 External Events Generator 창 모두 GPIO 탭을 선택하고, BUTTON1의 버튼을 눌러보자. 버튼의 표시가 High/Low로 변하고, 왼쪽창의 BUTTON1 Value의 값도 변하는 것을 볼 수 있다. 실제 디바이스에서 HW GPIO Port 0에 연결된 BUTTON1을 눌렀을 경우, 해당 입력이 어플리케이션에 전달되어 상태 값이 변하는 것을 볼 수 있다.


[그림12 External Events Generator를 이용해 GPIODemo 어플리케이션 상의 GPIO 입력 값 확인]

이번에는 BUTTON1 아래 Frequency 10, Duration 1000을 넣고, 아래 Run 버튼을 눌러보자.


[그림13 GPIO Wave Generator를 이용해 이벤트 전달]

이번에는 버튼의 눌림이 1초 동안에 10번 반복되는 것을 볼 수 있다.

이제 AMS탭을 선택해서, Stop버튼을 누르게 되면, 실행하던 어플리케이션이 멈추어 사라지는 것을 볼 수 있다.

이렇게 하드웨어 없이도, External Events Generator를 통해 다양한 이벤트를 만들어 어플리케이션 개발과 테스트에 적용할 수 있는 환경을 제공한다.

실제 디바이스에서의 개발

NetBeans 상에서 실제 디바이스와 연결해서 개발을 하기 위해서는, 해당 기기를 NetBeans에 등록을 해야 한다. 아래 그림과 같이 Tools > Java ME > Device Selector를 선택하게 되면, 그림의 왼쪽 아래와 같이 Device Selector 창이 나타나게 된다.


[그림14 Device Selector를 이용해 실제 디바이스 연결]

여기서 붉은 원으로 표시된 아이콘을 클릭하게 되면, Add External Device 버튼을 누르게 되면, 아래 그림과 같이 Add Device 창이 열리면서, 연결하고자 하는 디바이스의 IP주소 입력 창이 나타난다.


[그림15 Device Selector를 이용해 실제 디바이스 연결]

주소를 입력하고, Next를 누르면 자동으로 Java ME Embedded 가 탑재된 디바이스를 검색하게 되고, 찾게 되면 Finish를 눌러 등록을 할 수 있다.

현재 아래 그림은 Keil이라는 디바이스를 등록한 화면이다.


[그림16 Device Selector에 연결된 Keil 보드]

이 디바이스에 GPIODemo 프로젝트를 설치해서 동작하는 방법은, GPIODemo 프로젝트에 마우스 오른쪽 버튼 클릭으로 Property를 선택한 후, 아래와 같이 Device Keil로 선택을 하고, Run시키면 된다.


[그림17 등록한 Keil 보드를 이용해서 어플리케이션 실행]

이렇게 실행시키면, 선택된 어플리케이션이 보드에 자동으로 설치 되고, 보드상에서 테스트해 볼 수 있다. 이외에도, 보드 상에서의 디버깅, 프로파일링, 어플리케이션 메모리 사용 모니터링, 어플리케이션 로그 등 다양한 기능을 Emulator를 사용할 때와 같은 방법으로 사용할 수 있다.

개발 가능한 디바이스

앞서 언급하였듯이, 현재 Java ME Embedded 3.3 binary를 제공하는 디바이스들은 다음과 같다.

l 라즈베리파이

l Keil MCBSTM32F200

[그림18 라즈베리파이] [그림19 KEIL MCBSTM32F200 보드]

디바이스들의 Java ME Embedded 바이너리들은 아래 사이트를 통해 다운받으실 있고, 라스베리파이나 Keil보드의 경우 인터넷을 통해 쉽게 구매할 있다.

http://www.oracle.com/technetwork/java/embedded/downloads/javame/index.html


[그림20 라스베리파이, KEIL 보드용 Java ME Embedded 바이너리 다운로드 링크]

위 링크들로부터 다운로드 받은 Java ME Embedded 바이너리를 설치, 사용하는 기본적인 방법은 아래 비디오에 잘 나와 있다.

Getting started with Java ME Embedded 3.3 on the Keil Board . PART I

http://www.youtube.com/watch?v=LiuDwtLZz3I

Getting started with Java ME Embedded 3.3 on the Keil Board. PART II

http://www.youtube.com/watch?v=SGiULMq_DpY

Getting Started with Oracle Java ME Embedded and Raspberry Pi

http://www.youtube.com/watch?v=nA7AMuTK9sE

결론

앞서 이 글을 시작할 때 언급한 것처럼, 하드웨어와 소프트웨어 환경은 최근 M2M 영역에서도 빠르게 발전해 나가고 있다. 아이디어 하나로 시작해서 M2M 제품을 개발하는 것이 더 이상 남의 일이 아니다. M2M 영역도 기존의 B2B 환경에서 B2C 환경으로 옮겨 가고 있는 것이다.

과거 휴대폰의 다양한 플랫폼에서 스마트폰 플랫폼과 같은 표준화된 플랫폼으로 옮겨오면서 앱스트어를 통해 많은 성공 사례를 보여주었듯이, M2M도 이제는 우수한 소프트웨어 플랫폼을 기반으로 많은 기회를 제공할 것으로 본다.

이런 시장 환경에서 경쟁력을 갖추기 위해서는 Java ME Embedded와 같은 우수한 M2M 개발환경은 이제 선택이 아닌 필수라고 생각한다.

About

Marvin Kim (김홍일)-Oracle

Search

Categories
Archives
« March 2015
SunMonTueWedThuFriSat
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
    
       
Today