Day-4-2

전체적인 소스에 대한 설명 입니다.

아무것도 모르면 검색조차 어렵기에 깊게 알고 싶은 분들을 위해

용어정도만 설명드리겠습니다.

#이 앞에 붙는 부분은 전처리문이라는 것입니다. 전처리문정도만 알고 계시고

이 include부분은 ESP8266WiFi.h, Adafruit_NeoPixel.h, avr/power.h 파일을 이 소스

안으로 불러 들이겠다는 명령입니다.

 

예를들어 내가 led를 부드럽게 켜는 걸 관리하는 파일을 만들었는데 그 소스의

길이가 1000줄짜리라고 하고 날씨를 받아와서 내가 원하는 부분을 보여주는 코드를

만들려면 100줄을 써야 합니다. 그리고 미세먼지를 측정해서 보여주는 코드를

만드는데 300줄이 필요하다고 하면 나는 하나의 파일로 만든다면 총 1400줄을

계속 써야 하는 상황이 됩니다. 오랜 시간이 지난 후에 몇번째 줄이 미세먼지를

가져오는 줄인지를 찾는것조차도 잘 기억이 나지 않는 상황이 생기게 됩니다.

하지만 파일을 목적에 맞게 분리시킨다면 나중에 관리하기가 편리해 집니다.

 

예를 들자면

led를 켜는 것을 smoothLED.h파일

날씨를 가져오는 걸 weather.h파일

미세먼지 내용코드를 dust.h파일로 만들어 두고

weatherAndDustLight.h파일에서

 

#include <weather.h>

#include <smoothLED.h>

#include <dust.h>

이라고 위에 적어놓고

if(weather.getCurrent()==”맑음”){

smoothLED.light(“하늘색”)

}

if(dust.getCurrent()==”나쁨”){

smoothLED.light(“빨간색”)

}

일일이 1400줄의 내용을 알지 않아도 6줄 만으로 내가 원하는 내용을

만들 수 있게 됩니다. 좋은 생각이지 않나요? 개발에는 수십년간

많은 사람들이 일을 적게하기위해 최선을 다해서 편리한 방법을

패턴화 시켜놓고 약속처럼 사용하고 있습니다. 마치 수학공식처럼

그 패턴을 알고 깨닫게 되면 즐거움을 느낄 수 있을거에요…

 

 

#ifdef __AVR__ 부분은 __AVR__이 정의되어 있다면 입니다.

이렇게 조건을 거는 것은 아래줄에 선언된

#include <avr/power.h> // Required for 16 MHz Adafruit Trinket

때문인데요 주석내용대로 Adafruit Trinket이라는 아두이노같은 걸 사용할

경우는 <avr/power.h>를 불러 오겠다는 조건을 미리 걸어서

필요없을 경우는 불러오지 않고 필요할 때에만 불러오겠다는 선언입니다.

 

#define PIN D3

#define NUMPIXELS 7

부분은 PIN이라는 변수에 D3을 지정

NUMPIXELS 이라는 변수에 몇개의 led를 사용할지 저장하는 소스입니다.

 

Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

이부분은 네오픽셀을 사용하기위해 나는 pixels라는 것을 네오픽셀을 컨트롤하는

이름으로 지정하겠다고 선언하면서 네오픽셀이 원하는 값(NUMPIXELS,PIN등)

을 알려줍니다.

 

const char* ssid = “harmono”;

const char* password = “decoder@@@”;

부분은 ssid에 harmono를 저장하고

password변수에 decoder@@@을 저장하겠다는 내용으로 기억하시면

됩니다. 보시면 char옆에 *가 붙어 있는데 c언어에는 포인터라는 개념이 있습니다.

이부분은 많은 공부가 필요하니 아직은 위 설명정도로 이해하고 넘어가 주시면

됩니다.

이부분도 마찬가지로 변수에 기장청 주소와 led가 어느정도의 밝기를 가질지

변수에 저장하는 부분입니다.

setup함수 부분입니다.

 

pixels.begin();

에서 정의해 준 pixels를 시작한다는 begin()을 실행하는 명령 입니다.

pixels에는 형식에 맞춰

Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

이렇게 정의해 준 이후에는  #include <Adafruit_NeoPixel.h>에서 불러온 모든

기능을 사용할 수 있게 됩니다. Adafruit_NeoPixel.h파일에는 많은 내용이 담겨

있는데 그 내용중 시작하라라는 명령이 begin이 되는 것입니다.

그 이외에도 Adafruit_NeoPixel.h 를 만든 개발자가 구현한 많은 기능이 있을

것입니다.

 

for (int k = 0; k < NUMPIXELS; k++) { pixels.setPixelColor(k, pixels.Color(0,255,0)); }

이부분은 for문으로 led를 셋팅하는 부분입니다.

NUMPIXELS가 7이므로 {pixels.setPixelColor(k, pixels.Color(0,255,0)); }부분이

7번 반복되게 됩니다. k값은 0부터 6까지 7번 반복됩니다.

그래서 7개의 led에 색을 지정하게 됩니다.

 

pixels.setBrightness(bLight);

이부분은 전체 led의 빛의 밝기를 bLight에 정한 값으로 셋팅한다는 내용입니다.

 

pixels.show();

설정을 했지만 아직 빛은 나지 않습니다. show()명령을 하면 셋팅된 내용으로

led가 빛을 내게 됩니다.

 

delay(1000);

안정적인 동작을 위해서 잠깐동안의 휴식시간을 준다는 의미로 넣었습니다.

 

Serial.begin(115200);

시리얼 통신을 시작하겠다는 선언부분입니다. 통신속도를 115200bps으로 하겠다는 뜻입니다.

delay(10);

안정적인 동작을 위해서 잠깐동안의 휴식시간을 준다는 의미로 넣었습니다.