フォト
2023年5月
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      
無料ブログはココログ

MicroPython

2023年2月 9日 (木)

Raspberry Pi Pico MicroPython用のマルチフォントライブラリ

Raspberry Pi PicoMicroPythonは、かなりイケていることが分かり、
Arduino用のフォントライブラリを移植してみました。

■Raspberry Pi Pico MicroPython用のマルチフォントライブラリ
  https://github.com/Tamakichi/pico_MicroPython_Multiifont

Arduino用漢字フォントライブラリ SDカード版からの移植なのです。
MicroPythonでは、フラッシュメモリ上にファイルを置いて読み書き出来るので、サックっと移植出来ました。

動作確認(使い物ものになるか)として、
 ・16x16ドットマトリックのNeoPixcel
 ・OLEDディスプレイ SSD1306(I2C接続 128x64ドット)
で遊んでみました。

■16x16ドットマトリックのNeoPixcelで日本語表示(sample_mfont_neopixel.py)
 Dsc00107

全点フル輝度で点灯すると、電力不足でリセットがかかったり動作不安定となります。
本格的に使うには、電源回りの補強が必要です。とりあえず、実験レベルでの動作確認です。

動いている様子
 

動画のデモでは12ドットフォントを指定して表示しています。
とりあえず、見た目上はまともに動いています。スクロールも滑らかです(*´ω`*)
これで、インタプリタ言語で処理しているかと思うと上出来ですね(^^♪

■OLEDディスプレイ SSD1306(I2C接続 128x64ドット) で日本語表示(sample_oled_mfont.py)
Dsc00101

動いている様子


表示は1文字ずつディレイ(時間待ち)を入れて表示しています。
ディレイを抜いてフルスピードにしても表示は遅いです。

遅いI2C接続が足を引っ張っているというより、やはり処理的にちょっとキツイかな。
利用しているSSD1306ライブラリを見直せば何とかなるかもしれません。

メインのプログラムはこんな感じです

定数部分は、各自のご利用ボードに合わせて適宜変更して下さい。
サンプルプログラムでは、「後からインスタンス・メソッドの追加できるか?」を試してみたのですが、出来ますね。

# SSD1306_I2Cに漢字表示インスタンス・メソッドの追加
SSD1306_I2C.drawText = drawText

SSD1306_I2C.drawFont = drawFont3
SSD1306_I2C.newLine = newLine


■まとめ

この記事でやっていることは、いままでArduinoでやってきたことなのですが、
MicroPythonでも、そこそこやれるようですね。しばらくはpicoで遊んでみます。

2023年2月 8日 (水)

MicroPython(Raspberry Pi pico)で8x8ドットNeoPixcel文字表示

久しぶりのブログ更新です。

Pythonプログラミングのお勉強で、手持ちのRaspberry Pi picoMicroPythonをいじってみたのですが、
インタプリタの処理と思えないほど、サクサクと動いてびっくりです。

8x8ドットNeoPixcelで文字表示をやって見たところ、難なく処理をこなしてくれました。

Dsc00061

動いている様子


メインのそースはこんな感じです。

MicroPythonはコンパイル不要で、C言語よりもお手軽でいいですね(*´ω`*)
文字の表示には美咲フォントを利用しました。とりあえず、モジュール化してみました。
Arduino版を流用しました。
■ Raspberry Pi Pico MicroPython用美咲フォントライブラリ
   https://github.com/Tamakichi/pico_MicroPython_misakifont

サンプルプログラムとして、ドットマトリックスのプログラムを添付しています。
Raspberry Pi Pico
MicroPythonには、
NeoPixcelの制御を行うライブラリが組み込まれているので、
マトリック表示のためのライブラリ部のみを自作しています。
マトリック表示処理の要としては、マトリック表示では、縦・横の座標でピクセルを制御したいところ、
NeoPixcelのライブラリではのピクセルを0からの番号指定のため、
   縦・横 指定 ⇒ 番号(0~)
の変換をするところですかね..

  neomatrix.py:
    # ドットマトリックス 指定座標ピクセル番号変換
    def XYtoNo(self, x, y):
        return self.width*y + x if y&1 else self.width*y + self.width-1 -x

縦yが奇数と偶数で横xの方向が異なります。
表示が鏡文字になったり、上下さかさまとなる製品の場合、この変換処理を修正すれば対処できると思います。