注釈

こんにちは、SunFounderのRaspberry Pi & Arduino & ESP32愛好家コミュニティへようこそ!Facebook上でRaspberry Pi、Arduino、ESP32についてもっと深く掘り下げ、他の愛好家と交流しましょう。

参加する理由は?

  • エキスパートサポート:コミュニティやチームの助けを借りて、販売後の問題や技術的な課題を解決します。

  • 学び&共有:ヒントやチュートリアルを交換してスキルを向上させましょう。

  • 独占的なプレビュー:新製品の発表や先行プレビューに早期アクセスしましょう。

  • 特別割引:最新製品の独占割引をお楽しみください。

  • 祭りのプロモーションとギフト:ギフトや祝日のプロモーションに参加しましょう。

👉 私たちと一緒に探索し、創造する準備はできていますか?[ ここ]をクリックして今すぐ参加しましょう!

OLED

概要

このレッスンでは、SSD1306ドライバーを使用したOLEDディスプレイについて学びます。OLED(有機発光ダイオード)ディスプレイは、スマートウォッチ、携帯電話、さらにはテレビなど、さまざまな電子機器で広く使用されています。SSD1306は、有機/ポリマー発光ダイオードのドットマトリックスグラフィックディスプレイシステム用のシングルチップCMOS OLED/PLEDドライバー兼コントローラーです。電流が流れると発光する有機物質ベースのダイオードを使用し、クリアで鮮明なビジュアル出力を提供します。

提供されたコードでは、ArduinoボードとI2Cプロトコルを介してOLEDディスプレイがインターフェースされます。コードはAdafruit SSD1306ライブラリを使用してディスプレイを制御します。プログラムは、以下のようなさまざまな機能をカバーしています:

  1. テキストの表示:「Hello world!」が画面に表示されます。

  2. 反転テキスト:「Hello world!」が反転した色の配色で表示されます。

  3. フォントサイズ:「Hello!」が拡大されたフォントサイズで表示されます。

  4. 数字の表示:123456789が表示されます。

  5. ASCII文字:一連のASCII文字が表示されます。

  6. スクロール:テキストがディスプレイを横切ってスクロールします。

  7. ビットマップ表示:事前定義されたビットマップ画像がOLED画面に表示されます。

このOLEDディスプレイは、デジタル時計、ミニゲームコンソール、情報表示など、さまざまなアプリケーションで使用できます。コンパクトでポータブルなデバイスでユーザーインターフェイスを提供するための素晴らしい方法です。

必要なコンポーネント

このプロジェクトには、以下のコンポーネントが必要です。

全セットを購入するのが便利です。こちらがリンクです:

名称

このキットのアイテム数

リンク

Elite Explorer Kit

300+

Elite Explorer Kit

以下のリンクから個別に購入することもできます。

コンポーネント紹介

購入リンク

Arduino Uno R4 WiFi

-

ジャンパーワイヤー

購入

OLEDディスプレイモジュール

購入

配線図

../_images/15-oled_bb.png

回路図

../_images/15_oled_schematic.png

コード

注釈

  • ファイル 15-oled.inoelite-explorer-kit-main\basic_project\15-oled のパスで直接開くことができます。

  • または、このコードをArduino IDEにコピーしてください。

注釈

ライブラリをインストールするには、Arduinoライブラリマネージャーを使用し、 「Adafruit SSD1306」「Adafruit GFX」 を検索してインストールしてください。

15-oled.ino
  1/*
  2  This code initializes an OLED display (SSD1306) using the Adafruit SSD1306 library, 
  3  and displays various text, numbers, and scroll animations on the screen.
  4
  5  Board: Arduino Uno R4 (or R3)
  6  Component:  OLED (SSD1306)
  7  Library: https://github.com/adafruit/Adafruit_SSD1306 (Adafruit SSD1306 by Adafruit)  
  8           https://github.com/adafruit/Adafruit-GFX-Library (Adafruit GFX Library by Adafruit) 
  9*/
 10
 11#include <SPI.h>
 12#include <Wire.h>
 13#include <Adafruit_GFX.h>
 14#include <Adafruit_SSD1306.h>
 15
 16#define SCREEN_WIDTH 128  // OLED display width, in pixels
 17#define SCREEN_HEIGHT 64  // OLED display height, in pixels
 18
 19// Declaration for SSD1306 display connected using I2C
 20#define OLED_RESET -1  // Reset pin # (or -1 if sharing Arduino reset pin)
 21#define SCREEN_ADDRESS 0x3C
 22Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
 23
 24//Bitmap data
 25static const unsigned char PROGMEM sunfounderIcon[] = {
 26	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x7f, 0xff, 0xff, 0xff, 
 27	0xff, 0xff, 0xff, 0xf0, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x0f, 0xff, 0xff, 0xff, 
 28	0xff, 0xff, 0xff, 0xc0, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x03, 0xff, 0xff, 0xff, 
 29	0xff, 0xff, 0xff, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x7f, 0xff, 0xff, 
 30	0xff, 0xff, 0xfc, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x1f, 0xff, 0xff, 
 31	0xff, 0xff, 0xf0, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x01, 0x00, 0x07, 0xff, 0xff, 
 32	0xff, 0xff, 0xc0, 0x07, 0xc0, 0x01, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0f, 0xe0, 0x00, 0xff, 0xff, 
 33	0xff, 0xff, 0x00, 0x1f, 0xf0, 0x00, 0x7f, 0xff, 0xff, 0xfe, 0x00, 0x3f, 0xf8, 0x00, 0x3f, 0xff, 
 34	0xff, 0xfc, 0x00, 0x7f, 0xfe, 0x00, 0x0f, 0xff, 0xff, 0xfc, 0x00, 0xfe, 0xff, 0x00, 0x07, 0xff, 
 35	0xff, 0xf8, 0x01, 0xfc, 0x7f, 0x80, 0x03, 0xff, 0xff, 0xf0, 0x03, 0xf8, 0x3f, 0xc0, 0x01, 0xff, 
 36	0xff, 0xe0, 0x07, 0xf0, 0x0f, 0xe0, 0x00, 0xff, 0xff, 0xc0, 0x0f, 0xe0, 0x07, 0xf8, 0x00, 0x3f, 
 37	0xff, 0x80, 0x0f, 0xc0, 0x03, 0xfc, 0x00, 0x7f, 0xff, 0x00, 0x1f, 0xc0, 0x01, 0xfe, 0x00, 0xff, 
 38	0xff, 0x00, 0x0f, 0xe0, 0x00, 0x7f, 0x81, 0xff, 0xff, 0x00, 0x0f, 0xf0, 0x00, 0x3f, 0xc3, 0xff, 
 39	0xff, 0x80, 0x03, 0xfc, 0x00, 0x1f, 0xe7, 0xff, 0xff, 0xc0, 0x01, 0xfe, 0x00, 0x0f, 0xff, 0xff, 
 40	0xff, 0xe0, 0x00, 0xff, 0x00, 0x03, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x7f, 0x80, 0x01, 0xff, 0xff, 
 41	0xff, 0xf8, 0x00, 0x1f, 0xe0, 0x00, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x0f, 0xf0, 0x00, 0x7f, 0xff, 
 42	0xff, 0xff, 0x00, 0x07, 0xf8, 0x00, 0x3f, 0xff, 0xff, 0xff, 0x80, 0x03, 0xfc, 0x00, 0x0f, 0xff, 
 43	0xff, 0xff, 0xc0, 0x00, 0xff, 0x00, 0x07, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x7f, 0x80, 0x03, 0xff, 
 44	0xff, 0xff, 0xf8, 0x00, 0x3f, 0xc0, 0x01, 0xff, 0xff, 0xf3, 0xfc, 0x00, 0x1f, 0xe0, 0x00, 0xff, 
 45	0xff, 0xe1, 0xfe, 0x00, 0x07, 0xf8, 0x00, 0x7f, 0xff, 0xc0, 0x7f, 0x00, 0x03, 0xf8, 0x00, 0x7f, 
 46	0xff, 0x80, 0x3f, 0xc0, 0x01, 0xfc, 0x00, 0xff, 0xff, 0x00, 0x1f, 0xe0, 0x03, 0xf8, 0x00, 0xff, 
 47	0xfe, 0x00, 0x0f, 0xf0, 0x03, 0xf0, 0x01, 0xff, 0xff, 0x80, 0x07, 0xf8, 0x07, 0xe0, 0x03, 0xff, 
 48	0xff, 0xc0, 0x01, 0xfc, 0x0f, 0xc0, 0x07, 0xff, 0xff, 0xe0, 0x00, 0xff, 0x1f, 0xc0, 0x0f, 0xff, 
 49	0xff, 0xf0, 0x00, 0x7f, 0xbf, 0x00, 0x1f, 0xff, 0xff, 0xf8, 0x00, 0x3f, 0xff, 0x00, 0x3f, 0xff, 
 50	0xff, 0xfe, 0x00, 0x0f, 0xfe, 0x00, 0x7f, 0xff, 0xff, 0xff, 0x00, 0x07, 0xfc, 0x00, 0xff, 0xff, 
 51	0xff, 0xff, 0x80, 0x03, 0xf8, 0x01, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x01, 0xf0, 0x03, 0xff, 0xff, 
 52	0xff, 0xff, 0xf0, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x0f, 0xff, 0xff, 
 53	0xff, 0xff, 0xfc, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x1f, 0xff, 0xff, 
 54	0xff, 0xff, 0xff, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x7f, 0xff, 0xff, 
 55	0xff, 0xff, 0xff, 0xe0, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x01, 0xff, 0xff, 0xff, 
 56	0xff, 0xff, 0xff, 0xf8, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x07, 0xff, 0xff, 0xff, 
 57	0xff, 0xff, 0xff, 0xff, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
 58};
 59
 60void setup() {
 61  Serial.begin(9600);
 62
 63  // initialize the OLED object
 64  if (!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {
 65    Serial.println(F("SSD1306 allocation failed"));
 66    for (;;)
 67      ;
 68  }
 69
 70  // Clear the buffer.
 71  display.clearDisplay();
 72
 73  // Display Text
 74  display.setTextSize(1);       // Set text size
 75  display.setTextColor(WHITE);  // Set text color
 76  display.setCursor(0, 28);     // Set cursor position
 77  display.println("Hello world!");
 78  display.display();  // Display the content on the screen
 79  delay(2000);
 80  display.clearDisplay();  // Clear the screen
 81
 82  // Display Inverted Text
 83  display.setTextColor(BLACK, WHITE);  // 'inverted' text
 84  display.setCursor(0, 28);
 85  display.println("Hello world!");
 86  display.display();
 87  delay(2000);
 88  display.clearDisplay();
 89
 90  // Changing Font Size
 91  display.setTextColor(WHITE);
 92  display.setCursor(0, 24);
 93  display.setTextSize(2);
 94  display.println("Hello!");
 95  display.display();
 96  delay(2000);
 97  display.clearDisplay();
 98
 99  // Display Numbers
100  display.setTextSize(1);
101  display.setCursor(0, 28);
102  display.println(123456789);
103  display.display();
104  delay(2000);
105  display.clearDisplay();
106
107  // Display ASCII Characters
108  display.setCursor(0, 24);
109  display.setTextSize(2);
110  for (int i = 1; i < 8; i++) {
111    display.write(i);
112  }
113  display.display();
114  delay(2000);
115  display.clearDisplay();
116
117  // Scroll full screen
118  display.setCursor(0, 0);
119  display.setTextSize(1);
120  display.println("Full");
121  display.println("screen");
122  display.println("scrolling!");
123  display.display();
124  display.startscrollright(0x00, 0x07);  // Scroll the screen to the right
125  delay(5000);
126  display.stopscroll();
127  delay(1000);
128  display.startscrollleft(0x00, 0x07);  // Scroll the screen to the left
129  delay(5000);
130  display.stopscroll();
131  delay(1000);
132  display.clearDisplay();
133
134  // Scroll part of the screen
135  display.setCursor(0, 0);
136  display.setTextSize(1);
137  display.println("Scroll");
138  display.println("some part");
139  display.println("of the screen.");
140  display.display();
141  display.startscrollright(0x00, 0x00);  // Scroll the first column of the screen to the right
142  delay(4000);
143  display.stopscroll();
144  display.clearDisplay();
145
146  // Display bitmap
147  display.drawBitmap(32, 0, sunfounderIcon, 64, 64, WHITE);
148  display.display();
149}
150
151void loop() {
152}


コード解析

  1. ライブラリのインクルードと初期定義: OLEDとのインターフェースに必要なライブラリを含めます。その後、OLEDの寸法とI2Cアドレスに関する定義が提供されます。

    • Adafruit SSD1306: このライブラリはSSD1306 OLEDディスプレイのインターフェースに役立つように設計されています。ディスプレイの初期化、設定の制御、コンテンツの表示などの方法を提供します。

    • Adafruit GFXライブラリ: これは、OLEDを含むさまざまな画面でテキストを表示したり、色を生成したり、図形を描画するためのコアグラフィックスライブラリです。

    注釈

    ライブラリをインストールするには、Arduinoライブラリマネージャーを使用し、 「Adafruit SSD1306」「Adafruit GFX」 を検索してインストールしてください。

    #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
    
    #define OLED_RESET -1
    #define SCREEN_ADDRESS 0x3C
    
  2. ビットマップデータ: OLED画面にカスタムアイコンを表示するためのビットマップデータです。このデータは、OLEDが解釈できる形式でイメージを表しています。

    画像を配列に変換できるオンラインツール image2cpp を使用できます。

    PROGMEM キーワードは、配列がArduinoマイクロコントローラのプログラムメモリに格納されていることを示しています。大量のデータがRAMを大量に消費する場合に、プログラムメモリ(PROGMEM)にデータを格納すると有用です。

    static const unsigned char PROGMEM sunfounderIcon[] = {...};
    
  3. セットアップ関数(初期化と表示): setup() 関数はOLEDを初期化し、一連のパターン、テキスト、アニメーションを表示します。

    void setup() {
       ...  // Serial initialization and OLED object initialization
       ...  // Displaying various text, numbers, and animations
    }