티스토리 뷰






우선, Wizarduino의 경우는 Arudino.org 에서 제공하는 IDE (1.7.xx)를 사용합니다. CC는 1.6.xx 버전으로 흘러가고 있죠.
CC의 경우는 현재까지는 Arm코어를 다수 지원하지 않기때문에 별도의 보드제공이 이루어지기 전까지는 사용할 수 없습니다.
물론, 본인이 이것저것 수정을 가하면 사용가능합니다 :)

CC와 ORG의 차이에 대해 궁금해하시는 분들이 있던데... 그것은 검색을 통해서 아실 수 있습니다 :)
간단히 집안싸움으로 이혼했다고 하죠... 암튼 각자 가는 길이 다르다보니 IDE의 성격도 점차 달라져가고 있습니다.

최근 포스팅에 올라온 것처럼 아두이노 Org 와 CC의 IDE가 통합되었습니다.
1.8.0 이상이면 양쪽 모두 지원하며, 
설치방법이나 WizArduino를 사용하기 위한 설정 방법에 대해서는  아래 링크를 참조해주세요.

그리고 혹시나 cc 와 org의 분쟁 내용이 궁금하신 분들은 다음 링크를 참조해주세요.



아래의 예제는 Wizarduino에서 사용하기 위해 약간의 수정이 들어간 내용이기때문에 참조하시길 바랍니다.

아두이노로 이더넷을 건드실정도면 기본적인 아두이노IDE 사용법은 아시리라고 가정하고 진행하겠습니다.

아래는 예제파일을 수정한 것으로써, file -> examples -> Ethernet2 -> WebServer 가 되겠습니다.


왜 Ethernet2냐구요?
기존 W5100 칩이 사용된 이더넷쉴드의 경우는 Ethernet 라이브러리로 사용되지만
Wizarduino에 사용된 네트워크 칩은 Wiznet사의 W5500입니다. Ethernet Shield 2도 W5500칩을 사용하죠.
따라서, 칩이 변화함에 따라 라이브러리도 새롭게 추가된 것입니다. 참조하세요.



아래는 Web Server를 사용하기 위한 기본 예제입니다.

여기에 아날로그 핀을 배열로 설정하였구요. 

25번 라인에,

byte analogchannel[6= {A0,A1,A2,A3,A4,A5};

Serial을 모두 SerialUSB로 바꾸어주었습니다.

org IDE에서 대부분의 SAMD, 즉 ARM코어를 사용하는 디바이스들은 SerialUSB 가 기본 USB시리얼입니다.

만약 Uno코드를 Wizarduino와 같은 arm코어 장치에서 사용하려면, Serial을 SerialUSB로 바꾸어주셔야 합니다.

간편한 방법으로 ctrl + F 를 누르고, 아래의 화면처럼 'Replace All'로 한번에 바꿀 수 있습니다.






1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
/*
  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
 */
 
#include <SPI.h>
#include <Ethernet2.h>
 
// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = {
  0xDE0xAD0xBE0xEF0xFE0xED
};
 
byte analogchannel[6= {A0,A1,A2,A3,A4,A5};
 
IPAddress ip(1921681177);
 
// 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 setup() {
  // Open SerialUSB communications and wait for port to open:
  SerialUSB.begin(9600);
  while (!SerialUSB) {
    ; // wait for SerialUSB port to connect. Needed for Leonardo only
  }
 
 
  // start the Ethernet connection and the server:
  Ethernet.begin(mac, ip);
  server.begin();
  SerialUSB.print("server is at ");
  SerialUSB.println(Ethernet.localIP());
}
 
 
void loop() {
  // listen for incoming clients
  EthernetClient client = server.available();
  if (client) {
    SerialUSB.println("new client");
    // an http request ends with a blank line
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        SerialUSB.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("Connection: close");  // the connection will be closed after completion of the response
          client.println("Refresh: 5");  // refresh the page automatically every 5 sec
          client.println();
          client.println("<!DOCTYPE HTML>");
          client.println("<html>");
          // output the value of each analog input pin
          for (int i = 0; i < 6; i++) {
            int sensorReading = analogRead(analogchannel[i]);
            client.print("analog input A");
            client.print(i);
            client.print(" is ");
            client.print(sensorReading);
            client.println("<br />");
          }
          client.println("</html>");
          break;
        }
        if (c == '\n') {
          // you're starting a new line
          currentLineIsBlank = true;
        }
        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();
    SerialUSB.println("client disconnected\r\n");
  }
}
 
cs


예제소스이니 자세한 설명은 하지 않겠습니다.

우선 작동하는 모습을 보자구요.





웹 브라우저에서 서버 데이터 받기



위 소스를 보드에 업로드 후, 시리얼모니터 창을 열어줍니다.

그러면 IP가 출력되는데요,

이때, 브라우저(크롬)에 주소를 입력하면 아래 화면과 같은 출력을 보실 수 있습니다.

여기서! PC와 보드는 같은 로컬네트워크 안에 존재해야합니다.

더 쉽고 직관적으로 말하면, 같은 공유기에 연결해두어야 합니다. (자세한 내용은 검색을 통해서 :) )


방식은, HTML을 사용하여 웹브라우저로 접속시에 지금 우리가 보는 것처럼 예쁜(?)형태로 Analog값을 볼 수 있게 하는 것입니다.

잘만 활용하면, 외부에서 접속해서 여러 데이터를 확인 할 수 있겠지요?


아래 화면을 보시면,. A2만 1020을 나타내고 있는데요, 현재 3.3V를 물려준 상태이기 때문입니다.

10bit Analog의 최대치인 1024 아래의 값을 나타내고 있는 것이지요.


자 그럼 A0~A5 (A2제외)의 5개의 값은 왜 각기 제 값을 가지고 있을까요?

현재 아무것도 연결해두지 않았기때문입니다. 즉 플로팅상태(떠있는)이기때문에, GND도 VCC도 아닌 어중간한 값을 가지고 있는 것이지요.

자세한건 검색을 생활화 합시다 :)!







서버로 메시지 보내보기



원래 이 소스의 의도는 아니지만, 서버로 한번 메시지를 보내보겠습니다.

어쨌든 소스에 있는 기능이니 사용해보는거죠 :)

이번엔 Hercules라는 터미널 프로그램을 사용할건데요, 이거 상당히 유용하고 편리합니다.

본 포스팅 초반에 링크를 걸어두었으니 꼭 사용해보세요 :)


무튼, 보드의 IP로 접속합니다.

마찬가지로 PC와 보드IP가 같은 로컬네트워크안에 존재해야합니다.

이와 관련해서는 '서브넷 마스크'를 검색하시거나, http://openmaker.tistory.com/13  를 참조해주세요.


이때, PC는 Client, 보드는 Server가 되겠죠.

포트번호는 코드에 80이라고 되어있으니 꼭 소스를 확인하세요!

자 그럼 Connect버튼을 눌러서 접속을 해보죠. 바로 접속이 되었군요!


이제 Hercules Send창에 아무거나 입력해서 Send해보죠.

그랬더니! 오른쪽처럼 Hello Wordl!! 라는 문자가 그대로 출력되는군요 :)

이걸 통해서 많은걸 할 수 있습니다. 잘 기억해두시고 연습해두시면 재미난 것들을 만들 때 굉장히 유용하답니다~





솔직히, 자세한 내용을 다루진 않았습니다.. 더 궁금해 하실 분들도 있을 텐데,

뭐,, 궁금한 사항이 있으시면 댓글 남겨주세요 :)



감사합니다.





댓글
댓글쓰기 폼