Pico の環境設定は以下を参考
Pi PicoにMicroPythonをセットアップして実行してみる(メモ)
Arduino IDE を使う場合は
Pi Pico (W) に有機EL (OLED) ディスプレイ:Arduino IDE
Pico (W) のディスプレイとしてこれを使ってみます。
0.96インチ 128×64ドット 有機ELディスプレイ(OLED)白色
秋月電子で1個580円、Amazonなら互換品が2個で1000円弱くらいです。
ジャンパー線(メスーメス)4本でPico と接続します。
Pico のGPIO はこんな具合です。
このディスプレイは3.3Vで駆動します。
黒のジャンパー線は例えば#38のGND、赤のジャンパー線は#36の3V3(OUT)か#40のVBUS(5V)に接続します。電源電圧はどちらでもいけます。
後2本の信号線は、例えばGP0(SDA)、GP1(SCL)に接続するとこんな感じです。
Picoでは2系列のバス(I2C0、I2C1)を使用できます。ここではI2C0のSDA、SCLがアサインされていますので、同じI2C0ならGP16(SDA)、GP17(SCL)でもいいです。
また、同時に同じI2C接続の他のデバイスを使う場合は、このOLEDがI2C0のバスを使っているのでI2C1を使うようにします。(上記のGPIOピン図参照)
このGP番号は後のコードの中で使います。
ライブラリをインストール
MicroPython用のOLEDディスプレイ用ライブラリを使います。
Thonny を起動
ssd1306を入力して検索。
結果から「micropython-ssd1306」をクリックしてインストール実行。
ASCII 文字表示
例として、Pico に標準で搭載されている温度センサーから取得した値を3秒間隔で時刻とともに表示してみます。
時刻はPC 接続時に正しく取得されます。Pico単体の場合はRTC(Real Time Clock)モジュールが別途用意するかNTP同期ルーチンが必要になります。
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 |
import machine import utime import ssd1306 import time sda = machine.Pin(0) scl = machine.Pin(1) i2c = machine.I2C(0,sda=sda, scl=scl, freq=400000) oled = ssd1306.SSD1306_I2C(128, 64, i2c) sensor_temp = machine.ADC(4) conversion_factor = 3.3 / (65535) while True: oled.fill(0) reading = sensor_temp.read_u16() * conversion_factor # The temperature sensor measures the Vbe voltage of a biased bipolar diode, connected to the fifth ADC channel # Typically, Vbe = 0.706V at 27 degrees C, with a slope of -1.721mV (0.001721) per degree. temperature = 27 - (reading - 0.706)/0.001721 now = time.localtime() oled.text("Temp:" + str(temperature), 0, 5) oled.text(str(now[3])+":"+str(now[4])+":"+str(now[5]),0,15) oled.show() utime.sleep(3) |
日本語表示のためのフォントをインストール
DOSの時代の漢字は16×16や12×12ドットのサイズが使えましたが、さすがに1インチ以下の画面に漢字を表示するにはこのサイズは使えないということで美咲(みさき)フォントというものを使います。
かつてPalmやそのクローンOSなどを日本語化する際に使われていた恵梨沙(えりさ)フォント(8ドットx8ドット)を見やすくするため更に右側下側それぞれ1ドットを空白にしたフォントだそうです。Pico のフラッシュメモリーに載せられるように語数も制限しているそうです。
このサイズだとさすがに漢字だと潰れるところはありますが「そんな字でも、そう思ってみれば、そう見える」ところが素晴らしいです。
それはさておき、美咲フォントはココからダウンロードして解凍後、Cドライブなどにmisakifontフォルダーだけをコピーしておきます。
Thonny 起動後、メニュの表示ー>ファイル(Files)でフォルダーのツリーを表示しておきます。
misakifontフォルダーをコピーしたディレクトリーで、右クリックして、「/をアップロード」を選択。このメニュは原文は”Upload to /” なので「/へアップロード」が正しく、これなら文意が通じます。
これでmisakifontフォルダーがPico のフラッシュメモリのルートへコピーされます。
こんな感じです。
日本語を表示してみる
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 32 33 34 35 36 37 38 39 40 41 42 |
import machine import ssd1306 from misakifont import MisakiFont import time fcolor = 1 #フォントサイズの倍数 fsize = 1 def show_bitmap(oled, fd, x, y, color, size): for row in range(0, 7): for col in range(0, 7): if (0x80 >> col) & fd[row]: oled.fill_rect(int(x + col * size), int(y + row * size), size, size, color) oled.show() sda = machine.Pin(0) scl = machine.Pin(1) i2c = machine.I2C(0, sda=sda, scl=scl, freq=400000) oled = ssd1306.SSD1306_I2C(128, 64, i2c) oled.fill(0) mf = MisakiFont() str = "こんにちわ!如何お過ごしですか?" x = 0 y = 0 for c in str: d = mf.font(ord(c)) show_bitmap(oled, d, x, y, fcolor, fsize) x += 8 * fsize if x >= 128: x = 0 y += 8 * fsize if y >= 64: y = 0 time.sleep(0.02) |
こんな感じです。「如何」の如の字が美咲フォントでは未対応なので□で代替されています。
見辛い場合はfsizeで調整します。2倍にしてみました。
Leave a Reply