Free songs
logo

Blog Post

3월
26
2014

flash air에서 p2p를 활용한 IOT구현 가능?

우연히 flash 관련 외국사이트에서 개발자중에 요즘유행하는 사물인터넷과 유사한 기능을 Air와 아두이누(?)를 이용해서 구현하는 동영상을 보면서 여러 링크를 타고 들어가보니 AS3의 p2p기능을 이용한 것이여서 샘플코드로 간단하게 구현해 보니 정말 구현이 가능하겠다는 생각이 듭니다.

모바일->데스크탑, 데스크탑->모바일, 모바일->모바일로 다양한 데이터의 전송이 가능하다는 것을 알수 있었습니다. 무엇보다 쌍방통신이 가능하다는 것입니다.

아래는 테스트용으로 작성한 간단한 코드로 제어를 받을 데스크탑쪽 코드입니다.oct는 무비클립 인트턴스네임입니다. 모바일쪽에서 객체를 움직이면 따라서 움직이는 코드입니다.

import flash.net.NetConnection;
import flash.events.MouseEvent;
var obj: Number = 0;
var group: NetGroup;
var nc: NetConnection = new NetConnection();
nc.addEventListener(NetStatusEvent.NET_STATUS, netStatus);
nc.connect("rtmfp:");
ro_Bu.addEventListener(MouseEvent.CLICK, rotate);

function netStatus(event: NetStatusEvent): void
{
	switch (event.info.code)
	{
		case "NetConnection.Connect.Success":
			setupGroup();
			break;
		case "NetGroup.Connect.Success":
			trace("good");
			break;
		case "NetGroup.Posting.Notify":

			var meg: String = event.info.message;

			var xy: String = meg.slice(0, 1);
			if (xy == "x")
			{
				var megX: Number = Number(meg.slice(1));
				trace(megX);
				octa.x = megX;
			}
			else if (xy == "y")
			{
				var megY: Number = Number(meg.slice(1));
				octa.y = megY;
			}
			else
			{
				octa.rotation = event.info.message;
			}

			break;
	}
}

function setupGroup(): void
{
	var groupspec: GroupSpecifier = new GroupSpecifier("myGroup");
	groupspec.postingEnabled = true;
	groupspec.ipMulticastMemberUpdatesEnabled = true;
	groupspec.addIPMulticastAddress("225.225.0.1:30000");
	group = new NetGroup(nc, groupspec.groupspecWithAuthorizations());
	group.addEventListener(NetStatusEvent.NET_STATUS, netStatus);
}
p2p desktop

다음은 제어를 할 모바일쪽 코드입니다.octa는 무비클립 인스턴스네임입니다. 터치해서 드래그하면 움직이고, 데스크탑쪽 octa가 실시간으로 움직입니다.
이런방식으로 가속도센서를 이용해 회전을 할 수 도있고, message를 bytearray를 활용해 이미지나 비디오 등도 전송 가능합니다.

import flash.net.NetConnection;
import flash.events.TouchEvent;
import flash.ui.Multitouch;
import flash.ui.MultitouchInputMode;
Multitouch.inputMode = MultitouchInputMode.TOUCH_POINT;
var obj: Number = 0;
var group: NetGroup;
var touchOn: Boolean = false;
var nc: NetConnection = new NetConnection();
nc.addEventListener(NetStatusEvent.NET_STATUS, netStatus);
nc.connect("rtmfp:");

octa.addEventListener(TouchEvent.TOUCH_BEGIN, touch_obj);
octa.addEventListener(TouchEvent.TOUCH_END, touchend_obj);
function touch_obj(e: TouchEvent): void
{
	octa.addEventListener(TouchEvent.TOUCH_MOVE, move_obj);
	touchOn = true;
	e.currentTarget.x = e.stageX;
	e.currentTarget.y = e.stageY;
	///octa.removeEventListener(TouchEvent.TOUCH_BEGIN, touch_obj);

}
function touchend_obj(e: TouchEvent): void
{
	touchOn = false;
	octa.removeEventListener(TouchEvent.TOUCH_MOVE, move_obj);
	//octa.addEventListener(TouchEvent.TOUCH_BEGIN, touch_obj);
	//octa.removeEventListener(TouchEvent.TOUCH_END, touchend_obj);
}
function move_obj(e: TouchEvent): void
{
	if (touchOn == true)
	{
		//trace(e.target.stageX);
		var ox: int = e.stageX;
		var oy: int = e.stageY;
		e.currentTarget.x = ox;
		e.currentTarget.y = oy;
		group.post("x" + ox);
		group.post("y"+oy);
	}
}

function netStatus(event: NetStatusEvent): void
{
	switch (event.info.code)
	{
		case "NetConnection.Connect.Success":
			setupGroup();
			break;
		case "NetGroup.Connect.Success":
			trace("good");
			break;
		case "NetGroup.Posting.Notify":
			trace(event.info.message);
			octa.rotation = event.info.message;
			break;
	}
}

function setupGroup(): void
{
	var groupspec: GroupSpecifier = new GroupSpecifier("myGroup");
	groupspec.postingEnabled = true;
	groupspec.ipMulticastMemberUpdatesEnabled = true;
	groupspec.addIPMulticastAddress("225.225.0.1:30000");
	group = new NetGroup(nc, groupspec.groupspecWithAuthorizations());
	group.addEventListener(NetStatusEvent.NET_STATUS, netStatus);
}
p2p mobile

사물인터넷도 이러한 원리를  이용하면 아두이누를 활용해 사물인터넷도 가능할 것으로 봅니다. 전시장의 다양한 전시물에 적용도 가능할 것으로본다. 기계적 버튼대신 모바일 기기에서 버튼을 대신해 작동해 볼 수도 있을것입니다. 또한 자신의 사진을 스마트 폰에서 찍어서 직접 방명록을 작성해볼 수 도 있을 것입니다.

update:코드중 nc.connect("rtmfp:");를 설정해서 한 pc안에서는 정상적으로 되었지만 실제 스마트폰에 넣어서 하니 제대로 안되어서 삽질하다가 Cirrus beta developer key를 받아서 하니 해결되는데 이유를 잘 모르겠습니다.

COMMENT : 0
About the Author
it에 관한 이런 저런 관심이 많은 주인장입니다.

댓글 남기기