目次
ESP32でOLEDディスプレイ「SSD1306」にHello world表示してみた
動いている様子
ESP32でOLEDディスプレイの「SSD1306」を使ってHello world!
APIが洗練されていて開封してすぐに実装できました。#ESP32 pic.twitter.com/SltjeNnuja— ????????????-???????????????? (@wak_tech) January 5, 2019
参考ページ
- ESP32 Arduino: Interacting with a SSD1306 OLED display
- GitHub esp8266-oled-ssd1306
- Readme.mdに利用可能なAPI一覧があります。
実行環境
ソフトウェア関連
- 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のライブラリインストール
- Arduinoを開く
- ライブラリマネージャを開く
- 「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();
をする必要があります。
つまり、
- ディスプレイを初期化
- バッファへ描画情報を送り切る
- display()でバッファの内容を描画
という手順をとります。
※補足
自分で自作フォントを生成して指定することも可能なようです。これはmgo-tecさんがやられています。
まとめ
このディスプレイを使えば天気ステーションやネット同期型の時計など、かなり工作の幅が広がりそうですね!その点でいえばESP32とかなり相性がいい素子です。
今後は「ESP32でOpenWeatherMapのAPIを使って現在の天気をLCD「AQM1602A」に表示させる」の表示内容をssd1306に表示させてみようと思います。
twitterアカウントの方で最新記事のお知らせや記事にならないような小さな情報を小出ししています。もしよろしければフォローお願いいたしますm(__)m
ご覧いただきありがとうございました!
ピンバック: ESP32で天気APIから天気情報を取得し、OLEDディスプレイに表示させてみた | Wak-tech
ピンバック: ESP32でネットワーク上から現在時刻を取得する(NTP) | Wak-tech
ピンバック: ESP32でNTPで取得した時間をOLEDディスプレイ「SSD1306」に表示してみた | Wak-tech
ピンバック: ESP32でssd1306を使って複数のページを表示してみる | Wak-tech
ピンバック: ESP32で始めるIoT電子工作入門【20個のチュートリアル】 | Wak-tech
ピンバック: esp32で天気情報取得 | MUuBlog
ピンバック: ESP-WROOM-32亜種でOLED表示+Lチカさせる | チェログ