前回、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に接続します。