Edited at

初心者がやるArduinoでOLEDディスプレイ

More than 1 year has passed since last update.


はじめに

昨日、遂にArduinoデビューしました!

今回はArduinoでOLEDディスプレイに文字を表示するまで手順を紹介します。

初心者なので、説明がくどくなってしまうかもしれませんが、ご了承ください。


使うもの


Arduino本体

Arduino.jpg

本記事ではマルツ製互換ボードであるMaruduino UNO R3を使用しています。Arduino製品の設計データはオープンソースで公開されており、ちょっとした約束事を守ればライセンスも大丈夫なので、様々なところで互換商品が売られているようです。ちなみに私は大学生協で購入しました。

Wikipediaによると


Arduino(アルデュイーノ)は、AVRマイコン、入出力ポートを備えた基盤、C++風のArduino言語とそれの統合開発環境から構成されるシステム。


要するに、小さなパソコン(マイコン)です。ただし、WindowsやUbuntuのようなOSは入っていない小さなパソコンです。パソコンからプログラムをArduinoに書き込んで使います。C++と非常に似た書き方ができるので、C/C++が書ける人にとってはとてもとっかかりやすいです。ちなみに統合開発環境はこちらからダウンロードできます。


ブレッドボード

Bredboard.JPG

Wikipediaによると


ブレッドボード(breadboard, protoboard)とは、電子回路の試作・実験用の基板のことである。


要するに半田付けとかしなくても、次に紹介するジャンパー線というやつを刺すだけで、簡単に電子工作ができてしまうという優れもの。

ブレッドボードには、通電する向きが決まっています。

breadboard.jpg

https://www.slideshare.net/mitunaga/ss-41686765


ジャンパー線

jumper_wire.jpg

今回は4本使います。これをブレッドボードやArduinoに刺して使います。


OLEDディスプレイ

OLED_display.jpg

OLED_display_back.jpg

OLEDとはOrganic Light Emitting Diodeの略で、有機物質を使ったLED(発光ダイオード)という意味です。有機ELと呼ばれたりもします。

今回はAmazonでポチりました。


おすすめの部品購入場所

完全に受け売りですが、部品を購入するなら関東の人は秋月電子通商さん、ネット購入ならスイッチサイエンスさんがおすすめだそうです。僕のようにAmazonで購入するのもよいよ思います。


配線

今回は以下のように配線します。

OLED.png

実物は下図のような感じになります。

OLED_real.jpg

接続の対応表は以下のようになります。

OLED
Arduino

VCC
5V

GND
GND

SDA
SDA

SCL
SCL

Arduino側にはSDAとSCLが書いていませんが、下図の赤枠のようにUSBポート側からSCL、SDAとなっています。

SDA_and_SCL.png

このSDAやSCLについては、この記事の一番最後に説明を載せておきます。


スケッチ

スケッチとはArduinoのプログラムのことを言います。


ライブラリ

まずディスプレイを使うためのライブラリをインクルードします。

今回使用しているディスプレイは、Adafruitの互換バージョンのものらしいです。Adafruitは、教育用電子機器プラットフォーム、試作および開発ツールでの急成長しているグローバルリーダー企業です。

統合開発環境の[スケッチ]->[ライブラリのインクルード]->[ライブラリを管理]へ移動、検索欄から「Adafruit GFX Library」と「Adafruit SSD1306」をインストールします。


スクリプト

今回必要なコードは以下の通りです。

#include<Wire.h>

#include<Adafruit_GFX.h>
#include<Adafruit_SSD1306.h>

// ディスプレイ変数の宣言
Adafruit_SSD1306 display(-1);

void setup() {
// ディスプレイの初期化
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
}

void loop() {
// ディスプレイをクリア
display.clearDisplay();

// 出力する文字の大きさ
display.setTextSize(2);
// 出力する文字の色
display.setTextColor(WHITE);
// 文字の一番端の位置
display.setCursor(0, 0);

// 出力する文字列
display.println("Hello");
display.println("World!");

// ディスプレイへの表示
display.display();
// 1000msec待つ
delay(1000);
}

Arduinoのコードは大きくsetup関数とloop関数でできています。setup関数はArduinoに電源が入った時、一度だけ実行されるものであり、loop関数はsetup関数の実行後、繰り返し呼び出される関数です。

残りのコードはC++がわかれば、コメントに書いた通りなので、理解できると思います。


結果

最後にパソコンとArduinoを接続して、左上の矢印ボタンを押して、マイコンボードへ書き込みを行います。

もし、「マイコンボードに書き込もうとしましたが、エラーが発生しました。」というエラーが出たら、[ツール]->[シリアルポート]から自分のマイコンが刺さっているポートを選択してください。

すると、、、

OLED_display_result.jpg

やりました!無事にディスプレイに文字を表示させられました。自分の作ったものが実際に動くと、非常に愛らしく感じますね!!

用途としては、センサの値をリアルタイムに表示したりするために使います。


付録


I2Cとは

今回、ArduinoとOLEDはI2C通信というもので通信を行っていました。I2CとはInter-Integrated Circuitの略で、シリアル通信の一つです。シリアル通信とは、電気信号を逐次的に送る方法であり、それに対して、複数のデータ信号を同時並列的に送る方法をパラレル通信といいます。

I2CはSCLとSDAという線を利用して通信します。SCLはクロック、SDAはデータを送ります。細かいことはここには書きませんが、通信する際にはクロックのような通信の開始や終了を知らせる信号と実際にデータを送る信号が必要です。ものによっては、データの中にクロックの情報を埋め込む通信方式もあるようです。