SlideShare a Scribd company logo
오픈소스로 쉽게 따라해보는
Unreal(언리얼)과 IoT 연계 및 개발 방법 소개
저자 – 강태욱
laputa99999@gmail.com
2023.2.1
Revion history
날짜 버전 내용 작성자
2021.7.2 0.1 초안 강태욱
2021.7.6 0.5 초안. 리비전. Node.js, Light control etc. 강태욱
2021.7.8 0.6 초안. 강태욱
2021.7.16 0.7 내용 추가 강태욱
2021.7.17 0.8 따라하기 형식으로 1 차 변경. 강태욱
2023.2.1 1.0 오픈 북으로 공개 위해 내용 정리. 강태욱
Table of Contents
머리말 1
1. IoT 란 2
2. 센서란 2
3. Arduino 기반 IoT 데이터 취득 방법 4
3.1 아두이노와 전자 부품 5
3.2 아두이노 개발환경 준비 8
3.3 아두이노 예제 실행 9
3.4 센서 데이터 취득 예제 개발 12
4. 언리얼 기반 IoT 데이터 연결 및 가시화 15
4.1 RS232 기반 센서 장치와 언리얼 연결 15
4.2 Node.js 인터넷 서버 기반 센서 장치와 언리얼 연결 23
5. 마무리 32
Unreal과 IoT 연계 및 개발 방법 소개 © 강태욱 Page 1 of 35
머리말
이 소품은 메타버스 구현이란 제목으로 출판하려했던 내용 중 일부입니다. 2021 년에
시작했었는 데, 함께 하기로 한 분들이 너무 바쁜 상황이라, 거의 2 년 이상 묵혀둔
내용이 되어 버렸습니다.
이 내용을 필요한 분들도 있을 듯하여 eBook으로 정리해 공유합니다. 일부 URL은
너무 오래되어, 최대한 확인해 갱신하였습니다. 이 책은 메타버스나 디지털트윈을
언리얼과 같은 게임엔진으로 개발할 때, IoT와 어떻게 연결해야 하는 지에 대한
기본적인 방법을 다루고 있습니다. 이런 목적에서 내용은 복잡한 부분은 최대한
제거하고, 목적에만 충실히 구현하였습니다.
참고로, 여기에 사용된 언리얼 버전은 Unreal 4 입니다(설치 링크 - https://unreal-
engine.en.uptodown.com/windows). 그럼에도 이 글에서 사용된 기술은 계속
유지관리되고 있으니 활용 가능하시리라 생각합니다.
 언리얼 게임엔진 기반 외부 센서 연결 및 데이터 교환 방법
 아두이노 사용방법
 간단한 Node.js 서버 개발
 IoT 기반 디지털 트윈 및 메타버스 구현
 오픈소스 및 하드웨어 사용법
 사례 소개
이 소품에 설명된 코드는 아래 링크에서 다운로드 받을 수 있습니다.
링크 - https://github.com/mac999/UnrealSensingCube
몇몇 개발 화면 캡쳐 이미지 화질이 나쁘나 소스를 참고해 보시면 도움이 되실 겁니다.
아래 라이선스로 관련 내용을 재활용할 수 있으니 참고하시길 바랍니다.
CC BY-NC
Unreal과 IoT 연계 및 개발 방법 소개 © 강태욱 Page 2 of 35
1. IoT 란
최근 IoT (Internet of Things) 기술이 다양한 분야에 많은 영향을 주기 시작했다. IoT
이전에는 특정 벤더사에 종속된 센서 네트워크를 통해, 데이터를 취득하여,
처리했으며, 인터넷에 연결된 디바이스로, 이런 데이터를 모니터링하기 위해서는
별도의 개발이 필요했다.
IoT는 인터넷에 연결되어 동작되는 장치들을 통칭한다. 이 장치들은 인터넷에 연결된
다른 장치나 서버들과 데이터를 교환할 수 있다.
언리얼이 물리적 환경과 반응하기 위해서는 환경을 센서로 인식하고 처리된 데이터를
컴퓨터로 전달해 본인이 모델링한 알고리즘을 수행할 수 있는 작은 컴퓨터가
필요하다. 최근 컴퓨터 가격이 저렴해져 대안이 많아졌지만 이런 용도로 개발된
초소형 컴퓨터들이 별개로 있다.
아두이노(Arduino), 라스베리파이(Rasberry Pi), 비글본(BeagleBone)와 같은 초소형
컴퓨터는 손바닥보다 작은 크기로 5V전력으로도 동작되며 아날로그 및 디지털 센서를
연결해 데이터를 취득할 수 있다. CPU가 있으므로 모델링된 알고리즘을 실행할 수
있고 처리된 결과를 무선네트웍을 통해 서버에 전송할 수 있다. 반대로 아이폰과 같은
기기와 연동해 데이터를 전송하여 초소형 컴퓨터와 연결된 액추레이터를 작동시킬
수도 있다.
IoT 확산되고 있는 요즘, 언리얼과 IoT 장치를 연결하는 방법을 설명한다.
2. 센서란
주변 환경과 반응하기 위해서는 바람, 온도, 습기와 같은 환경을 전기(전압) 신호로
전달해 주는 센서(Sensor)가 있어야 하며 전기 신호를 받아 움직이는 모터와 같은
액추레이터(Actuator)가 있어야 한다. 이는 소프트웨어를 이용해 특정 알고리즘을
프로그래밍하여 처리하는 데 이때 필요한 센서 신호는 ADC(Analog-to-Digital
Converter) 회로를 통해 디지털 언어로 변환되어 처리된다.
Unreal과 IoT 연계 및 개발 방법 소개 © 강태욱 Page 3 of 35
우리가 살아가는 세계는 물리적 현상이 지배하는 아날로그(analog)의 세상이다.
우리가 느끼는 온도, 습도, 무게, 마찰력 등은 아날로그적으로 표현된다. 예를 들어,
온도가 약간 높거나, 습도가 아주 낮거나 하는 식의 연속적으로 연결된 강도로
느껴진다.
이러한 강도를 컴퓨터가 인식할 수 있는 디지털 데이터(data) 값으로 변환하는 장치를
센서(sensor)라 한다. 센서는 온도, 습도, 힘, 마찰력, 중력, 자세와 같은 수많은 물리적
현상을 측정해 디지털 데이터 신호(digital data signal)로 변환한다.
아두이노와 같은 컴퓨터가 있으면, 센서에서 값을 얻어, 여러가지 계산을 할 수 있다.
또한, 계산한 값을 반대로 물리적 현상으로 재현할 수 있다. 이런 역활을 하는 장치를
액추에이터(actuator)라 한다.
아두이노보드와 각종 센서들
Unreal과 IoT 연계 및 개발 방법 소개 © 강태욱 Page 4 of 35
센서는 여러가지 종류가 있으며 이는 전자부품 온라인 쇼핑몰 등에서 쉽게 구할 수
있다.
피에조 음향, 광 센서, 기울기 및 방향 센서, 온도 센서, 습도 센서, 방향 센서, 거리
측정 센서, 물체 감지 센서, 가속도 센서, 압력 센서, 변형율 센서 등이 있으며 각
센서별 출력 특성이 다르다. 그러므로 출력 특성별로 정규화하는 과정이 필요하다.
또한, 센서에서 출력되는 전압은 불안전하게 튀는 신호가 포함되어 있으므로 안정화
처리할 필요가 있다.
3. Arduino 기반 IoT 데이터 취득 방법
이 글에서는 아두이노 보드에서 센서 데이터를 얻고 언리얼에 그래픽을 출력하는 데
촛점을 맞출 것이다. 이 작업은 언리얼 프로그램에 데이터를 입력하고 아두이노
프로그래머가 그래픽적으로 센서 신호를 볼 수 있도록 할 수 있다. 이런 입력은
아두이노 보드에 붙일 수 있는 어떤 것이든 가능하며, 거리 센서부터 나침판이나 온도,
압력, 변위 등 센서, 로보틱스 기기, 컴퓨터 비전 회로, 네트워크 메쉬 망까지 다양할 수
있다.
아두이노는 물리적인 세계와 디지털 세계를 효과적으로 연결할 수 있는 오픈 소형
하드웨어 플랫폼이다. 마이크로 컨트롤러 보드와 이를 실행할 수 있는 소프트웨어를
포함한 전자 프로토타이핑 플랫폼으로써 많은 분야에 기여하고 있다.
아두이노는 활용 목적에 따라 여러가지 보드 종류를 제공하고 있는 데 여기서는
아두이노 우노(ARDUINO UNO)를 사용할 것이다. 아두이노 우노는 아래와 같은
특징이 있다.
- 마이크로 컨트롤러: ATmega328
Unreal과 IoT 연계 및 개발 방법 소개 © 강태욱 Page 5 of 35
- 구동전압: 5V
- 입력 전압: 7~12V
- 디지털 입출력 핀: 14(이 중 6 개는 PWM출력)
- 아날로그 입력 핀: 6
- 입출력 핀의 DC전류: 40mA
- 3.3V 핀의 DC전류: 50mA
- 플래시 메모리: 32KB(이중 부트로더가 0.5KB 사용함)
- SRAM: 2KB
- EEPROM: 1KB
- 클록속도: 16MHz
데이터는 프로세싱 시리얼(Serial) 라이브러리를 이용해 프로세싱 스케치와 아두이노
보드 사이에 전달될 수 있다. Serial 은 하번에 한 바이트(byte)씩 데이터를 보내는
형식이다. 아두이노에서는 byte는 자료형이며, 0 에서 255 가지 값을 저장할 수 있다.
바이트는 int와 유사하지만 좀 더 작고, 큰 수를 전달해 주기 위해서는 바이트 열로 그
수를 쪼갠 다음 나중에 재조합해야 한다.
3.1 아두이노와 전자 부품
아두이노와 작업할 때 몇 가지 알고 있으면 좋은 전자 부품들이 있다.
브래드보드
전자회로를 쉽게 만들고 구동하기 위해 필요한 부품으로 아래와 같은 모양의 회로를
가지고 있다.
Unreal과 IoT 연계 및 개발 방법 소개 © 강태욱 Page 6 of 35
저항
저항은 회로의 전압이나 전류를 제어할 때 활용한다. 저항 중 크기가 작은 것은 아래와
같이 색상코드로 저항값을 표시하고 있다.
아래는 색상코드이다.
Unreal과 IoT 연계 및 개발 방법 소개 © 강태욱 Page 7 of 35
LED
빛을 내는 발광 다이오드이다. 한쪽 방향으로만 전류를 흘러보낸다. 전류가 흐르면서
발광부에서 빛이 나는 소자이다. LED는 전류가 흐르는 방향인 +/-극성이 있다. 한쪽
다리가 긴쪽이 +극이다.
조도(광) 센서
센서 종류는 매우 다양하지만, 그 중에서 가장 예제로 많이 사용하는 센서는 조도
센서이다. 이 센서는 주변 빛의 밝기를 측정할 수 있다.
Unreal과 IoT 연계 및 개발 방법 소개 © 강태욱 Page 8 of 35
3.2 아두이노 개발환경 준비
1. 아두이노 우노 보드 준비
아두이노 우노 보드는 아마존, 네이버 쇼핑 등에서 구입할 수 있다. 아두이노 우노
스타터키트를 구입하면, 필요한 시리얼 통신 케이블 등이 포함되어 있으니 참고
바란다.
아두이노 우노 스타터 키트(아마존) 및 보드(네이버 쇼핑)
2. 아두이노 개발 환경 설치
아두이노는 편리한 개발을 지원하는 통합 개발 환경 프로그램을 제공한다. 이
프로그램 설치는 해당 홈페이지의 다운로드(https://www.arduino.cc/en/software)에서
받아 설치하면 된다. 설치와 동시에 구동에 필요한 드라이버 등은 자동 설치된다. 설치
후 컴퓨터를 재부팅한다.
Unreal과 IoT 연계 및 개발 방법 소개 © 강태욱 Page 9 of 35
3.3 아두이노 예제 실행
1. 아두이노 개발환경 실행
이제 아두이노 개발환경을 실행한다.
Unreal과 IoT 연계 및 개발 방법 소개 © 강태욱 Page 10 of 35
참고로, 아두이노 개발환경은 무선 통신, 모터, 로봇 등을 제어할 때 필요한
라이브러리를 애드인 형식으로 제공한다. 기본으로 제공하는 라이브러리는 다음과
같다. [스케치][라이브러리 포함하기][라이브러리 관리] 메뉴에서 필요하면 설치해
사용할 수 있다.
2. Blink 예제 불러오기
Unreal과 IoT 연계 및 개발 방법 소개 © 강태욱 Page 11 of 35
다음 그림과 같이 [파일][예제]에 있는 예제파일들을 확인해 본다. 아날로스 센서 값
얻기, 디지털 출력, 모터 제어, 출력 등 다양한 예제들이 보일 것이다. 이 중 Blink
예제를 선택한다.
3. 아두이노 보드 및 통신 포트 설정
아두이노 보드는 종류가 다양하다. 우노 보드는 [도구][보드]에서 설정한다.
컴퓨터와 아두이노의 통신은 보통 시리얼 통신 COM포트를 통해 처리되는 데, 통신
포트 이름을 [도구][시리얼 포트]에서 확인할 수 있다. 이 메뉴에서 활성화되어 있는
포트를 설정한다.
Unreal과 IoT 연계 및 개발 방법 소개 © 강태욱 Page 12 of 35
4. 소스코드 업로드 및 실행
[스케치][업로드] 메뉴를 선택하거나, 다음 그림과 같이 소스코드를 업로드한다.
그럼, 다음과 같이 아두이노 보드의 LED가 1 초마다 깜빡깜빡할 것이다.
3.4 센서 데이터 취득 예제 개발
조도센서를 사용해 빛에 밝기에 따라 LED가 켜지는 실습해 보기로 한다. 이를 위해
조도센서를 이용해 이에 따라 점멸 주기가 바뀌도록 프로그램해본다.
Unreal과 IoT 연계 및 개발 방법 소개 © 강태욱 Page 13 of 35
1. 전자 부품 준비
미리 조도센서, 저항, LED를 준비한다.
 조도센서 x 1
 저항 x 2 (220 옴, 4.7k 옴)
 LED x 2
2. 아두이노 회로 구성
그림과 같이 광센서 핀을 5V와 연결한다. 광센서 다른 핀 연결은 저항, A0 핀, GND를
함께 연결한다. LED는 디지털 출력 D9 번과 GND를 각각 연결한다.
모두 연결한 후에는 아두이노 보드와 컴퓨터를 시리얼 케이블로 연결한다.
3. 코딩하기
소스 코드는 다음과 같다.
#define LED 9
Unreal과 IoT 연계 및 개발 방법 소개 © 강태욱 Page 14 of 35
void setup()
{
pinMode(LED, OUTPUT);
}
void loop()
{
int val = analogRead(A0);
int intensity = map(sensorValue, 0, 1023, 0, 255);
analogWrite(LED, intensity);
delay(100);
}
4. 소스코드 업로드 및 실행
[스케치][업로드] 메뉴를 선택하거나, 다음 그림과 같이 소스코드를 업로드한다. 잠시
후, 아두이노 우노보드에서 자동으로 실행될 것이다. 제대로 회로가 구성되었다면,
광센서 주변 밝기(조도)에 따라 LED가 비례해서 켜질 것이다.
Unreal과 IoT 연계 및 개발 방법 소개 © 강태욱 Page 15 of 35
4. 언리얼 기반 IoT 데이터 연결 및 가시화
4.1 RS232 기반 센서 장치와 언리얼 연결
아두이노와 언리얼(Unreal) 게임엔진을 연결하는 간단한 방법을 설명한다. 이 글은
실시간으로 시리얼 통신에서 얻은 센서값을 언리얼의 액터 메쉬의 머터리얼(재질)
색상에 직접 설정하는 방법을 포함한다. 센서와 언리얼 연결 방법을 보여주기 위해,
별도 상용 언리얼 플러그인을 사용하지 않고, C++에서 통신 모듈을 간단히 개발해
사용한다. 이 글에서 설명하는 같은 방식으로 텍스처, 광원, 메쉬 위치 등을 센서 값에
따라 실시간으로 변경할 수 있다.
이 장의 개발 결과물은 언리얼 화면에서 각 큐브는 물리적 센서에서 얻은 데이터값을
색상으로 표시한다.
개발 환경은 다음과 같다.
 아두이노 IDE설치: https://www.arduino.cc/en/software
구현을 위해, 센서는 아두이노에서 얻은 값을 사용하고, RS232 시리얼 통신을
이용한다.
센서 - 아두이노 보드 - RS232 시리얼 통신 - 언리얼 - 데이터 가시화
주요 개발 순서는 다음과 같다.
1. 아두이노 IDE에서 센서 데이터 획득하는 회로와 프로그램 작성. 아두이노 A0 핀에
광센서 등 사용해 시그널을 A0 에 입력. LED는 9 번핀에 연결.
Unreal과 IoT 연계 및 개발 방법 소개 © 강태욱 Page 16 of 35
코드는 다음과 같음.
const int analogInPin = A0; // Analog input pin that the potentiometer is attached to
const int analogOutPin = 9; // Analog output pin that the LED is attached to
int sensorValue = 0; // value read from the pot
int outputValue = 0; // value output to the PWM (analog out)
void setup() {
Serial.begin(9600);
}
void loop() {
// read the analog in value:
sensorValue = analogRead(analogInPin);
// map it to the range of the analog out:
outputValue = map(sensorValue, 0, 500, 0, 255);
analogWrite(analogOutPin, outputValue);
// print the results to the Serial Monitor:
Unreal과 IoT 연계 및 개발 방법 소개 © 강태욱 Page 17 of 35
Serial.write(outputValue);
delay(50);
}
2. 언리얼 실행. 빈 프로젝트를 C++ 형식으로 생성
3. 블루프린트 작성. 기본 클래스는 Actor에서 파생받음. 이름은 ColoredCube로 설정.
블루프린트에서 Cube 메쉬 객체 설정
4. 액터의 메쉬 객체에 적용할 재질 작성 및 설정. 재질 이름은 Colors로 설정하고
다음과 같이 재질 작성
Unreal과 IoT 연계 및 개발 방법 소개 © 강태욱 Page 18 of 35
LinearInterpolate
ScalarParameter
Unreal과 IoT 연계 및 개발 방법 소개 © 강태욱 Page 19 of 35
5. ColoredCube에 Color 재질을 설정
6. Visual Studio에서 Serial Port로 부터 센서 데이터를 얻는 모듈을 작성. 헤더 파일은
다음과 같음.
#pragma once
#include "CoreMinimal.h"
#include "CoreTypes.h"
/**
*
*/
class IOT6_API SerialPort
{
public:
SerialPort();
~SerialPort();
bool open(const TCHAR* sPort, int nBaud = 9600);
void close();
int write(TArray<uint8>& Buffer);
int read(TArray<uint8>& Buffer);
Unreal과 IoT 연계 및 개발 방법 소개 © 강태욱 Page 20 of 35
private:
void* _PortHandle;
};
7. Visual Studio에서 액터 소스 파일 편집. Serial Port에서 얻은 센서 데이터로 액터
메쉬의 머터리얼을 얻어 생상을 설정함. 주요 코드는 다음과 같음.
#include "ColoredCube.h"
#include "Materials/MaterialInstanceDynamic.h"
#include "Components/StaticMeshComponent.h"
#include "Materials/MaterialInterface.h"
#pragma optimize("", off)
class SerialPortInstance
{
public:
SerialPortInstance();
~SerialPortInstance();
SerialPort _port;
};
SerialPortInstance::SerialPortInstance()
{
_port.open(_T("COM3")); // 이 부분은 각자 시리얼 통신 포트 이름으로 변경해야 함
}
SerialPortInstance::~SerialPortInstance()
{
_port.close();
}
SerialPortInstance _serial;
Unreal과 IoT 연계 및 개발 방법 소개 © 강태욱 Page 21 of 35
// Sets default values
AColoredCube::AColoredCube()
{
// Set this actor to call Tick() every frame. You can turn this off to improve performance if you
don't need it.
PrimaryActorTick.bCanEverTick = true;
}
// Called when the game starts or when spawned
void AColoredCube::BeginPlay() // 최초 액터 생성 시 실행
{
Super::BeginPlay();
auto Cube = FindComponentByClass<UStaticMeshComponent>();
auto Material = Cube->GetMaterial(0);
_DynamicMaterial = UMaterialInstanceDynamic::Create(Material, NULL);
Cube->SetMaterial(0, _DynamicMaterial);
_randomColor = FMath::Rand() % 64;
}
// Called every frame
void AColoredCube::Tick(float DeltaTime) // 프레임 렌더링 전에 호출됨
{
Super::Tick(DeltaTime);
TArray<uint8> Buffer;
Buffer.Add(0);
int len = _serial._port.read(Buffer);
if (len)
{
FString string = FString::Printf(TEXT("Data = %d"), Buffer[0]);
GEngine->AddOnScreenDebugMessage(-1, 15.0f, FColor::Yellow, string);
float blend = ((float)Buffer[0] + _randomColor) / (255.0);
// float blend = 0.5f + FMath::Cos(GetWorld()->TimeSeconds) / 2;
Unreal과 IoT 연계 및 개발 방법 소개 © 강태욱 Page 22 of 35
_DynamicMaterial->SetScalarParameterValue(TEXT("Blend"), blend);
}
}
#pragma optimize("", on)
이 결과는 다음과 같다. 센서 값에 따라 큐브 색상에 실시간으로 변화하는 것을 확인할
수 있다.
이 방법을 응용하면 IoT와 같은 객체에서 얻은 센서값을 언리얼과 연결할 수 있다.
이렇게 연결하여, 물리세계를 게임엔진 기반 3 차원 가상세계로 맵핑하여
가시화하거나 그 반대로 액추에이터를 제어하는 앱을 개발할 수 있다.
Unreal과 IoT 연계 및 개발 방법 소개 © 강태욱 Page 23 of 35
4.2 Node.js 인터넷 서버 기반 센서 장치와 언리얼 연결
이 장은 IoT 연결을 위한 언리얼기반 인터넷 서버 데이터 실시간 획득 방법을 간략히
설명한다. 이 글에서 사용하는 방법을 이용해 IoT와 언리얼을 연결해, 물리 세계와
가상 세계를 연결하는 간단한 메타버스, 디지털 트윈 앱을 개발할 수 있다. 서버
개발은 Node.js를 사용한다.
물리 세계 - 센서 - 아두이노 - 시리얼포트 - 인터넷 서버 - 언리얼 - 가상 디지털 세계
언리얼 네트워크 통신 방법은 다양하다. 제일 편한 방법은 누군가 만들어놓은
플러그인을 사용하는 것이다. 그럼 코딩없이 블루프린트에서 데이터를 교환할 수
있다. 직접 개발하려면 C++을 사용해야 한다. 이 경우, 라이센스 비용 없이 기능을
구현할 수 있고, 실무적으로는 이런 방식이 복잡한 문제인 경우 유연성이 높아 자주
사용한다.
IoT 장치와 연결하기 위해서는 다양한 데이터소스와 연결하는 프로토콜을 구현해야
한다. 데이터소스는 Serial port, Socket, Websocket, HTTPsocket, MQTT, TCP/IP, UDP
외에 MySQL, MongoDB와 같은 데이터베이스가 될 수도 있다. C++로 구현할 경우,
언리얼 개발사에서 제공하는 예제가 그리 많지 않다. 그래서, 소스코드를 확인하고,
개발 문서를 체크해야 한다.
이는 기본 제공하는 SocketIOClient 컴포넌트를 블루프린트에서 개발하는 방법이다.
개발 방법을 이해하기 쉽게, IoT에서 데이터를 받아 그 값을 인터넷으로 방송하는 new
wind서버를 만든다. new wind 토픽의 값은 랜덤값으로 한다. 이 값만 차후 IoT 센서
값으로 변경하면 된다. 개발 순서는 다음과 같다.
1. 아두이노와 Node.js를 연결하기 위해 아두이노 IDE를 실행. IDE의 예제>펌웨어
선택하고, 업로드함
Unreal과 IoT 연계 및 개발 방법 소개 © 강태욱 Page 24 of 35
2. Socket이란 이름의 블루프린터를 액터를 파생받아 생성
3. 블루프린트를 다음과 같이 코딩함
Unreal과 IoT 연계 및 개발 방법 소개 © 강태욱 Page 25 of 35
4. 서버 개발을 위한 폴더 생성 후, node.js 및 패키지 설치
아래 링크에서 node.js를 설치. 각자 운영체제에 맞게 다운로드한 후 설치함
⚫ node.js 다운로드 링크: https://nodejs.org/ko/download
명령창을 실행하고, 아래 명령을 입력함
mkdir IoT_server
cd IoT_server
Unreal과 IoT 연계 및 개발 방법 소개 © 강태욱 Page 26 of 35
npm install --save express
npm install johnny-five --save
npm install serialport
npm i socket.io
npm i http
npm i util
5. 텍스트 편집기를 사용해 server.js 파일 이름으로 코딩. 단, 아래의 "COM3"는 각자
연결된 아두이노 시리얼포트 이름으로 수정해야 함.
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
var util = require('util');
var five = require('johnny-five');
var SerialPort = require("serialport").SerialPort;
var clients = [];
io.on('connection', function(socket){
clients.push(socket.id);
var clientConnectedMsg = 'User connected ' + util.inspect(socket.id) + ', total: ' +
clients.length;
console.log(clientConnectedMsg);
socket.on('disconnect', function(){
clients.pop(socket.id);
Unreal과 IoT 연계 및 개발 방법 소개 © 강태욱 Page 27 of 35
var clientDisconnectedMsg = 'User disconnected ' + util.inspect(socket.id) + ',
total: ' + clients.length;
console.log(clientDisconnectedMsg);
})
});
var sensorValue = 0;
var board = new five.Board({
port: new SerialPort("COM3", { // 각자 아두이노 연결 환경에 맞게 수정요.
baudrate: 9600,
buffersize: 1
})
});
board.on('ready', function () {
var sensor = new five.Sensor("A0");
// Scale the sensor's data from 0-1023 to 0-10 and log changes
sensor.on("change", function() {
sensorValue = this.scaleTo(0, 10);
console.log(sensorValue);
});
});
http.listen(3000, function(){
Unreal과 IoT 연계 및 개발 방법 소개 © 강태욱 Page 28 of 35
console.log('listening on *:3000');
});
function getRandomInRange(min, max) {
return Math.random() * (max - min) + min;
}
function sendWind() {
console.log('Wind sent to user');
io.emit('new wind', sensorValue);
}
setInterval(sendWind, 3000);
6. 서버 실행
node server.js
7. 언리얼 편집기에서 레벨에 개발된 블루프린트 socket 액터를 드래그&드롭함
Unreal과 IoT 연계 및 개발 방법 소개 © 강태욱 Page 29 of 35
8. 언리얼 플레이
다음은 실행 결과이다. 서버로 부터 데이터를 네트워크로 잘 받아오고 있는 것을
확인할 수 있다.
9. 센서값에 따라 조명이 변화하도록 해 보자. 블루프린터로 SensorLight를 만든다.
Unreal과 IoT 연계 및 개발 방법 소개 © 강태욱 Page 30 of 35
다음과 같이 센서 값에 따라 라이트 밝기가 변화하게 코딩해 본다.
10. 개발 결과 실행
개발된 SensorLight를 캔버스에 드래그&드롭한다.
Unreal과 IoT 연계 및 개발 방법 소개 © 강태욱 Page 31 of 35
실행 결과는 다음과 같다. 센서값에 따라 빛 밝기가 변화하는 것을 알 수 있다.
Unreal과 IoT 연계 및 개발 방법 소개 © 강태욱 Page 32 of 35
5. 마무리
이 장에서는 IoT와 언리얼을 연결하기 위한 개발 순서 및 방법들을 살펴보았다. 이를
응용하면, 디지털 트윈과 같이 물리와 가상 세계를 서로 연결해 표현해 줄 수 있는
앱을 언리얼로 쉽게 개발할 수 있을 것이다.

More Related Content

What's hot

레퍼런스만 알면 언리얼 엔진이 제대로 보인다
레퍼런스만 알면 언리얼 엔진이 제대로 보인다레퍼런스만 알면 언리얼 엔진이 제대로 보인다
레퍼런스만 알면 언리얼 엔진이 제대로 보인다
Lee Dustin
 
파이썬 생존 안내서 (자막)
파이썬 생존 안내서 (자막)파이썬 생존 안내서 (자막)
파이썬 생존 안내서 (자막)
Heungsub Lee
 
【Unite Tokyo 2019】Unityとプロシージャルで作るオープンワールド背景
【Unite Tokyo 2019】Unityとプロシージャルで作るオープンワールド背景【Unite Tokyo 2019】Unityとプロシージャルで作るオープンワールド背景
【Unite Tokyo 2019】Unityとプロシージャルで作るオープンワールド背景
UnityTechnologiesJapan002
 
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
현철 조
 
김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019
김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019
김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019
devCAT Studio, NEXON
 
마비노기듀얼 이야기-넥슨 김동건
마비노기듀얼 이야기-넥슨 김동건마비노기듀얼 이야기-넥슨 김동건
마비노기듀얼 이야기-넥슨 김동건
강 민우
 
NDC 2010 이은석 - 마비노기 영웅전 포스트모템 2부
NDC 2010 이은석 - 마비노기 영웅전 포스트모템 2부NDC 2010 이은석 - 마비노기 영웅전 포스트모템 2부
NDC 2010 이은석 - 마비노기 영웅전 포스트모템 2부
Eunseok Yi
 
[IGC2018] 청강대 이득우 - 언리얼에디터확장을위해알아야할것들
[IGC2018] 청강대 이득우 - 언리얼에디터확장을위해알아야할것들[IGC2018] 청강대 이득우 - 언리얼에디터확장을위해알아야할것들
[IGC2018] 청강대 이득우 - 언리얼에디터확장을위해알아야할것들
강 민우
 
[2019] 언리얼 엔진을 통해 살펴보는 리플렉션과 가비지 컬렉션
[2019] 언리얼 엔진을 통해 살펴보는 리플렉션과 가비지 컬렉션[2019] 언리얼 엔진을 통해 살펴보는 리플렉션과 가비지 컬렉션
[2019] 언리얼 엔진을 통해 살펴보는 리플렉션과 가비지 컬렉션
NHN FORWARD
 
Umg ,이벤트 바인딩, Invaidation Box
Umg ,이벤트 바인딩, Invaidation BoxUmg ,이벤트 바인딩, Invaidation Box
Umg ,이벤트 바인딩, Invaidation Box
대영 노
 
김동건, 구세대 개발자의 신세대 플레이어를 위한 게임 만들기, NDC2011
김동건, 구세대 개발자의 신세대 플레이어를 위한 게임 만들기, NDC2011김동건, 구세대 개발자의 신세대 플레이어를 위한 게임 만들기, NDC2011
김동건, 구세대 개발자의 신세대 플레이어를 위한 게임 만들기, NDC2011
devCAT Studio, NEXON
 
게임 개발에 자주 사용되는 디자인 패턴
게임 개발에 자주 사용되는 디자인 패턴게임 개발에 자주 사용되는 디자인 패턴
게임 개발에 자주 사용되는 디자인 패턴
예림 임
 
심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018
심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018
심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018
devCAT Studio, NEXON
 
『禍つヴァールハイト』モバイルにおけるプレイヤー最大100体同時表示可能なグラフィックス最適化について
『禍つヴァールハイト』モバイルにおけるプレイヤー最大100体同時表示可能なグラフィックス最適化について『禍つヴァールハイト』モバイルにおけるプレイヤー最大100体同時表示可能なグラフィックス最適化について
『禍つヴァールハイト』モバイルにおけるプレイヤー最大100体同時表示可能なグラフィックス最適化について
KLab Inc. / Tech
 
UI드자이너의 짧은 언리얼 UMG 사용기
UI드자이너의 짧은 언리얼 UMG 사용기UI드자이너의 짧은 언리얼 UMG 사용기
UI드자이너의 짧은 언리얼 UMG 사용기
Hong-Gi Joe
 
わからないまま使っている?UE4 の AI の基本的なこと
わからないまま使っている?UE4 の AI の基本的なことわからないまま使っている?UE4 の AI の基本的なこと
わからないまま使っている?UE4 の AI の基本的なこと
rarihoma
 
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
devCAT Studio, NEXON
 
【Unity Reflect】足りない要素を追加してみよう~開発導入編~
【Unity Reflect】足りない要素を追加してみよう~開発導入編~【Unity Reflect】足りない要素を追加してみよう~開発導入編~
【Unity Reflect】足りない要素を追加してみよう~開発導入編~
Unity Technologies Japan K.K.
 
멀티스레드 렌더링 (Multithreaded rendering)
멀티스레드 렌더링 (Multithreaded rendering)멀티스레드 렌더링 (Multithreaded rendering)
멀티스레드 렌더링 (Multithreaded rendering)
Bongseok Cho
 

What's hot (20)

레퍼런스만 알면 언리얼 엔진이 제대로 보인다
레퍼런스만 알면 언리얼 엔진이 제대로 보인다레퍼런스만 알면 언리얼 엔진이 제대로 보인다
레퍼런스만 알면 언리얼 엔진이 제대로 보인다
 
파이썬 생존 안내서 (자막)
파이썬 생존 안내서 (자막)파이썬 생존 안내서 (자막)
파이썬 생존 안내서 (자막)
 
【Unite Tokyo 2019】Unityとプロシージャルで作るオープンワールド背景
【Unite Tokyo 2019】Unityとプロシージャルで作るオープンワールド背景【Unite Tokyo 2019】Unityとプロシージャルで作るオープンワールド背景
【Unite Tokyo 2019】Unityとプロシージャルで作るオープンワールド背景
 
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
 
김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019
김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019
김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019
 
마비노기듀얼 이야기-넥슨 김동건
마비노기듀얼 이야기-넥슨 김동건마비노기듀얼 이야기-넥슨 김동건
마비노기듀얼 이야기-넥슨 김동건
 
NDC 2010 이은석 - 마비노기 영웅전 포스트모템 2부
NDC 2010 이은석 - 마비노기 영웅전 포스트모템 2부NDC 2010 이은석 - 마비노기 영웅전 포스트모템 2부
NDC 2010 이은석 - 마비노기 영웅전 포스트모템 2부
 
[IGC2018] 청강대 이득우 - 언리얼에디터확장을위해알아야할것들
[IGC2018] 청강대 이득우 - 언리얼에디터확장을위해알아야할것들[IGC2018] 청강대 이득우 - 언리얼에디터확장을위해알아야할것들
[IGC2018] 청강대 이득우 - 언리얼에디터확장을위해알아야할것들
 
[2019] 언리얼 엔진을 통해 살펴보는 리플렉션과 가비지 컬렉션
[2019] 언리얼 엔진을 통해 살펴보는 리플렉션과 가비지 컬렉션[2019] 언리얼 엔진을 통해 살펴보는 리플렉션과 가비지 컬렉션
[2019] 언리얼 엔진을 통해 살펴보는 리플렉션과 가비지 컬렉션
 
Umg ,이벤트 바인딩, Invaidation Box
Umg ,이벤트 바인딩, Invaidation BoxUmg ,이벤트 바인딩, Invaidation Box
Umg ,이벤트 바인딩, Invaidation Box
 
김동건, 구세대 개발자의 신세대 플레이어를 위한 게임 만들기, NDC2011
김동건, 구세대 개발자의 신세대 플레이어를 위한 게임 만들기, NDC2011김동건, 구세대 개발자의 신세대 플레이어를 위한 게임 만들기, NDC2011
김동건, 구세대 개발자의 신세대 플레이어를 위한 게임 만들기, NDC2011
 
게임 개발에 자주 사용되는 디자인 패턴
게임 개발에 자주 사용되는 디자인 패턴게임 개발에 자주 사용되는 디자인 패턴
게임 개발에 자주 사용되는 디자인 패턴
 
심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018
심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018
심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018
 
『禍つヴァールハイト』モバイルにおけるプレイヤー最大100体同時表示可能なグラフィックス最適化について
『禍つヴァールハイト』モバイルにおけるプレイヤー最大100体同時表示可能なグラフィックス最適化について『禍つヴァールハイト』モバイルにおけるプレイヤー最大100体同時表示可能なグラフィックス最適化について
『禍つヴァールハイト』モバイルにおけるプレイヤー最大100体同時表示可能なグラフィックス最適化について
 
UI드자이너의 짧은 언리얼 UMG 사용기
UI드자이너의 짧은 언리얼 UMG 사용기UI드자이너의 짧은 언리얼 UMG 사용기
UI드자이너의 짧은 언리얼 UMG 사용기
 
わからないまま使っている?UE4 の AI の基本的なこと
わからないまま使っている?UE4 の AI の基本的なことわからないまま使っている?UE4 の AI の基本的なこと
わからないまま使っている?UE4 の AI の基本的なこと
 
게임강연정리
게임강연정리게임강연정리
게임강연정리
 
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
 
【Unity Reflect】足りない要素を追加してみよう~開発導入編~
【Unity Reflect】足りない要素を追加してみよう~開発導入編~【Unity Reflect】足りない要素を追加してみよう~開発導入編~
【Unity Reflect】足りない要素を追加してみよう~開発導入編~
 
멀티스레드 렌더링 (Multithreaded rendering)
멀티스레드 렌더링 (Multithreaded rendering)멀티스레드 렌더링 (Multithreaded rendering)
멀티스레드 렌더링 (Multithreaded rendering)
 

Similar to 오픈소스로 쉽게 따라해보는 Unreal과 IoT 연계 및 개발 방법 소개.pdf

Intel 2014 Business Review & IoT Tech Leadership
Intel 2014 Business Review & IoT Tech LeadershipIntel 2014 Business Review & IoT Tech Leadership
Intel 2014 Business Review & IoT Tech Leadership
JunSeok Seo
 
아이씨엔 매거진- June 2013. Industrial Communication Network MAGAZINE
아이씨엔 매거진- June 2013. Industrial Communication Network MAGAZINE아이씨엔 매거진- June 2013. Industrial Communication Network MAGAZINE
아이씨엔 매거진- June 2013. Industrial Communication Network MAGAZINE
SeungMo Oh
 
아이씨엔 매거진- May 2012. Industrial Communication Network MAGAZINE
아이씨엔 매거진- May 2012. Industrial Communication Network MAGAZINE아이씨엔 매거진- May 2012. Industrial Communication Network MAGAZINE
아이씨엔 매거진- May 2012. Industrial Communication Network MAGAZINE
SeungMo Oh
 
사물인터넷(Internet of Things) 시대의 공개SW
사물인터넷(Internet of Things) 시대의 공개SW사물인터넷(Internet of Things) 시대의 공개SW
사물인터넷(Internet of Things) 시대의 공개SW
정명훈 Jerry Jeong
 
AWS IoT/Edge 서비스 접목을 통한 전자/통신 산업 내 가치 창출 기회 – 이세현 AWS IoT Specialist 솔루션즈 아키텍...
AWS IoT/Edge 서비스 접목을 통한 전자/통신 산업 내 가치 창출 기회 – 이세현 AWS IoT Specialist 솔루션즈 아키텍...AWS IoT/Edge 서비스 접목을 통한 전자/통신 산업 내 가치 창출 기회 – 이세현 AWS IoT Specialist 솔루션즈 아키텍...
AWS IoT/Edge 서비스 접목을 통한 전자/통신 산업 내 가치 창출 기회 – 이세현 AWS IoT Specialist 솔루션즈 아키텍...
Amazon Web Services Korea
 
사물인터넷 비즈니스 사례 분석을 통한 사업화 전략 수립
사물인터넷 비즈니스 사례 분석을 통한 사업화 전략 수립사물인터넷 비즈니스 사례 분석을 통한 사업화 전략 수립
사물인터넷 비즈니스 사례 분석을 통한 사업화 전략 수립
Hakyong Kim
 
TestSDIC2016-1(answer)
TestSDIC2016-1(answer)TestSDIC2016-1(answer)
TestSDIC2016-1(answer)
Yong Heui Cho
 
무선 센서 네트워크 기반 Iot를 위한 통신 기술
무선 센서 네트워크 기반 Iot를 위한 통신 기술무선 센서 네트워크 기반 Iot를 위한 통신 기술
무선 센서 네트워크 기반 Iot를 위한 통신 기술
메가트렌드랩 megatrendlab
 
The Bible of IoTs
The Bible of IoTsThe Bible of IoTs
The Bible of IoTs
Donghyung Shin
 
Mqtt 소개
Mqtt 소개Mqtt 소개
Mqtt 소개
Junho Lee
 
[1C6]오픈소스 하드웨어 플랫폼과 Node.js로 구현하는 IoT 플랫폼
[1C6]오픈소스 하드웨어 플랫폼과 Node.js로 구현하는 IoT 플랫폼[1C6]오픈소스 하드웨어 플랫폼과 Node.js로 구현하는 IoT 플랫폼
[1C6]오픈소스 하드웨어 플랫폼과 Node.js로 구현하는 IoT 플랫폼
NAVER D2
 
사물 인터넷을 넘어 지능형 사물 인터넷 시대로!_강지나 클라우드 솔루션 아키텍트
사물 인터넷을 넘어 지능형 사물 인터넷 시대로!_강지나 클라우드 솔루션 아키텍트사물 인터넷을 넘어 지능형 사물 인터넷 시대로!_강지나 클라우드 솔루션 아키텍트
사물 인터넷을 넘어 지능형 사물 인터넷 시대로!_강지나 클라우드 솔루션 아키텍트
NAVER CLOUD PLATFORMㅣ네이버 클라우드 플랫폼
 
20140219 techdays mini 앱 개발 세미나(4)
20140219 techdays mini  앱 개발 세미나(4) 20140219 techdays mini  앱 개발 세미나(4)
20140219 techdays mini 앱 개발 세미나(4) 영욱 김
 
사물인터넷 기반의 은행권 금융서비스 제공방안
사물인터넷 기반의 은행권 금융서비스 제공방안사물인터넷 기반의 은행권 금융서비스 제공방안
사물인터넷 기반의 은행권 금융서비스 제공방안
메가트렌드랩 megatrendlab
 
사물 인터넷 뽀개기(취업 준비생 용)
사물 인터넷 뽀개기(취업 준비생 용)사물 인터넷 뽀개기(취업 준비생 용)
사물 인터넷 뽀개기(취업 준비생 용)
Donghyung Shin
 
사물인터넷 산업의 주요동향
사물인터넷 산업의 주요동향사물인터넷 산업의 주요동향
사물인터넷 산업의 주요동향
메가트렌드랩 megatrendlab
 
사물인터넷서비스와 클라우드
사물인터넷서비스와 클라우드사물인터넷서비스와 클라우드
사물인터넷서비스와 클라우드
봉조 김
 
아이씨엔 매거진 Feb 2014. Industrial Communication Network MAGAZINE
아이씨엔 매거진 Feb 2014. Industrial Communication Network MAGAZINE아이씨엔 매거진 Feb 2014. Industrial Communication Network MAGAZINE
아이씨엔 매거진 Feb 2014. Industrial Communication Network MAGAZINE
SeungMo Oh
 
[엄마정치 메이커팀] 첫 만남
[엄마정치 메이커팀] 첫 만남[엄마정치 메이커팀] 첫 만남
[엄마정치 메이커팀] 첫 만남
yuna cho
 
20150311 사물인터넷이 여는 새로운 세상 telco
20150311 사물인터넷이 여는 새로운 세상 telco20150311 사물인터넷이 여는 새로운 세상 telco
20150311 사물인터넷이 여는 새로운 세상 telco
Donghyung Shin
 

Similar to 오픈소스로 쉽게 따라해보는 Unreal과 IoT 연계 및 개발 방법 소개.pdf (20)

Intel 2014 Business Review & IoT Tech Leadership
Intel 2014 Business Review & IoT Tech LeadershipIntel 2014 Business Review & IoT Tech Leadership
Intel 2014 Business Review & IoT Tech Leadership
 
아이씨엔 매거진- June 2013. Industrial Communication Network MAGAZINE
아이씨엔 매거진- June 2013. Industrial Communication Network MAGAZINE아이씨엔 매거진- June 2013. Industrial Communication Network MAGAZINE
아이씨엔 매거진- June 2013. Industrial Communication Network MAGAZINE
 
아이씨엔 매거진- May 2012. Industrial Communication Network MAGAZINE
아이씨엔 매거진- May 2012. Industrial Communication Network MAGAZINE아이씨엔 매거진- May 2012. Industrial Communication Network MAGAZINE
아이씨엔 매거진- May 2012. Industrial Communication Network MAGAZINE
 
사물인터넷(Internet of Things) 시대의 공개SW
사물인터넷(Internet of Things) 시대의 공개SW사물인터넷(Internet of Things) 시대의 공개SW
사물인터넷(Internet of Things) 시대의 공개SW
 
AWS IoT/Edge 서비스 접목을 통한 전자/통신 산업 내 가치 창출 기회 – 이세현 AWS IoT Specialist 솔루션즈 아키텍...
AWS IoT/Edge 서비스 접목을 통한 전자/통신 산업 내 가치 창출 기회 – 이세현 AWS IoT Specialist 솔루션즈 아키텍...AWS IoT/Edge 서비스 접목을 통한 전자/통신 산업 내 가치 창출 기회 – 이세현 AWS IoT Specialist 솔루션즈 아키텍...
AWS IoT/Edge 서비스 접목을 통한 전자/통신 산업 내 가치 창출 기회 – 이세현 AWS IoT Specialist 솔루션즈 아키텍...
 
사물인터넷 비즈니스 사례 분석을 통한 사업화 전략 수립
사물인터넷 비즈니스 사례 분석을 통한 사업화 전략 수립사물인터넷 비즈니스 사례 분석을 통한 사업화 전략 수립
사물인터넷 비즈니스 사례 분석을 통한 사업화 전략 수립
 
TestSDIC2016-1(answer)
TestSDIC2016-1(answer)TestSDIC2016-1(answer)
TestSDIC2016-1(answer)
 
무선 센서 네트워크 기반 Iot를 위한 통신 기술
무선 센서 네트워크 기반 Iot를 위한 통신 기술무선 센서 네트워크 기반 Iot를 위한 통신 기술
무선 센서 네트워크 기반 Iot를 위한 통신 기술
 
The Bible of IoTs
The Bible of IoTsThe Bible of IoTs
The Bible of IoTs
 
Mqtt 소개
Mqtt 소개Mqtt 소개
Mqtt 소개
 
[1C6]오픈소스 하드웨어 플랫폼과 Node.js로 구현하는 IoT 플랫폼
[1C6]오픈소스 하드웨어 플랫폼과 Node.js로 구현하는 IoT 플랫폼[1C6]오픈소스 하드웨어 플랫폼과 Node.js로 구현하는 IoT 플랫폼
[1C6]오픈소스 하드웨어 플랫폼과 Node.js로 구현하는 IoT 플랫폼
 
사물 인터넷을 넘어 지능형 사물 인터넷 시대로!_강지나 클라우드 솔루션 아키텍트
사물 인터넷을 넘어 지능형 사물 인터넷 시대로!_강지나 클라우드 솔루션 아키텍트사물 인터넷을 넘어 지능형 사물 인터넷 시대로!_강지나 클라우드 솔루션 아키텍트
사물 인터넷을 넘어 지능형 사물 인터넷 시대로!_강지나 클라우드 솔루션 아키텍트
 
20140219 techdays mini 앱 개발 세미나(4)
20140219 techdays mini  앱 개발 세미나(4) 20140219 techdays mini  앱 개발 세미나(4)
20140219 techdays mini 앱 개발 세미나(4)
 
사물인터넷 기반의 은행권 금융서비스 제공방안
사물인터넷 기반의 은행권 금융서비스 제공방안사물인터넷 기반의 은행권 금융서비스 제공방안
사물인터넷 기반의 은행권 금융서비스 제공방안
 
사물 인터넷 뽀개기(취업 준비생 용)
사물 인터넷 뽀개기(취업 준비생 용)사물 인터넷 뽀개기(취업 준비생 용)
사물 인터넷 뽀개기(취업 준비생 용)
 
사물인터넷 산업의 주요동향
사물인터넷 산업의 주요동향사물인터넷 산업의 주요동향
사물인터넷 산업의 주요동향
 
사물인터넷서비스와 클라우드
사물인터넷서비스와 클라우드사물인터넷서비스와 클라우드
사물인터넷서비스와 클라우드
 
아이씨엔 매거진 Feb 2014. Industrial Communication Network MAGAZINE
아이씨엔 매거진 Feb 2014. Industrial Communication Network MAGAZINE아이씨엔 매거진 Feb 2014. Industrial Communication Network MAGAZINE
아이씨엔 매거진 Feb 2014. Industrial Communication Network MAGAZINE
 
[엄마정치 메이커팀] 첫 만남
[엄마정치 메이커팀] 첫 만남[엄마정치 메이커팀] 첫 만남
[엄마정치 메이커팀] 첫 만남
 
20150311 사물인터넷이 여는 새로운 세상 telco
20150311 사물인터넷이 여는 새로운 세상 telco20150311 사물인터넷이 여는 새로운 세상 telco
20150311 사물인터넷이 여는 새로운 세상 telco
 

More from Tae wook kang

3D 모델러 ADDIN 개발과정 요약
3D 모델러 ADDIN 개발과정 요약3D 모델러 ADDIN 개발과정 요약
3D 모델러 ADDIN 개발과정 요약
Tae wook kang
 
Python과 node.js기반 데이터 분석 및 가시화
Python과 node.js기반 데이터 분석 및 가시화Python과 node.js기반 데이터 분석 및 가시화
Python과 node.js기반 데이터 분석 및 가시화
Tae wook kang
 
BIM 표준과 구현 (standard and development)
BIM 표준과 구현 (standard and development)BIM 표준과 구현 (standard and development)
BIM 표준과 구현 (standard and development)
Tae wook kang
 
ISO 19166 BIM-GIS conceptual mapping
ISO 19166 BIM-GIS conceptual mappingISO 19166 BIM-GIS conceptual mapping
ISO 19166 BIM-GIS conceptual mapping
Tae wook kang
 
SBF(Scan-BIM-Field) 기반 스마트 시설물 관리 기술 개발
SBF(Scan-BIM-Field) 기반 스마트 시설물 관리 기술 개발SBF(Scan-BIM-Field) 기반 스마트 시설물 관리 기술 개발
SBF(Scan-BIM-Field) 기반 스마트 시설물 관리 기술 개발
Tae wook kang
 
오픈소스 ROS기반 건설 로보틱스 기술 개발
오픈소스 ROS기반 건설 로보틱스 기술 개발오픈소스 ROS기반 건설 로보틱스 기술 개발
오픈소스 ROS기반 건설 로보틱스 기술 개발
Tae wook kang
 
한국 건설 기술 전망과 건설 테크 스타트업 소개
한국 건설 기술 전망과 건설 테크 스타트업 소개한국 건설 기술 전망과 건설 테크 스타트업 소개
한국 건설 기술 전망과 건설 테크 스타트업 소개
Tae wook kang
 
Coding, maker and SDP
Coding, maker and SDPCoding, maker and SDP
Coding, maker and SDP
Tae wook kang
 
오픈 데이터, 팹시티와 메이커
오픈 데이터, 팹시티와 메이커오픈 데이터, 팹시티와 메이커
오픈 데이터, 팹시티와 메이커
Tae wook kang
 
AI - Media Art. 인공지능과 미디어아트
AI - Media Art. 인공지능과 미디어아트AI - Media Art. 인공지능과 미디어아트
AI - Media Art. 인공지능과 미디어아트
Tae wook kang
 
ISO 19166 BIM to GIS conceptual mapping China (WUHAN) meeting
ISO 19166 BIM to GIS conceptual mapping China (WUHAN) meetingISO 19166 BIM to GIS conceptual mapping China (WUHAN) meeting
ISO 19166 BIM to GIS conceptual mapping China (WUHAN) meeting
Tae wook kang
 
건설 스타트업과 오픈소스
건설 스타트업과 오픈소스건설 스타트업과 오픈소스
건설 스타트업과 오픈소스
Tae wook kang
 
블록체인 기반 건설 스마트 서비스와 계약
블록체인 기반 건설 스마트 서비스와 계약블록체인 기반 건설 스마트 서비스와 계약
블록체인 기반 건설 스마트 서비스와 계약
Tae wook kang
 
4차산업혁명과 건설, 그리고 블록체인
4차산업혁명과 건설, 그리고 블록체인4차산업혁명과 건설, 그리고 블록체인
4차산업혁명과 건설, 그리고 블록체인
Tae wook kang
 
Case Study about BIM on GIS platform development project with the standard model
Case Study about BIM on GIS platform development project with the standard modelCase Study about BIM on GIS platform development project with the standard model
Case Study about BIM on GIS platform development project with the standard model
Tae wook kang
 
도시 인프라 공간정보 데이터 커넥션-통합 기술 표준화를 위한 ISO TC211 19166 개발 이야기
도시 인프라 공간정보 데이터 커넥션-통합 기술 표준화를 위한 ISO TC211 19166 개발 이야기 도시 인프라 공간정보 데이터 커넥션-통합 기술 표준화를 위한 ISO TC211 19166 개발 이야기
도시 인프라 공간정보 데이터 커넥션-통합 기술 표준화를 위한 ISO TC211 19166 개발 이야기
Tae wook kang
 
Smart BIM for Facility Management
Smart BIM for Facility ManagementSmart BIM for Facility Management
Smart BIM for Facility Management
Tae wook kang
 
메이커 시티와 메이커 운동 참여를 통해 얻은 것
메이커 시티와 메이커 운동 참여를 통해 얻은 것메이커 시티와 메이커 운동 참여를 통해 얻은 것
메이커 시티와 메이커 운동 참여를 통해 얻은 것
Tae wook kang
 
최신 3차원 이미지 스캔 역설계 기술 전망 및 건설 활용
최신 3차원 이미지 스캔 역설계 기술 전망 및 건설 활용최신 3차원 이미지 스캔 역설계 기술 전망 및 건설 활용
최신 3차원 이미지 스캔 역설계 기술 전망 및 건설 활용
Tae wook kang
 
IoT 기반 건설 지능화와 BIM
IoT 기반 건설 지능화와 BIMIoT 기반 건설 지능화와 BIM
IoT 기반 건설 지능화와 BIM
Tae wook kang
 

More from Tae wook kang (20)

3D 모델러 ADDIN 개발과정 요약
3D 모델러 ADDIN 개발과정 요약3D 모델러 ADDIN 개발과정 요약
3D 모델러 ADDIN 개발과정 요약
 
Python과 node.js기반 데이터 분석 및 가시화
Python과 node.js기반 데이터 분석 및 가시화Python과 node.js기반 데이터 분석 및 가시화
Python과 node.js기반 데이터 분석 및 가시화
 
BIM 표준과 구현 (standard and development)
BIM 표준과 구현 (standard and development)BIM 표준과 구현 (standard and development)
BIM 표준과 구현 (standard and development)
 
ISO 19166 BIM-GIS conceptual mapping
ISO 19166 BIM-GIS conceptual mappingISO 19166 BIM-GIS conceptual mapping
ISO 19166 BIM-GIS conceptual mapping
 
SBF(Scan-BIM-Field) 기반 스마트 시설물 관리 기술 개발
SBF(Scan-BIM-Field) 기반 스마트 시설물 관리 기술 개발SBF(Scan-BIM-Field) 기반 스마트 시설물 관리 기술 개발
SBF(Scan-BIM-Field) 기반 스마트 시설물 관리 기술 개발
 
오픈소스 ROS기반 건설 로보틱스 기술 개발
오픈소스 ROS기반 건설 로보틱스 기술 개발오픈소스 ROS기반 건설 로보틱스 기술 개발
오픈소스 ROS기반 건설 로보틱스 기술 개발
 
한국 건설 기술 전망과 건설 테크 스타트업 소개
한국 건설 기술 전망과 건설 테크 스타트업 소개한국 건설 기술 전망과 건설 테크 스타트업 소개
한국 건설 기술 전망과 건설 테크 스타트업 소개
 
Coding, maker and SDP
Coding, maker and SDPCoding, maker and SDP
Coding, maker and SDP
 
오픈 데이터, 팹시티와 메이커
오픈 데이터, 팹시티와 메이커오픈 데이터, 팹시티와 메이커
오픈 데이터, 팹시티와 메이커
 
AI - Media Art. 인공지능과 미디어아트
AI - Media Art. 인공지능과 미디어아트AI - Media Art. 인공지능과 미디어아트
AI - Media Art. 인공지능과 미디어아트
 
ISO 19166 BIM to GIS conceptual mapping China (WUHAN) meeting
ISO 19166 BIM to GIS conceptual mapping China (WUHAN) meetingISO 19166 BIM to GIS conceptual mapping China (WUHAN) meeting
ISO 19166 BIM to GIS conceptual mapping China (WUHAN) meeting
 
건설 스타트업과 오픈소스
건설 스타트업과 오픈소스건설 스타트업과 오픈소스
건설 스타트업과 오픈소스
 
블록체인 기반 건설 스마트 서비스와 계약
블록체인 기반 건설 스마트 서비스와 계약블록체인 기반 건설 스마트 서비스와 계약
블록체인 기반 건설 스마트 서비스와 계약
 
4차산업혁명과 건설, 그리고 블록체인
4차산업혁명과 건설, 그리고 블록체인4차산업혁명과 건설, 그리고 블록체인
4차산업혁명과 건설, 그리고 블록체인
 
Case Study about BIM on GIS platform development project with the standard model
Case Study about BIM on GIS platform development project with the standard modelCase Study about BIM on GIS platform development project with the standard model
Case Study about BIM on GIS platform development project with the standard model
 
도시 인프라 공간정보 데이터 커넥션-통합 기술 표준화를 위한 ISO TC211 19166 개발 이야기
도시 인프라 공간정보 데이터 커넥션-통합 기술 표준화를 위한 ISO TC211 19166 개발 이야기 도시 인프라 공간정보 데이터 커넥션-통합 기술 표준화를 위한 ISO TC211 19166 개발 이야기
도시 인프라 공간정보 데이터 커넥션-통합 기술 표준화를 위한 ISO TC211 19166 개발 이야기
 
Smart BIM for Facility Management
Smart BIM for Facility ManagementSmart BIM for Facility Management
Smart BIM for Facility Management
 
메이커 시티와 메이커 운동 참여를 통해 얻은 것
메이커 시티와 메이커 운동 참여를 통해 얻은 것메이커 시티와 메이커 운동 참여를 통해 얻은 것
메이커 시티와 메이커 운동 참여를 통해 얻은 것
 
최신 3차원 이미지 스캔 역설계 기술 전망 및 건설 활용
최신 3차원 이미지 스캔 역설계 기술 전망 및 건설 활용최신 3차원 이미지 스캔 역설계 기술 전망 및 건설 활용
최신 3차원 이미지 스캔 역설계 기술 전망 및 건설 활용
 
IoT 기반 건설 지능화와 BIM
IoT 기반 건설 지능화와 BIMIoT 기반 건설 지능화와 BIM
IoT 기반 건설 지능화와 BIM
 

오픈소스로 쉽게 따라해보는 Unreal과 IoT 연계 및 개발 방법 소개.pdf

  • 1. 오픈소스로 쉽게 따라해보는 Unreal(언리얼)과 IoT 연계 및 개발 방법 소개 저자 – 강태욱 laputa99999@gmail.com 2023.2.1
  • 2. Revion history 날짜 버전 내용 작성자 2021.7.2 0.1 초안 강태욱 2021.7.6 0.5 초안. 리비전. Node.js, Light control etc. 강태욱 2021.7.8 0.6 초안. 강태욱 2021.7.16 0.7 내용 추가 강태욱 2021.7.17 0.8 따라하기 형식으로 1 차 변경. 강태욱 2023.2.1 1.0 오픈 북으로 공개 위해 내용 정리. 강태욱
  • 3. Table of Contents 머리말 1 1. IoT 란 2 2. 센서란 2 3. Arduino 기반 IoT 데이터 취득 방법 4 3.1 아두이노와 전자 부품 5 3.2 아두이노 개발환경 준비 8 3.3 아두이노 예제 실행 9 3.4 센서 데이터 취득 예제 개발 12 4. 언리얼 기반 IoT 데이터 연결 및 가시화 15 4.1 RS232 기반 센서 장치와 언리얼 연결 15 4.2 Node.js 인터넷 서버 기반 센서 장치와 언리얼 연결 23 5. 마무리 32
  • 4. Unreal과 IoT 연계 및 개발 방법 소개 © 강태욱 Page 1 of 35 머리말 이 소품은 메타버스 구현이란 제목으로 출판하려했던 내용 중 일부입니다. 2021 년에 시작했었는 데, 함께 하기로 한 분들이 너무 바쁜 상황이라, 거의 2 년 이상 묵혀둔 내용이 되어 버렸습니다. 이 내용을 필요한 분들도 있을 듯하여 eBook으로 정리해 공유합니다. 일부 URL은 너무 오래되어, 최대한 확인해 갱신하였습니다. 이 책은 메타버스나 디지털트윈을 언리얼과 같은 게임엔진으로 개발할 때, IoT와 어떻게 연결해야 하는 지에 대한 기본적인 방법을 다루고 있습니다. 이런 목적에서 내용은 복잡한 부분은 최대한 제거하고, 목적에만 충실히 구현하였습니다. 참고로, 여기에 사용된 언리얼 버전은 Unreal 4 입니다(설치 링크 - https://unreal- engine.en.uptodown.com/windows). 그럼에도 이 글에서 사용된 기술은 계속 유지관리되고 있으니 활용 가능하시리라 생각합니다.  언리얼 게임엔진 기반 외부 센서 연결 및 데이터 교환 방법  아두이노 사용방법  간단한 Node.js 서버 개발  IoT 기반 디지털 트윈 및 메타버스 구현  오픈소스 및 하드웨어 사용법  사례 소개 이 소품에 설명된 코드는 아래 링크에서 다운로드 받을 수 있습니다. 링크 - https://github.com/mac999/UnrealSensingCube 몇몇 개발 화면 캡쳐 이미지 화질이 나쁘나 소스를 참고해 보시면 도움이 되실 겁니다. 아래 라이선스로 관련 내용을 재활용할 수 있으니 참고하시길 바랍니다. CC BY-NC
  • 5. Unreal과 IoT 연계 및 개발 방법 소개 © 강태욱 Page 2 of 35 1. IoT 란 최근 IoT (Internet of Things) 기술이 다양한 분야에 많은 영향을 주기 시작했다. IoT 이전에는 특정 벤더사에 종속된 센서 네트워크를 통해, 데이터를 취득하여, 처리했으며, 인터넷에 연결된 디바이스로, 이런 데이터를 모니터링하기 위해서는 별도의 개발이 필요했다. IoT는 인터넷에 연결되어 동작되는 장치들을 통칭한다. 이 장치들은 인터넷에 연결된 다른 장치나 서버들과 데이터를 교환할 수 있다. 언리얼이 물리적 환경과 반응하기 위해서는 환경을 센서로 인식하고 처리된 데이터를 컴퓨터로 전달해 본인이 모델링한 알고리즘을 수행할 수 있는 작은 컴퓨터가 필요하다. 최근 컴퓨터 가격이 저렴해져 대안이 많아졌지만 이런 용도로 개발된 초소형 컴퓨터들이 별개로 있다. 아두이노(Arduino), 라스베리파이(Rasberry Pi), 비글본(BeagleBone)와 같은 초소형 컴퓨터는 손바닥보다 작은 크기로 5V전력으로도 동작되며 아날로그 및 디지털 센서를 연결해 데이터를 취득할 수 있다. CPU가 있으므로 모델링된 알고리즘을 실행할 수 있고 처리된 결과를 무선네트웍을 통해 서버에 전송할 수 있다. 반대로 아이폰과 같은 기기와 연동해 데이터를 전송하여 초소형 컴퓨터와 연결된 액추레이터를 작동시킬 수도 있다. IoT 확산되고 있는 요즘, 언리얼과 IoT 장치를 연결하는 방법을 설명한다. 2. 센서란 주변 환경과 반응하기 위해서는 바람, 온도, 습기와 같은 환경을 전기(전압) 신호로 전달해 주는 센서(Sensor)가 있어야 하며 전기 신호를 받아 움직이는 모터와 같은 액추레이터(Actuator)가 있어야 한다. 이는 소프트웨어를 이용해 특정 알고리즘을 프로그래밍하여 처리하는 데 이때 필요한 센서 신호는 ADC(Analog-to-Digital Converter) 회로를 통해 디지털 언어로 변환되어 처리된다.
  • 6. Unreal과 IoT 연계 및 개발 방법 소개 © 강태욱 Page 3 of 35 우리가 살아가는 세계는 물리적 현상이 지배하는 아날로그(analog)의 세상이다. 우리가 느끼는 온도, 습도, 무게, 마찰력 등은 아날로그적으로 표현된다. 예를 들어, 온도가 약간 높거나, 습도가 아주 낮거나 하는 식의 연속적으로 연결된 강도로 느껴진다. 이러한 강도를 컴퓨터가 인식할 수 있는 디지털 데이터(data) 값으로 변환하는 장치를 센서(sensor)라 한다. 센서는 온도, 습도, 힘, 마찰력, 중력, 자세와 같은 수많은 물리적 현상을 측정해 디지털 데이터 신호(digital data signal)로 변환한다. 아두이노와 같은 컴퓨터가 있으면, 센서에서 값을 얻어, 여러가지 계산을 할 수 있다. 또한, 계산한 값을 반대로 물리적 현상으로 재현할 수 있다. 이런 역활을 하는 장치를 액추에이터(actuator)라 한다. 아두이노보드와 각종 센서들
  • 7. Unreal과 IoT 연계 및 개발 방법 소개 © 강태욱 Page 4 of 35 센서는 여러가지 종류가 있으며 이는 전자부품 온라인 쇼핑몰 등에서 쉽게 구할 수 있다. 피에조 음향, 광 센서, 기울기 및 방향 센서, 온도 센서, 습도 센서, 방향 센서, 거리 측정 센서, 물체 감지 센서, 가속도 센서, 압력 센서, 변형율 센서 등이 있으며 각 센서별 출력 특성이 다르다. 그러므로 출력 특성별로 정규화하는 과정이 필요하다. 또한, 센서에서 출력되는 전압은 불안전하게 튀는 신호가 포함되어 있으므로 안정화 처리할 필요가 있다. 3. Arduino 기반 IoT 데이터 취득 방법 이 글에서는 아두이노 보드에서 센서 데이터를 얻고 언리얼에 그래픽을 출력하는 데 촛점을 맞출 것이다. 이 작업은 언리얼 프로그램에 데이터를 입력하고 아두이노 프로그래머가 그래픽적으로 센서 신호를 볼 수 있도록 할 수 있다. 이런 입력은 아두이노 보드에 붙일 수 있는 어떤 것이든 가능하며, 거리 센서부터 나침판이나 온도, 압력, 변위 등 센서, 로보틱스 기기, 컴퓨터 비전 회로, 네트워크 메쉬 망까지 다양할 수 있다. 아두이노는 물리적인 세계와 디지털 세계를 효과적으로 연결할 수 있는 오픈 소형 하드웨어 플랫폼이다. 마이크로 컨트롤러 보드와 이를 실행할 수 있는 소프트웨어를 포함한 전자 프로토타이핑 플랫폼으로써 많은 분야에 기여하고 있다. 아두이노는 활용 목적에 따라 여러가지 보드 종류를 제공하고 있는 데 여기서는 아두이노 우노(ARDUINO UNO)를 사용할 것이다. 아두이노 우노는 아래와 같은 특징이 있다. - 마이크로 컨트롤러: ATmega328
  • 8. Unreal과 IoT 연계 및 개발 방법 소개 © 강태욱 Page 5 of 35 - 구동전압: 5V - 입력 전압: 7~12V - 디지털 입출력 핀: 14(이 중 6 개는 PWM출력) - 아날로그 입력 핀: 6 - 입출력 핀의 DC전류: 40mA - 3.3V 핀의 DC전류: 50mA - 플래시 메모리: 32KB(이중 부트로더가 0.5KB 사용함) - SRAM: 2KB - EEPROM: 1KB - 클록속도: 16MHz 데이터는 프로세싱 시리얼(Serial) 라이브러리를 이용해 프로세싱 스케치와 아두이노 보드 사이에 전달될 수 있다. Serial 은 하번에 한 바이트(byte)씩 데이터를 보내는 형식이다. 아두이노에서는 byte는 자료형이며, 0 에서 255 가지 값을 저장할 수 있다. 바이트는 int와 유사하지만 좀 더 작고, 큰 수를 전달해 주기 위해서는 바이트 열로 그 수를 쪼갠 다음 나중에 재조합해야 한다. 3.1 아두이노와 전자 부품 아두이노와 작업할 때 몇 가지 알고 있으면 좋은 전자 부품들이 있다. 브래드보드 전자회로를 쉽게 만들고 구동하기 위해 필요한 부품으로 아래와 같은 모양의 회로를 가지고 있다.
  • 9. Unreal과 IoT 연계 및 개발 방법 소개 © 강태욱 Page 6 of 35 저항 저항은 회로의 전압이나 전류를 제어할 때 활용한다. 저항 중 크기가 작은 것은 아래와 같이 색상코드로 저항값을 표시하고 있다. 아래는 색상코드이다.
  • 10. Unreal과 IoT 연계 및 개발 방법 소개 © 강태욱 Page 7 of 35 LED 빛을 내는 발광 다이오드이다. 한쪽 방향으로만 전류를 흘러보낸다. 전류가 흐르면서 발광부에서 빛이 나는 소자이다. LED는 전류가 흐르는 방향인 +/-극성이 있다. 한쪽 다리가 긴쪽이 +극이다. 조도(광) 센서 센서 종류는 매우 다양하지만, 그 중에서 가장 예제로 많이 사용하는 센서는 조도 센서이다. 이 센서는 주변 빛의 밝기를 측정할 수 있다.
  • 11. Unreal과 IoT 연계 및 개발 방법 소개 © 강태욱 Page 8 of 35 3.2 아두이노 개발환경 준비 1. 아두이노 우노 보드 준비 아두이노 우노 보드는 아마존, 네이버 쇼핑 등에서 구입할 수 있다. 아두이노 우노 스타터키트를 구입하면, 필요한 시리얼 통신 케이블 등이 포함되어 있으니 참고 바란다. 아두이노 우노 스타터 키트(아마존) 및 보드(네이버 쇼핑) 2. 아두이노 개발 환경 설치 아두이노는 편리한 개발을 지원하는 통합 개발 환경 프로그램을 제공한다. 이 프로그램 설치는 해당 홈페이지의 다운로드(https://www.arduino.cc/en/software)에서 받아 설치하면 된다. 설치와 동시에 구동에 필요한 드라이버 등은 자동 설치된다. 설치 후 컴퓨터를 재부팅한다.
  • 12. Unreal과 IoT 연계 및 개발 방법 소개 © 강태욱 Page 9 of 35 3.3 아두이노 예제 실행 1. 아두이노 개발환경 실행 이제 아두이노 개발환경을 실행한다.
  • 13. Unreal과 IoT 연계 및 개발 방법 소개 © 강태욱 Page 10 of 35 참고로, 아두이노 개발환경은 무선 통신, 모터, 로봇 등을 제어할 때 필요한 라이브러리를 애드인 형식으로 제공한다. 기본으로 제공하는 라이브러리는 다음과 같다. [스케치][라이브러리 포함하기][라이브러리 관리] 메뉴에서 필요하면 설치해 사용할 수 있다. 2. Blink 예제 불러오기
  • 14. Unreal과 IoT 연계 및 개발 방법 소개 © 강태욱 Page 11 of 35 다음 그림과 같이 [파일][예제]에 있는 예제파일들을 확인해 본다. 아날로스 센서 값 얻기, 디지털 출력, 모터 제어, 출력 등 다양한 예제들이 보일 것이다. 이 중 Blink 예제를 선택한다. 3. 아두이노 보드 및 통신 포트 설정 아두이노 보드는 종류가 다양하다. 우노 보드는 [도구][보드]에서 설정한다. 컴퓨터와 아두이노의 통신은 보통 시리얼 통신 COM포트를 통해 처리되는 데, 통신 포트 이름을 [도구][시리얼 포트]에서 확인할 수 있다. 이 메뉴에서 활성화되어 있는 포트를 설정한다.
  • 15. Unreal과 IoT 연계 및 개발 방법 소개 © 강태욱 Page 12 of 35 4. 소스코드 업로드 및 실행 [스케치][업로드] 메뉴를 선택하거나, 다음 그림과 같이 소스코드를 업로드한다. 그럼, 다음과 같이 아두이노 보드의 LED가 1 초마다 깜빡깜빡할 것이다. 3.4 센서 데이터 취득 예제 개발 조도센서를 사용해 빛에 밝기에 따라 LED가 켜지는 실습해 보기로 한다. 이를 위해 조도센서를 이용해 이에 따라 점멸 주기가 바뀌도록 프로그램해본다.
  • 16. Unreal과 IoT 연계 및 개발 방법 소개 © 강태욱 Page 13 of 35 1. 전자 부품 준비 미리 조도센서, 저항, LED를 준비한다.  조도센서 x 1  저항 x 2 (220 옴, 4.7k 옴)  LED x 2 2. 아두이노 회로 구성 그림과 같이 광센서 핀을 5V와 연결한다. 광센서 다른 핀 연결은 저항, A0 핀, GND를 함께 연결한다. LED는 디지털 출력 D9 번과 GND를 각각 연결한다. 모두 연결한 후에는 아두이노 보드와 컴퓨터를 시리얼 케이블로 연결한다. 3. 코딩하기 소스 코드는 다음과 같다. #define LED 9
  • 17. Unreal과 IoT 연계 및 개발 방법 소개 © 강태욱 Page 14 of 35 void setup() { pinMode(LED, OUTPUT); } void loop() { int val = analogRead(A0); int intensity = map(sensorValue, 0, 1023, 0, 255); analogWrite(LED, intensity); delay(100); } 4. 소스코드 업로드 및 실행 [스케치][업로드] 메뉴를 선택하거나, 다음 그림과 같이 소스코드를 업로드한다. 잠시 후, 아두이노 우노보드에서 자동으로 실행될 것이다. 제대로 회로가 구성되었다면, 광센서 주변 밝기(조도)에 따라 LED가 비례해서 켜질 것이다.
  • 18. Unreal과 IoT 연계 및 개발 방법 소개 © 강태욱 Page 15 of 35 4. 언리얼 기반 IoT 데이터 연결 및 가시화 4.1 RS232 기반 센서 장치와 언리얼 연결 아두이노와 언리얼(Unreal) 게임엔진을 연결하는 간단한 방법을 설명한다. 이 글은 실시간으로 시리얼 통신에서 얻은 센서값을 언리얼의 액터 메쉬의 머터리얼(재질) 색상에 직접 설정하는 방법을 포함한다. 센서와 언리얼 연결 방법을 보여주기 위해, 별도 상용 언리얼 플러그인을 사용하지 않고, C++에서 통신 모듈을 간단히 개발해 사용한다. 이 글에서 설명하는 같은 방식으로 텍스처, 광원, 메쉬 위치 등을 센서 값에 따라 실시간으로 변경할 수 있다. 이 장의 개발 결과물은 언리얼 화면에서 각 큐브는 물리적 센서에서 얻은 데이터값을 색상으로 표시한다. 개발 환경은 다음과 같다.  아두이노 IDE설치: https://www.arduino.cc/en/software 구현을 위해, 센서는 아두이노에서 얻은 값을 사용하고, RS232 시리얼 통신을 이용한다. 센서 - 아두이노 보드 - RS232 시리얼 통신 - 언리얼 - 데이터 가시화 주요 개발 순서는 다음과 같다. 1. 아두이노 IDE에서 센서 데이터 획득하는 회로와 프로그램 작성. 아두이노 A0 핀에 광센서 등 사용해 시그널을 A0 에 입력. LED는 9 번핀에 연결.
  • 19. Unreal과 IoT 연계 및 개발 방법 소개 © 강태욱 Page 16 of 35 코드는 다음과 같음. const int analogInPin = A0; // Analog input pin that the potentiometer is attached to const int analogOutPin = 9; // Analog output pin that the LED is attached to int sensorValue = 0; // value read from the pot int outputValue = 0; // value output to the PWM (analog out) void setup() { Serial.begin(9600); } void loop() { // read the analog in value: sensorValue = analogRead(analogInPin); // map it to the range of the analog out: outputValue = map(sensorValue, 0, 500, 0, 255); analogWrite(analogOutPin, outputValue); // print the results to the Serial Monitor:
  • 20. Unreal과 IoT 연계 및 개발 방법 소개 © 강태욱 Page 17 of 35 Serial.write(outputValue); delay(50); } 2. 언리얼 실행. 빈 프로젝트를 C++ 형식으로 생성 3. 블루프린트 작성. 기본 클래스는 Actor에서 파생받음. 이름은 ColoredCube로 설정. 블루프린트에서 Cube 메쉬 객체 설정 4. 액터의 메쉬 객체에 적용할 재질 작성 및 설정. 재질 이름은 Colors로 설정하고 다음과 같이 재질 작성
  • 21. Unreal과 IoT 연계 및 개발 방법 소개 © 강태욱 Page 18 of 35 LinearInterpolate ScalarParameter
  • 22. Unreal과 IoT 연계 및 개발 방법 소개 © 강태욱 Page 19 of 35 5. ColoredCube에 Color 재질을 설정 6. Visual Studio에서 Serial Port로 부터 센서 데이터를 얻는 모듈을 작성. 헤더 파일은 다음과 같음. #pragma once #include "CoreMinimal.h" #include "CoreTypes.h" /** * */ class IOT6_API SerialPort { public: SerialPort(); ~SerialPort(); bool open(const TCHAR* sPort, int nBaud = 9600); void close(); int write(TArray<uint8>& Buffer); int read(TArray<uint8>& Buffer);
  • 23. Unreal과 IoT 연계 및 개발 방법 소개 © 강태욱 Page 20 of 35 private: void* _PortHandle; }; 7. Visual Studio에서 액터 소스 파일 편집. Serial Port에서 얻은 센서 데이터로 액터 메쉬의 머터리얼을 얻어 생상을 설정함. 주요 코드는 다음과 같음. #include "ColoredCube.h" #include "Materials/MaterialInstanceDynamic.h" #include "Components/StaticMeshComponent.h" #include "Materials/MaterialInterface.h" #pragma optimize("", off) class SerialPortInstance { public: SerialPortInstance(); ~SerialPortInstance(); SerialPort _port; }; SerialPortInstance::SerialPortInstance() { _port.open(_T("COM3")); // 이 부분은 각자 시리얼 통신 포트 이름으로 변경해야 함 } SerialPortInstance::~SerialPortInstance() { _port.close(); } SerialPortInstance _serial;
  • 24. Unreal과 IoT 연계 및 개발 방법 소개 © 강태욱 Page 21 of 35 // Sets default values AColoredCube::AColoredCube() { // Set this actor to call Tick() every frame. You can turn this off to improve performance if you don't need it. PrimaryActorTick.bCanEverTick = true; } // Called when the game starts or when spawned void AColoredCube::BeginPlay() // 최초 액터 생성 시 실행 { Super::BeginPlay(); auto Cube = FindComponentByClass<UStaticMeshComponent>(); auto Material = Cube->GetMaterial(0); _DynamicMaterial = UMaterialInstanceDynamic::Create(Material, NULL); Cube->SetMaterial(0, _DynamicMaterial); _randomColor = FMath::Rand() % 64; } // Called every frame void AColoredCube::Tick(float DeltaTime) // 프레임 렌더링 전에 호출됨 { Super::Tick(DeltaTime); TArray<uint8> Buffer; Buffer.Add(0); int len = _serial._port.read(Buffer); if (len) { FString string = FString::Printf(TEXT("Data = %d"), Buffer[0]); GEngine->AddOnScreenDebugMessage(-1, 15.0f, FColor::Yellow, string); float blend = ((float)Buffer[0] + _randomColor) / (255.0); // float blend = 0.5f + FMath::Cos(GetWorld()->TimeSeconds) / 2;
  • 25. Unreal과 IoT 연계 및 개발 방법 소개 © 강태욱 Page 22 of 35 _DynamicMaterial->SetScalarParameterValue(TEXT("Blend"), blend); } } #pragma optimize("", on) 이 결과는 다음과 같다. 센서 값에 따라 큐브 색상에 실시간으로 변화하는 것을 확인할 수 있다. 이 방법을 응용하면 IoT와 같은 객체에서 얻은 센서값을 언리얼과 연결할 수 있다. 이렇게 연결하여, 물리세계를 게임엔진 기반 3 차원 가상세계로 맵핑하여 가시화하거나 그 반대로 액추에이터를 제어하는 앱을 개발할 수 있다.
  • 26. Unreal과 IoT 연계 및 개발 방법 소개 © 강태욱 Page 23 of 35 4.2 Node.js 인터넷 서버 기반 센서 장치와 언리얼 연결 이 장은 IoT 연결을 위한 언리얼기반 인터넷 서버 데이터 실시간 획득 방법을 간략히 설명한다. 이 글에서 사용하는 방법을 이용해 IoT와 언리얼을 연결해, 물리 세계와 가상 세계를 연결하는 간단한 메타버스, 디지털 트윈 앱을 개발할 수 있다. 서버 개발은 Node.js를 사용한다. 물리 세계 - 센서 - 아두이노 - 시리얼포트 - 인터넷 서버 - 언리얼 - 가상 디지털 세계 언리얼 네트워크 통신 방법은 다양하다. 제일 편한 방법은 누군가 만들어놓은 플러그인을 사용하는 것이다. 그럼 코딩없이 블루프린트에서 데이터를 교환할 수 있다. 직접 개발하려면 C++을 사용해야 한다. 이 경우, 라이센스 비용 없이 기능을 구현할 수 있고, 실무적으로는 이런 방식이 복잡한 문제인 경우 유연성이 높아 자주 사용한다. IoT 장치와 연결하기 위해서는 다양한 데이터소스와 연결하는 프로토콜을 구현해야 한다. 데이터소스는 Serial port, Socket, Websocket, HTTPsocket, MQTT, TCP/IP, UDP 외에 MySQL, MongoDB와 같은 데이터베이스가 될 수도 있다. C++로 구현할 경우, 언리얼 개발사에서 제공하는 예제가 그리 많지 않다. 그래서, 소스코드를 확인하고, 개발 문서를 체크해야 한다. 이는 기본 제공하는 SocketIOClient 컴포넌트를 블루프린트에서 개발하는 방법이다. 개발 방법을 이해하기 쉽게, IoT에서 데이터를 받아 그 값을 인터넷으로 방송하는 new wind서버를 만든다. new wind 토픽의 값은 랜덤값으로 한다. 이 값만 차후 IoT 센서 값으로 변경하면 된다. 개발 순서는 다음과 같다. 1. 아두이노와 Node.js를 연결하기 위해 아두이노 IDE를 실행. IDE의 예제>펌웨어 선택하고, 업로드함
  • 27. Unreal과 IoT 연계 및 개발 방법 소개 © 강태욱 Page 24 of 35 2. Socket이란 이름의 블루프린터를 액터를 파생받아 생성 3. 블루프린트를 다음과 같이 코딩함
  • 28. Unreal과 IoT 연계 및 개발 방법 소개 © 강태욱 Page 25 of 35 4. 서버 개발을 위한 폴더 생성 후, node.js 및 패키지 설치 아래 링크에서 node.js를 설치. 각자 운영체제에 맞게 다운로드한 후 설치함 ⚫ node.js 다운로드 링크: https://nodejs.org/ko/download 명령창을 실행하고, 아래 명령을 입력함 mkdir IoT_server cd IoT_server
  • 29. Unreal과 IoT 연계 및 개발 방법 소개 © 강태욱 Page 26 of 35 npm install --save express npm install johnny-five --save npm install serialport npm i socket.io npm i http npm i util 5. 텍스트 편집기를 사용해 server.js 파일 이름으로 코딩. 단, 아래의 "COM3"는 각자 연결된 아두이노 시리얼포트 이름으로 수정해야 함. var app = require('express')(); var http = require('http').Server(app); var io = require('socket.io')(http); var util = require('util'); var five = require('johnny-five'); var SerialPort = require("serialport").SerialPort; var clients = []; io.on('connection', function(socket){ clients.push(socket.id); var clientConnectedMsg = 'User connected ' + util.inspect(socket.id) + ', total: ' + clients.length; console.log(clientConnectedMsg); socket.on('disconnect', function(){ clients.pop(socket.id);
  • 30. Unreal과 IoT 연계 및 개발 방법 소개 © 강태욱 Page 27 of 35 var clientDisconnectedMsg = 'User disconnected ' + util.inspect(socket.id) + ', total: ' + clients.length; console.log(clientDisconnectedMsg); }) }); var sensorValue = 0; var board = new five.Board({ port: new SerialPort("COM3", { // 각자 아두이노 연결 환경에 맞게 수정요. baudrate: 9600, buffersize: 1 }) }); board.on('ready', function () { var sensor = new five.Sensor("A0"); // Scale the sensor's data from 0-1023 to 0-10 and log changes sensor.on("change", function() { sensorValue = this.scaleTo(0, 10); console.log(sensorValue); }); }); http.listen(3000, function(){
  • 31. Unreal과 IoT 연계 및 개발 방법 소개 © 강태욱 Page 28 of 35 console.log('listening on *:3000'); }); function getRandomInRange(min, max) { return Math.random() * (max - min) + min; } function sendWind() { console.log('Wind sent to user'); io.emit('new wind', sensorValue); } setInterval(sendWind, 3000); 6. 서버 실행 node server.js 7. 언리얼 편집기에서 레벨에 개발된 블루프린트 socket 액터를 드래그&드롭함
  • 32. Unreal과 IoT 연계 및 개발 방법 소개 © 강태욱 Page 29 of 35 8. 언리얼 플레이 다음은 실행 결과이다. 서버로 부터 데이터를 네트워크로 잘 받아오고 있는 것을 확인할 수 있다. 9. 센서값에 따라 조명이 변화하도록 해 보자. 블루프린터로 SensorLight를 만든다.
  • 33. Unreal과 IoT 연계 및 개발 방법 소개 © 강태욱 Page 30 of 35 다음과 같이 센서 값에 따라 라이트 밝기가 변화하게 코딩해 본다. 10. 개발 결과 실행 개발된 SensorLight를 캔버스에 드래그&드롭한다.
  • 34. Unreal과 IoT 연계 및 개발 방법 소개 © 강태욱 Page 31 of 35 실행 결과는 다음과 같다. 센서값에 따라 빛 밝기가 변화하는 것을 알 수 있다.
  • 35. Unreal과 IoT 연계 및 개발 방법 소개 © 강태욱 Page 32 of 35 5. 마무리 이 장에서는 IoT와 언리얼을 연결하기 위한 개발 순서 및 방법들을 살펴보았다. 이를 응용하면, 디지털 트윈과 같이 물리와 가상 세계를 서로 연결해 표현해 줄 수 있는 앱을 언리얼로 쉽게 개발할 수 있을 것이다.