0.9" OLED display..

I2C와 SPI 버전 두가지 

Image result for ssd1306 oled

Image result for stm32mini


다양한 라이브러리 있음

==============================

1. u8g2   

  olikraus/u8g2 - GitHub


 예제 작동시키려면 SCL, SDA에 핀번호를 적는다.

U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, /* clock=*/PB6, /* data=*/ PB7, /* reset=*/ U8X8_PIN_NONE); 

#include 
#include 

#ifdef U8X8_HAVE_HW_SPI
#include 
#endif
#ifdef U8X8_HAVE_HW_I2C
#include 
#endif
//U8G2_SSD1306_64X32_1F_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE); 
//U8G2_SSD1306_96X16_ER_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);   // EastRising 0.69" OLED

U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, /* clock=*/PB6, /* data=*/ PB7, /* reset=*/ U8X8_PIN_NONE); 

// End of constructor list



Image result for stm32mini pin map


2. STM32 용 OLEC I2C 라이브러리
 I2C Oled (two libraries)  (Adafruit와 OLED I2C)

 https://drive.google.com/file/d/0B3sgtw ... sp=sharing
 https://drive.google.com/file/d/0B3sgtw ... sp=sharing


그런데 이 라이브러리 중 OLED I2C 예제를 컴파일 하면 다음 에러발생

HW_STM32.h:140:9: error: 'HWIRE' was not declared in this scope


수정방법은 :

http://www.stm32duino.com/viewtopic.php?t=3137


HW_STM32.h 화일 내의 HWIRE.xxxx 를 Wire.xxxxx 로 변경한다



그리고 다음 코드 변경

//OLED  myOLED(SDA, SCL, 8);

OLED  myOLED(PB7, PB6, 8);      -----  STM32mini 의 핀번호 적을 것


// OLED_I2C_3D_Cube
// Copyright (C)2015 Rinky-Dink Electronics, Henning Karlsen. All right reserved
// web: http://www.RinkyDinkElectronics.com/

#include 

//OLED  myOLED(SDA, SCL, 8);
OLED  myOLED(PB7, PB6, 8);

extern uint8_t SmallFont[];

double vectors[8][3] = {{20, 20, 20},{-20, 20, 20},{-20, -20, 20},{20, -20, 20},{20, 20, -20},{-20, 20, -20},{-20, -20, -20},{20, -20, -20}};

double perspective = 100.0f;
int deltaX, deltaY, deltaZ, iter = 0;
long stime, fps = 0, frames = 0;

void setup()
{
  randomSeed(analogRead(0));

  myOLED.begin();
  myOLED.setFont(SmallFont);
  stime = micros();
}

void loop()
{
  myOLED.clrScr();
  drawVectors();
  if (iter == 0)
  {
    deltaX = random(7) - 3;
    deltaY = random(7) - 3;
    deltaZ = random(7) - 3;
    iter   = random(250) + 5;
  }
  rotateX(deltaX);
  rotateY(deltaY);
  rotateZ(deltaZ);
  iter--;
  fps += 1000000 / (micros() - stime);
  stime = micros();
  frames++;
  myOLED.printNumI(fps / frames, 0, 0, 3);  // Print average FPS on screen
  myOLED.update();
}



블로그 이미지

DIYworld

,