오픈API를 이용해 미세먼지 정보를 가져오는 테스트도 완료했고 OLED 화면에 표시해보는 테스트도 완료했으니 이제 미세먼지 정보를 화면에 표시하는 것으로 미세먼지 표시기 만들기를 마무리 해보도록 하겠습니다.


준비물

1) WeMos D1 mini

2) 0.96인치 OLED(+점퍼)

3) 하드보드지(+글루건)

4) 보조배터리


작업 순서

1) 하드보드지를 이용해 WeMos D1 mini와 OLED를 담을 케이스 만들기

2) 미세먼지 정보를 OLED 화면에 표시하도록 소스 수정

3) 최종 테스트

4) 완성품 확인



1. 하드보드지를 이용해 WeMos D1 mini와 OLED를 담을 케이스 만들기


3D 프린터가 없기에 하드보드지와 글루건을 이용해 간단하게 상자 모양으로 케이스를 만들어 주기로 합니다.

OLED와 WeMos D1 mini 보드의 크기를 잰 후, 간단히 디자인 해 봅니다.

육면체 상자 모양에, 앞면은 OLED 화면 크기만큼 구멍을 내어주고, 뒷면은 전원을 연결해야 하므로 비워주기로 합니다.

하드보드지에 도면을 그려준 후 잘라서 글루건을 이용해 붙여줍니다.

만들어진 케이스에 적절히 OLED와 WeMos D1 mini 보드를 넣어줍니다. 물론 점퍼로 연결되어 있는 채로요.

다음과 같은 모양으로 만들어졌습니다.

전혀 이쁘지는 않지만 그냥저냥 봐줄만 합니다.(화면은 소스 코드를 어느 정도 수정한 후의 버전입니다.)


2. 미세먼지 정보를 OLED 화면에 표시하도록 소스 수정


1
2
3
4
5
6
7
8
9
10
11
display.clearDisplay();
display.setTextSize(2);             // Normal 1:1 pixel scale
display.setTextColor(WHITE);        // Draw white text
display.setCursor(0,9);             // Start at top-left corner
display.print(F("PM10 : ")); display.println(pm10Value);
display.setCursor(0,34);
display.print(F("PM2.5: ")); display.println(pm25Value);
display.setTextSize(1); 
display.setCursor(25,55);
display.print(dataTime);
display.display();
cs


오픈API를 통해 받아온 미세먼지, 초미세먼지 농도 정보와 측정시각 정보를 OLED 화면에 위와 같이 표시해 줍니다.


3. 최종 테스트


일단 상정했던 내용대로 잘 동작하였습니다.

기본적으로 제대로 조회되면 1시간에 한번씩만 갱신하도록 loop()의 마지막 부분에 delay(1000*60*60) 을 주었습니다.

그렇게 해놓고 몇 번 테스트해보니 문제점을 발견!

오픈API쪽의 정보 갱신에 시간차가 있는 것을 확인했습니다. 예를 들어 12시 5분 정도까지도 측정시간이 11시인 미세먼지 정보가 조회되더군요. 대략 12시 10분 쯤 되어야 측정시간 12시의 정보로 갱신되는 것으로 보였습니다.


그래서 https://www.timeanddate.com/ 사이트를 통해 받아온 현재시간 정보와 측정시각 정보를 비교해서 몇 시인가가 다르면 1분에 한 번씩 미세먼지 정보를 다시 요청하도록 하였습니다. (예를 들어 현재 13시 5분인데 오픈API를 통해 조회한 정보가 12시 측정정보면 1분에 한 번씩 다시 요청하도록 함)

현재시간 조회는 오픈API 조회와 동일한 방법(host, url만 다름), 그 중에서 현재 시간 정보만 가져오는 것도 역시 기존과 동일한 방법으로 간단히 해결했습니다.


1
2
3
4
5
6
7
8
9
10
11
12
if(!dataTime.substring(1113).equals(curHour)) {
  bSuccess = false;
}
else {
  bSuccess = true;  // 여기까지 왔으면 성공
}
 
if(bSuccess) {  
 delay(1000*60*60); // 성공이면 1시간 대기 후 재실행
}
else {
  delay(1000*60); // 실패면 1분 대기 후 재실행
}
cs


위와 같이 시간값만 비교해서 현재 몇 시인지와 측정시각의 몇 시인지가 일치하면 1시간 후에 재실행, 다르면 1분 후에 재실행하는 식으로 가능하면 최신정보를 받아올 수 있도록 해주었습니다.


4. 완성품 확인


짜잔~ 넵 위와 동일한 사진입니다.

어차피 소스만 바뀐 거라 뭐...

전원부를 지금은 보조배터리리로 해 놓았으나 추후 전원스위치가 달린 배터리 홀더를 이용할 생각이므로 전원의 on/off도 가능하리라 생각합니다.


이상으로 미세먼지 표시기 만들기를 마칩니다.

다음에는 만들다만 자율주행 자동차를 완성시켜 보아야겠습니다.

+ Recent posts