注釈
こんにちは、SunFounderのRaspberry Pi & Arduino & ESP32愛好家コミュニティへようこそ!Facebook上でRaspberry Pi、Arduino、ESP32についてもっと深く掘り下げ、他の愛好家と交流しましょう。
参加する理由は?
エキスパートサポート:コミュニティやチームの助けを借りて、販売後の問題や技術的な課題を解決します。
学び&共有:ヒントやチュートリアルを交換してスキルを向上させましょう。
独占的なプレビュー:新製品の発表や先行プレビューに早期アクセスしましょう。
特別割引:最新製品の独占割引をお楽しみください。
祭りのプロモーションとギフト:ギフトや祝日のプロモーションに参加しましょう。
👉 私たちと一緒に探索し、創造する準備はできていますか?[ ここ]をクリックして今すぐ参加しましょう!
OLED
概要
このレッスンでは、SSD1306ドライバーを使用したOLEDディスプレイについて学びます。OLED(有機発光ダイオード)ディスプレイは、スマートウォッチ、携帯電話、さらにはテレビなど、さまざまな電子機器で広く使用されています。SSD1306は、有機/ポリマー発光ダイオードのドットマトリックスグラフィックディスプレイシステム用のシングルチップCMOS OLED/PLEDドライバー兼コントローラーです。電流が流れると発光する有機物質ベースのダイオードを使用し、クリアで鮮明なビジュアル出力を提供します。
提供されたコードでは、ArduinoボードとI2Cプロトコルを介してOLEDディスプレイがインターフェースされます。コードはAdafruit SSD1306ライブラリを使用してディスプレイを制御します。プログラムは、以下のようなさまざまな機能をカバーしています:
テキストの表示:「Hello world!」が画面に表示されます。
反転テキスト:「Hello world!」が反転した色の配色で表示されます。
フォントサイズ:「Hello!」が拡大されたフォントサイズで表示されます。
数字の表示:123456789が表示されます。
ASCII文字:一連のASCII文字が表示されます。
スクロール:テキストがディスプレイを横切ってスクロールします。
ビットマップ表示:事前定義されたビットマップ画像がOLED画面に表示されます。
このOLEDディスプレイは、デジタル時計、ミニゲームコンソール、情報表示など、さまざまなアプリケーションで使用できます。コンパクトでポータブルなデバイスでユーザーインターフェイスを提供するための素晴らしい方法です。
必要なコンポーネント
このプロジェクトには、以下のコンポーネントが必要です。
全セットを購入するのが便利です。こちらがリンクです:
名称 |
このキットのアイテム数 |
リンク |
|---|---|---|
Elite Explorer Kit |
300+ |
以下のリンクから個別に購入することもできます。
コンポーネント紹介 |
購入リンク |
|---|---|
- |
|
配線図
回路図
コード
注釈
ファイル
15-oled.inoをelite-explorer-kit-main\basic_project\15-oledのパスで直接開くことができます。または、このコードをArduino IDEにコピーしてください。
注釈
ライブラリをインストールするには、Arduinoライブラリマネージャーを使用し、 「Adafruit SSD1306」 と 「Adafruit GFX」 を検索してインストールしてください。
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}
コード解析
ライブラリのインクルードと初期定義: 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
ビットマップデータ: OLED画面にカスタムアイコンを表示するためのビットマップデータです。このデータは、OLEDが解釈できる形式でイメージを表しています。
画像を配列に変換できるオンラインツール image2cpp を使用できます。
PROGMEMキーワードは、配列がArduinoマイクロコントローラのプログラムメモリに格納されていることを示しています。大量のデータがRAMを大量に消費する場合に、プログラムメモリ(PROGMEM)にデータを格納すると有用です。static const unsigned char PROGMEM sunfounderIcon[] = {...};
セットアップ関数(初期化と表示):
setup()関数はOLEDを初期化し、一連のパターン、テキスト、アニメーションを表示します。void setup() { ... // Serial initialization and OLED object initialization ... // Displaying various text, numbers, and animations }