Device I/O는 GPIO, I2C, SPI, UART 등 임베디드 시스템에서 기기간 혹은 전자 부품의 입출력에 필요한 통신 방식을 지원하기 위한 자바의 기본 API이다.
OpenJDK 프로젝트의 하위 프로젝트로 진행되고 있으며, J2ME에는 기본적으로 포함되어 있지만
J2SE에는 현재까지는 소스코드를 내려받아 컴파일해서 사용하도록 지원하고 있다.
http://openjdk.java.net/projects/dio/
Device I/O 소스를 내려 받기 위하여, mercurial(https://www.mercurial-scm.org/)을 설치한다.
https://wiki.openjdk.java.net/display/dio/Getting+Started
sudo apt-get install mercurial
hg clone http:
//hg.openjdk.java.net/dio/dev
pi@raspberrypi:~ $ export PI_TOOLS=/usr
pi@raspberrypi:~ $ export JAVA_HOME=/usr/lib/jvm/jdk-8-oracle-arm32-vfp-hflt
pi@raspberrypi:~ $ cd dev/
pi@raspberrypi:~/dev $ make
만약 build가 안 된다면, 하기 명령으로 JDK8을 재설치하거나, PI_TOOLS 설정과 JAVA_HOME 설정을 반드시 /home/pi 디렉터리에서 한 후에 /dev 디렉토리로 이동하여 build한다
sudo apt-get update
sudo apt-get install oracle-java8-jdk
sudo chmod +s /usr/lib/jvm/jdk-8-oracle-arm-vfp-hflt/bin/java
Make sure that JDK 8 is your default version by typing:
java -version
앞에서, 자바 SE 임베디드가 "/home/pi/jre"로 설치되어 있으므로, 자바 애플리케이션 실행 시 "lib/arm"에 있는 so 라이브러리와 "home/pi/jre/lib/ext"의 jar 파일 클래스는 기본적으로 참조된다.
그러므로, Device I/O를 자바 SE 임베디드에 설치할 때에는 "build/deviceio/lib" 디렉터리를 "home/pi/jre"에 복사하기만 하면 된다.
pi@raspberrypi:~/dev $ cp -r build/deviceio/lib /home/pi/jre
pi@raspberrypi:~/dev $ ls /home/pi/jre/lib/arm/
client libdio.so libjava_crw_demo.so libjsig.so libnpt.so
jli libdt_socket.so libjava.so libnet.so libverify.so
jvm.cfg libhprof.so libjdwp.so libnio.so libzip.so
pi@raspberrypi:~/dev $ ls /home/pi/jre/lib/ext
dio.jar meta-index sunjce_provider.jar
pi@raspberrypi:~/dev $
CF) 리눅스의 복사 명령어는 cp이며, -r 옵션을 주어야 디렉터리가 복사된다.
Device IO를 host PC에 복사
넷빈즈에서 Devide IO를 이용해 개발하려면 dio.jar 파일이 필요하다.
그러므로 개발 호스트 PC의 프로젝트 디렉터리에 lib 디렉터리를 생성한 후 Winscp를 이용해 dio.jar 파일을 복사한다.
그리고, Device IO를 사용하려면 GPIO, SPI, I2C, UART와 같이 임베디드 장치가 가지고 있는 자원에 대해 설정 정보를 제공해야 하는데, 컴파일한 디렉터리의 config 디렉터리에는 라즈베리 파이 예시를 위한 dio.properties-raspberry 설정 파일이 있다. 이 파일을 WinSCP를 이용해 프로젝트의 lib 디렉터리에 복사한다.
넷빈즈의 "Project" 탭에서 "jot" 프로젝트의 libraries를 선택한 후 "Add JAR/Folder..."를 선택하여 dio.jar 파일을 추가한다.
Device IO 설정 파일 자동 복사 설정
앞에서 복사한 dio.properties-raspberry와 앞으로 생성할 java.policy 파일을 수정할 경우,
자동으로 라즈베리 파이에서 사용되도록 설정한다.
넷빈즈는 컴파일과 실행 등의 모든 과정에 ant 를 사용한다. 프로젝트의 Files 탭을 선택하고 build.xml을 더블클릭하여 하기 설정을 추가한다.
<target name="-post-compile">
<copy file="lib/dio.properties-raspberrypi" todir="${dist.dir}/lib"/>
<copy file="lib/java.policy" todir="${dist.dir}/lib"/>
</target>
예제를 실행하기 위하여,
dio.properties-raspberrypi에서 GPIO 18번 pin에 대한 정보 수정
<before>
4 = deviceType: gpio.GPIOPin, pinNumber:18, name:GPIO18, mode:4, direction:1, predefined:true
18 = deviceType: gpio.GPIOPin, pinNumber:18, name:GPIO18, mode:4, direction:1, predefined:true
실행할 main class를 변경하고
VM option 추가
-Djdk.dio.registry=dist/lib/dio.properties-raspberrypi -Djava.security.policy=dist/lib/java.policy -Djava.library.path=dist/lib
'IoT' 카테고리의 다른 글
아두이노 vs 라즈베리 파이 (0) | 2017.01.29 |
---|---|
라즈베리파이3 (0) | 2016.12.31 |