프로젝트

나도 메이커! 메이커스 여러분들의 작품/프로젝트를 공유하는 공간입니다.

날씨 정보를 알려 주는 구름 조명 만들기

2015-04-22 11:01:16

요즘은 led를 이용한 다양한 모양의 조명을 찾아 볼 수 있습니다. 

그 중 가장 인상 깊었던 것은 led 주변에 솜을 붙여 만든 구름 모양 조명인데요. 

솜의 양감과 led의 은은한 빛이 어우러져 좋은 시각적 효과를 만들어 내는 것 같습니다. 

또한 자연물이 인공적인 공간에 존재하는 이질적인 느낌 또한 신선함을 주는 것 같습니다. 

 

사진 출처 : http://www.gizmag.com/cloud-thunder-lightning-home/32874/

 

사진 출처 : http://www.feeldesain.com/the-stormy-cloud-light-richard-clarkson.html

 

구름은 날씨와도 만은 관련이 있는 개체이죠~ 그래서 이번 프로젝트는 웹에서 날씨 데이터를 받아와 led의 색으로 날씨를 알려주는 조명을 만들어보았습니다! 

 

 

개요 

 

와이파이 쉴드와 30mm 대형 RGB led, strip led를 이용해 날씨 정보를 표현하는 구름 조명을 만들어 봅시다. 

- 와이파이 쉴드와 open weather api를 이용해 날씨 정보를 파싱.

- adafruit neopixel 라이브러리를 이용해 led 제어. 

 

 

시작전 개념 이해하기 

 

kocoa fab에서 제공하는 2개의 튜토리얼을 조합해서 만든 것이기 때문에 쉽게 따라할 수 있습니다. 

- wifi 쉴드를 이용하여 API를 통해 인터넷에서 날씨 정보 읽어오기

- 30mm 대형 RGB led 줄줄이 사용하기

 

 

부품 목록

 

NO 부품명 수량 상세설명
1 아두이노 1 오렌지 보드
2 WiFi 쉴드 1 Wifi 모듈
3 30mm 대형 RGB| LED Strip 1 ws2801(adafruit)
4 점퍼케이블 10 점퍼케이블
5 아답터 1 DC 9V

 

부품명

아두이노 30mm 대형 RGB| LED Strip 아두이노 WiFi 쉴드 점퍼케이블 아답터
부품 사진

 

 

제작 과정

 

사전에 부품들이 잘 작동되는지 확인하는 것은 필수겠죠?

다 만들고 led 불이 안들어 온다거나 하는 상황이 오면 매우 난감합니다.

 

1. 만들기 전 제작에 필요한 부품들을 준비합니다.(오렌지보드, 와이파이 쉴드, 철사, 점퍼케이블, 30mm 대형 RGB led, 솜 

 

 

2.  철사를 이용해 led를 고정시키기 위한 틀을 제작합니다. 

 

 

3. led를 철사로 만든 틀에 골고루 엮어줍니다.

 

 

4. led가 떨어지지 않게 테이트를 이용하여 틀에 단단히 고정시켜 줍니다. 

 

 

5. 자연스럽게 구름 모양을 잡아가면서, 솜을 붙입니다.

tip ) 틀에 바로 솜을 붙이면 표면적이 작아 잘 붙지 않으니, 한지나 비닐로 틀 위를 덮은 후, 붙이면 붙이기가 훨씬 수월합니다. 

 

 

 

완성된 모습니다. 어떠신가요?~ 솜으로 사이로 세어나오는 빛이 굉장히 아름답죠?

솜의 재질과 부피에 따라서 느낌이 달라지는 것 같습니다. 

 

구름 조명 미니 버젼

 

큰 것이 너무 부담스러우신 분들은 led를 조금만 사용하여, 작게 만들어 사용하셔도 좋습니다. 

 

 

 

 

 

 

 

 

 

 

하드웨어 making 

 

브래드 보드 

 

 

전자 회로도

 

 

소프트웨어 coding

 

다음링크를 통해 ino 파일을 다운로드 받으세요 

weather_tracking.ino

 

#include "SPI.h"
#include "WiFi.h"
#include "Adafruit_WS2801.h"
#ifdef __AVR_ATtiny85__
 #include
#endif

char ssid[] = "Wifi SSID";       //와이파이 SSID
char pass[] = "와이파이 비밀번호";   //와이파이 password 

//인스턴스 변수 초기화
WiFiServer server(80);
WiFiClient client;


const unsigned long requestInterval = 60000;  // 요구 시간 딜레이(1 min)

IPAddress hostIp;
uint8_t ret;
unsigned long lastAttemptTime = 0;            // 마지막으로 서버에서 데이터를 전송받은 시간

String currentLine = "";
String weatherString = "";   
String timeString = "";
String location = "kiev";

boolean readingWeather = false; 
boolean readingTime = false;
boolean stringComplete = false;

int weather;
int temp = 0;
uint8_t dataPin  = 2;    // Yellow wire on Adafruit Pixels
uint8_t clockPin = 3;    // Green wire on Adafruit Pixels
int lednum = 30;

Adafruit_WS2801 strip = Adafruit_WS2801(25, dataPin, clockPin);

void setup() {
  //각 변수에 정해진 공간 할당
  Serial.begin(115200);    
#if defined(__AVR_ATtiny85__) && (F_CPU == 16000000L)
  clock_prescale_set(clock_div_1); //clock을 16Mhz로 사용
#endif
  strip.begin();
  strip.show();
  delay(10);
  //WiFi연결 시도
  Serial.println("Connecting to WiFi....");  
  WiFi.begin(ssid, pass);  //WiFi가 패스워드를 사용한다면 매개변수에 password도 작성

  server.begin();
  Serial.println("Connect success!");
  Serial.println("Waiting for DHCP address");
  //DHCP주소를 기다린다
  while(WiFi.localIP() == INADDR_NONE) {
    Serial.print(".");
    delay(300);
  }

  Serial.println("\n");
  printWifiData();
  connectToServer();

}

void loop()
{
  
 if (client.connected()) {
    while (client.available()) {
      //전송된 데이터가 있을 경우 데이터를 읽어들인다.
      char inChar = client.read();
      // 읽어온 데이터를 inChar에 저장한다.
      currentLine += inChar; 
      //inChar에 저장된 Char변수는 currentLine이라는 String변수에 쌓이게 된다.
      
      //라인피드(줄바꿈)문자열이 전송되면 데이터를 보내지 않는다.
      if (inChar == '\n') {
        //Serial.print("clientReadLine = ");
        //Serial.println(currentLine);
        currentLine = "";
      } 
      
         if ( currentLine.endsWith("         readingWeather = true; 
        weatherString = " ";       }      

      if (readingWeather) {
        if (inChar != 'v') { //다음 전송될 문자가 'v'가 아니라면 계속 날씨 데이터(코드)를 받는다.
          weatherString += inChar;
        } 
        else { //다음 전송된 문자가 'v'라면 날씨 데이터(코드)를 출력한다.
          readingWeather = false;
          weather = getInt(weatherString);
          weatherpixel();
          Serial.print("weather code: ");
          Serial.println(weather);
        }
      }
      
      if ( currentLine.endsWith("       }
      if (readingTime) {
        if (inChar != '/') { //다음 전송될 문자가 '/'가 아니라면 계속적으로 시간데이터를 받는다
          timeString += inChar;
        } 
        else {
          readingTime = false;
          Serial.print("last update: ");
          Serial.println(timeString.substring(2,timeString.length()-1));
        }
      }
        
             
      if ( currentLine.endsWith("")) { //현재 스트링이 로 끝났다면 연결을 끊고 다시 서버와 연결을 준비한다.
       
        delay(100); //10초뒤에 서버와 연결을 끊고 재연결을 시도한다.
        client.stop(); 
//         serialEvent();
//         if (stringComplete) {
//          Serial.println(location); 
//    // clear the string:
//          stringComplete = false;
//          }
        connectToServer();
        //Serial.println("Disconnected from Server.\n");
      }
    }   

  }
  else if (millis() - lastAttemptTime > requestInterval) {
    //연결을 실패했다면 requestInterval(60초)이후에 다시 연결을 시도한다.
    connectToServer();
  }  
}

//서버와 연결
void connectToServer() {
  Serial.println("");
  Serial.println("connecting to server...");
  String content = "";
  if (client.connect(hostIp, 80)) {
    Serial.println("Connected! Making HTTP request to api.openweathermap.org for "+location+"...");
    //Serial.println("GET /data/2.5/weather?q="+location+"&mode=xml");
    client.println("GET /data/2.5/weather?q="+location+"&mode=xml"); 
    //위에 지정된 주소와 연결한다.
    client.print("HOST: api.openweathermap.org\n");
    client.println("User-Agent: launchpad-wifi");
    client.println("Connection: close");

    client.println();
    Serial.println("Weather information for "+location);
  }
  //마지막으로 연결에 성공한 시간을 기록
  lastAttemptTime = millis();
}


void printHex(int num, int precision) {
  char tmp[16];
  char format[128];

  sprintf(format, "%%.%dX", precision);

  sprintf(tmp, format, num);
  Serial.print(tmp);
}

void printWifiData() {
  // Wifi쉴드의 IP주소를 출력
  Serial.println();
  Serial.println("IP Address Information:");  
  IPAddress ip = WiFi.localIP();
  Serial.print("IP Address: ");
  Serial.println(ip);

  //MAC address출력
  byte mac[6];  
  WiFi.macAddress(mac);
  Serial.print("MAC address: ");
  printHex(mac[5], 2);
  Serial.print(":");
  printHex(mac[4], 2);
  Serial.print(":");
  printHex(mac[3], 2);
  Serial.print(":");
  printHex(mac[2], 2);
  Serial.print(":");
  printHex(mac[1], 2);
  Serial.print(":");
  printHex(mac[0], 2);
  Serial.println();
  //서브넷 마스크 출력
  IPAddress subnet = WiFi.subnetMask();
  Serial.print("NetMask: ");
  Serial.println(subnet);

  //게이트웨이 주소 출력
  IPAddress gateway = WiFi.gatewayIP();
  Serial.print("Gateway: ");
  Serial.println(gateway);

  Serial.print("SSID: ");
  Serial.println(WiFi.SSID());

  ret = WiFi.hostByName("api.openweathermap.org", hostIp);

  Serial.print("ret: ");
  Serial.println(ret);

  Serial.print("Host IP: ");
  Serial.println(hostIp);
  Serial.println("");
}

int getInt(String input){  //String데이터를 intger형으로 변환하는 함수
  int i = 2;

  while(input[i] != '"'){
    i++;
  }
  input = input.substring(2,i);
  char carray[20];
  //Serial.println(input);
  input.toCharArray(carray, sizeof(carray));
  //Serial.println(carray);
  temp = atoi(carray);
  //Serial.println(temp);
  return temp;
}

void weatherpixel(){
   float rantime = random(20,50);
   //날씨 코드가 200부터 531까지 범위 안에 있다면 type3 패턴으로 led를 제어한다.
   //비, 눈, 우박
  if(weather>199 && weather<532){   
    type3();
  }
  else ;

   //날씨 코드가 701부터 781, 또는 802부터  804까지 범위 안에 있다면 type2 패턴으로 led를 제어한다.
   //흐림
  if(weather>700 && weather <782){
    type2();
  }
  else ;
  if(weather>801 && weather<805){
    type2();
  }
  else ;
  
  //날씨 코드가 800부터 801
  //흐림
  if(weather>799 && weather<802){   
     type1();
   }
   else ;
}


void type1(){
  
  rainbow(60);
  }

void type2(){
   uint16_t i, j;
  for(j=0; j<256; j+=1) {
    for(i=0; i       int sum = i+j;
      map(sum,0,300,120,190);
     strip.setPixelColor(i, Wheel(sum),Wheel(sum),Wheel(sum));

    }
    strip.show();
    delay(10);
  }
}

void type3(){
   uint16_t i, j,q;
 for(q=0; q   for(j=0; j<256; j+=1) {
    for(i=0; i       int sum = i+j;
      map(sum,0,300,120,190);
     strip.setPixelColor(i, Wheel(sum),Wheel(sum),0);

    }
    strip.show();
    delay(10);
  }
 }
    theaterChase(strip.Color(255, 255, 0), 60); //흰색 출력 
}


//모든 LED를 출력가능한 모든색으로 한번씩 보여주는 동작을 한번하는 함수

void rainbow(uint8_t wait) {
  uint16_t i, j;

  for(j=0; j<256; j++) {
    for(i=0; i       strip.setPixelColor(i, Wheel((i+j) & 255));
    }
    strip.show();
    delay(wait);
  }
}


//입력한 색으로 LED를 깜빡거리며 표현한다void theaterChase(uint32_t c, uint8_t wait) {
  for (int j=0; j<10; j++) { 
    for (int q=0; q < 3; q++) {
      for (int i=0; i < strip.numPixels(); i=i+3) {
        strip.setPixelColor(i+q, c); 
      }
      strip.show();
     
      delay(wait);
     
      for (int i=0; i < strip.numPixels(); i=i+3) {
        strip.setPixelColor(i+q, 0); 
      }
    }
  }
}

uint32_t Color(byte r, byte g, byte b)
{
  uint32_t c;
  c = r;
  c <<= 8;
  c |= g;
  c <<= 8;
  c |= b;
  return c;
}


//255가지의 색을 나타내는 함수
uint32_t Wheel(byte WheelPos)
{
  if (WheelPos < 85) {
   return Color(WheelPos * 3, 255 - WheelPos * 3, 0);
  } else if (WheelPos < 170) {
   WheelPos -= 85;
   return Color(255 - WheelPos * 3, 0, WheelPos * 3);
  } else {
   WheelPos -= 170; 
   return Color(0, WheelPos * 3, 255 - WheelPos * 3);
  }
}

 

 

날씨 데이터를 가져 오는 부분. 

 

   if ( currentLine.endsWith("         readingWeather = true; 
        weatherString = " ";       }      

      if (readingWeather) {
        if (inChar != 'v') { //다음 전송될 문자가 'v'가 아니라면 계속 날씨 데이터(코드)를 받는다.
          weatherString += inChar;
        } 
        else { //다음 전송된 문자가 'v'라면 날씨 데이터(코드)를 출력한다.
          readingWeather = false;
          weather = getInt(weatherString);
          weatherpixel();
          Serial.print("weather code: ");
          Serial.println(weather);
        }
      }

 

open weather map API에서 제공하는 데이터 중 날씨 코드만을 추출하는 데이터입니다. 

데이터 파싱의 원리는 날씨데이터 가져오기 튜토리얼을 참고하세요.

 

 

날씨를 분류하는 부분

 

open weather map 홈페이지에 들어가보시면, 날씨 상태에 따라 코드 번호가 정해져 있음을 확인할 수 있습니다. 

이 많은 코드 번호들을 범주에 맞게 분류해야 합니다. 범주는 아래와 같습니다. 

날씨 코드 번호 목록 : http://www.openweathermap.org/weather-conditions

  - 맑음 

  - 흐림 

  - 눈, 비, 우박

 

void weatherpixel(){
   float rantime = random(20,50);
   //날씨 코드가 200부터 531까지 범위 안에 있다면 type3 패턴으로 led를 제어한다.
   //비, 눈, 우박
  if(weather>199 && weather<532){   
    type3();
  }
  else ;

   //날씨 코드가 701부터 781, 또는 802부터  804까지 범위 안에 있다면 type2 패턴으로 led를 제어한다.
   //흐림
  if(weather>700 && weather <782){
    type2();
  }
  else ;
  if(weather>801 && weather<805){
    type2();
  }
  else ;
  
  //날씨 코드가 800부터 801
  //흐림
  if(weather>799 && weather<802){   
     type1();
   }
   else ;
}

 

 

led를 제어하는 부분

 

led 제어는 adatruit에서 제공하는 라이브러리를 사용하였습니다.

 

void type1(){
  rainbow(15);
  }

void type2(){

// 하얀색 불빛이 서서히 켜지고, 꺼진다.

   uint16_t i, j;
  for(j=0; j<256; j+=1) {
    for(i=0; i       int sum = i+j;
      map(sum,0,300,120,190);
     strip.setPixelColor(i, Wheel(sum),Wheel(sum),Wheel(sum));

    }
    strip.show();
    delay(10);
  }


}

void type3(){

//노란색 불빛이 서서히 켜지고, 꺼짐을 1회에서 4회 정도 무작위 반복한 후 깜빡인다.
 uint16_t i, j,q;
 for(q=0; q   for(j=0; j<256; j+=1) {
    for(i=0; i       int sum = i+j;
      map(sum,0,300,120,190);
     strip.setPixelColor(i, Wheel(sum),Wheel(sum),0);

    }
    strip.show();
    delay(10);
  }
 }
    theaterChase(strip.Color(255, 255, 0), 60); //흰색 출력 
}


//모든 LED를 출력가능한 모든색으로 한번씩 보여주는 동작을 한번하는 함수

void rainbow(uint8_t wait) {
  uint16_t i, j;

  for(j=0; j<256; j++) {
    for(i=0; i       strip.setPixelColor(i, Wheel((i+j) & 255));
    }
    strip.show();
    delay(wait);
  }
}


//입력한 색으로 LED를 깜빡거리며 표현한다

void theaterChase(uint32_t c, uint8_t wait) {
  for (int j=0; j<10; j++) { 
    for (int q=0; q < 3; q++) {
      for (int i=0; i < strip.numPixels(); i=i+3) {
        strip.setPixelColor(i+q, c); 
      }
      strip.show();
     
      delay(wait);
     
      for (int i=0; i < strip.numPixels(); i=i+3) {
        strip.setPixelColor(i+q, 0); 
      }
    }
  }
}

uint32_t Color(byte r, byte g, byte b)
{
  uint32_t c;
  c = r;
  c <<= 8;
  c |= g;
  c <<= 8;
  c |= b;
  return c;
}


//255가지의 색을 나타내는 함수
uint32_t Wheel(byte WheelPos)
{
  if (WheelPos < 85) {
   return Color(WheelPos * 3, 255 - WheelPos * 3, 0);
  } else if (WheelPos < 170) {
   WheelPos -= 85;
   return Color(255 - WheelPos * 3, 0, WheelPos * 3);
  } else {
   WheelPos -= 170; 
   return Color(0, WheelPos * 3, 255 - WheelPos * 3);
  }
}

 

 

동영상

 

각 나라의 날씨에 따라 led가 다르게 제어되는 것을 확인 할 수 있습니다.

 

 

 

 

Klant

orangeboard,cloud led, wifi shield, arduino, diy, open source hardware,
profile

김영석 2015-05-13 09:38:15

구름이 너무 귀엽네요ㅎㅎ

profile

이구민 2015-05-13 16:40:16

컴파일시


sketch_may13b.ino:3:31: fatal error: Adafruit_NeoPixel.h: No such file or directory
compilation terminated.
컴파일 오류 발생.
이렇게 오류 발생하는데 도와주세요 ㅜㅠ

profile

Klant 2015-05-15 08:48:07

이구민님 /
해당 오류는 neopixel 라이브러리가 없어서 발생되는 문제입니다.
https://github.com/adafruit/Adafruit_NeoPixel에 들어가서 우측 하단에 download zip을 클릭해 다운 받으시구요^^

아두이노 라이브러리를 추가하는 방법은 다음 링크를 참고하세요
http://kocoafab.cc/tutorial/view/40

안되는 부분은 언제든 문의해주세요!
게시물에 ino 파일을 다운 받을 수 있는 링크를 올려놓았으니 다운 받으셔서 사용하시면 됩니다.

profile

Klant 2015-05-15 08:49:27

김영석님 /
감사합니다! 앞으로도 많은 관심 부탁드립니다^^

profile

김요한 2015-05-28 11:04:17

소프트웨어 코딩 글 올리신 거랑, ino 파일 올리신거 내용이 다른게 차이점이 무엇인가요?

profile

Klant 2015-05-30 15:03:21

에디터에서 일부 코드가 날아가는 현상이 있어서 따로 ino 파일 링크를 걸어놨습니다 ino파일을 참고하시면 될 거 같네요^^

profile

희대의방랑자 2015-06-03 19:13:04

fritzing을 보고 led를 아두이노와 better jack을 연결하려고 하는데 저희가 주문한 led의 입력핀이 3개있습니다. 어떻게 해야할까요?

profile

Klant 2015-06-04 17:53:30

다음과 같이 연결하세요
- DIN : 아두이노의 디지털 핀에 연결
- 5V : batter jack의 +에 연결
- GND : batter jack의 -에 연결, 아두이노의 GND에 연결

profile

김요한 2015-06-06 17:39:35

희대의방랑자 입니다.
말씀하신대로 연결하였는데,
LED의 1/2만 On이 됩니다.
LED는 WS2811을 사용하고 있구요,
양단의 끝 DIN을 핀 9번으로 설정하고 9번에 DIN 두개 입력을 9번에 몰아서 꼽았습니다.
led num은 11번 설정 후 꼽지 않았습니다.

입력이 3개라 올려주신 내용이 많이헷갈립니다 ㅠㅠ

profile

최민혁 2015-06-07 23:30:43

안녕하세요... 전 완전 이런거에대해서 초보인데요... 위에 만들어보려고 나와있는 준비물을 다삿는데... ㅠㅠ아주아주 어렵네요... 희대의방랑자 님처럼 LED 입력핀이 3개이고, 콘센트도 하나 더사야하나요??ㅠㅠ 배터리잭이 아답터 맞죠??
와이파이쉴드와 오렌지보드는 결합해서 하는것이맞죠?ㅠㅠ

profile

Klant 2015-06-08 11:02:24

@김요한 혹시 strip led 써보셨나요? 코코아팹에서 neopixel led 제어하기 튜토리얼을 참고해보시구요. ws2801 라이브러리를 사용하지 않고, neopixel strip 라이브러리를 사용해서 동작이 된다면, neopixel strip처럼 사용하시면 될 것 같네요. 부품을 사셨다면, 부품에 대한 데이터시트를 참고하시면 될 것 같습니다.

profile

Klant 2015-06-08 11:04:40

@최민혁 와이파이 쉴드는 오렌지 보드 위에 결합하면 되구요. led 사용법은 위 댓글을 참고해주세요ㅎㅎ 처음부터 뭐든 쉬울 수는 없겠죠..차근 차근 따라해보시고 막히는 부분은 질문 게시판에 질문 올려주세요!

profile

최민혁 2015-06-09 11:44:18

이런 무지한놈에게도 답변을... 감사합니다 ㅠㅠ 위에 언급하시는 DIN , 5V , GND ...못찾겠습니다...
배터리 잭은 따로 있어야하는것이지요?? 전 위에 나와있는 준비물만 가지고 있어서요.. 죄송하고 감사합니다 (__)

profile

Klant 2015-06-13 13:18:44

아답터가 숫놈이라면, 암놈이 있어야하는데 그것이 배터리 잭입니다ㅎㅎ
혹시 네오픽셀 라이브러리로 해보셨나요?
핀이 3개라면 strip neopixel led 처럼 사용하시면 될 것 같네요
다음 링크로 이동하셔서 튜토리얼을 참고하세요ㅎㅎ
http://kocoafab.cc/tutorial/view/228
화이팅입니다!

profile

최민혁 2015-06-14 19:43:23

매번 감사합니다^^ 브릭맨님 그럼 아답터는 오렌지보드 아두이노에 직접 꼽는거군요! 배터리잭은
지니어스키트 구매하면 들어있는거에요??ㅎ_ㅎ;;컴터에 연결하려면 또 뭘사야할지 ㅠㅠㅋㅋ막막하네욤 독학이란...
그럼좋은 주말되세요^^

profile

정영우 2015-06-14 20:32:27

PrintWiFiData함수까지는 잘 실행된거 같은데,
서버와 연결하는 부분에서 connecting to server.....만 반복적으로 뜨면서 진행이 안됩니다.
4번째 쯤부터는
connecting to server...
No Socket available
이라고 뜨는군요...왜 그럴까요?ㅠㅠ

profile

이구민 2015-06-23 20:34:16

저도 같은 증상으로 날씨데이터를 못받아오고있는데 도와주세요 ㅠㅜ

profile

이구민 2015-06-24 14:39:05

아두이노 와이파이쉴드 문제였네요. 펌웨어 업그래이드 해주니깐 정상작동 됩니다 ㅎㅎ

profile

김대호 2015-06-28 11:15:34

아두이노 우노랑 오렌지보드랑 차이점 이 뭔가요?

profile

탁태돈 2015-10-11 22:35:10

외람된 말이지만 아트메가 128로도 만들수 있을까여??

profile

원기옥 2015-10-12 11:08:51

아트메가 128로도 아두이노를 만들 수 있지만 wifi 함수들을 제대로 사용할 수 있을지는 모르겠네요..

profile

양준호 2015-10-12 15:16:57

Connecting to WiFi....
Connect success!
Waiting for DHCP address
.................................................................................................................
이렇게 점만 찍히는데 문제가 뭐일까요? kiev로 설정을했는데 이싸이트는 어디있는거에요?

profile

Klant 2015-10-12 21:05:14

@양준호 openweathermap api구요
와이파이 연결 상태를 확인해보셔야 할 것 같습니다.
휴대폰 핫스팟으로 시도해보신건가요?

profile

최용범 2015-10-12 23:01:03

혹시 strip 구입하는곳 알 수 있을까요 대부분의 샵에서는 수입상품으로 등록되어있더라구요

profile

Klant 2015-10-13 22:56:08

@최용범 디바이스마트나 아트로봇 같은 온라인샵에서 검색해보시면 됩니다. 대부분 해외 구매라 시간이 걸리지만 일주일 이내로 받았던 걸로 기억합니다.

profile

이구민 2015-10-14 22:52:06

APPID 입력하는 방식으로 바뀐 뒤 정보를 받아오면 날씨 코드가 무조건 0이 뜨는 현상이 있는데 혹시 해결방법 아시나요?? 기압이나 온도 다른 정보는 잘 받아옵니다

profile

유영범 2015-10-18 15:13:58

스마트폰을 이용할 경우 핫스팟을 키고 이때 설정된 이름과 비밀번호가 SSID 와 패스워드에 들어가는건가요? 이렇게 해야 와이파이 쉴드가 연결이 되는건가요? 그리고 LED 에 전원연결하고 보드를 PC에 연결해서 하는데 LED가 하나만 들어오던데 와이파이가 연결 안되서 그런건가요? 아님 전원이 약해서 그런건가요 LED에 전원이 들어가는것 말고도 보드에도 USB포트 말고 전원이 따로 들어가야 하나요?

profile

양준호 2015-10-19 16:16:21

@Klant

connecting to server...
Connected! Making HTTP request to api.openweathermap.org for kiev...
Weather information for kiev
후에 날씨 코드가 안나오고 아래 내용이 반복 되는데 어디가 문제인가요?
connecting to server...
No Socket available

혹시 날씨정보를 받아오는 사이트를 변경할수는없나요??

profile

Klant 2015-10-22 21:49:51

@이구민 제가 최근 올린 날씨 정보를 알려주는 무드램프의 소스 코드를 참고하시면 될 것 같아요ㅎㅎ 코드에 조금 이슈가 생겨서 변경했습니다;)
@양준호 제가 올린 날씨를 알려주는 무드 램프의 소스 코드 중 connetToSever 함수를 참고 하시면 될 것 같아요. 서버에 날씨데이터를 호출하기 전에 client 종료를 해줬더니 양준호님과 같은 현상을 해결했습니다. 관심가져주셔서 감사해요 ^^

profile

Klant 2015-10-22 21:52:16

@와이파이의 SSID와 비밀번호는 말씀하신 내용이 맞구요! 컴퓨터에사 인가 받는 5V의 전력으로는 많은 led를 키는데 한계가 있습니다. 그래서 외부 전원을 연결 해주는 것이고요 ;)

profile

최용범 2015-10-28 22:53:00

INO 파일은 라이브러리가 Adafruit_Nopixel.h 더라구요 저는 2801을 사용하는데 라이브러리를 2801로 바꿔주려면 어느 부분을 바꿔줘야하나요?. 게시글에 직접쓰여져 있는건 2801 인데 잘린부분이 좀 있는거 같더라구요 ..
연속질문 죄송합니다 ~ ㅜㅜ

profile

Klant 2015-10-30 10:07:06

@최용범 ino 파일은 네오픽셀을 사용한거구요!
위 소스에서 #include "Adafruit_WS2801.h" 부분이 2801 라이브러리를 import 시키는 부분입니다.
조명을 제어하는 소스는 ino 파일에 있는 소스를 사용하셔도 무방합니다 .

profile

김창훈 2015-11-07 11:54:30

Connecting to WiFi....
Connect success!
Waiting for DHCP address
.................................................................................................................
계속 점만 찍힙니다. 보드는 우노를 쓰고있고, 와이파이 쉴드는 CC3000 입니다.
와이파이는 공유기를 사용했습니다. 어떻게 해야 할까요?

profile

Klant 2015-11-11 08:43:47

@김장훈 제가 사용한 와이파이 모듈은 HDG204입니다. cc3000모듈과는 소스 사용법이 조금 틀립니다.
우선 아래 링크를 이용해 cc3000 라이브러리를 다운로드 받으시구요!
- CC3000 라이브러리 다운로드 : https://github.com/adafruit/Adafruit_CC3000_Library/archive/master.zip

아래 링크를 통해 CC3000 소스 사용법과 예제를 살펴보시면 될 것 같네요 ;)
- CC3000 사용 가이드 : https://learn.adafruit.com/downloads/pdf/adafruit-cc3000-wifi.pdf

profile

박유진 2015-12-11 19:33:30

Connecting to WiFi....
Connect success!
Waiting for DHCP address

저희도 계속 이렇게 떠요
와이파이는 휴대폰 핫스팟으로 했고
와이파이쉴드 모델은 R3 입니다

profile

Klant 2015-12-20 19:36:21

@박유진 해당 문구가 시리얼 모니터에 출력되었다면 와이파이 연결은 성공했네요. 예제 중 wificlientreapeating으로 와이파이 쉴드가 잘 동작하는지 테스트해보세요
예제를 업로드한 후 시리얼모니터에 펌웨어 업그레이드가 필요하다고 나오면 쉴드의 펌웨어를 업그레이드 해줘야 합니다.

profile

좌성근 2016-04-18 11:10:44

ESP-8266으로는 만들수없나요?????

profile

뿌뿌 2016-05-06 19:43:09

와이파이 쉴드 없이도 만들수 있나요?

profile

탄산수 2016-08-04 02:52:24

arduino 101과 wifishield 101을 연결했는데 com 6 is not available이라고 뜨거나 작동이 되지 않습니다.. 왜일까요..?ㅜㅜ

profile

도라에몽 2016-08-30 17:43:56

와 하드웨어 잘만드셨네요

profile

김병수 2017-06-03 17:15:49

모듈은 꼭 HDG204 라는것으로 만들어야 여기 소스를 참고해서 만들수 있나요???????

profile

김병수 2017-06-03 17:16:41

초보자인데 cc3000 사용하는데 이걸로는 너무 힘들어서 실드를 바꿔서 사용해볼라 하는데요

profile

희호 2017-11-02 20:54:33

30mm 대형 RGB| LED Strip 이거 어디서 파나요 답변 부탁드립니당

profile

하용 2017-11-11 20:48:55

오렌지보드에 케이블 꼭 필요한가요?

profile

아기천사아 2018-04-02 14:40:14

@Klant
Connecting to WiFi....
Connect success!
Waiting for DHCP address
................................
처럼 ....만 계속 나오고 있습니다. WiFi 쉴드 사용하지 않구 오렌지보드 WiFi 확장 보드 사용하고 있습니다.

profile

좋은사람 2018-05-30 22:43:30

https://kocoafab.cc/make/view/668 저희는 여기를 참고해서 만들었습니다. 한국 기상청이 되지 않아, openweather에서 api키를 받아서 기상정보를 가져오는데 성공했는데, 혹시 네오픽셀제어가 위의 링크로는 되지가 않네요. 저 부분을 어떻게 고쳐야하는지 가르쳐 주세요 ㅠㅠ. 감사합니다