マイクロビットのMicroPythonのバージョンを確認する

MicroPythonでコードを書く時にPythonで普段書いている文法が使えなかったりします。

その理由はMicroPythonは軽量化の為に古いバージョンのPythonをベースに作られた言語になっていまして、最近のPythonで導入された文法が未対応になっています。


MicroPythonのバージョンを把握しておくことで、Python的には正しいコードを書いたはずなのに何故かエラーになる症状に陥った時に速やかに原因を特定できるようになります。


今回はMicroPythonのバージョンの確認方法について見ていきます。




マイクロビットの5×5ディスプレイで確認する方法

from microbit import *
import sys
display.scroll(sys.version)

この書き方だとバージョンの番号が読みにくいので、



マイクロビットでLCDキャラクターディスプレイを使ってみるで使用したLCD1602を使ってみます。

from microbit import *
import sys

class LCD1602:
    def __init__(self, addr=0x27):
        self.addr = addr
        # バックライトONフラグ (0x00にするとオフ)
        self.bl = 0x08
        sleep(50)
        # 4bitモードへの初期化シーケンス
        for val in [0x30, 0x30, 0x30, 0x20]:
            self._write_half(val)
            sleep(5)
        # 基本設定命令
        self.send_command(0x28) # 2行表示, 5x8ドット
        self.send_command(0x0C) # 画面ON, カーソルOFF
        self.send_command(0x06) # 文字入力後カーソルを右へ
        self.clear()

    def _write_half(self, data):
        # I2Cアダプタ経由で上位4bitを送信し、Enable信号を振る
        i2c.write(self.addr, bytes([data | self.bl | 0x04])) # Enable High
        sleep(1)
        i2c.write(self.addr, bytes([(data & ~0x04) | self.bl])) # Enable Low
        sleep(1)

    def send_command(self, cmd):
        # 命令送信(上位4bit -> 下位4bitの順)
        self._write_half(cmd & 0xF0)
        self._write_half((cmd << 4) & 0xF0)

    def send_data(self, data):
        # データ送信(RSビットを立てる: 0x01)
        self._write_half((data & 0xF0) | 0x01)
        self._write_half(((data << 4) & 0xF0) | 0x01)

    def clear(self):
        self.send_command(0x01)
        sleep(2)

    def puts(self, s, x=0, y=0):
        # 指定した座標(x, y)に文字列を表示
        addr = 0x80 + x + (0x40 if y else 0)
        self.send_command(addr)
        for char in s:
            self.send_data(ord(char))

lcd = LCD1602(addr=0x27)

while True:
    lcd.puts("Python Version", 0, 0)
    lcd.puts(sys.version, 0, 1)
京都の東本願寺で開催されているプログラミング教室で講師をしています。
詳しくはTera schoolを御覧ください。
大阪府高槻市でプログラミング教室を開設しています。
同じカテゴリーの記事
マインクラフト用ビジュアルエディタを開発しています。

詳しくはinunosinsi/mcws_blockly - githubをご覧ください。