稼働中

マイクロビット(e_20)OLED SSD1306 LCDAssistant

SSD1306 128×64画像作成

OLED SSD1306 128×64のディスプレイに画像を表示してみました。
micro:bit_ssd1306ライブラリーには下写真の”microbit_logo”の画像ファイルがあります。これと同じようなOLED SSD1306で表示する128×64のビットマップ画像の作成をしようと思います。
※micro:bit_ssd1306ライブラリーについてはm_21の記事を参照ください。
OLED SSD1306はmicro:bitと直接接続しました。I2C接続するだけなので接続図などは省きます。

micro:bit_logo_bmp

手順

LCD Assistantとmicro:bit_ssd1306のライブラリー内にあるbitmap_converter.pyを使ってOLED SSD1306で表示する128×64のビットマップ画像ファイルを作成します。

1.LCD Assistantを入手してインストール
2.128×64のビットマップ画像を準備(白黒)
3.LCD Assistantでhexデータ化
4.bitmap_converter.pyでbytearray化
5.micro:bitへファイルを送る
6.show_bitmapで表示
の手順で進めていきます。

LCD Assistantを入手

en.radzio.dxp.pl のサイト「http://en.radzio.dxp.pl/bitmap_converter/」からダウンロードできます。

ダウンロードサイト

LCDAssistant.zipのファイルをダウンロードします。

ZIPダウンロード

LCDAssistant.zipを適当な場所に解凍します。
解凍するとLCDAssistantフォルダ内に実行ファイルLCDAssistant.exeがあります。

ビットマップ画像を準備

※徳島県のマスコットキャラのすだちくんの画像を使っています。
すだちくん画像の色付きの部分を白色で埋めます。mspaintなら白の塗りつぶしで埋めます。

すだちくん

IrfanViewなどで画像サイズを128×64に整えます。下の図はIrfanViewで白フレームを追加したのちにサイズを調整しました。

サイズ調整
次にIrfanViewでネガポジ反転させました。これで元画像ができました。

白黒反転

LCD Assistantで変換

ダウンロードしたLCD Assistantを使って白黒の128x64bitmapをhexデータにします。
LCD Assistantを起動します。

LCD Assistant起動

File>Load imageを選択します。

LCD Assistant画像選択

先の白黒の128x64bitmapのファイルを読込みます。

LCD Assistant画像読み込み

File>Save outputを選択してhexデータに変換したファイルを保存します。

hex変換して保存

suda_assの名前で保存しました。

ファイル保存

拡張子なし

ちなみにファイルの中身をメモ帳などでみると以下のようにhexデータになっています。


//------------------------------------------------------------------------------
// File generated by LCD Assistant
// http://en.radzio.dxp.pl/bitmap_converter/
//------------------------------------------------------------------------------

const unsigned char suda2-3 [] = {
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 

-- 省略

0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
};

作成したbitmapデータ「suda_ass」ファイルをbitmap_converter.pyのあるmicro:bit_ssd1306ライブラリーのsample_imagesフォルダに入れました。
(逆に「suda_ass」のあるフォルダにbitmap_converter.pyをコピーして同梱してもよいと思います。)

ライブラリーフォルダに保管

bitmap_converter.pyで変換

※Thonnyのpythonがdefaultになっていることを確認します。(Tools>Options>InterpreterがBBC:Micropythonになっていればdefaultに戻します。)

「bitmap_converter.py」をThonnyで開いてデータ部を編集します。
Thonnyで開くと以下のようになっています。pic = [  ]に’microbit_logo’のhexデータが表示されています。ここを書き換えます。

pic hexデータ

このpic = [  ]のデータを「suda_ass」のhexデータに書き換えます。また、下方のファイル名を「suda_logo」に変更して実行します。


import struct
pic = [
ここに suda_ass のhexデータをコピーする
]
newFileByteArray = bytearray(pic)
with open('microbit_logo', 'wb') as newFile: # 'suda_logo'に変更
    newFile.write(newFileByteArray)
print("Done")

hexデータをコピーしたら、bitmap_converter.pyを実行します。

Thonnyで実行

バイナリーデータに変更した ‘suda_logo’ ファイルが作成されます。

'suda_logo' ファイル

micro:bitへファイルを送る

microfsを使ってファイルを送ります。Thonnyのメニュー「Tools > Open system shell」でターミナルを開きます。
※micro:bitがつながっている場合は「Device > Close serial connection」で切り離します。
※microfsについてはm-20記事の「(d-20)microfs モジュール」を参照ください。


\ssd1306\sample_images>ufs put suda_logo

これでmicro:bitのファイルシステムへsuda_logoが送られました。

show_bitmapで表示

ssd1306_bitmap.pyをマイクロビットに送ってshow_bitmap(filename)で表示して確認します。

スクリプトは以下のようにしました。※m_21記事の(2)ssd1306_bitmap.pyを参照ください。


#!/usr/bin/env python
# -*- coding: utf-8 -*-
from ssd1306 import initialize, clear_oled
from ssd1306_bitmap import show_bitmap

initialize()
clear_oled()
# 128x64 1BPP siro-kuro
#show_bitmap("microbit_logo")
show_bitmap("suda_logo") 
#clear_oled()

実行結果です。いい感じで表示できたようです。OLED で表示可能な128x64bitmapを作成できました。


>>> %Run my_ssd1306_01_bmp_01b.py
>>> clear_oled()
>>> 

すだちくんの表示

まとめ

OLED SSD1306 に表示できる128×64 bitmapファイルを作成しました。その画像をOLED に表示をしてみました。
画像ファイルは白黒の128x64bitmapをLCD Assistantでhexデータに変換し、さらにそのhexデータをbitmap_converter.pyでbytearray化してOLED SSD1306で表示可能な画像データファイルを作成しました。
画像の表示はshow_bitmap(filename)で行いました。
※「https://github.com/fizban99/microbit_ssd1306」を参考に試してみました。