wemos d1으로 인터넷 시계 만들기
아두이노

wemos d1으로 인터넷 시계 만들기

반응형

wemos d1 mini 보드를 이용해 안터넷으로부터 현재시간, 날짜, 요일등을 받아오는 인터넷 시계를 만들어 보았다. 사용된 부품은 다음과 같다.

 

1. wemos d1 mini

wemos d1 mini는 ESP8266의 와이파이 칩을 탑재한 보드로 굳이 아두이노와 와이파이, 이더넷 쉴드를 같이 이용할 필요없이 쉽게 와이파이에 접속할 수 있는 매우 저렴한 보드이다.

이 보드를 아두이노의 IDE에서 사용하기 위해서는 아두이노 IDE를 설정해 주어야 하는데, 방법은 아래 링크를 참고하자

 

 

아두이노 IDE설정

http://chandong83.blog.me/220881282593

 

2. OLED display

흔히 oled 모듈은 SPI 통신 방식과 I2C 통신 방식이 있는데 연결 핀의 개수가 4개인 I2C 방식을 이용한다. (wemos d1 mini의 입출력 핀의 개수가 적기 때문) 크기는 1.3인치, 0.96인치 상관없다. oled를 구동하기 위해서는 라이브러리가 필요한데 아두이노 IDE에서 라이브러리를 추가할 때  Adafruit SSD1306와  Adafruit GFX Library 를 같이 설치하면 된다.

 

OLED를 wemos d1 mini에 연결하는 방법은 아래와 같다. 보드에 적혀있는 핀 번호를 보고 그림에 맞추어서 연결하면 된다.

https://automatedhome.party/2017/04/17/connect-an-inexpensive-oled-display-to-a-esp8266wemos-d1-mini/

 

 

 

[소스 코드]

 

새다리님의 블로그를 참고하여 제작했다

http://blog.naver.com/twophase/220767362317

 

#include <ESP8266WiFi.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #define OLED_RESET 0 // GPIO0 Adafruit_SSD1306 OLED(OLED_RESET); const char* ssid = "*****"; // your ssid const char* password = "*****"; // your password WiFiClient client; int thehour; void setup() { Serial.begin(9600); OLED.begin(); OLED.clearDisplay(); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); } } void loop() { Serial.println(getTime()); String hour=getTime().substring(17,19); thehour=hour.toInt(); if(thehour<16){ thehour=thehour+9; char buf[30]={0}; getTime().toCharArray(buf,30); Serial.println(buf); OLED.clearDisplay(); OLED.setTextWrap(false); OLED.setTextSize(4); OLED.setTextColor(WHITE); OLED.setCursor(0,0); OLED.println(thehour); OLED.setCursor(40,0); OLED.println(getTime().substring(19, 22)); OLED.display(); delay(5000); } else{ char buf[30]={0}; getTime().toCharArray(buf,30); Serial.println(buf); OLED.clearDisplay(); OLED.setTextWrap(false); OLED.setTextSize(4); OLED.setTextColor(WHITE); OLED.setCursor(0,0); OLED.println(getTime().substring(17, 22)); OLED.display(); delay(5000); } } String getTime() { while (!client.connect("google.com", 80)) {} client.print("HEAD / HTTP/1.1\r\n\r\n"); while(!client.available()) {} while(client.available()){ if (client.read() == '\n') { if (client.read() == 'D') { if (client.read() == 'a') { if (client.read() == 't') { if (client.read() == 'e') { if (client.read() == ':') { client.read(); String timeData = client.readStringUntil('\r'); client.stop(); return timeData; } } } } } } } }

 

 

 

ssid와 password 부분에는 접속할 와이파이의 이름과 비밀번호를 입력하면 된다. 그리니치 천문대의 시간을 기준으로 하므로 한국 시간으로 9시간을 더 더해주어야 우리나라의 시간을 알 수있다.

 

이제 소스코드를 업로드 하면 다음과 같은 화면이 나올것이다.

 

 

 

노트북 시간과 비교했을때 동일한 시간이 출력됨을 알 수있으며 매 5초마다 시간 정보를 가져오게 된다.  


[수정]

Wemos D1 mini가 자주 멈추는 현상이 발생해 소스코드를 수정했다.

2018/01/29 - [IOT 프로젝트] - 인터넷 현재 시간 받기 #2 [아두이노/ESP8266]


반응형
    # 테스트용