
ImJa 솔루션
글 수 23
2015.05.28 11:52:44 (*.134.169.166)
7309
ImJa 보드에서 시리얼 통신에 이어 GPIO를 제어하는 방법을 알아 보겠습니다. ImJa 보드에는 입력과 출력으로 설정해서 사용할 수 있는 GPIO 8개 핀을 제공합니다. 이 글에서 소개하는 샘플에서는 GPIO 8개 핀 중 4개를 출력으로 설정하고 나머지 4개 GPIO 핀을 입력을 설정한 후, GPIO 입력 값에 따라 출력합니다.
Java만으로 GPIO를 제어할 수 있고 사용하는 API도 매우 단순해서 Java 초보자라도 30분 정도 익히면 무리 없이 코드를 작성할 수 있습니다.

프로젝트 생성
ImJa 보드에서 Java 언어만으로 프로그램을 작성하기 위해서는 Java 프로젝트에 ImJa 라이브러리를 사용할 수 있도록 준비해야 합니다. 아래 글을 참고해서 GpioSample 프로젝트를 생성하고 ImJa.jar 파일과 jsch.jar 파일을 lib 폴더에 올립니다. 그리고 컴파일을 위한 build.properties와 build.xml 파일을 생성한 후 Ant에 등록하세요. 물론, 이 방법도 아래 링크에 자세히 나와 있습니다.

▲ 이클립스에 Java 프로젝트를 생성한 후 lib 폴더를 만들고 imja.jar과 jsch.jar 파일을 복사하고 환경 파일에 등록했습니다.

▲ 소스를 생성하기 위해 프로젝트 이름에서 마우스 우측 버튼을 클릭하고 New>>Class를 선택합니다.

▲ Package 이름에 gpioSample를, Name에는 GpioSample를 입력합니다.
프로그램 소스 입력
생성된 소스 파일에 아래 프로그램 소스를 입력합니다.
package imja.sample; import com.falinux.imja.Gpio; import com.falinux.imja.Poll; public class GpioExample extends Gpio { private Poll poll = null; public GpioExample(String driverNm) { super(driverNm); poll = new Poll(); open(); // output address set addOutputAddress(1); addOutputAddress(2); addOutputAddress(3); addOutputAddress(4); // input address set addInputAddress(5); addInputAddress(6); addInputAddress(7); addInputAddress(8); // 출력 초기화 write(1, 0); write(2, 0); write(3, 0); write(4, 0); poll.rebuild(); } @Override public int onDisconnect(long arg0) { // TODO Auto-generated method stub return 0; } @Override public int onError(long arg0) { // TODO Auto-generated method stub return 0; } @Override public int onHup(long arg0) { // TODO Auto-generated method stub return 0; } @Override public int onRead(long arg0) { // TODO Auto-generated method stub return 0; } @Override public int onTimeOut(long arg0) { // TODO Auto-generated method stub return 0; } @Override public int onWrite(long arg0) { // TODO Auto-generated method stub return 0; } private void onTimer() { write(1, read(5) == 1 ? 0:1); write(2, read(6) == 1 ? 0:1); write(3, read(7) == 1 ? 0:1); write(4, read(8) == 1 ? 0:1); } public void run() { long tmCurrent = 0L; long tmBefore = 0L; while (true) { poll.pollDoLoop(100); tmCurrent = System.currentTimeMillis(); if ((tmCurrent - tmBefore) > 300) { tmBefore = tmCurrent; onTimer(); } } } public static void main(String[] args) { new GpioExample( "/dev/dev-imja_gpio").run(); } }

▲ 이클립스에 소스코르를 입력한 모습입니다.
프로젝트 빌드 및 실행

▲ Ant에서 "target_device_upload"를 클릭합니다. Console 패널에 "BUILD SUCESSFUL" 메시지가 나오면 소스 컴파일과 ImJa 보드로 실행 파일이 전송된 것 입니다.

▲ ImJa 보드로 로그인한 후 /home으로 이동합니다. 그리고 아래 명령으로 프로그램을 실행합니다.
# java -cp appGpioSample gpioSample.GpioSample /dev/dev-imja_gpio

▲ (1)입력으로 버튼을 누르면 (2)해당 번호의 LED가 켜집니다.
프로그램 소스를 보면 입력과 출력 제어 부분이 매우 간결하다는 것을 볼 수 있습니다. 다음 글에서 소스를 자세히 분석하겠습니다.