練習14 温湿度計を作る3 OLED1306

前回、15分おきに温湿度を測定できるようになりました。
今回は、測定結果などをLCD(OLED)に表示したいと思います。

1.OLED

手持ちのSSD1306(I2C)↓を使います。
https://akizukidenshi.com/catalog/g/gP-12031/

ライブラリはAdafruitsから出ているものを使いました。
 - Adafruit_GFX.h
 - Adafruit_SSD1306.h

2.ソース

ヘッダ

OLEDに表示する文字列c[x]、測定値を格納する変数 temp_31とhumid_31を宣言します。
更に、Adafruituのヘッダファイルをインクルードし、定数を設定します。

  String c[3];
  float  temp_31;
  float  humid_31;

  #include <Adafruit_GFX.h>       //<---190622 for OLED
  #include <Adafruit_SSD1306.h>

  #define SCREEN_WIDTH 128 // OLED display width, in pixels
  #define SCREEN_HEIGHT 64 // OLED display height, in pixel
  #define OLED_RESET 2
  Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

setup()

SSD1306のアドレスはデフォルトの0x3C
起動後に表示する文字列c[x]を定義します。

  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  display.clearDisplay();
  
  c[0]="ChakoMeter";
  c[1]=" Ver.3" ;
  c[2]=" SHT31" ;
  c[3]=" '20/09/13";
  
  Display_Pic3(1); 

loop()

起きたら測定、表示、寝るを繰り返します。

  read_SHT31();
  c[2]=String(temp_31  ) + " degC";
  c[3]=String(humid_31) + " %";
  Display_Pic3(1); 
  DeepSleep();
  delay(1000);

関数 Display_Pic3()

c[x]をLCDに表示します。横6ドットx縦16ドットの文字を4行表示できます。 display.println()で文字列をメモリに送り、display.display()で表示します。便利ですね!

void Display_Pic3(int pp) {
  display.clearDisplay(); // 画面バッファをクリア
  display.setTextSize(2); // 横6ドットx縦16ドットの文字サイズ
  display.setTextColor(WHITE);
  display.setCursor(0, 0); 
  display.println(c[0]);
  display.println(c[1]);
  display.println(c[2]);
  display.println(c[3]);
  display.display();
  delay(10);
}

測定結果をOLEDに表示できるようになりました。
SSD1306の消費電流は、max15mAです。発光している割合が10%程度とすると1-2mA程度でしょうか?しばらくは常時ONで使いたいと思っています。

次回はWifiに接続します。