2014.11.19(수) Wiznet 교육 (아두이노)

안녕하세요.
초급 블로거 안진희입니다.
우선 잘 부탁드린다는 인사를 드리고 싶군요.

이번에 작성될 내용들은 Wiznet 아두이노 교육의 후기에 대해 집필해보려고 합니다.

이번에 수강한 교육은 아두이노에 이더넷 연결하기 오프라인 강좌였습니다.

강사분들은 Wiznet에 근무중이신 허봉준 강사님과 김수환 강사님 이십니다.

이번 강좌에서 제가 처음접하는 아두이노라는 보드를 강사님들이 아주 쉽고 간결하게 설명해주셔서 감사했습니다.

introduce부터 드리자면,

김수환 강사 – http://embeddist.wordpress.com/arduinonote/

위 블로그를 참고하여 교육을 받았구요. 초심자도 보고 금방 따라하실 수 있으실 정도로 정리가 잘되어 있습니다.

물론 제가 강사님의 블로그를 이곳저곳 그림을 따오면서 후기 및 감상문을 써야하는게 맞지만 이번 글은 제가 생각한 느낀점이나 생각하는 점을 말씀드릴까 합니다.

– 처음 아두이노 교육을 신청하고 강의노트를 보았을때, “Arduino는 open-source hardware board를 말한다.”라는 첫글을 시작으로 의문점이 생겼습니다.

Why? 기업들은 Hardware를 공유하지 않는다는 겁니다. 즉, 자료를 open시키지 않는다는 것이죠. 물론 학생들을 위한 Evaluation보드 겸 임베디드 보드를 제작하는 회사들도 있긴하지만 그런 회사들조차 완전한 회로도 및 소스를 Open하지 않는데… 라는 의문점이 들었습니다.

그래서 한편으론 신기하고 또 다른 한편으로는 당혹스러워 하며 아두이노 수업을 들었습니다.

그런데 교육을 듣다 문득 이런 생각이 들더군요. (그저 개인적인 생각입니다ㅎ)

정말 정보력이 중요하다는 것. 정보가 기술이자 곧 길이다. 라는 생각이 들더군요..
Open-Source라는 것이 참으로 웃긴 것이 필요로 하는 사람에겐 기회와 재산인데, 필요로하지 않는 사람은 이 자료를 가지고 있어도 그냥 휴지조각밖에 안된다는 점이 생각이 나오더라구요.

참 아이러니하다. 라는 생각하게되었어요.

그리고 생각을 접고 다음 교육을 따라갔습니다. 그런데 아두이노 보드는 shield라는 보드를 이용해서 인터넷 연결을 하더라구요. 즉, 아두이노 보드에 + 외부 보드를 결합하여 인터넷에 연결하였다.

여기도 이해가 잘 안갔습니다. 궁금해서 질문하고 싶었지만.. 부끄러워서 못했어요. 나중에 댓글로 혹은 쪽지로 물어봐야겠다는 생각을 했습니다.

Why ?! ‘아두이노 보드는 한보드에 인터넷이라는 기능을 넣지않고, 따로 보드를 만들어서 구현하였는가.’ 라는 생각을 했습니다.

그저 초급 엔지니어가 보기엔 ‘좀 더 생산성을 높이고 금전적인 목적때문에 나누지 않았나’ 하는 생각이 듭니다만..

그리고 아두이노 보드의 목적은 그저 교육과 공부의 목적인가? 라는 점이 궁금했습니다.

아두이노 보드를 이용해 3D 프린터기를 만들었다는 강사님의 말을 듣고.. “과연 응용분야가 저거 말고도 뭐가 있을까?”

라는 생각을 하였습니다.

하지만 아두이노 보드를 잘 모르는 저로썬 어디에 응용해야할진 잘 모르겠어서 앞으로 보드를 좀 더 공부해보고 어디에 응용하고 기획할지에 대해 생각해보아야 할 것 같습니다.

결론도 애매모호하고 서론 본론 결론이 이상하게 안맞네요..
초보 블로거다 보니 이런저런 횡설수설 말이 많고 정리도 잘 안되구요..
앞으로 글을 많이 쓰다보면 이런 점도 고쳐지지 않을까 하는 생각이 듭니다.

마지막으로 아두이노 보드에서 설명들었던 Source 에 대해 간략하게 설명드리고 마치겠습니다.
밑으로 보시면 아래의 장대한 소스는 아두이노와 쉴드 보드를 연결하여 HTML 상으로 웹서버를 만들고 아두이노 보드에 연결된 LED를 on/off하는 소스 코드입니다.
코드 해석을 보시면
1. Setup이라는 소스에서 초기화 작업이 이루어지구요.
2. Setup의 initialize가 끝났다면, Mac Address가 있습니다. Mac Address란 고유주소라는 뜻으로 제가 사용한 아두이노 보드 + shield 보드만 사용할 수 있는 고유 이더넷 주소라는 뜻입니다. 이 Mac Address는 따로 설정하지 않고 실습을 진행하였습니다.
3. 그 다음으로 loop문에서 무한 루프를 시켜 LED를 on / off 명령어들이 나열되어 있습니다.
여기의 소스에서 새로운 클라이언트를 생성하여 Html와 아두이노와 인터넷으로 연결 구동하여 LED를 on/off하는 것입니다.
– 여기서의 중요한 점은 아두이노 보드와 접속되어 있는 컴퓨터로 ip , gateway , subnet을 정확하게 맞춰주어야 한다는 점입니다. 먼저 컴퓨터 네트워크상 고정 IP를 만들어 ip를 체결하여 주시고 아래의 소스코드를 통해 192,168,1,20 의 인터넷 주소로 이동하시면 LED 제어를 하실 수 있습니다.
4. 위 실습을 하면서 생각한 것은 Remote 부분인 원격에 대한 부분인데, 잘만 활용한다면 유비쿼터스의 개념에도 많은 도움을 얻을 것 같다는 생각을 하게 되었습니다. 빨라져가는 디지털시대에 원격이란 아이템은 필수적인 요소이니깐 응용분야에 잘 접목을 시킨다면 괜찮은 아이템이 나오지 않을까. 하는 생각이 듭니다.

/*
Web Server

A simple web server that shows the value of the analog input pins.
using an Arduino Wiznet Ethernet shield.

Circuit:
* Ethernet shield attached to pins 10, 11, 12, 13
* Analog inputs attached to pins A0 through A5 (optional)

created 18 Dec 2009
by David A. Mellis
modified 9 Apr 2012
by Tom Igoe
modified 15 Nov 2014
by Soohwan Kim
*/

#include
#include

// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
#if defined(WIZ550io_WITH_MACADDRESS) // Use assigned MAC address of WIZ550io
;
#else
byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
#endif

//#define __USE_DHCP__

IPAddress ip(192,168,1,20);
IPAddress gateway( 192, 168, 1, 1 );
IPAddress subnet( 255, 255, 255, 0 );
// fill in your Domain Name Server address here:
IPAddress myDns(8, 8, 8, 8); // google puble dns

// Initialize the Ethernet server library
// with the IP address and port you want to use
// (port 80 is default for HTTP):
EthernetServer server(80);
void check_led_status();
// Define the LED PORT NUMBER
#define LED_PORT 53

void setup() {
// Open serial communications and wait for port to open:
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for Leonardo only
}

// initialize the LED PORT
pinMode(LED_PORT, OUTPUT);
// initaial value is HIGH
digitalWrite(LED_PORT, HIGH);

// initialize the ethernet device
#if defined __USE_DHCP__
#if defined(WIZ550io_WITH_MACADDRESS) // Use assigned MAC address of WIZ550io
Ethernet.begin();
#else
Ethernet.begin(mac);
#endif
#else
#if defined(WIZ550io_WITH_MACADDRESS) // Use assigned MAC address of WIZ550io
Ethernet.begin(ip, myDns, gateway, subnet);
#else
Ethernet.begin(mac, ip, myDns, gateway, subnet);
#endif
#endif

// start the Ethernet connection and the server:
server.begin();
Serial.println(“WebServerControlLED”);
Serial.print(“server is at “);
Serial.println(Ethernet.localIP());
}

void loop() {
// listen for incoming clients
EthernetClient client = server.available();
if (client) {
Serial.println(“new client”);
// an http request ends with a blank line
boolean currentLineIsBlank = true;
String buffer = “”; // Declare the buffer variable
while (client.connected()) {
if (client.available()) {
char c = client.read();
buffer += c; // Assign to the buffer
Serial.write(c);
// if you’ve gotten to the end of the line (received a newline
// character) and the line is blank, the http request has ended,
// so you can send a reply
if (c == ‘n’ && currentLineIsBlank) {
// send a standard http response header
client.println(“HTTP/1.1 200 OK”);
client.println(“Content-Type: text/html”);
client.println();
//client.println(“”);
client.println(“”);
client.println(“”);

// check the LED status
if (digitalRead(LED_PORT)>0){
client.println(“LED is ON“);
}else{
client.println(“LED is OFF“);
}

// generate the Form
client.println(“
“);
client.println(“”);
client.println(“

ON”);
client.println(“

OFF”);
client.println(“

“);

client.println(“”);
client.println(“”);
break;
}
if (c == ‘n’) {
// you’re starting a new line
currentLineIsBlank = true;
buffer=””;
}
else if ( c == ‘r’) {
//do cgi parser for LED-On
if(buffer.indexOf(“GET /led.cgi?status=1”)>=0){
// cgi action : LED-On
digitalWrite(LED_PORT, HIGH);
// send web-page
client.println(“HTTP/1.1 200 OK”);
client.println(“Content-Type: text/html”);
client.println();
client.println(“”);
client.println(“”);
// check the LED status
if (digitalRead(LED_PORT)>0){
client.println(“LED is ON“);
}else{
client.println(“LED is OFF“);
}
client.println(“
“);
client.println(“Go to control-page“);

client.println(“”);
client.println(“”);
currentLineIsBlank = false;
break;
}

//do cgi parser for LED-Off
if(buffer.indexOf(“GET /led.cgi?status=0”)>=0){
// action : LED-Off
digitalWrite(LED_PORT ,LOW);
// send web-page
client.println(“HTTP/1.1 200 OK”);
client.println(“Content-Type: text/html”);
client.println();
client.println(“”);
client.println(“”);
// check the LED status
if (digitalRead(LED_PORT)>0){
client.println(“LED is ON“);
}else{
client.println(“LED is OFF“);
}
client.println(“
“);
client.println(“Go to control-page“);

client.println(“”);
client.println(“”);
currentLineIsBlank = false;
break;
}
}
else{ //if( c != ‘r’) {
// you’ve gotten a character on the current line
currentLineIsBlank = false;
}
}
}
// give the web browser time to receive the data
delay(1);
// close the connection:
client.stop();
Serial.println(“client disonnected”);
}
}

Advertisements

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

%s에 연결하는 중