임베디드 프로그래밍 Lecture #02 2017. 9. 13
목 차 C/C++ 기반 라즈베리파이 제어 Java 기반 라즈베리파이 제어 wiringPi 라이브러리 설치 LED 제어 테스트 프로그램 Make 툴 사용 NetBeans을 이용한 원격 실행 및 디버깅 Java 기반 라즈베리파이 제어 Java SE embedded 설치 및 jre 패키지 생성 Device IO 패키지 생성 및 설치
C/C++ 기반 라즈베리파이 제어 (1) wiringPi 라이브러리 설치 참고 URL - http://wiringpi.com/download-and-install/ 설치 과정: # sudo apt-get update # sudo apt-get upgrade # sudo apt-get install git-core # cd ~ # git clone git://git.drogon.net/wiringPi # cd ~/wiringPi # git pull origin # ./build
물리적인 Pin 번호와 wiringPi Pin 번호가 다름에 유의 C/C++ 기반 라즈베리파이 제어 (2) wiringPi 라이브러리 검사 # gpio –v # gpio readall 물리적인 Pin 번호와 wiringPi Pin 번호가 다름에 유의
C/C++ 기반 라즈베리파이 제어 (3) LED 제어 테스트 프로그램 – 테스트 회로
C/C++ 기반 라즈베리파이 제어 (4) LED 제어 테스트 프로그램 – 테스트 프로그램: blink.c #include <stdio.h> #include <wiringPi.h> // LED Pin - wiringPi pin 0 is BCM_GPIO 17. #define LED 0 int main (void) { printf ("Raspberry Pi blink\n") ; wiringPiSetup () ; pinMode (LED, OUTPUT) ; for (;;) { digitalWrite (LED, HIGH) ; // On delay (500) ; // mS digitalWrite (LED, LOW) ; // Off delay (500) ; } return 0 ;
C/C++ 기반 라즈베리파이 제어 (5) LED 제어 테스트 프로그램 – 테스트 실행 # gcc –o blink –lwiringPi blink.c # sudo ./blink wiringPi 라이브러리 link 설정
C/C++ 기반 라즈베리파이 제어 (6) LED 제어 테스트 프로그램 – Make 툴 사용: Makefile ifneq ($V,1) Q ?= @ endif #DEBUG = -g -O0 DEBUG = -O3 CC = gcc INCLUDE = -I/usr/local/include CFLAGS = $(DEBUG) -Wall $(INCLUDE) -Winline -pipe LDFLAGS = -L/usr/local/lib LDLIBS = -lwiringPi -lwiringPiDev -lpthread -lm -lcrypt -lrt # Should not alter anything below this line ##################################################### SRC = blink.c OBJ = $(SRC:.c=.o) BINS = $(SRC:.c=) all: $(BINS) blink: blink.o $Q echo [link] $Q $(CC) -o $@ blink.o $(LDFLAGS) $(LDLIBS) .c.o: $Q echo [CC] $< $Q $(CC) -c $(CFLAGS) $< -o $@ clean: $Q echo "[Clean]" $Q rm -f $(OBJ) *~ core tags $(BINS)
C/C++ 기반 라즈베리파이 제어 (7) LED 제어 테스트 프로그램 – Make 툴 사용: Makefile # make or # make all # make clean
C/C++ 기반 라즈베리파이 제어 (8) NetBeans을 이용한 원격 실행 및 디버깅 NetBeans IDE에 개발 호스트 목록에 라즈베리파이 장치 추가 C/C++ Project 생성 코드 작성 원격 실행 및 디버깅
C/C++ 기반 라즈베리파이 제어 (9) NetBeans을 이용한 원격 실행 및 디버깅 NetBeans IDE에 라즈베리파이 장치 추가 arp-scan 툴을 이용하여 라즈베리파이 IP 주소 확인 /etc/hosts 파일에 호스트명(my-raspi) 등록 또는 수정 NetBeans의 “Remote” 툴을 사용하여 장치 추가
C/C++ 기반 라즈베리파이 제어 (10)
C/C++ 기반 라즈베리파이 제어 (12)
C/C++ 기반 라즈베리파이 제어 (13)
C/C++ 기반 라즈베리파이 제어 (14) NetBeans을 이용한 원격 실행 및 디버깅 C/C++ Project 생성
C/C++ 기반 라즈베리파이 제어 (15)
C/C++ 기반 라즈베리파이 제어 (16) NetBeans을 이용한 원격 실행 및 디버깅 코드 작성
C/C++ 기반 라즈베리파이 제어 (17) NetBeans을 이용한 원격 실행 및 디버깅 원격 실행 및 디버깅
Java 기반 라즈베리파이 제어 (1) Java SE Embedded 설치 Java Embedded
Java 기반 라즈베리파이 제어 (2) Java SE Embedded 설치 Java SE Embedded ARM Core에 적합한 J2SE 실행환경
Java 기반 라즈베리파이 제어 (3) Java SE Embedded 설치 Java SE Embedded Profile 교재 pp.35, 표 1-3
Java 기반 라즈베리파이 제어 (4) Java SE Embedded 설치 Host Computer에서의 설치 주의 – Oracle 계정 필요
Java 기반 라즈베리파이 제어 (5) Java SE Embedded 설치 Host Computer에서의 설치 # sudo mv ejdk-8u144-linux-armv6-hflt.tar.gz /opt # cd /opt # sudo tar xvfz ejdk-8u144-linux-armv6-hflt.tar.gz # sudo ln –s ejdk1.8.0_144 ejdk1.8 Java SE Embedded 환경 설정 ~/.bashrc 파일에 다음 명령 추가 export EJDK_HOME=/opt/ejdk1.8 export PATH=$EJDK_HOME/bin:$PATH
Java 기반 라즈베리파이 제어 (6) Java SE Embedded 설치 Java SE Embedded 패키징 jrecreate 명령어 사용 옵션 – 교재 pp.54, 표 2-2 옵션 설명 교재 pp.46~52 참조
Java 기반 라즈베리파이 제어 (7) Java SE Embedded 설치 라즈베리파이의 Java 실행 환경 생성 사용할 라이브러리를 고려하여 적절한 profile 선택 실습에 사용할 라이브러리는 compact1 profile 요구 jrecreate.sh 명령어를 이용하여 실행환경 생성 # cd ~ # mkdir jiot # cd jiot # jrecreate.sh –d jre –vm client –p compact1 –x sunec,nashorn –g
Java 기반 라즈베리파이 제어 (8) Java SE Embedded 설치 라즈베리파이의 Java 실행 환경 생성
Java 기반 라즈베리파이 제어 (9) Java SE Embedded 설치 라즈베리파이의 Java 실행 환경 설치 Samba를 이용하여 생성된 실행 환경을 라즈베리파이에 설치(복사) 파일을 압축하여 전송하여야 링크 복사에 따른 문제를 해결할 수 있다.
Java 기반 라즈베리파이 제어 (10) Java SE Embedded 설치 라즈베리파이의 환경변수 설정 원격 접속을 통해 라즈베리파이에 접속하고, 홈 디렉토리의 .bashrc 파일에 다음 의 설정을 추가한다. export JAVA_HOME=/home/pi/jre export PATH=$JAVA_HOME/bin:$PATH 라즈베리파이 터미널 윈도우에서 java 명령어를 실행하여 버전을 확인한다. # java -version
Java 기반 라즈베리파이 제어 (11)
Java 기반 라즈베리파이 제어 (12) Device IO 패키지 생성 및 설치 Device IO 패키지 개요 http://openjdk.java.net/projects/dio/ http://docs.oracle.com/javame/8.0/api/dio/api/index.html https://wiki.openjdk.java.net/display/dio/Main GPIO, I2C, SPI, UART 등 임베디드 시스템에서 기기간 혹은 전자 부품의 입출력에 필요한 통신 방식을 지원하는 자바 API 라이브러리 OpenJDK 프로젝트에서 지원
Java 기반 라즈베리파이 제어 (13) Device IO 패키지 생성 및 설치 Device IO 패키지 아키텍처
Java 기반 라즈베리파이 제어 (14) Device IO 패키지 생성 및 설치 Device IO API : 교재 pp.103, 표 3-5
Java 기반 라즈베리파이 제어 (15) Device IO 패키지 생성 및 설치 Device IO 패키지 생성 https://wiki.openjdk.java.net/display/dio/Getting+Started # mkdir ~/jiot # cd ~/jiot # sudo apt-get install mercurial # hg clone http://hg.openjdk.java.net/dio/dev # export PI_TOOLS=/usr # export JAVA_HOME=/usr/lib/jvm/jdk-8-oracle-arm-vfp-hflt # cd dev # make
Java 기반 라즈베리파이 제어 (16) Device IO 패키지 생성 및 설치 Device IO 패키지 설치 ~/jiot/dev/build/deviceio/lib 아래의 arm 및 ext 디렉토리에 so 파일과 jar 파일 이 생성됨 Java SE Embedded 실행환경에서 Device IO 라이브러리를 사용하기 위해서는 생 성된 파일을 Java SE Embedded 실행환경으로 복사해주도록 한다. # pwd /home/pi/jiot/dev # cp –r build/deviceio/lib /home/pi/jre
Java 기반 라즈베리파이 제어 (17) LED 제어 테스트 프로그램 no-IDE Tool 프로그래밍 프로젝트 디렉토리 생성 # cd ~/jiot # mkdir led # cd led Java 소스 파일 편집 : 교재 pp.103 참조 # leafpad HelloDIO.java
Java 기반 라즈베리파이 제어 (18) import java.io.IOException; import jdk.dio.DeviceManager; import jdk.dio.gpio.GPIOPin; public class HelloDIO { public static final String LED_PIN = "GPIO17"; public static final int interval = 1000; public static void main(String[] args) { System.out.println("Accessing GPIO...."); try { GPIOPin pin = DeviceManager.open(LED_PIN, GPIOPin.class); boolean value = false; for (int i=0; i<10; i++) { pin.setValue(value = !value); if (value) System.out.println("ON"); else System.out.println("OFF"); Thread.sleep(interval); } } catch (IOException e) { e.printStackTrace(); } catch (InterruptedException e) {
Java 기반 라즈베리파이 제어 (19) LED 제어 테스트 프로그램 H/W Registry 파일 편집 ~/jiot/openjdk/dev/config/dio.properties-raspberrypi 복사 GPIO17 Pin 장치를 출력으로 설정
Java 기반 라즈베리파이 제어 (20) LED 제어 테스트 프로그램 장치 보안 정책 설정 파일 편집 java.policy 파일 편집 # leafpad java.policy grant { permission jdk.dio.DeviceMgmtPermission "*:*", "open"; };
Java 기반 라즈베리파이 제어 (21) LED 제어 테스트 프로그램 자바 실행환경 재설정 # export JAVA_HOME=/home/pi/jre 컴파일 # javac HelloDIO.java –classpath $JAVA_HOME/lib/ext/dio.jar 실행 # java –Djdk.dio.registry=dio.properties-raspberrypi –Djava.security.policy=java.policy HelloDIO
Java 기반 라즈베리파이 제어 (22) NetBeans을 이용한 원격 실행 및 디버깅 원격 Java Platform 설정
Java 기반 라즈베리파이 제어 (23)
Java 기반 라즈베리파이 제어 (24)
Java 기반 라즈베리파이 제어 (25) NetBeans을 이용한 원격 실행 및 디버깅 Java project 생성: HelloLED
Java 기반 라즈베리파이 제어 (26) NetBeans을 이용한 원격 실행 및 디버깅 LED 테스트 소스 파일 편집
Java 기반 라즈베리파이 제어 (27) NetBeans을 이용한 원격 실행 및 디버깅 Device registry & Java security policy 파일 편집 Lib 디렉토리 생성 파일 편집 Build.xml 파일 수정
Java 기반 라즈베리파이 제어 (28)
Java 기반 라즈베리파이 제어 (29)
Java 기반 라즈베리파이 제어 (30)
Java 기반 라즈베리파이 제어 (31) NetBeans을 이용한 원격 실행 및 디버깅 Project property 수정 Source 속성 수정 Run 속성 수정
Java 기반 라즈베리파이 제어 (33)
Java 기반 라즈베리파이 제어 (33)
Java 기반 라즈베리파이 제어 (34)
Java 기반 라즈베리파이 제어 (35)
Java 기반 라즈베리파이 제어 (36) NetBeans을 이용한 원격 실행 및 디버깅 Project 실행 및 디버깅