https://learn.sparkfun.com/tutorials/pushing-data-to-datasparkfuncom/arduino--cc3000-shield
코코아팹은 누구나 창의적 아이디어를 현실로 만들어 낼 수 있도록
만들고, 공유하고, 배울 수 있는 터전이
되고자 합니다.
아이디와 비밀번호를 잊으셨나요?아이디 / 비밀번호 찾기
코코아팹 회원이 아니신가요? 회원가입
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
항상 진취적이고, 새로운 것을 추구하는 코코아팹 에디터입니다!
https://learn.sparkfun.com/tutorials/pushing-data-to-datasparkfuncom/arduino--cc3000-shield
HTML을 사용하실수 있으시면 client.println() 함수를 이용하여 웹페이지에 radio버튼을 만든 후 get /?status 값을 이용하여 LED를 조종할수 있습니다.
간단한 예제를 통해서 웹페이지에서 LED를 제어하실려면 breakout.js를 이용해서 사용해보세요 Wifi쉴드가 아닌 무선 네트워크가 가능한 노트북이나 컴퓨터에 usb로 연결하여 원격 제어를 하는 방법입니다.
breakout.js 에 대한 예제는 http://kocoafab.cc/tutorial/view/438 튜토리얼을 확인해 보시길 바랍니다.
다른 아두이노에서 xbee통신을 통해 받은 정보를 다시와이파이 통신을 이용해 pc로 정보를 보내고 싶습니다.
즉 아두이노1(xbee)---> 아두이노2--->pc(와이파이)
여기서 궁금한점이 한아두이노에서 xbee와 와이파이통신을 둘다구현간능한가요?
소프트웨어시리얼을 이용하면 된다는 글을 본것같은데 적확히하고싶어서 질문드립니다.
또한 질문2
xbee통신을 사용하기 위해선 쉴드와 모듈을 둘다구매해야하던데
와이파이는 와이파이 쉴드하나만사면 되나요?
안녕하세요
쓰신글중에
WIFI 실드에 웹서버를 올려 다른 곳에서 이 웹에 접속 할 수 있도록 합니다. (같은 공유기에 있을 경우에만 접속 됩니다.)
이 글에 관해 궁금한 점이 있어 질문드립니다.
저말대로라면 wifi쉴드에서 올린 웹서버는 다른공유기 즉 와이파이쉴드와 같은공유기를 쓰지 않으면 접속이 불간으하다는 건가요? ..
가능한 방법은 없을까요?
안녕하세요 안드로이드를 공부하고있는 학생입니다. 와이파이 통신을 통하여 센서값을 받아보는 것을 해보려고하는데
해당 소스코드를 받아볼수 있을가요.. 도움이 필요합니다..
모바일 폰 상의 화면은 앱이 아닌, 웹 브라우저로 접속했을때, 아두이노에서 보낸 페이지입니다. 즉 아두이노가 웹 서버형태로 동작하고 있어 별도의 앱은 필요하지 않습니다.
아... 댓글 정말 감사합니다.. 저희가 센서에 의해 측정된(온도/습도) 값을 닷홈서버 DB에 값을 저장시키고
어플리케이션을 통해 받아 보려고하는데.. 조언을 구할수가 있을가요 ?
xml 파싱, json 파싱 중 어떤게더 좋을까요?
죄송하지만 하나 더 질문 하겠습니다.
아두이노자체가 웹서버라는게 이해가 잘안가서 질문합니다... PC에 서버를 생성하고 위의 코딩된 소스에 의해 서버에 접속하고 값을 저장하여 HTML으로 생성하는 것인가요?
#윤민구 xml 보다는 json 이 빠르고 구성하기도 좋습니다. 그리고 아두이노가 일반적인 웹서버 역할을 한다기 보다는, 간단히 리스닝 할 수 있는 서버 소켓 정도를 열 수 있다고 생각하시면 될 것 같은데요 ㅎ
#김상덕 중간에 환풍기와 스마트폰이 같이 붙을 수 있는 WiFi AP가 있다면 가능하고요, 스마폰에서 WifI 테더링을 통해서도 가능할 거에요.
아두이노 초보자입니다 ㅠㅠ Phpoc wifi 쉴드를 이용해서 웹서버에 잠시 저장하려고 하는데 이 코드 그대로 쓰면 되나요??
자세하게 설명 좀 부탁드립니다ㅠㅠ
UNO + wifi shield에서 어떻게 analog 값을 입력 받는거죠?
일반 ESP8266 WiFi 보드에서 아날로그를 선언 할 수 없다고 떠서요;;
SaBo 2015-03-15 14:31:09
컨텐츠 감사히 잘 봤습니다. 아두이노로부터 전송된 html 소스는 어디서 확인하고 어디서 열어볼수 있는건가요???