前回、Raspberry Pi Pico で、搭載LEDを点灯、消灯してみた。

今度は、MicroPythonドライバを利用してOLED液晶を使ってみる。

使うOLED液晶

M5StickC、つまり Arduino ESP32 で動かしたことあり。

ampy コマンド

Thonny もいいけど、IDEのeditorはやはり好みではない。 ということで、いつものcommand line 環境に移行する。

使うのは、Adafruitが Micropythonや CircuitPython を搭載したシングルボートコンピュータとのserial通信用に提供している ampy

install

macosならpip3 でinstall

bash
$ sudo pip3 install adafruit-ampy

使い方

まずは、Pico 上のファイルを確認。最初はなにもない。

bash
$ ampy -p /dev/tty.usbmodem0000000000001 ls

script の実行

手元のeditor でサンプルファイルを作成

led.py

python
from machine import Pin
import time

led = Pin(25, Pin.OUT)

while True:
    time.sleep(1.0)
    led.value(1)

    time.sleep(1.0)
    led.value(0)`

このファイルを run コマンドで流し込む

bash
$ ampy -p /dev/tty.usbmodem0000000000001 run led.py 
^C << 永久loop なのでCTL-C で停止
Aborted!

OLED ssd1308 のドライバをput

MicroPython 上で利用するドライバファイルをgithubからもってくる。

ファイル名を ssd1308.py とし、 put でPico上に送る

bash
$ ampy -p /dev/tty.usbmodem0000000000001 put ssd1306.py

ls で確認

bash
$ ampy -p /dev/tty.usbmodem0000000000001 ls
/ssd1306.py

表示用アプリを実行

アプリは、こんな感じ

PINは、GPIO2(SDA) と GPIO3(SCL) を利用した。

python
from machine import Pin, I2C
from ssd1306 import SSD1306_I2C

# i2c = I2C(id=0, sda=Pin(0), scl=Pin(1))
i2c = I2C(id=1, sda=Pin(2), scl=Pin(3))
print(i2c)

oled = SSD1306_I2C(128, 32, i2c)
oled.rect(0, 0, 128, 32, 1)
oled.fill_rect(120, 0, 128, 32, 1)
oled.line(112, 0, 112, 32, 1)

oled.text('MicroPython', 4, 4)
oled.text('ssd1306 demo', 4, 20)
oled.show()

実行してみる。

bash
$ ampy -p /dev/tty.usbmodem0000000000001 run ssd1306_app.py 
I2C(1, freq=399361, scl=3, sda=2)