본문 바로가기
Arduino(아두이노) IoT 키트 강좌

Arduino Uno 호환 Wemos D1 Wifi Board 와 0.96 인치 I2C OLED SSD1306 을 사용해서 Weather Station 만들어 보기

by 오마이엔지니어 2018. 2. 9.
반응형

Arduino Uno 호환 Wemos D1 Wifi Board 와 0.96 인치 I2C OLED SSD1306 을 사용해서 OLED를 출력해 보고
WIFI 를 사용해서 Weather Station 기상정보 시스템을 만들어 보는 프로젝트 입니다

Arduino Uno 호환 WeMos D1 Wifi Board 의 초기 세팅법과 사용방법에 대해서 알아보고
간단한 웹서버 테스트를 해보도록 하겠습니다


WeMos D1 Wifi Board 는 ESP8266(ESP-12E) 기반의 아두이노 우노와 호환 가능한 Wifi Board 입니다
아두이노 통합 개발환경 Arduino IDE 를 지원하며 ESP8266 (TCP/IP 프로토콜 스택이 통합된 Soc로 Wifi 네트워크에 접속가능)
기반으로 무선으로 스케치를 전송할수 있는 OTA(over the air) 기능을 사용할수 있습니다
때문에 저렴한 가격에 아두이노를 이용하여 IoT 프로젝트를 진행하는데 있어서 적합합니다


<WeMos D1 Wifi Board 이미지>



<WeMos D1 Wifi Board 상세 사양>


<WeMos D1 Wifi Board 핀 구성>



사용된 부품

Arduino Uno 호환 WeMos D1 Wifi Board



초기세팅 방법
우선 WeMos D1 Wifi Board 는 CH340 UART DRIVER 를 사용하기 때문에
일단 장치인식을 위해서 드라이버를 설치해 줍니다
자신의 OS에 맞는 드라이버를 다운로드 받아서 설치해 줍니다

(윈도우용을 첨부하였습니다 CH340 설치를 했는데 장치관리자에 인식이 안된다면 CH341 드라이버를 설치해 보세요)

CH340 USB_Serial Driver.zip

CH341SER.ZIP
드라이버 설치가 끝나고 보드를 마이크로 USB케이블로 연결하면 PC의 장치관리자에 CH340 으로
포트가 뜹니다



기본적으로 아두이노 통합 개발환경 아두이노 IDE 를 설치해야 합니다 (Arduino.cc 의 IDE 를 설치합니다
Arduino.org 의 IDE 와는 호환 되지 않습니다)
https://www.arduino.cc/en/Main/Software


아두이노 IDE를 실행후 파일--->환경설정을 클릭합니다



환경설정에서 추가적인 보드매니저 URL에 http://arduino.esp8266.com/stable/package_esp8266com_index.json 

링크의 URL를 추가해 줍니다



 툴--->보드--->보드매니저 순으로 클릭합니다



보드 매니저에서 타입을 "Contributed"로 선택해주면 ESP8266 Community  나오게 됩니다
설치를 눌러서 최신버전을 설치해 주면 됩니다



설치가 끝나면 툴--->보드--->WeMos D1 R2 & mini 순으로 클릭합니다 (WeMos D1 R2 & mini 가 추가 되었습니다)


툴에서 업로드 스피드를 115200 으로 맞춰 주도록 합니다 (일부는 업로드 실패시 57600 으로 속도를 낮춰서 성공을 하는것 같습니다)
본 테스트에서는 115200으로 별 무리없이 무난하게 업로드를 성공했습니다


스케치 업로드 버튼을 눌러서 간단하게 업로드를 테스트 해보고 이상이 없으면 파일--->ESP8266--->Blink 순으로 클릭해서
Blink 테스트를 해봅시다 (보드에 장착된 ESP8266의 LED가 깜박이는 간단한 테스트 입니다)

주의사항
보드를 USB 허브를 통해서 연결하면 소스 업로드시 업로드 에러가 나는 경우가 있는것 같습니다
(USB 허브를 사용하고 있다면 허브에 연결하지 말고 컴퓨터 USB 포트에 바로 연결해서 테스트 해 봅시다
<Arduino Uno 와 Wemos D1 Wifi Board 의 차이점>
위 처럼 Wemos D1 Wifi Board 는 Arduino Uno 와 핀구성의 차이가 있습니다
가령 기본예제 파일--->예제--->Basic--->Blink 테스트를 업로드 하려고 한다면

-----------------------------------------------------------------------------------------------------------
void setup() {
  pinMode(13, OUTPUT);
}

void loop() {
  digitalWrite(13, HIGH);
  delay(1000);
  digitalWrite(13, LOW);
  delay(1000);
}
-----------------------------------------------------------------------------------------------------------


위 예제코드에서 13 을 14로 모두 바꾸어 주어야 합니다

-----------------------------------------------------------------------------------------------------------
void setup() {
  pinMode(14, OUTPUT);
}

void loop() {
  digitalWrite(14, HIGH);
  delay(1000);
  digitalWrite(14, LOW);
  delay(1000);
}
-----------------------------------------------------------------------------------------------------------


프로젝트 동영상


프로젝트 동영상 (Wemos D1 Wifi Board를 사용해 웹서버 IP 주소와 아이디 확인해 보기)

파일--->예제--->ESP8266WebServer--->HelloServer 순으로 클릭합니다
스케치 코드에서 const char* ssid = "........" const char* password = "........"
의 " "를 본인의 Wifi 아이디와 비밀번호 설정으로 수정해 준후 업로드 해 줍니다
시리얼 모니터를 켜면 연결된 웹서버의 IP 와 아이디를 확인할 수 있습니다

이때 보드레이트는 꼭 115200으로 되어 있어야 합니다~



Wemos D1 Wifi Board 의 아두이노 IDE 초기 세팅도 끝났고, 보드의 이상 유무도 확인했으므로
이제 0.96 인치 I2C OLED SSD1306 을 사용해서 OLED를 출력해 보고

WIFI 를 사용해서 Weather Station 기상정보 시스템을 만들어 보는 프로젝트를 진행해 보겠습니다



사용된 부품

Arduino Uno 호환 Wemos D1 Wifi Board
0.96인치 I2C OLED SSD1306 흰색
미니 브래드 보드
점퍼케이블

구성배선도


사용된 예제코드

WEMOS D1_SSD1306SimpleDemo.txt

WEMOS D1_WeatherStationDemo.txt



사용된 라이브러리

Json_Streaming_Parser.zip

ESP8266_and_ESP32_Oled_Driver_for_SSD1306_display.zip

ESP8266_Weather_Station.zip



라이브러리 추가 방법은 Arduino IDE 설치하기 포스팅을 참조해 주세요

주의사항
기본적으로 위 세가지 첨부된 라이브러리가 꼭 설치되어 있어야 합니다
라이브러리는 위 첨부된 라이브러리를 다운받아서 설치해도 되고 아두이노 IDE 메뉴 스케치--->라이브러리 관리 에서
라이브러리를 검색해서 추가해 주어도 됩니다

주의! 최근에 weatherstation 라이브러리가 업데이트된 것으로 확인되며

라이브러리 관리에서 라이브러리를 추가해 주는 경우 예제가 변경이 되었기 때문에 본 포스팅과 동일하게
테스트 불가능하게 되었습니다 이 경우 위에 첨부되어 있는 구버전의 3가지 라이브러리를 다운 받아서 수동으로 추가해서
설치해 주고 테스트 하시길 바랍니다





먼저 SSD1306 OLED 출력해 보기 테스트를 할때는 위 배선도를 참고해서
VCC-3.3V , GND-GND , SDA-SDA(D4) , SCL-SCL(D3) 이렇게 배선합니다

첨부된 WEMOS D1_SSD1306SimpleDemo 파일을 열어서 복사해서 스케치 업로드 해주어도 되고 라이브러리 추가가 완료되었다면
아두이노 IDE 에서 파일--->예제--->ESP8266_and_ESP32_Oled_Driver_for_SSD1306_display--->SSD1306SimpleDemo

순으로 클릭해서 진행해도 됩니다

이 경우 예제코드의 I2C 핀설정 하는 부분을 꼭 아래와 같이 수정해 주어야 합니다
(Wemos Board D4, D3에 연결했지만 마킹이 차이가 있어서 그렇지 원래는 D2, D1 이 맞습니다 이점 알고 넘어 갑시다)

// Initialize the OLED display using brzo_i2c
// D2 -> SDA
// D1 -> SCL
// SSD1306Brzo display(0x3c, D2, D1);
// or
// SH1106Brzo  display(0x3c, D2, D1);

// Initialize the OLED display using Wire library
SSD1306  display(0x3c, D2, D1);
// SH1106 display(0x3c, D2, D1);

첨부된 WEMOS D1_SSD1306SimpleDemo 파일은 테스트 하면서 핀수정을 위와같이 해놓고 업로드 해 놓았습니다 (이점 참고하세요)

주의! 단 첨부된 SSD1306SimpleDemo 파일을 복사해서 스케치 업로드 할때는
아두이노 IDE 에서 파일--->예제--->ESP8266_and_ESP32_Oled_Driver_for_SSD1306_display--->SSD1306SimpleDemo 순으로
예제를 열어서 그 위에 첨부된 파일을 복사해서 스케치를 업로드 합니다
그렇지 않으면 no search XXX.h 컴파일 메세지를 확인하게 될것입니다


다음 WIFI를 사용해 Weather Station 만들어 보기 테스트를 할때는 먼저 API Key 가 필요합니다

https://www.wunderground.com/weather/api/d/pricing.html

위 링크에 접속해서 API Key 를 생성하도록 합니다


Sign In 이나 Join 을 눌러서 가입을 하도록 합니다 (간단하게 이메일 주소와 비밀번호를 입력해 주고 무료로 가입할수 있습니다)

가입이 끝났으면 Sign In 을 눌러서 로그인을 합니다


 
로그인을 하고 위 이미지에서 처럼 Purchase Key 를 눌러서 API Key 를 얻기위해 다음 과정을 진행합니다




이름, 프로젝트 이메일, 프로젝트 이름, 프로젝트 웹사이트 등등을 적당하게 입력한후 하단은
Other , No, No 로 체크 하고 나라는 South Korea 로 선택 합니다



위 과정을 마치면 위 이미지 처럼 API Key 를 얻을수 있습니다 (주황색 Update 버튼 이나 Regenerate Key 버튼을 눌러서

업데이트 또는 재활성을 할수 있습니다)

API Key를 얻었으면 위 첨부된 배선도를 참고해서 VCC-3.3V , GND-GND , SDA-SDA(D4) , SCL-SCL(D3) 이렇게 배선합니다

위 첨부된 WEMOS D1_WeatherStationDemo 파일을 열어서 복사해서 스케치 업로드 해주어도 되고
(단 아두이노 IDE 에서 파일--->예제--->ESP8266_Weather_Station--->WeatherStationDemo 를 불러온 상태에서 스케치를 붙여넣어 주세요)
라이브러리 추가가 완료되었다면
아두이노 IDE 에서 파일--->예제--->ESP8266_Weather_Station--->WeatherStationDemo 순으로 클릭해서 수정 후 진행해도 됩니다


첨부파일에서도 확인할수 있듯이

#include <ESP8266WiFi.h>
#include <Ticker.h>
#include <JsonListener.h>
#include "SSD1306Wire.h"
#include "OLEDDisplayUi.h"
#include "Wire.h"
#include "WundergroundClient.h"
#include "WeatherStationFonts.h"
#include "WeatherStationImages.h"
#include "TimeClient.h"
#include "ThingspeakClient.h"

이렇게 많은 라이브러리를 사용하고 있습니다

그중에
WeatherStationFonts.h
WeatherStationImages.h
WeatherStationDemo.ino

위 세가지 파일은 모두 같은 폴더 안에 들어 있어야 합니다

ESP8266_Weather_Station 폴더---> examples 폴더---->WeatherStationDemo 폴더 안에 위치해야 함

라이브러리를 설치하면 기본적으로 위 경로에 폴더안에 들어있습니다
컴파일시 만약 라이브러리를 찾지 못한다는 no search XXX.h 에러 메세지가 나온다면 위 경로에
정상적으로 라이브러리 파일이 위치하고 있는지 확인해 봅시다



// WIFI
const char* WIFI_SSID = "YOUR WIFI NAME";
const char* WIFI_PWD = "YOUR WIFI PASSWORD";

위 부분 자신의 와이파이 이름과 와이파이 패스워드로 수정을 해줍니다

// Setup
const int UPDATE_INTERVAL_SECS = 10 * 60; // Update every 10 minutes

// Display Settings
const int I2C_DISPLAY_ADDRESS = 0x3c;
const int SDA_PIN = D2;
const int SDC_PIN = D1;

셋업에서 10분마다 업데이트 해주게 되어 있고 I2C 디스플레이 주소 설정은 0x3c

그리고 핀설정 SDA , SDC(SCL) 는 D2, D1 로 설정해 주어야 합니다 (실제 Wemos Board 에는 SDA-SDA(D4) , SCL-SCL(D3) 으로 배선)


 // TimeClient settings
const float UTC_OFFSET = 9;

UTC시간 (Universal Time (영어) + Coordonné (프랑스어)) 을 설정해주어야 하는데 UTC + 9 = KST (한국 표준시간) 입니다
때문에 UTC_OFFSET 은 위처럼 9로 해주면 됩니다

// Wunderground Settings
const boolean IS_METRIC = true;
const String WUNDERGRROUND_API_KEY = "538fd9759b53b553";
const String WUNDERGRROUND_LANGUAGE = "EN";
const String WUNDERGROUND_COUNTRY = "KO";
const String WUNDERGROUND_CITY = "Seoul";
 
API 키를 입력해 주고, 언어는 EN, 나라는 KO, 도시는 서울로 설정하면 됩니다
나라에 South Korea 를 입력했다가 안되서 애를 많이 먹었습니다 ㅜㅜ, 꼭 KO 로 해주세요


 //Thingspeak Settings
const String THINGSPEAK_CHANNEL_ID = "67284";
const String THINGSPEAK_API_READ_KEY = "L2VIW20QVNZJBLAK";

이부분은 추가로 확장 테스트 할때 사용하는데 그냥 놔두도 상관없습니다

스케치 수정을 마쳤으면 스케치 업로드를 해주면 됩니다

(위에 첨부된 예제파일은 세팅이 되어 있습니다 와이파이 이름과 와이파이 비번만 수정해 주면 됩니다)



프로젝트 동영상-SSD1306 OLED 출력해 보기


프로젝트 동영상-WIFI를 사요해서 Weather Station 만들어 보기


WEMOS D1_SSD1306SimpleDemo.txt
0.01MB
CH341SER.ZIP
0.14MB
Json_Streaming_Parser.zip
0.01MB
ESP8266_and_ESP32_Oled_Driver_for_SSD1306_display.zip
0.21MB
WEMOS D1_WeatherStationDemo.txt
0.01MB
ESP8266_Weather_Station.zip
0.69MB
CH340 USB_Serial Driver.zip
0.04MB
반응형

댓글