マイクロビット(m_24)SSD1306 OLED(4)
micro:bit_ssd1306 ライブラリー
(6)ssd1306_img.py
ssd1306_img.pyには「create_stamp」の関数が含まれています。
(7)ssd1306_stamp.py
ssd1306_stamp.pyには「draw_stamp, screen, set_pos, i2c, ADDR, pack_into」の関数が含まれています。
(l-08)create_stamp(img)
micro:bitのImageオブジェクトからスタンプを作成します。Imageオブジェクトの値を0 以外の任意の値を 1 に変換します。この関数は、draw_stamp と組み合わせて使用します。
(l-09)draw_stamp(x, y, stamp, color, draw=1)
スタンプをcolor=1で表示、color=0で非表示にします。draw=0にするとdraw_screen()まで表示されません。
サンプルスクリプト
create_stamp、draw_stampのサンプルスクリプトです。
「ssd1306_img.py、ssd1306_stamp.py、ssd1306.py」を使うのでmicrofsでモジュールを送ります。
※microfsについてはm-20の記事「(d-20)microfsモジュール」を参照ください。
①Image.HEARTからstampを生成してディスプレイに表示する
from microbit import Image
from microbit import sleep
from ssd1306 import initialize, clear_oled, draw_screen
from ssd1306_stamp import draw_stamp
from ssd1306_img import create_stamp
# 64,32
initialize()
clear_oled()
stamp = create_stamp(Image.HEART) # stamp生成 ハート
draw_stamp(10, 10, stamp, 1, 1) # stamp表示
stamp2 = create_stamp(Image.HEART)
draw_stamp(15, 15, stamp2, 1, 1)
stamp3 = create_stamp(Image.HAPPY) # stamp生成 ハッピー
draw_stamp(58, 26, stamp3, 1, 0) # draw_screen で表示 右下
sleep(2000)
draw_screen() # draw=0のstamp3を表示
実行結果①
以下が実行結果になります。
Image.HEARTのstampが表示、2秒後にImage.HAPPYのstampが表示されます。
②stampを消して別の位置に表示
def move_stampは x1, y1のstampを消去し、x2, y2に表示します。
draw_stampで(10, 10)にHEART表示、move_stampで(20, 20)にHEART表示、1秒後に(10, 10)を消去します。
from microbit import Image
from microbit import sleep
from ssd1306 import initialize, clear_oled, draw_screen
from ssd1306_stamp import draw_stamp
from ssd1306_img import create_stamp
def move_stamp(x1, y1, x2, y2, stmp):
draw_stamp(x1, y1, stmp, 0, 0)
draw_stamp(x2, y2, stmp, 1, 1)
# 64,32
initialize()
clear_oled()
sleep(1000)
stmp = create_stamp(Image.HEART) # stampにHAPPY
draw_stamp(10, 10, stmp, 1, 1) # 10,10に表示
sleep(1000)
move_stamp(10, 10, 20, 20, stmp) # 10,10を消(draw_screen後)、20,20に表示
sleep(1000)
draw_screen() # 10,10が消
実行結果②
以下が実行結果になります。
1_draw_stampで(10, 10)にHEART表示 2_move_stampで(20, 20)にHEART表示 3_1秒後に(10, 10)を消去
③5×5全点灯のImageからHAPPYを消す
from microbit import Image
from microbit import sleep
from ssd1306 import initialize, clear_oled, draw_screen
from ssd1306_stamp import draw_stamp
from ssd1306_img import create_stamp
def move_stamp(x1, y1, x2, y2, stmp):
draw_stamp(x1, y1, stmp, 0, 0)
draw_stamp(x2, y2, stmp, 1, 1)
img=Image()
img.fill(9) #5x5全点灯のimgを作成
# 64,32
initialize()
clear_oled()
sleep(1000)
stmp = create_stamp(img) #imgからstamp
stmp2 = create_stamp(Image.SAD) #SADからstamp
draw_stamp(10, 10, stmp, 1, 1) #(10, 10)にimg表示
sleep(1000)
move_stamp(10, 10, 20, 20, stmp2) #(10, 10)にSADスタンプ消去
#(20, 20)にSADスタンプ表示
sleep(1000)
実行結果③
以下が実行結果になります。
ちなみに、左上(10,10)は 5×5全点灯のimgからImage.SADを引いた状態のスタンプ表示になります。
>>> img.fill(9) # LEDの明るさはスタンプにすると'0'か'1'になる
>>> img
Image('99999:99999:99999:99999:99999:')
>>> Image.SAD
Image('00000:09090:00000:09990:90009:')
>>> img-Image.SAD # Imageの引き算したような形になる
Image('99999:90909:99999:90009:09990:')
>>>
※スタンプ化しているので’0’、’1’だけのデータになります。
※color=1の場合はOR、color=0の場合はAND NOTになるそうです。
まとめ
ライブラリーmicro:bit_ssd1306 のssd1306_img.py、ssd1306_stamp.pyを使って画面にマイクロビットのImageを表示しました。