내 네이버 블로그에 ino 파일 있음 >> https://blog.naver.com/oreo9635/222237756521
https://download.blog.naver.com/close/50c54cfceeb5b46844aac6f3cb2856288fdc24cc8f/fLJ6iipk6pI4iS49aESLTwPxzeASxuo0Di1rloGueQJc2gtYOgToZWKj7o6g2wkTPOHcLhDZdDwEd-53_o48cKJo_J97fuTn1jH5iCO8S_8/ESP8266_NTP_CLOCK_1.ino
#include
#define CLK D2 // Define the connections pins:
#define DIO D3
TM1637Display display = TM1637Display(CLK, DIO); // Create display object of type TM1637Display:
int ldr = A0;
int ldr_value = 0; //황화카드뮴 값 초기화
const char *ssid = "TAEYANG";
const char *password = "96tjr35hsh0!";
const long utcOffsetInSeconds = 3600*9; //타임존
// Define NTP Client to get time
WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, "pool.ntp.org", utcOffsetInSeconds, 3600000);
// 7segment abcdefg와 dp 세팅
int led[8] = {14,15,10,13,1,12,5,3};//2,16을 넣으면 led가 켜짐. 핀 수가 모자라서 dp는 더미로 RX(3)를 넣음
byte number[10][8] =
{
{0,1,0,0,1,0,0,1}, // S sunday
{0,1,0,1,0,1,0,1}, // M monday
{1,1,1,0,0,0,0,1}, // t tuesday
{1,0,1,0,1,0,0,1}, // W wednsday
{1,1,1,1,0,1,0,1}, // r thursday
{0,1,1,1,0,0,0,1}, // F friday
{0,0,0,1,0,0,0,1}, // A saterday
{1,1,1,1,1,1,1,0}, // dot
};
uint8_t blank[] = { 0x00, 0x00, 0x00, 0x00 }; //tm1637모듈 리셋
void setup(){
Serial.begin(115200);
for(int i =0; i<8; i++){
pinMode(led[i],OUTPUT);
} //핀세팅
display.clear(); // Clear the display:
WiFi.begin(ssid, password);
while ( WiFi.status() != WL_CONNECTED ) {
delay ( 500 );
Serial.print ( "." );
}
timeClient.begin();
timeClient.update();
}
void loop() {
int A,B,C,D;
A = timeClient.getHours() * 100 + timeClient.getMinutes(); //A는 4자리이고, 앞의 두 자리는 시, 뒤의 두 자리는 분
B = timeClient.getSeconds();
C = timeClient.getDay();
D = A+B;
if(D==0){
display.setSegments(blank); //00시에 tm1637모듈 리셋
delay(1500);
}
if(A<100) { //00시 xx분일 때
if((B % 2) == 0) //1초에 1번씩 도트를 깜박이게.
{
display.showNumberDecEx(A, 0b10000000 , true, 3, 1); //(숫자, 도트, true면 앞자리 0일 때 살림, 3자리수 취급, 맨앞부분 1자리 띄울게요)
}
else
{
display.showNumberDecEx(A, 0b00000000 , true, 3, 1);
}
}
else // 00시 xx분이 아닐 때
{
if(A > 1259) A=A-1200; //12시간제로 세팅(13시부터 아래 꼴임)
if((B % 2) == 0)
{
display.showNumberDecEx(A, 0b01000000 , false, 4, 0); //(숫자, 도트, false로 해야 앞부분이 빔, 4자리수 취급, 맨앞부분부터 채울게요)
}
else
{
display.showNumberDecEx(A, 0b00000000 , false, 4, 0);
}
}
switch(C)
{
case 0: {//Sunday 만들기
int i=0;
for(int j=0; j<8; j++)
{
digitalWrite(led[j], number[i][j]);
}
break;}
case 1: {//Monday 만들기
int i=1;
for(int j=0; j<8; j++)
{
digitalWrite(led[j], number[i][j]);
}
break;}
case 2: {//tuesday 만들기
int i=2;
for(int j=0; j<8; j++)
{
digitalWrite(led[j], number[i][j]);
}
break;}
case 3: {//Wednesday 만들기
int i=3;
for(int j=0; j<8; j++)
{
digitalWrite(led[j], number[i][j]);
}
break;}
case 4: {//thuRsday 만들기
int i=4;
for(int j=0; j<8; j++)
{
digitalWrite(led[j], number[i][j]);
}
break;}
case 5: {//Friday 만들기
int i=5;
for(int j=0; j<8; j++)
{
digitalWrite(led[j], number[i][j]);
}
break;}
default: //Saterday 만들기
int i=6;
for(int j=0; j<8; j++)
{
digitalWrite(led[j], number[i][j]);
}
break;
}
// 밝기 자동 조절 //
ldr_value = analogRead(ldr); //cds(황화카드뮴)=ldr 값 읽어오기
if (ldr_value > 300 ) {
display.setBrightness(249); //248-255. 총 8단계
}
else {
display.setBrightness(255); //248-255
}
// 밝기 자동 조절 끝 //
}