手元に謎のディスプレイがあったので(たぶんメルカリとかで部品を買ったときのオマケ)表示させてみることにしました。
現物はコレ↓
型番も何も書かれていないので・・・
「液晶、表示 Raspberrypi」と検索しても全然それらしき物がヒットしなくて困りました。唯一、端子に表示されている「VCC GND SCL SDA」という接続名は解るので仕方なくそれで画像検索してみたらヒットしましたよー!
なんと、液晶ではなく、有機EL(OLED)ディスプレイだったんですね!
ということで、それらしきディスプレイの表示をしておられる方のサイトを参考にセットアップしてみることにしました。
<参考>
Raspberry PiでI2C接続の128×64 OLEDに日本語を表示(美咲フォント) – Lifelog
(コードはこちらから拝借しています。)
ディスプレイに「VCC GND SCL SDA」と表記されている通り、ラズパイの同じ端子に接続します。
注意:VCCはラズパイの3.3Vに接続しましょう!
(※上の画像は実験中のものです。接続しただけの状態では何も変化ありません。液晶と違って有機ELはディスプレイそのものが発光するのでバックライトがありません。接続しても真っ暗のまま何も変化が無いので心配になると思いますが、接続がキチンと出来ている事を確認する術はありません。信じて進みましょう。)
まずは、お決まりのアップデートから
sudo apt-get update
ラズパイの初期設定を弄る
sudo raspi-config
「I2C」のセットアップがあるので選択して
再起動します。
sudo reboot
再起動後、下記のコードを入れると
sudo /usr/sbin/i2cdetect -y 1
この「3C」というのが接続したディスプレイのようです。
LCDのアドレスは0x3c
sudo apt-get install build-essential python-dev python-pip
sudo pip install RPi.GPIO
sudo apt-get install git
これらは既にインストール済みでした。
git clone https://github.com/adafruit/Adafruit_Python_SSD1306.git
cd Adafruit_Python_SSD1306
sudo python setup.py install
とすると、
~~ずらずらー
//Finished processing dependencies for Adafruit-SSD1306==1.6.2//
と表示されて完了!
日本語フォントインストール
cd /home/pi
sudo mkdir font
sudo mkdir font/misakifont
sudo wget http://www.geocities.jp/littlimi/arc/misaki/misaki_ttf_2015-04-10.zip
(なんかエラー出てzip解凍できないから「まあ日本語表示させないしいいか」と、そのまま。)
公開されているコードを日本語を外して実行してみましたら、
import Image
が無いよーってことで怒られました。
ん?
pip install pillow
インストール実行しましたが、既にインストール済みとのこと
で、import文を
from PIL import Image
from PIL import ImageDraw
from PIL import ImageFont
とすることでこれは通りました。
参考にさせていただいたサイトでは表示文字は白色でしたが、僕のは液晶の画面色がおかしい?と思い、全部塗りつぶしてみると、あら〜、上は黄色で下がブルーの2色式。
しかも上と下の間が2px程度空いているので表示場所には注意が必用なようです。
なんだこれ?
と思ってAmazonで調べた所、どうやら↓のような2色式の商品のようです。
なるほどー、元々そういう商品だったんですね。
ということで、参考コードはほぼそのままに、表示領域を探ってみました。
# -*- coding: utf-8 -*-
import Adafruit_GPIO.SPI as SPI
import Adafruit_SSD1306
from PIL import Image
from PIL import ImageDraw
from PIL import ImageFontimport time
#ピンの出力設定24と書かれていますがこの辺よく解っていません。
RST = 24
disp = Adafruit_SSD1306.SSD1306_128_64(rst=RST)
disp.begin()
#一度クリアーするようです
disp.clear()
disp.display()
width = disp.width
height = disp.height
image = Image.new('1', (width, height))# ディスプレイ表示領域いっぱいの範囲を描画するってことですね
draw = ImageDraw.Draw(image)# 表示領域いっぱいに四角形を色無しで描きます
draw.rectangle((0,0,width,height), outline=0, fill=0)#タイトル テキストを設定、どの位置に書くかXY設定
title = 'TEST v2.0'
draw.text((2,0), title, fill=256)#青字領域のテキストを設定
x=0
y = 14for str in [ 'MyName is Onancopon' ,'hogehoge', 'hagehage', 'muninuni', 'paipai','123456789012345678901234567890']:
draw.text((x,y), str, fill=256)
y+=10disp.image(image)
#実際に表示を実行
disp.display()
X軸は約21文字、縦は青字が切れない所から最大で6行といったところでしょうか?
しかしこれではあまりに詰め詰めなので実運用では10pxずつ表示させ、5行で表示させることにします。
※参考サイトのままの表示方法で、たぶん文字サイズとかも変更出来るのだろうけど、ひとまず表示出来たので良しとします。