본문 바로가기

코딩공부/JAVA

[3] 자바 기술의 응용 - 데스크탑 앱 , IoT(사물제어) , 안드로이드 앱

자바로 데스크탑 앱 만들기

데스크탑에 새로운 윈도우가 열리고 Hello World!! 문자를 찍는 앱을 만들어 보자

SwingConstants.LEFT 등 속성값들을 바꿔가보면서 훑어보자

import javax.swing.*;   
import java.awt.Dimension;
import java.awt.Toolkit;
public class HelloWorldGUIApp{
    public static void main(String[] args){
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                JFrame frame = new JFrame("HelloWorld GUI");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setPreferredSize(new Dimension(800, 300));
                JLabel label = new JLabel("Hello World!!", SwingConstants.CENTER);
                frame.getContentPane().add(label);
                Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
                frame.setLocation(dim.width/2-400/2, dim.height/2-300/2);

                frame.pack();
                frame.setVisible(true);
            }
        });
    }
}

 

 

자바로 사물 제어하기(IoT)

사물 인터넷 : 사물이 인터넷에 연결되어서 프로그래밍 적으로 제어 된다.

 

다음은 '라즈베리파이'로 가격은 5만원 정도, 윈도우나 리눅스와 같은 운영체제가 설치되어 있다. 본질적으로는 평범한 컴퓨터 이다.

'저렴하고 작다'는 특징이 있다. 라즈베리파이는 교육용으로 만들어진 사물인터넷 컴퓨터라고 생각하면 된다.

 

라즈베리파이에는 'gpio'라고 부르는 핀이 있다. 자바를 이용해서 라즈베리파이에게 "몇번핀에 전기를 흐르게 해"라고 명령할 수 있다.

이 것이 가능해지면 우리는 원하는 시간에 화분에 물을 줄 수도 있고, 떨어진 집에 있는 전구의 불을 끌 수 있다.

세상에 있는 수많은 사물을 기계적으로 자동화된 방법으로 제어할 수 있게 된다.

 

실습 : 라즈베리파이에 연결된 전구의 불을 켜보자. Hello World 를 모스 부호로 불을 켜자

준비

라즈베리파이에 전원(전기)을 연결

무선으로 키보드와 마우스를 연결

모니터를 연결해서 화면에서 보면서 작업할 수 있다.

 

라즈베리파이의 화면에 자바로 코딩을 한 뒤, 코드를 실행하면 gpio라는 핀에 전기가 흐르면서 led에 불이 들어오게 된다.

라즈베리파이라는 컴퓨터 안에 HelloWorldRaspberryPi.java 라는 파일을 만든 뒤 코드를 작성한다.

 

 

pin.high(); //gpio 핀의 특정한 부분에 전기가 흘러서 led가 켜진다.

final int SHORT_INTERVAL = 200;

Thread.sleep(SHORT_INTERVAL);  //0.2초 만큼 불이 켜진 상태가 유지 된다.

pin.low(); // 전기가 끊겨서 led 불이 꺼진다.

 

위 동작(불이 켜졌다 꺼졌다)을 반복하면서 모스 기호의 'H'라고 하는 텍스트를 표현하게 된다.

import com.pi4j.io.gpio.GpioController;
import com.pi4j.io.gpio.GpioFactory;
import com.pi4j.io.gpio.GpioPinDigitalOutput;
import com.pi4j.io.gpio.PinState;
import com.pi4j.io.gpio.RaspiPin;

public class HelloWorldRaspberryPi {

	public static void main(String[] args) throws InterruptedException {

		final GpioController gpio = GpioFactory.getInstance();
		final GpioPinDigitalOutput pin = gpio.provisionDigitalOutputPin(RaspiPin.GPIO_01, "PinLED", PinState.LOW);
		final int SHORT_INTERVAL = 200;
		final int LONG_INTERVAL = SHORT_INTERVAL * 3;
		final int LETTER_INTERVAL = SHORT_INTERVAL * 7;

		while (true) {
			// H
			pin.high();
			Thread.sleep(SHORT_INTERVAL);
			pin.low();
			Thread.sleep(SHORT_INTERVAL);
			pin.high();
			Thread.sleep(SHORT_INTERVAL);
			pin.low();
			Thread.sleep(SHORT_INTERVAL);
			pin.high();
			Thread.sleep(SHORT_INTERVAL);
			pin.low();
			Thread.sleep(SHORT_INTERVAL);
			pin.high();
			Thread.sleep(SHORT_INTERVAL);
			pin.low();
			Thread.sleep(LETTER_INTERVAL);

			// e
			pin.high();
			Thread.sleep(SHORT_INTERVAL);
			pin.low();
			Thread.sleep(LETTER_INTERVAL);

			// l
			pin.high();
			Thread.sleep(SHORT_INTERVAL);
			pin.low();
			Thread.sleep(SHORT_INTERVAL);

			pin.high();
			Thread.sleep(LONG_INTERVAL);
			pin.low();
			Thread.sleep(SHORT_INTERVAL);

			pin.high();
			Thread.sleep(SHORT_INTERVAL);
			pin.low();
			Thread.sleep(SHORT_INTERVAL);
			pin.high();
			Thread.sleep(SHORT_INTERVAL);
			pin.low();
			Thread.sleep(LONG_INTERVAL);

			// l
			pin.high();
			Thread.sleep(SHORT_INTERVAL);
			pin.low();
			Thread.sleep(SHORT_INTERVAL);

			pin.high();
			Thread.sleep(LONG_INTERVAL);
			pin.low();
			Thread.sleep(SHORT_INTERVAL);

			pin.high();
			Thread.sleep(SHORT_INTERVAL);
			pin.low();
			Thread.sleep(SHORT_INTERVAL);
			pin.high();
			Thread.sleep(SHORT_INTERVAL);
			pin.low();
			Thread.sleep(LONG_INTERVAL);
		}
	}
}

 

라즈베리파이에 이클립스를 설치하지 않고, 터미널에서 javac 를 통해서 컴파일 후, java 명령으로 컴파일된 실행파일을 실행하면, 다음과 같이 전구에 불이 들어오게 된다.

 

 


자바로 안드로이드 앱 만들기

안드로이드를 어떻게 개발하면 되는지에 대한 문서 검색

android development documnetation

https://developer.android.com/docs

 

Android Developers

이 섹션에서는 Android 핸드셋, Wear OS by Google, Android TV, Android Auto, Android Things 등을 빌드하는 데 필요한 가이드와 API 참조를 제공합니다.

developer.android.com

 

[첫 앱 빌드하기]

안드로이드 스튜디오 : 안드로이드를 개발할 때 필요한 여러가지 도구들을 통합해서 제공해주는 무료 개발 도구

 

' Start a new Android Studio project' 선택

Choose your project : 만들고자 하는 안드로이드 앱에 따라 기본적인 코드를 제공해주는 화면

'Empty Activity' 선택 - 아무런 코드도 없는 화면

 

Name : 앱이름

Project location : (Save location) 앱이 위치할 경로

Language : Java

안드로이드 플랫폼에서는 'MainActivity.java'라고 하는 자바파일을 실행하도록 약속되어 있다.

setContentView(R.layout.activity_main); ()안의 내용에 따라서 화면에 보여줘라

R.layout.activity_main : 'res' 디렉토리 > 'layout' 디렉토리 > activity_main.xml 파일을 가르킨다. 

 즉, 안드로이드 앱이 실행될 때, 자바라는 컴퓨터 언어의 문법에 따라서 앱이 실행되면, setContentView(); 안의 R.layout.activity_main를 화면에 출력하라는 의미이고, R.layout.activity_main 는 activity_main.xml 파일로 이 파일에 적혀 있는 내용대로 화면에 출력하게 된다.

MainActivity.java

 

activity_main.xml

 

 하위에 [Disign] 탭을 통해서 시각적으로 내용을 확인할 수 있다.

 

Android Virtual Device Manager : 가상 안드로이드 기기 관리

[Tools] > [AVD manager] : 실제 기기에서 테스트 할 수 없다면 가상의 안드로이드 장치를 만들어서 테스트해볼 수 있다.