정보나눔

오픈소스하드웨어 프로젝트에 대한 다양한 정보를 나누는 공간입니다.

오렌지보드 와이파이 컴파일에러 해결방법 알려주세요
김은혜 | 2019-05-31

klant님이 만드신 웨더클락을 참고해서 

날씨에따라 네오픽셀에 불이 들어오는 코드를 만들었습니다

그런데 계속 알 수 없는 컴파일에러가 뜨는데 

왜 그러는지 알려주세여ㅜㅜ

 

컴파일에러

 :exit status 1
보드 Arduino/Genuino Uno 컴파일 에러.

--> 이런식의 컴파일에러가 떠요 ㅜㅜ

 

 

코드 내용

/*
  제목 : 행거의 날씨알림기능 아두이노 코드
  내용 : 오늘의 최저기온, 최고기온, 강수안내, 인체감지 센싱
*/

#include <SPI.h>
#include <Adafruit_NeoPixel.h>
#include "WizFi250.h"

#define PIN 2, 3, 4, 5, 7   //네오픽셀의 핀번호 디파인
#define VARID      "5d424aa6b2cd115c35099284f621eebb"  // Openweathermap의 API KEY를 넣어주세요.

// 인체감지센서를 2번핀으로 설정합니다.
int motion = 7;


Adafruit_NeoPixel strip = Adafruit_NeoPixel(1, 2, NEO_GRB + NEO_KHZ800);     // 해
Adafruit_NeoPixel strip1 = Adafruit_NeoPixel(1, 3, NEO_GRB + NEO_KHZ800);     // 구름
Adafruit_NeoPixel strip2 = Adafruit_NeoPixel(1, 4, NEO_GRB + NEO_KHZ800);     // 비
Adafruit_NeoPixel strip3 = Adafruit_NeoPixel(1, 5, NEO_GRB + NEO_KHZ800);     // 눈


char ssid[] = "내핫스팟";       // WiFi ssid를 넣어주세요.
char pass[] = "qwer2738";        // WiFi password를 넣어주세요.
int status = WL_IDLE_STATUS;

char server[] = "api.openweathermap.org";  // Openweathermap API 주소

unsigned long lastConnectionTime = 0;         // 서버에 접속한 마지막 시간 (MilliSecond)
const unsigned long postingInterval = 1000L; // 서버에 데이터를 요청할 Delay (MilliSecond)

boolean readingVal;
boolean getIsConnected = false;
int val, temp;
int tempVal;
int pos = 0;
int count = 0;

String rcvbuf;

// WiFiClient 오브젝트 선언
WiFiClient client;

void readyLED();
void errorLED();
void httpRequest();
void printWifiStatus();

void setup()
{
  // 인체감지센서의 핀을 INPUT으로 설정합니다.
  pinMode(motion, INPUT);
  // 시리얼 통신 속도 설정
  Serial.begin(9600);


  strip.begin();
  strip1.begin();
  strip2.begin();
  strip3.begin();
  strip.show();

 

  Serial.begin(115200);
  Serial.println(F("\r\nSerial Init"));

  WiFi.init();

  if (WiFi.status() == WL_NO_SHIELD) {  // WiFi보드에 문제가 있다면
    Serial.println("WiFi board error");  // 시리얼 모니터에 WiFi board error 출력
    while (true);
    errorLED(); //neopixel LED에 적색불 점멸
  }

  while ( status != WL_CONNECTED) {  // WiFi보드에 문제가 없어서 WiFi에 연결을 시도
    Serial.print("Attempting to connect to WPA SSID: ");
    Serial.println(ssid);  // 연결할 WiFi의 SSID를 출력

    status = WiFi.begin(ssid, pass);  // WPA/WPA2 WiFi에 연결
    if (count > 0) {  // 2번 이상 연결에 실패하면
      // neoPixel LED에 적색불을 점등
      for (int i = 0; i < strip.numPixels(); i++) {
        strip.setPixelColor(i, 255, 0, 0);
        strip.show();
      }
    }
    count++;  // 연결 실패할 때마다 count를 늘림
  }

  Serial.println("You're connected to the network");
  readyLED();  // 정상적으로 연결되었을 시 neoPixel LED에 녹색불 점멸
  printWifiStatus();  // 시리얼 모니터 창에 WiFi 상태 정보 출력
}

void loop() {

  // 적외선 인체감지 센서에서 값을 읽는다
  int sensor = digitalRead(motion);
  // 센서값을 시리얼 모니터에 출력
  Serial.println(sensor);


  String valString;
  while (client.available()) {


    // {"id": 뒤에 오는 문자열을 날씨 코드로 저장
    if ( rcvbuf.endsWith("{\"id\":")) {
      readingVal = true;
      valString = "";
    }

    char c = client.read();

    if ( c != NULL ) {
      if (rcvbuf.length() > 30)
        rcvbuf = "";
      rcvbuf += c;
      //Serial.write(c);
    }

    if (readingVal) {
      if (c != ',' ) {
        valString += c;
        //Serial.write(c);
      }
      else {
        readingVal = false;
        tempVal = valString.toInt(); // 날씨 코드를 String에서 Integer로 변환
        Serial.println(tempVal);  // 시리얼 모니터에 날씨 코드 출력
      }
    }
  }


  //전송 받은 날씨 데이터에 따라 네오픽셀 온오프 변경

  if (sensor == HIGH) {
    if (tempVal > 299 && tempVal < 532) {  //rainny
      colorWipe(strip2.Color(140, 140, 140), 50); //회색 출력
    }
    else if (tempVal > 599 && tempVal < 623) { //snow
      colorWipe(strip3.Color(0, 216, 255), 50); //하늘색 출력
    }
    //     else if (tempVal > 700 && tempVal < 782) { //mist
    //       colorWipe(strip.Color(165, 102, 255), 50); //연보라색 출력
    //     }
    else if (tempVal > 799 && tempVal < 802) { //clear and sunny
      colorWipe(strip.Color(255, 187, 0), 50); //진노랑색 출력
    }
    else if (tempVal > 801 && tempVal < 805) { //cloudy
      colorWipe(strip1.Color(140, 140, 140), 50); //회색 출력
    }
  }


  //날씨 코드 초기화
  tempVal = 0;

  if (millis() - lastConnectionTime > postingInterval) { // interval 시간이 충족되었다면
    httpRequest(); //데이터 호출
  }
  rcvbuf = "";
}

 

// 서버에 날씨 데이터 호출 함수
void httpRequest() {
  Serial.println();

  // close any connection before send a new request
  // this will free the socket on the WiFi shield
  client.stop();

  // 제대로 서버에 연결되었을 경우
  if (client.connect(server, 80)) {
    Serial.println("Connecting...");

    // HTTP 요청을 보냄
    client.print("GET /data/2.5/weather?q=Jeonju,kr&appid=");  // 전주의 날씨를 확인 (다른 지역의 날씨를 확인할려면 중간에 Jeonju,kr 부분을 "지역,나라"로 바꿔주시면 됩니다.)
    //client.print("GET /data/2.5/weather?q=london,uk&appid=");  // 지역 변경 참고
    client.print(VARID);
    client.println(" HTTP/1.1");
    client.println("Host: api.openweathermap.org");
    client.println("Connection: close");
    client.println();

    // note the time that the connection was made
    lastConnectionTime = millis();
    getIsConnected = true;

  }
}


// WiFi 연결 상태 정보 출력 함수
void printWifiStatus() {
  // print the SSID of the network you're attached to
  Serial.print("SSID: ");
  Serial.println(WiFi.SSID());

  // print your WiFi shield's IP address
  IPAddress ip = WiFi.localIP();
  Serial.print("IP Address: ");
  Serial.println(ip);

  // print the received signal strength
  long rssi = WiFi.RSSI();
  Serial.print("Signal strength (RSSI):");
  Serial.print(rssi);
  Serial.println(" dBm");
}


void colorWipe(uint32_t c, uint8_t wait) {
  for (uint16_t i = 0; i < strip.numPixels(); i++) {
    strip.setPixelColor(i, c);
    strip.show();
    delay(wait);
  }
}

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

// 에러시 LED 점멸 함수(적색빛 출력)
/*void errorLED() {
  uint16_t i, j;
  for (int k = 0; k < 3; k++) {
    for (j = 0; j < 256; j++) {
      for (i = 0; i < strip.numPixels(); i++) {
        int sum = i + j;
        map(sum, 0, 300, 120, 190);
        strip.setPixelColor(i, Wheel(sum), 0, 0);
      }
      strip.show();
      delay(2);
    }
  }
  }

  // 와이파이 연결 완료 시 LED 점멸 함수(녹색빛 출력)
  void readyLED() {
  uint16_t i, j;
  for (j = 0; j < 256; j++) {
    for (i = 0; i < strip.numPixels(); i++) {
      int sum = i + j;
      map(sum, 0, 300, 120, 190);
      strip.setPixelColor(i, 0, Wheel(sum), 0);
    }
    strip.show();
    delay(8);
  }
}*/

이전글   |    아두이노 나노 전원 문제 2019-05-31
다음글   |    아두이노 듀에_HC-06_블루투스 2019-06-01