Pico

【直結でOK】RaspberryPi Pico MicroPythonでLCDを使う方法 【I2C・SSD1306】

はじめに

RaspberryPi PicoでLCD(液晶ディスプレイ)を使う方法を解説します。言語はMicroPython、ディスプレイは「Aideepen社 0.97インチのOLED(有機EL)ディスプレイ SSD1306対応品」を使用します。

厳密にいうとLCDではないのですが、最近では電卓のような「液晶」よりも小型・低価格なOLEDを使う方が主流のようです。今回は上記を使って「ディスプレイの使用方法」について解説したいと思います。

環境

この記事は以下の環境で作成しています。

環境バージョンなど備考
開発用PCのOS          Windows11 Win10でもOK
Tonny3.3.13
ディスプレイAideepen 0.97OLED
ディスプレイ

※ RaspberryPi Picoのセットアップ方法については、こちらの記事をご覧ください。

プログラムの概要

プログラムの概要は以下の通りです。ディスプレイにテキスト・線・四角形を表示します。

  • I2Cの設定
  • ディスプレイ(SSD1306)の設定
  • テキストを表示
  • 縦・横・斜め線を表示
  • 四角形を表示(塗りつぶし有/無)
  • 色(ネガポジ)を反転表示

実行結果

後述する配線を行ってプログラムを実行すると、以下のようにディスプレイを表示することができます。

配線とプログラムをした後の実行結果

0.97インチ OLEDディスプレイ

特徴

RaspberryPi Picoと直結で使える、小型のI2C・SPI通信対応のディスプレイです。「SSD1306」というライブラリを使って、簡単にプログラミングすることが出来ます。価格も2個で1000円の超低価格、納期も2022年のGW直前発注~2日後到着の短納期でした。

  • 小型・低価格・短納期
  • 配線4本を直結でつなげるだけ
  • SSD1306でプログラミングが簡単

UnBox

購入開封時の外観です。後述のAmazonのリンク先から購入しています。

以外にも(?)きれいな化粧箱で、パッケージもきちんとされていました。ピンヘッダは同梱ですが、半田付け(4か所)が必要です。

ディスプレイを開封した時の画像

使用する部品

今回記事では以下の部品を使用します。

あきばお〜楽天市場支店
¥945 (2022/05/22 16:45時点 | 楽天市場調べ)

ディスプレイの接続

Picoとディスプレイの接続方法です。配線4本を直結で接続します。

Picoとディスプレイの配線方法を説明する画像
Pico全体のピンアサイン

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

コードを書く前に「SSD1306」ライブラリをインストールします。手順は以下の通りです。

manage packages画面を開く

Thonnyのツールメニューから「manage packages」の画面を開きます。

Manage packages画面の表示

ssd1306を検索する

manage packages 画面の検索ボックスで「ssd1306」と入力して、「Search on PyPl」ボタンを押します。

ssd1306の検索

画面上に「micropython-ssd1306」が表示されるので、クリックします。

検索されたssd1306を選択

ssd1306をインストールする

検索結果をクリックすると、以下の「micropython-ssd1306」が表示されるので、「インストール」ボタンをクリックします。

ssd1306のインストール

以下の内容が表示されれば、「ssd1306ライブラリ」のインストールは完了です。「閉じる」ボタンを押して、元の画面に戻ります。

ssd1306のインストール完了画面の解説

全体コード

プログラムの全体コードは以下の通りです。詳細な内容は後述する「コードのポイント」で解説します。公式のリファレンスも併せてご覧ください。

from machine import Pin, I2C
import ssd1306

#
# I2Cの設定です。
# 識別するID(0), SDA(16), SCL(17)を設定します
#
i2c = I2C(0, sda=Pin(16), scl=Pin(17) )

#
# デバイスのアドレスを取得します
# 0x30(60)でない場合はライブラリの修正が必要です。
#
addr = i2c.scan()
print( "address is :" + str(addr) )

#
# ディスプレイを設定します
# 使用するディスプレイの縦・横のサイズ、I2Cの変数を渡します
#
display = ssd1306.SSD1306_I2C(128, 64, i2c)

# テキスト表示を設定します
display.text('Display Test', 0, 0, 1)

# 横線を設定します
display.hline(10, 10, 20, 1)

# 縦線を設定します
display.vline(10, 10, 20, 1)

# 斜め線を設定します
display.line(10, 10, 30, 30, 1)

# 四角系を設定します(塗りつぶしなし)
display.rect(10, 40, 10, 10, 1)

# 四角形を設定します(塗りつぶしあり) 
display.fill_rect(30, 40, 10, 10, 1)

# 明暗の反転を設定します
#display.invert(1) 

# 設定した内容をディスプレイに表示します
display.show()

コードのポイント

I2Cの設定とスキャン

I2C通信用の変数に、「識別用のID」「使用するSDA・SCLのピン番号」を指定します。

ピンアサインの図上の「GP〇〇」の数字を指定してください。

デバイスのアドレスをスキャンして「0x30(60)でない場合」はライブラリの修正が必要なようです。

i2c = I2C(0, sda=Pin(16), scl=Pin(17) )

addr = i2c.scan()
print( "address is :" + str(addr) )

ディスプレイの設定

ディスプレイ用の変数を作成します。引数にはディスプレイの縦・横の大きさと、前述したI2Cの変数を渡します。

display = ssd1306.SSD1306_I2C(128, 64, i2c)

横線・縦線の設定

「横線」「縦線」を設定します。引数の内容は2つの関数で同一です。

hline( X軸の開始位置Y軸の開始位置線の長さ色の指定)

# 横線を設定します
display.hline(10, 10, 20, 1)

# 縦線を設定します
display.vline(10, 10, 20, 1)

※ 紹介しているAideepenのディスプレイでは、色の指定は無視されます。

斜め線の設定

座標指定できるline関数を使って「斜め線」を設定します。引数の内容は以下の通りです。

line(Y軸の開始位置Y軸の開始位置X軸の終了位置Y軸の終了位置色の指定)

# 斜め線を設定します
display.line(10, 10, 30, 30, 1)

四角形の設定(塗りつぶし有/無 )

塗りつぶし有/無しで、以下2つの関数を使い分けます。

  • 塗りつぶしなしの四角形 rect関数
  • 塗りつぶしありの四角形 fill_rect関数

引数の内容は2つの関数で同一です。3,4番目の引数は「X/Y軸方向の線の長さ」なので、注意が必要です。

rect(X軸の開始位置,Y軸の開始位置,X軸の線の長さ,Y軸の線の長さ,色の指定)

# 四角系を設定します(塗りつぶしなし)
display.rect(10, 40, 10, 10, 1)

# 四角形を設定します(塗りつぶしあり) 
display.fill_rect(30, 40, 10, 10, 1)

明暗の反転設定

表示上の明暗(ネガポジ)の反転には、invert関数を使います。デフォルト(0) は「黒背景に白文字」、反転(1)指定で「白背景に黒文字」となります。

# 明暗を判定します
#display.invert(1) 

明暗の反転を実行したときの画像

公式リファレンスには、表示方向を180回転させる「rotate関数」の記載がありますが、私の環境では実行時に構文エラー(存在していない関数)となってしまい、使用できませんでした。

表示の実行

show関数で前述で設定したテキストや線などを、ディスプレイに表示します。


# 設定した内容をディスプレイに表示します
display.show()

まとめ

RaspberryPi Picoで、Aideepen製の0.97インチOLEDディスプレイを使う方法について解説しました。参考になればうれしいです。

Raspberry Pi Pico を使ってみよう

ゼロからPicoを始める人は「Pico」「USBケーブル」「ピンヘッダ」のセットが便利。Pico内蔵のLEDなら、USBにつなぐだけですぐ使えます(参考)。ケーブルを間違う心配もありません。

はんだ済み完成品はこちら

今ならPrime会員 最大2.5%ポイントGETの「現金チャージ」の裏技も使えます。

Raspberry Pi Picoの書籍

さらっと読めるムック本がおすすめです。

¥1,330 (2022/02/12 23:37時点 | Amazon調べ)

おすすめ工具

Picoに必要なおすすめ工具をこちらの記事でまとめています。

やっぱりWifiも使いたい

「やっぱりWifiやディスプレイも欲しい…」「基盤むき出しはちょっと怖い」という方には「M5Stack Core2」があります。Wifiやカラーのタッチディスプレイ搭載で、より高度なIoT機器が追加部品なしで作れます。GPIOなどももちろんありますよ。

※ セットアップ方法もこちらで解説しています。

応援・要望お待ちしてます

ブログを見ていて「この辺を詳しく知りたい」「このライブラリの使い方を知りたい」「こんなことで困ってる」...etc があれば、コメント・問い合わせ・Twitterで教えてください。質問・ご要望に合わせて解説記事を作ります。

ブログを気に入っていただけたり、「応援してもいいよ」という方がいたら、ブログやSNSでの紹介をお願いします。 あたたかい応援は、中の人の更新の大きな励みになります。

ABOUT ME
えす
現役のソフトウェアエンジニアです。 C++ C# Python を使ってます。10年ちょい設計/開発部門にいましたが、今はQAエンジニアっぽいことをしています。

COMMENT

メールアドレスが公開されることはありません。