0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

今年、MicroPython用に買ったボードシリーズ。

RP2040-GEEK

2024年4月5日 スイッチサイエンスで購入

1.14inch (135x240) のLCD搭載で USB に直挿しできるのが特徴な RP2040 (Raspberry Pi PICO のMCUと同じ)ボード。SDカードスロットあり。UART, I2C, DEBUG 用に線を引き出せるケーブル付属。

IMG_1636.JPG

IMG_1637.JPG

IMG_1638.JPG

LCDのドライバを探す

調べてみると LCD のコントローラは ST7789。Awesome MicroPythonでドライバを探してみて、以下を使うことに。

ファームウェアのビルド

以下の手順で MicroPython ファームウェアをビルド。ビルド環境としては Raspberry Pi 5 上の Raspberry Pi OS bookworm 64bit を利用。画面小さいので、フォントは 8x8 のビットマップフォントのみにしてみる。

$ git clone https://github.com/micropython/micropython.git
$ git clone https://github.com/russhughes/st7789_mpy.git
$ sudo apt update
$ sudo apt install cmake gcc-arm-none-eabi
$ cd micropython
$ make -C mpy-cross
$ cd ports/rp2
$ cp ../../../st7789_mpy/fonts/bitmap/vga1_8x8.py modules
$ make BOARD=RPI_PICO submodules
$ make BOARD=RPI_PICO BOARD=RPI_PICO USER_C_MODULES=../../../st7789_mpy/st7789/micropython.cmake FROZEN_MANIFEST="" FROZEN_MPY_DIR=$UPYDIR/modules

ファームウェアのインストール

RP2040-GEEKのbootボタンを押しながら USB ポートに差し込む。自動的に /media/{ログインアカウント名}/RPI-RP2 にファームウェアインストール用のストレージがマウントされる。

以下でファームウェアをコピーする。自動でファームウェアがインストールされ、/media/{ログインアカウント名}/RPI-RP2 がアンマウントされる。

cp build-RPI_PICO/firmware.uf2 /media/{ログインアカウント名}/RPI-RP2/

起動テスト

ファームウェアがインストールされると、自動でリセットがかかり、MicroPython が起動される。

mpremote で REPL に入れるかチェック。

$ mpremote
Connected to MicroPython at /dev/ttyACM0
Use Ctrl-] or Ctrl-x to exit this shell

>>> (Ctrl-Dでソフトウェアリブート)
MPY: soft reboot
MicroPython v1.25.0-preview.81.g2c80d3699 on 2024-12-08; Raspberry Pi Pico with RP2040
Type "help()" for more information
>>> 

LCD に表示するプログラミング

マンデルブロ集合を表示してみる。

mandel.py

from machine import Pin, SPI
import st7789
import vga1_8x8 as font
import time

time.sleep(5)

spi = SPI(1, 60_000_000, sck=Pin(10),mosi=Pin(11),miso=None)
display = st7789.ST7789(spi, 135, 240,
                        cs=Pin(9, Pin.OUT), dc=Pin(8, Pin.OUT),
                        reset=Pin(12, Pin.OUT), backlight=Pin(25, Pin.OUT),
                        rotation=3)
display.init()
display.fill(0)
display.on()

@micropython.native
def rainbow(value):
    red = 0
    green = 0
    blue = 0

    quadrant = value // 32

    if quadrant == 0:
        blue = 31
        green = 2 * (value % 32)
        red = 0
    elif quadrant == 1:
        blue = 31 - (value % 32)
        green = 63
        red = 0
    elif quadrant == 2:
        blue = 0
        green = 63
        red = value % 32
    elif quadrant == 3:
        blue = 0
        green = 63 - 2 * (value % 32)
        red = 31
    return st7789.color565(red, green, blue)


@micropython.native
def valmap(value, istart, istop, ostart, ostop):
    return ostart + (ostop - ostart) * ((value - istart) / (istop - istart))


@micropython.native
def main():
    px = 0
    while px < 240:
        py = 0
        while py < 135:
            xx0 = (valmap(px, 0, 240, -125000, -121250)) / 100000.0
            yy0 = (valmap(py, 0, 135, -18750, -15250)) / 100000.0
            xx = 0.0
            yy = 0.0
            iteration = 0
            max_iteration = 128
            while ((xx * xx + yy * yy) < 4) and (iteration < max_iteration):
                xtemp = xx * xx - yy * yy + xx0
                yy = 2 * xx * yy + yy0
                xx = xtemp
                iteration += 1
            color = rainbow((3 * iteration + 64) % 128)
            # yield()
            display.pixel(px, py, color)
            py += 1
        px += 1


startTime = time.ticks_ms()
main()
display.text(font, str(time.ticks_diff(time.ticks_ms(), startTime)/1000), 0, 0, 0xffff)

mpremote でMicroPythonのファイルシステムにコピー。

$ mpremote cp mandel.py :main.py

IMG_1629.JPG

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?