前の記事『V1.5用』又は『V2.0』でMakecodeに拡張機能を追加して、Micro:bitからOLED有機ELディスプレイにメッセージを表示する例を紹介しました。今回は、Micropythonを使って同じようにメッセージを表示する例を紹介します。なお、当記事はMicro:bit V2用です。
当記事は、シリーズでマイクロビット(Micro:bit)のプログラミングについて紹介しています。初めての方はこちらをご覧ください。
Micro:bit V2、Makecode、SSD1306Makecode拡張機能が更新された事により、記事の内容が古くなりましたので、記事を更新しました。当記事は以下のバージョンで確認していますので、注意してください。
Micro:bit V2.0 (V1.5とV2.0の違いはこちらの記事を参照)
Mu Editor V1.1.0b5 (導入方法についてはこちらの記事を参照)
注:Mu Editor V1.0.3でも確認し問題ありませんでした。
前回の記事のチャレンジの回答例
1.Aボタンを連続して押すと画面が崩れますので、Bボタンで消去してからAボタンを押してください。あるブロックを『ボタンAが押されたとき』に追加するとそのようなことにはなりません。どうすれば良いでしょうか?
解答例:以下のように、Aボタンを押された時の最初に『clear OLED display』で画面を消去すると画面がくずれません。プログラムの他の部分は同じですので、省略してあります。
2.レッスン『温度を計ってみよう』の温度をLEDではなくOLED有機ELディスプレイに表示するように変えてみる の解答例
温度を計ってOLED有機ディスプレイに表示するサンプル
Micro:bitとOLED有機ELディスプレイの接続
使用するOLED有機ELディスプレイについては前回の記事を参照してください。
Micro:bitとディスプレイは、SCL、SDA、VCC、GNDの4本の線で接続します。
配線図
実際の接続状態
Makecode I2CブロックとMicropythonについて
ブロック(V1) | micropython |
1.数値を読み取る |
microbit.i2c.read(addr, n, repeat=False) 7 ビットアドレス addr のデバイスから n バイトを読み込みます。repeat を True にすると、ストップビットが送られません。 |
2.数値を文字で書き出す |
microbit.i2c.write(addr, buf, repeat=False) 7 ビットアドレス addr のデバイスに buf のバイト列を書き込みます。 repeat をTrue にすると、ストップビットが送られません。 |
3.ブロック無し | microbit.i2c.init(freq=100000, sda=pin20, scl=pin19) 指定の端子 sda と scl と指定のクロック周波数 freq でデバイスを再初期化します。ただし、上記以外の指定をすると磁気センサーと加速度センサーの動作が停止しますので、基本的に変更しないでください。 microbit.i2c.scan() デバイスのバスをスキャンします。スキャンに応答したデバイスに該当する7ビットアドレスのリストを返します。 注:I2Cデバイスはそれぞれ固有アドレスを持ちますので、Micro:bitから使うには最初にアドレスを知る必要があります。 |
I2Cでのやり取りは、デバイスのアドレスを入手して、そのアドレスを使用してデバイスからデータを読むか書かきこむかだけです。やり取りの手順についてはデバイス毎に異なりますので、各デバイスのマニュアルを読んで調べる必要があります。その場合、多くの命令を書き込んだりする必要があり簡単にはできません。デバイスによっては、ライブラリーが準備されているものもあり、それをMicropythonで利用することにより簡単にデバイスを使うことができる場合もあります。この記事ではOLED有機ELディスプレイ用のライブラリーを利用します。ライブラリーを利用しないと画面を初期化するだけで20近い命令を書きこむ必要がありますが、ライブラリーを利用すればinitialize()の命令だけで初期化できますので、プログラムが非常に簡単になります。
OLED有機ELディスプレイ用のライブラリーを入手する
今回はGithubにある microbit_ssd1306 というライブラリーを利用します。ビットマップ描画やテキスト描画を比較的簡単にできます。
1.Githubのライブラリーページにアクセスします。
2.以下の画面になりますので、『Clone or download』をクリックし、開いたメニューで『Download ZIP』をクリックします。
3.ダウンロードフォルダーに『microbit_ssd1306-master.zip』というファイルがダウンロードされていますので、選択して右クリックで開いたメニューで『解凍→ここに解凍』をクリックします。
4.解凍が完了すると『microbit_ssd1306-master』フォルダーが作成され、以下の様にエクスプローラーが開きフォルダーの内容が表示されますので、名前にssd1306がついているxxx.pyファイルをmu_dataフォルダーにコピーしてください。
各ファイルの役割(Micro:bit内のメモリーが大きくないので、必要な機能だけを使うことで作成するプログラム用のメモリーをできるだけ多く確保するためです)
ssd1306.py:初期化など必須
ssd1306_bitmap.py:bitmapファイルの表示
ssd1306_effects.py:画面のパルス効果、点滅
ssd1306_img.py:ssd1306_stamp.pyで作成されたimageを表示
ssd1306_px.py:ドット単位で表示
ssd1306_stamp.y:Micro:bit内で定義されたImageからssd1306_img.pyで表示できるImageを作成
ssd1306_text.py:Micro:bit内で定義された文字を表示
5.今回のライブラリーを使用すると、以下の命令がMuで使えるようになります。なお、今回のライブラリーは128×64専用ですので、128×32では使用すると文字がつぶれるようです。下の実際の表示例を参照ください。
ライブラリーの命令 | 命令の説明 |
1.initialize() |
画面をリセットして初期化します。 以下の命令を実行する前に、必ず実行する必要があります。 |
2.clear_oled() |
画面を消去します。初期化の直後や、前に表示した画面を消去するために使用します。 |
3.show_bitmap(filename) |
別途準備されたbitmapファイル作成ソフトで作成したfilenameをディスプレイに表示します。 |
4.set_px(x, y, color, draw=1) |
x(0~127)とy(0~63)で指定した座標をcolor(0=黒か1=白)で指定した色で表示します。draw=0は表示用バッファーにデータを書き込むだけで、draw_screen()命令を使用して表示します。draw=1はすぐに表示されます。 |
5.get_px(x, y) |
x(0~127)とy(0~63)で指定した座標の色(0=黒か1=白)を返します。 |
6.add_text(x, y, text, draw=1) |
x(0~11)桁とy(0~3)行にtextで指定した文字を表示します。draw=1がデフォルト値ですので、指定しなくても表示されます。フォントはMicro:bit内で定義されている5×5のフォントを使用しています。注:Githubの説明では5行表示できると書かれていますが、実際には4行までのようです。 Aボタンを押すと、Helloと4行表示し、Bボタンを押すと画面をクリアするプログラム |
7.create_stamp(img) |
Micro:bit内で定義されているImageを作成します。 |
8.draw_stamp(x, y, stamp, color, draw=1) |
7で作成したImageを表示します。 |
9.pulse(time=500) |
画面の明るさを指定した時間で徐々に明るくします。デフォルト値は0.5秒です。 |
10.blink(time=1000) |
画面をtimeで指定した時間で点滅します。デフォルト値は1秒間隔です。 |
Muで実際にテキストを表示するプログラムを動かしてみる
前の項目で紹介したサンプルプログラムのうち、6のテキストを表示するプログラムの手順を紹介します。使用する機能により、使用するライブラリーが異なりますので、注意してください。ビットマップ描画については、次の記事で紹介します。
1.Muを開始して、text_sample.pyを作成します。まだ、転送しないでください。(サンプルプログラムtext_sample.pyをコピーしてください)
2.必要なライブラリーをMicro:bitにコピーするためにをクリックすると、以下の様な画面になりMicro:bit内とコンピューター内のmu_codeフォルダーが表示されます。Micro:bit内には以前に転送したプログラムがmain.pyという名前で保存されています。どんな名前のプログラムを転送しても、main.pyという名前になります。mu_codeフォルダーはMuで作成したプログラムが保管される場所です。
3.必要なライブラリーをコンピューターのファイル:からドラッグして、Micro:bitのファイルでドロップしてコピーします。まず、ssd1306.pyをコピーします。以下のようになります。次に、同じようにssd1306_text.pyもコピーします。
4.以下のようになりますので、file操作を止めるために再度をクリックします。これをしないと転送できません。その後、転送をクリックしてプログラムをMicro:bitにコピーします。
5.転送が終わるとプログラムが実行され、最初のメッセージが表示されます。Aボタンを押すと右のように表示されます。
128x32の場合
128x64の場合
次の記事で、ビットマップ描画についてビットマップ作成手順と併せて紹介予定です。
最後まで記事をお読みいただきありがとうございます。
記事の改善に役立てたいと思いますので、よろしければアンケートにご協力ください。
今回の記事に使用したMicro:bit以外の製品は以下になります。
コメントを書く