과정명	IoT기반 융합 SW 개발자 양성과정
과목명	오픈플랫폼활용(2001020325_16v1 )	요소명	오픈플랫폼디바이스제어하기 오픈플랫폼APP제어하기
수행일자	2017년 12.29 ~ 2018년 01.12	훈련생

수행과제

아두이노 우노를 이용하여 태스크를 스케치하고 실행하시오. (5점 만점)

개발 환경 구축(1점), 센서 활용(2점), 모터 활용(3점), 쉴드 활용(4점), 통신(5점)

jejutour@daum.net 메일로 2018년 1월 19일까지 제출하시오.

필요할 경우 회로를 명시하고 스케치 코드를 설명하시오.

과제를 통해 확인할 능력 사항

- 오픈 플랫폼 개발 환경을 구축할 수 있다.

- 단위 모듈 및 공통 모듈의 프로그램을 구현할 수 있다.

- 오픈 플랫폼 드라이버를 활용할 수 있고 센서를 제어할 수 있다.

- 오픈 플랫폼에서 애플리케이션을 개발할 수 있다.

수행결과

여기에서는 윈도우즈 콘솔 응용 프로그램으로 만들었습니다. 이 부분에 관한 설명은 생략할게요.

//UDP 통신 - PC 용 콘솔 응용 프로그램

//    UDP 프로토콜 사용

//    문자열을 입력받아 메시지 전송 후 서버가 보낸 메시지 수신

#pragma warning(disable:4996)

#include <stdio.h>

#include <process.h>

#include <stdlib.h>

#include <WinSock2.h>//윈속 2 사용시 포함할 헤더

#pragma comment(lib,"ws2_32") //윈속 2.2 라이브러리 참조

#define MY_IP       "192.168.219.140" //PC IP주소-자신의 환경에 맞게 수정하세요.

#define MY_PORT  10200

#define ADU_IP     "192.168.219.109"  //아두이노 IP 주소-아두이노 시리얼 모니터의 출력값으로 수정하세요.

#define ADU_PORT 10200

#define UDP_TX_PACKET_MAX_SIZE  24

int main(void)

{

WSADATA wsadata;

WSAStartup(MAKEWORD(2, 2), &wsadata);//윈속 초기화

SOCKET sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); //1. 소켓생성

if (sock == SOCKET_ERROR) //SOCKET_ERROR는 -1

{

fprintf(stderr, "소켓 생성 실패");

return 0;

}

//2. 소켓과 로컬 소켓 주소 결합(생략 가능)

int re = 0;

SOCKADDR_IN local_addr = { 0 };//IPv4 소켓 주소 구조체 변수 선언

local_addr.sin_family = AF_INET; //네트워크 주소 체계 설정

local_addr.sin_addr.s_addr = inet_addr(MY_IP);//서버 IP 주소 설정

local_addr.sin_port = htons(MY_PORT);//포트 설정

re = bind(sock, (SOCKADDR*)&local_addr, sizeof(local_addr));

//3. 서버에 연결 요청

re = 0;

SOCKADDR_IN adu_addr = { 0 };//IPv4 소켓 주소 구조체 변수 선언

adu_addr.sin_family = AF_INET; //네트워크 주소 체계 설정

adu_addr.sin_addr.s_addr = inet_addr(ADU_IP);//아두이노 IP 주소 설정

adu_addr.sin_port = htons(ADU_PORT);//포트 설정

int len = sizeof(adu_addr);

//4. 아두이노와 송수신

char buf[UDP_TX_PACKET_MAX_SIZE];

while (1)

{

gets_s(buf, sizeof(buf));

re = sendto(sock, buf,strlen(buf)+1,

0,(SOCKADDR *)&adu_addr,sizeof(adu_addr));

printf("%d\n", re);

if (strcmp(buf, "exit") == 0)

{

break;

}

re = recvfrom(sock, buf, sizeof(buf), 0,(SOCKADDR*)&adu_addr,&len);

buf[re] = 0;

printf("수신:%s\n", buf);

}

//5. 소켓 닫기

closesocket(sock);

WSACleanup();//윈속 해제화

return 0;

}