WeMos D1 mini와 OLED 등 여러가지 납땜이 필요한 부품들에 납땜을 완료했습니다.

생각보다 쉬운 일은 아니었지만 여러 번 해보니 요령이 생겼습니다. 저는 인두를 조금 오래 대고 있는 편이 잘 되더군요.

아무튼 준비작업이 완료되었으니 OLED 테스트를 진행해봅니다.


준비물

1) WeMos D1 mini

2) 0.96인치 128x64 OLED

3) 5핀 마이크로usb 케이블

4) 점퍼 등


작업 순서

1) 회로도 작성

2) 회로도에 맞춰 WeMos D1 mini와 OLED 연결

3) 스케치로 예제 작성 및 업로드

4) 결과 확인

5) PC



1. 회로도 작성

지난 번의 회로도를 그대로 사용해도 되겠지만 WeMos D1 mini에 납땜을 한 관계로 브레드보드를 거치지 않고 직접 OLED에 연결이 가능해졌습니다.

이처럼 직접 연결하기로 합니다.


2. 회로도에 맞춰 WeMos D1 mini와 OLED 연결

실제로 연결해 봅니다.

연결하고 WeMos D1 mini에 전원을 넣어보니 OLED가 켜집니다. 제조사 이름 같은게 표시되네요.


3. 스케치로 예제 작성 및 업로드

예제를 작성하기에 앞서 OLED 사용법을 찾다가 알게된 문제점을 먼저 확인해 봅니다.

https://m.blog.naver.com/bug800/221486179332 이 사이트 주인분이 말씀하시길 I2C용 주소가 틀려서 애를 먹었다고 하시더군요.


일단 I2C에 대해서 알아봅니다. 여기가 잘 나와있더군요. https://m.blog.naver.com/darknisia/220669400101

간단히 정리하면 1) 기기간 통신의 한 종류 2) 1:다 가능 3) 주소를 이용해 제어 4) 아두이노에서는 Wire 라이브러리 사용. 이 정도입니다.


구매한 OLED도 I2C 통신을 하므로 주소를 알 필요가 있네요. 구매처를 뒤져보아도 되겠지만 I2C 주소를 스캔하는 프로그램을 돌려서 확인하는 것도 가능합니다.

검색을 통해 알아낸 I2C 주소 스캔 소스를 업로드 해서 돌려봅니다. (https://diy-project.tistory.com/23)


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include <Wire.h>
 
void setup()
{
  Wire.begin();
  Serial.begin(115200);
  Serial.println("\nI2C Scanner");
}
 
void loop()
{
  byte error, address;
  int nDevices;
  Serial.println("Scanning...");
  nDevices = 0;
  for(address = 1; address < 127; address++ ) 
  {
    Wire.beginTransmission(address);
    error = Wire.endTransmission();
    if (error == 0)
    {
      Serial.print("I2C device found at address 0x");
      if (address<16
        Serial.print("0");
      Serial.print(address,HEX);
      Serial.println("  !");
      nDevices++;
    }
    else if (error==4
    {
      Serial.print("Unknow error at address 0x");
      if (address<16
        Serial.print("0");
      Serial.println(address,HEX);
    }    
  }
  if (nDevices == 0)
    Serial.println("No I2C devices found\n");
  else
    Serial.println("done\n");
  delay(5000);          
}
cs


시리얼 모니터에 OLED의 I2C 주소가 잘 나왔습니다.
이제 Afafruit의 ssd1306_128x64_i2c 예제를 바꿔줍니다. (위의 OLED 사용법 사이트를 참고했습니다.)

1) 라이브러리의 Afafruit_SSD1306.h에서 #define SSD1306_128_32 을 주석처리하고 그 위의 #define SSD1306_128_64 을 풀어줍니다.
2) ssd1306_128x64_i2c 예제에서
    #define OLED_RESET     -1 //4 >> 4에서 -1로 변경
    if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { >> 0x3D에서 0x3C로 변경(OLED I2C 주소를 위에서 찾은 주소로 바꿔줍니다.)

여기까지 해주고 업로드 해 봅니다.



잘 나오네요. 드디어 길었던 OLED 테스트가 끝났습니다. 다음 번에는 받아온 미세먼지 정보를 OLED 화면에 표시해 보도록 하겠습니다.



+ Recent posts