죽은 Pro Micro 살리기.
Arduino Pro Micro 제품을 2개 가지고 있었습니다. 그 중 하나는 PC에 연결해도 인식을 하지 못합니다. 지금이었으면 조금 고민하다 버렸겠지만, 당시 저는 돈도 없었고 알리익스프레스에서 장장 한 달을 기다려 구입했던지라 차마 버릴 수가 없었습니다. 그렇게 수 년동안 공구함 어딘가에 짱박혀있는 Pro Micro를 꺼내봤다가 한 번 살려 보기로 했습니다. 부트로더를 다시 업로드하든 뭘 하든 해서 살려보겠다는 굳은 각오를 하고 방법을 찾아봤습니다. 허무하게도 생각보다 굉장히 간단한 방법으로 살려버렸습니다.
망가진 보드가 Atmega32U4를 사용하는 경우, 이 방법을 통해 살려볼 수도 있을 것 같습니다. 같은 MCU를 사용하는 Arduino Leonardo에서도 이 방법을 쓸 수 있을 것 같습니다.(Pro Micro의 경우처럼 RST, GND를 굳이 쇼트시키지 않아도 Reset 버튼이 있으니 상대적으로 어렵지 않아 보입니다.) 보통 보드 살리기 관련 된 글들이 돌아다닌다면 두 가지 생각이 듭니다. '누군가 또 어떤 삽질기를 적어놓았구나', '이 보드가 너무 쉽게 죽는 보드인가?' 이번에는 두 가지 생각이 다 들었습니다.
Wiring
어쨌든, 원래 삽질하려던 게 해결되어 생각보다 시간이 남아버렸으니 Pro Micro에 DHT22와 128*64 OLED 를 추가해서 아두이노 온습도계를 만들어봤습니다. 배선은 다음과 같습니다.
배선은 그리 어렵지 않습니다. 다행히 아두이노에 연결할 두 모듈이 모두 3.3V-5V까지 지원하기에, 3.3v 버전이나 5v 버전의 Arduino Pro Micro를 사용해도 잘 작동합니다. OLED부분에 5v를 인가하지 말라..는 이야기가 있어 조금 겁이 나신다면 VCC부분에 작은 저항 하나 추가해주시면 되겠습니다. DHT22 부분 VCC와 OUT 사이에는 10K 저항을 추가합니다. 이제 부품들을 연결해줍니다.
Code Writing
코드는 아래를 펼치면 확인할 수 있습니다. 완성도는 그냥 예제 두 개 합쳤다 보시는 편이 좋습니다. 추후 조금 더 다듬어 보겠습니다.
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
// The pins for I2C are defined by the Wire-library.
// On an arduino UNO: A4(SDA), A5(SCL)
// On an arduino MEGA 2560: 20(SDA), 21(SCL)
// On an arduino LEONARDO: 2(SDA), 3(SCL), ...
#define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin)
#define SCREEN_ADDRESS 0x3C ///< See datasheet for Address; 0x3D for 128x64, 0x3C for 128x32
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
#define DEG_X 100
#define DEG_Y 12
#include <dhtnew.h>
DHTNEW mySensor(6);
#define THERMO_WIDTH 27
#define THERMO_HEIGHT 51
/**
* Made with Marlin Bitmap Converter
* https://marlinfw.org/tools/u8glib/converter.html
*
* This bitmap from the file 'picture-4.bmp'
*/
#pragma once
#define LOGO_W 128
#define LOGO_H 64
const unsigned char logo[] PROGMEM = {
B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B10000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000001,B11000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000001,B11000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000011,B11000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000001,B11000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00111101,B11111100,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B11111101,B11111111,B10000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000011,B11111101,B10111111,B11000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000111,B11111110,B10111111,B11100000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00001111,B11111110,B01111111,B11111000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00011111,B11111111,B11111111,B11111000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00111111,B11111111,B11111111,B11111100,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00111111,B11111111,B11111111,B11111100,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00111111,B11111111,B11111111,B11111110,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B01111111,B11111111,B11111111,B11111110,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B01111111,B11111111,B11111111,B11111110,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B01111111,B11111111,B11111111,B11111110,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B01111111,B11111111,B11111111,B11111110,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B01111111,B11111111,B11111111,B11111110,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00111111,B11111111,B11111111,B11111100,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000111,B11111111,B11111111,B11100000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00111111,B11111100,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00001111,B11110000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00111111,B11111111,B11111111,B11111100,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00111111,B11111111,B11111111,B11111100,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00111111,B11111111,B11111111,B11111100,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00111111,B11111111,B11111111,B11111100,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00011111,B11111111,B11111111,B11111000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00011111,B11111111,B11111111,B11111000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00011111,B11111111,B11111111,B11111000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00001111,B11111111,B11111111,B11110000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00001111,B11111111,B11111111,B11110000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000111,B11111111,B11111111,B11100000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000111,B11111111,B11111111,B11100000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000001,B11111111,B11111111,B10000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B01111111,B11111110,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00001111,B11110000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000001,B11000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00011000,B01110001,B11000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00011100,B11110011,B10000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00011100,B11110011,B10011001,B11001110,B11111111,B01111110,B01110111,B10111001,B11001110,B00111110,B00110001,B10111111,B11000000,B00000000,
B00000000,B00000000,B00011101,B11110011,B00111001,B11001110,B11111110,B11111110,B01100111,B00111101,B11001100,B01111110,B01110011,B10111111,B11000000,B00000000,
B00000000,B00000000,B00011101,B10110111,B00111001,B11001100,B11111110,B11111100,B11101110,B00111101,B11001100,B11100110,B01110011,B10111111,B10000000,B00000000,
B00000000,B00000000,B00011111,B10110111,B00111111,B11001100,B00111000,B11111100,B11111100,B01111101,B10011100,B11100000,B01111111,B10001110,B00000000,B00000000,
B00000000,B00000000,B00011111,B10111110,B00111111,B10011100,B00111000,B11111100,B11111100,B01111111,B10011100,B11101110,B01111111,B00001110,B00000000,B00000000,
B00000000,B00000000,B00011111,B00111110,B00111111,B10011100,B00110000,B11100000,B11111100,B01111111,B10011100,B11001110,B01111111,B00001100,B00000000,B00000000,
B00000000,B00000000,B00011111,B00111100,B01110011,B10011100,B01110000,B11111100,B11001110,B01100111,B10011100,B11101110,B01100111,B00001100,B00000000,B00000000,
B00000000,B00000000,B00011110,B00111100,B01110011,B10011100,B01110001,B11111100,B11001110,B01100111,B10011000,B11111100,B11100111,B00011100,B00000000,B00000000,
B00000000,B00000000,B00001110,B00111000,B01110011,B10011000,B01110001,B11111001,B11001110,B01100111,B10011000,B01111100,B11100111,B00011100,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000
};
const unsigned char thermo[] PROGMEM = {
B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,
B00000000,B00001110,B00000000,B00000000,
B00000000,B00111111,B10000000,B00000000,
B00000000,B01111111,B11000000,B00000000,
B00000000,B11111111,B11100000,B00000000,
B00000000,B11111111,B11100000,B00000000,
B00000000,B11111111,B11100000,B00000000,
B00000000,B11111111,B11100000,B00000000,
B00000000,B11100000,B11100000,B00000000,
B00000000,B11000000,B01100000,B00000000,
B00000000,B11000000,B01100000,B00000000,
B00000000,B11000000,B01100000,B00000000,
B00000000,B11000000,B01100000,B00000000,
B00000000,B11000000,B01100000,B00000000,
B00000000,B11000000,B01100000,B00000000,
B00000000,B11000000,B01100000,B00000000,
B00000000,B11000001,B11100000,B00000000,
B00000000,B11000000,B01100000,B00000000,
B00000000,B11000000,B01100000,B00000000,
B00000000,B11000000,B01100000,B00000000,
B00000000,B11000001,B11100000,B00000000,
B00000000,B11000000,B01100000,B00000000,
B00000000,B11000000,B01100000,B00000000,
B00000000,B11000000,B01100000,B00000000,
B00000000,B11000001,B11100000,B00000000,
B00000000,B11000000,B01100000,B00000000,
B00000000,B11000000,B01100000,B00000000,
B00000001,B11000000,B01110000,B00000000,
B00000011,B11000000,B01111000,B00000000,
B00000111,B00000000,B00011100,B00000000,
B00001110,B00000000,B00001110,B00000000,
B00001100,B00000000,B00000110,B00000000,
B00011000,B00000000,B00000011,B00000000,
B00011000,B00000000,B00000011,B00000000,
B00111000,B00000000,B00000011,B10000000,
B00110000,B00000000,B00000001,B10000000,
B00110000,B00000000,B00000001,B10000000,
B00110000,B00000000,B00000001,B10000000,
B00110000,B00000000,B00000001,B10000000,
B00011000,B00000000,B00000011,B00000000,
B00011000,B00000000,B00000011,B00000000,
B00011100,B00000000,B00000111,B00000000,
B00001100,B00000000,B00000110,B00000000,
B00000110,B00000000,B00001100,B00000000,
B00000011,B10000000,B00111000,B00000000,
B00000001,B11100000,B11110000,B00000000,
B00000000,B01111111,B11000000,B00000000,
B00000000,B00001110,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000
};
void setup()
{
// SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internally
if(!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;); // Don't proceed, loop forever
}
// // Show initial display buffer contents on the screen --
// // the library initializes this with an Adafruit splash screen.
// display.display();
// delay(2000); // Pause for 2 seconds
//
display.clearDisplay();
display.setCursor(0, 0);
display.drawBitmap(
0,
0, logo, LOGO_W, LOGO_H, 1);
display.setTextSize(1); // Normal 1:1 pixel scale
display.setTextColor(SSD1306_WHITE); // Draw white text
display.setCursor(30, 55); // Start at top-left corner
display.cp437(true); // Use full 256 char 'Code Page 437' font
display.println("Jun 5th, 2021");
display.display();
Serial.begin(115200);
Serial.println(__FILE__);
Serial.print("LIBRARY VERSION: ");
Serial.println(DHTNEW_LIB_VERSION);
Serial.println();
delay(3000); // boot time
mySensor.setWaitForReading(true);
uint16_t rd = 2000;
uint16_t step = 2000;
while (step)
{
step /= 2;
mySensor.setReadDelay(rd);
int chk = mySensor.read();
Serial.print("ReadDelay (ms): ");
Serial.print(mySensor.getReadDelay());
Serial.print("\t T: ");
Serial.print(mySensor.getTemperature(), 1);
Serial.print("\t H: ");
Serial.print(mySensor.getHumidity(), 1);
Serial.print("\t");
printStatus(chk);
if (chk == DHTLIB_OK) rd -= step;
else {
rd += step;
mySensor.read();
}
}
// safety margin of 100 uSec
rd += 100;
mySensor.setReadDelay(rd);
Serial.print("\nreadDelay set to (ms) : ");
Serial.print(mySensor.getReadDelay());
Serial.println("\n\nDuration test started");
}
void loop()
{
// Note: the library prevents reads faster than readDelay...
// it will return previous values for T & H
int chk = mySensor.read();
Serial.print(millis());
Serial.print("\t");
Serial.print(mySensor.getReadDelay());
Serial.print("\t T: ");
Serial.print(mySensor.getTemperature(), 1);
Serial.print("\t H: ");
Serial.print(mySensor.getHumidity(), 1);
Serial.print("\t");
printStatus(chk);
}
void printStatus(int chk)
{
switch (chk)
{
case DHTLIB_OK:
Serial.print("OK,\t");
break;
case DHTLIB_ERROR_CHECKSUM:
Serial.print("Checksum error,\t");
break;
case DHTLIB_ERROR_TIMEOUT_A:
Serial.print("Time out A error,\t");
break;
case DHTLIB_ERROR_TIMEOUT_B:
Serial.print("Time out B error,\t");
break;
case DHTLIB_ERROR_TIMEOUT_C:
Serial.print("Time out C error,\t");
break;
case DHTLIB_ERROR_TIMEOUT_D:
Serial.print("Time out D error,\t");
break;
case DHTLIB_ERROR_SENSOR_NOT_READY:
Serial.print("Sensor not ready,\t");
break;
case DHTLIB_ERROR_BIT_SHIFT:
Serial.print("Bit shift error,\t");
break;
case DHTLIB_WAITING_FOR_READ:
Serial.print("Waiting for read,\t");
break;
default:
Serial.print("Unknown: ");
Serial.print(chk);
Serial.print(",\t");
break;
}
Serial.println();
display.clearDisplay();
display.setCursor(0, 0);
display.drawBitmap(
5,
(display.height() - THERMO_HEIGHT) / 2,
thermo, THERMO_WIDTH, THERMO_HEIGHT, 1);
display.setTextSize(2); // Normal 1:1 pixel scale
display.setTextColor(SSD1306_WHITE); // Draw white text
display.setCursor(45, 12); // Start at top-left corner
display.cp437(true); // Use full 256 char 'Code Page 437' font
display.print(mySensor.getTemperature(),1);
display.println(" C");
display.setCursor(45, 36); // Start at top-left corner
display.print(mySensor.getHumidity(),1);
display.println(" %");
display.drawPixel(DEG_X, DEG_Y, SSD1306_WHITE);
display.drawPixel(DEG_X+1, DEG_Y+1, SSD1306_WHITE);
display.drawPixel(DEG_X, DEG_Y+2, SSD1306_WHITE);
display.drawPixel(DEG_X-1, DEG_Y+1, SSD1306_WHITE);
display.display();
delay(600);
}
// -- END OF FILE --
Bitmap Image 넣기
코드를 보셨다면 아시겠지만, 이상한 hex값 배열이 두 가지가 있습니다. 이것들은 일반 이미지를 OLED에서 볼 수 있도록 128*64이하로 리사이즈한 다음 배열 형태로 변환한 겁니다. 제작 과정에 대해 간단히 소개해드리겠습니다.
일단 이미지를 만들어 줍니다. 색깔은 왼쪽 이미지처럼 흰색 배경에서 만들어야 OLED에 깔끔하게 표시됩니다. 저는 파워포인트로 온도계를 만들었습니다. 저처럼 파워포인트를 사용하실 것 같다면 만들 때 좀 크게 만들어서 나중에 다른 툴로 리사이징을 해야 깔끔하게 표현됩니다. 파워포인트에서 눈 찌푸리며 최대한 작게 만든다고 한 다음 그림으로 저장해보시면 4번째 그림처럼 뭉개집니다.
일단 이미지를 만들어 봤는데, 128*64 이상이라면 아래에서 크기를 조절합니다.
크기가 조절되었다면 아래에서 이미지를 배열로 변환 후 코드에 넣습니다. 옵션은 Marlin 2.x를 1.x로 변경하면 되겠습니다.
이후 display.drawBitmap 메서드를 활용해 OLED에 표시되도록 하면 됩니다.
Done!
전원을 연결하면 Whiteknight 로고와 제작일이 나오고, 3초 후 600ms 주기로 온도와 습도가 표시됩니다. 초기에는 정확히 표현되다가, 시간이 흘러 보드와 OLED에서 열이 발생하면 실제 온도보다 1-2도정도 높게 표현됩니다.
Challenges
일단 Enclosure가 있어야 휴대가 가능합니다. 나중에 3D프린터를 구입하게되면 그 때 이 주제로 포스팅 진행해 보겠습니다.