2014-08-12 14:40:57
이 컨텐츠를 보시기 전에 "아두이노 WIFI실드를 사용하여 WIFI 연결하기"를 먼저 보시는 것을 권장합니다.

| NO | 부품명 | 수량 | 상세설명 |
| 1 | 아두이노 우노 R3 | 1 | 아두이노 |
| 2 | 아두이노 WIFI 실드 | 1 | WIFI 실드 |
| 3 | flex 센서 | 1 | flex sensor |
| 4 | 조도센서 | 1 | |
| 5 | 저항 10KΩ | 2 | 저항이 클 수록 센서값이 작게 나옵니다. |
| 6 | 브레드보드 | 1 | |
| 7 | 점퍼케이블 | 8 |
| 부품명 | 아두이노 우노 R3 | 아두이노 WIFI 실드 | flex센서 |
| 파트 | x1 |
x1 |
x1 |
| 부품명 | 조도센서 | 저항 10kΩ | 브레드보드 | 점퍼케이블 |
| 파트 | x1 |
x2 |
x1 |
x8 |


#include <SPI.h>
#include <WiFi.h>
char ssid[] = "AndroidHotspot6971"; // 연결하실 와이파이 SSID
char pass[] = "00001111"; // 네트워크 보안키
int status = WL_IDLE_STATUS;
WiFiServer server(80); // 80포트를 사용하는 웹서버 선언
void setup() {
Serial.begin(9600);
if (WiFi.status() == WL_NO_SHIELD) { // 현재 아두이노에 연결된 실드를 확인
Serial.println("WiFi shield not present");
while (true); // 와이파이 실드가 아닐 경우 계속 대기
}
// 와이파이에 연결 시도
while ( status != WL_CONNECTED) { //연결될 때까지 반복
Serial.print("Attempting to connect to SSID: ");
Serial.println(ssid);
status = WiFi.begin(ssid, pass); // WPA/WPA2 연결
}
server.begin();
printWifiStatus(); // 연결 성공시 연결된 네트워크 정보를 출력
}
void loop() {
int flexval = analogRead(A5);
int ldrval = analogRead(A0);
// flex 센서와 조도센서에서 값을 가져옴
WiFiClient client = server.available(); // 들어오는 클라이언트를 수신한다.
if (client) { // 클라이언트를 수신 시
Serial.println("new client"); // 클라이언트 접속 확인 메시지 출력
boolean currentLineIsBlank = true;
while (client.connected ()) {
if (client.available()) {
char c = client.read();
// 문자의 끝을 입력 받으면 http 요청이 종료되고, 답신을 보낼 수 있습니다.
if (c == '\n' && currentLineIsBlank) {
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connection: close");
client.println("Refresh: 1"); // 1초당 페이지 refresh
client.println();
client.println("<!DOCTYPE HTML>");
client.println("<meta charset=utf-8/>");
client.print("<meta name=view content=width=device-width, ");
client.println("initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no />");
client.println("<html>");
client.println("<head>");
client.println("<title>Many Sensor</title>");
client.println("</head>");
client.println("<h1>Many Sensor</h1>");
client.println("<div data-role=content>");
client.print("Flex Sensor value : ");
client.println(flexval); // flex 센서 값 출력
client.println("<br>");
client.println("<br>");
client.print("Ldr Sensor value : ");
client.println(ldrval); // 조도 센서 값 출력
client.println("<br>");
client.println("</div>");
client.println("</body>");
client.println("</html>");
break;
}
if (c == '\n') {
currentLineIsBlank = true;
}
else if (c != '\r') {
currentLineIsBlank = false;
}
}
}
delay(1);
client.stop();
Serial.println("client disonnected");
// 클라이언트와 연결을 끊는다.
}
}
void printWifiStatus() { // 연결된 네트워크 정보 출력
Serial.print("SSID: ");
Serial.println(WiFi.SSID());
// 네트워크 SSID 출력
IPAddress ip = WiFi.localIP();
Serial.print("IP Address: ");
Serial.println(ip);
// 네트워크 ip 출력
long rssi = WiFi.RSSI();
Serial.print("signal strength (RSSI):");
Serial.print(rssi);
Serial.println(" dBm");
// 수신 강도 출력
}
* 본 코드는 스케치를 사용하여 작성 / 업로드 합니다. 스케치에 대한 사용법은 링크를 참고 하시기 바랍니다.
#include <SPI.h> #include <WiFi.h> char ssid[] = "AndroidHotspot6971"; // 연결하실 와이파이 SSID char pass[] = "00001111"; // 네트워크 보안키 int status = WL_IDLE_STATUS; WiFiServer server(80); // 80포트를 사용하는 웹서버 선언
ssid[]와 pass[] 에는 각각 네트워크 SSID와 네트워크 보안키를 적어 주시면 됩니다.(자신이 연결 하고자 하는 네트워크)
이부분을 맞게 쓰지 않았을 경우는 접속이 되지 않으며 시리얼 모니터에서 Attempting to connect to WPA SSID : 네트워크 SSID 이 글이 계속 뜨게 됩니다.
(여기서는 WAP 형식만 가능 합니다.)
WiFiServer server(80)을 통해서 80포트를 사용하는 웹서버임을 선언 합니다.
void setup() {
Serial.begin(9600);
if (WiFi.status() == WL_NO_SHIELD) { // 현재 아두이노에 연결된 실드를 확인
Serial.println("WiFi shield not present");
while (true); // 와이파이 실드가 아닐경우 계속 대기
}
// 와이파이에 연결 시도
while ( status != WL_CONNECTED) { //연결이 될 때 까지 반복
Serial.print("Attempting to connect to SSID: ");
Serial.println(ssid);
status = WiFi.begin(ssid, pass); // WPA/WPA2 연결
}
server.begin();
printWifiStatus(); // 연결 성공시 연결된 네트워크 정보를 출력
}
현재 연결된 실드를 확인 하고, 와이파이 실드가 장착 되는 경우 위에서 적은 SSID 와 보안키로 와이파이에 연결을 시도합니다.(연결이 될 때 까지 계속 반복 합니다.)
연결에 성공 하면 연결된 네트워크의 정보를 출력 합니다.
int flexval = analogRead(A5);
int ldrval = analogRead(A0);
// flex 센서와 조도센서에서 값을 가져옴
WiFiClient client = server.available(); // 들어오는 클라이언트를 수신한다.
if (client) { // 클라이언트를 수신 시
Serial.println("new client"); // 클라이언트 접속 확인 메세지 출력
boolean currentLineIsBlank = true;
아날로그 5번핀에 꽂혀 있는 flex 센서와 아날로그 0번 핀에 꽂혀있는 조도 센서에서 값을 받아옵니다.
그 다음 클라이언트에서 접속 할 때 까지 대기 합니다. 클라이언트가 접속을 하면 클라이언트가 접속 했음을 알리는 메세지를 출력 합니다.
while (client.connected ()) {
if (client.available()) {
char c = client.read();
// 문자의 끝을 입력 받으면 http 요청이 종료되고, 답신을 보낼 수 있습니다.
if (c == '\n' && currentLineIsBlank) {
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connection: close");
client.println("Refresh: 1"); // 1초당 페이지 refresh
client.println();
client.println("<!DOCTYPE HTML>");
client.println("<meta charset=utf-8/>");
client.print("<meta name=view content=width=device-width, ");
client.println("initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no />");
client.println("<html>");
client.println("<head>");
client.println("<title>Many Sensor</title>");
client.println("</head>");
client.println("<h1>Many Sensor</h1>");
client.println("<div data-role=content>");
client.print("Flex Sensor value : ");
client.println(flexval); // flex 센서 값 출력
client.println("<br>");
client.println("<br>");
client.print("Ldr Sensor value : ");
client.println(ldrval); // 조도 센서 값 출력
client.println("<br>");
client.println("</div>");
client.println("</body>");
client.println("</html>");
break;
}
<!DOCTYPE HTML> <meta charset=utf-8/> <meta name=viewport content=width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no /> <html> <head> <title>Many Sensor</title> </head> <h1>Many Sensor</h1> <div data-role=content> Flex Sensor value : "Flex Sensor value" <br> <br> Ldr Sensor value : "Ldr Sensor value" <br> </div> </body> </html>
클라이언트에게 웹 페이지를 보내는 부분입니다. 바로 위에 소스는 우리가 보여주고자 하는 웹페이지의 HTML 소스 입니다. 이 HTML 소스를 한줄 씩 client.print() 를 써서 출력 하게 됩니다.
<!DOCTYPE HTML> 이 한줄을 아두이노 에서는 client.println("<!DOCTYPE HTML>") 이런 식으로 써주시면 됩니다.
센서 값 입력 해주시는 방법은 client.print("Flex Sensor value : "); client.println(flexval); 이런식으로 print() 를 쓰셔서 한줄에 다 들어 갈수 있도록 합니다.

(왼쪽이 HTML 문서를 바로 열었을 때(센서 값은 임의로 넣었습니다), 오른쪽이 아두이노 WiFi 실드를 통해 웹페이지를 열었을 때(센서 값은 제대로 측정 된 값입니다.))
void printWifiStatus() { // 연결된 네트워크 정보 출력
Serial.print("SSID: ");
Serial.println(WiFi.SSID());
// 네트워크 SSID 출력
IPAddress ip = WiFi.localIP();
Serial.print("IP Address: ");
Serial.println(ip);
// 네트워크 ip 출력
long rssi = WiFi.RSSI();
Serial.print("signal strength (RSSI):");
Serial.print(rssi);
Serial.println(" dBm");
// 수신 강도 출력
}
void printWifiStatus() 함수는 연결 된 네트워크의 정보를 출력 하는 함수 입니다. 연결 성공시 연결된 네트워크의 SSID, ip, 신호 강도를 출력 합니다.
kocoafabeditor
항상 진취적이고, 새로운 것을 추구하는 코코아팹 에디터입니다!
WIFI쉴드, 아두이노