ESP32でOLEDディスプレイ「SSD1306」にHello-world表示してみた

Pocket

ESP32でOLEDディスプレイ「SSD1306」にHello world表示してみた

動いている様子

参考ページ

実行環境

ソフトウェア関連

  • windows10 home
  • Arduino 1.8.5
  • ESP32 core for arduino 1.0.0

使用部品

回路

GPIOの21をSDAへ、22をSCLへ繋ぎます。
よく見るとその線に10kΩの抵抗が繋がっていますね。これはプルアップ抵抗と言って、I2C接続に必ず必要なものです。

I2Cでは信号がないときには常に線に+の電圧がかかっている必要があります。信号を出すときにSCL,SDAがGNDに落とされて電圧が下がることで、それを検知して01のデータを送っているんですね。

ですので必ず入れましょう。抵抗値は大抵数kΩで十分です。あまり低すぎるとそれだけで電力を消費してしまいます。

OLEDディスプレイ「SSD1306」とは

0.96インチの128×64ドットを持つ有機ELディスプレイI2C接続ができ、電源電圧は3~5.5Vまで対応。つまりESP32と直接つないで駆動できます。

「ESP32でI2C接続のLCD「AQM1602A」を使う」で使用したLCDと大きく異なるのは「文字以外も表示できる」という点です。普通にドットを指定して絵を表示することができます。

また、Arduino及びRaspberryPiのライブラリが豊富で、初心者でも簡単に複雑な表示ができるようになっています。

使える関数・APIの一覧はこちらのページの下の方に列挙されています。

今回はこの便利なライブラリのインストールと、Hello world表示を行います。

SSD1306のライブラリインストール

  1. Arduinoを開く
  2. ライブラリマネージャを開く
  3. 「ssd1306 esp32」と検索。出てきたライブラリをインストールする。

ソースコード(コピペで動く)

Arduinoで新規スケッチを作成し、以下のコードをコピペして書き込みます。
冒頭で紹介したツイートのように「Hello world」と表示されれば成功です!

#include <Wire.h>
#include "SSD1306.h"//ディスプレイ用ライブラリを読み込み
 
SSD1306  display(0x3c, 21, 22); //SSD1306インスタンスの作成(I2Cアドレス,SDA,SCL)
 
void setup() {
 
  display.init();    //ディスプレイを初期化
  display.setFont(ArialMT_Plain_16);    //フォントを設定
  display.drawString(0, 0, "Hello World");    //(0,0)の位置にHello Worldを表示
  display.display();   //指定された情報を描画
}
 
void loop() {}

フォントの指定について

ライブラリのgithubページに以下のような文字列を扱う関数群に関する説明があります。
これによれば、デフォルトで利用できるフォントは

  • ArialMT_Plain_10
  • ArialMT_Plain_16
  • ArialMT_Plain_24

なようです。後半の数字はフォントサイズですね。

今回は中くらいの大きさにしたかったので、

display.setFont(ArialMT_Plain_16);

としました。
次に

display.drawString(0, 0, "Hello World");

で文字列を送信します。ただ、これだけでは文字は表示されません
ディスプレイ側のバッファと呼ばれるデータを溜める場所に入っているだけです。
この情報を表示するには

display.display();

をする必要があります。

つまり、

  1. ディスプレイを初期化
  2. バッファへ描画情報を送り切る
  3. display()でバッファの内容を描画

という手順をとります。

※補足
自分で自作フォントを生成して指定することも可能なようです。これはmgo-tecさんがやられています。

まとめ

このディスプレイを使えば天気ステーションネット同期型の時計など、かなり工作の幅が広がりそうですね!その点でいえばESP32とかなり相性がいい素子です。
今後は「ESP32でOpenWeatherMapのAPIを使って現在の天気をLCD「AQM1602A」に表示させる」の表示内容をssd1306に表示させてみようと思います。

twitterアカウントの方で最新記事のお知らせや記事にならないような小さな情報を小出ししています。もしよろしければフォローお願いいたしますm(__)m

ご覧いただきありがとうございました!

Pocket

関連記事   ESP32で天気APIから天気情報を取得し、OLEDディスプレイに表示させてみた