稼働中

マイクロビット(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表示

②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を表示しました。