LoginSignup
3
1

More than 1 year has passed since last update.

M5StackのLCDをMicroPythonから使う(ハードウェアSPI)

Posted at

M5StackでMicroPython

M5StackをMicroPythonで使う場合
1. M5Flow
2. M5Stack Micropython Base Lobo MicroPython
3. M5Cloud
のファームを使う方法あります。これらのファームにはデバイスのドライバーも含まれているので、特別な準備をすることなくハードウェアが使えるはずです
ただ、これらはMicroPythonのバージョンが古く、最新のMicroPythonを使いたい場合には困ってしまいます。

そこでGENERICのMicroPythonでデバイスが使えないかを試してみたいと思います。

MicroPython v1.18 on 2022-01-17; ESP32 module with ESP32

開発環境

Thonnyを使うと、ファームの書き込みもらくちんです。optionから
install or update firmware
を選択し、ファームウェアを書き込みます

image.png

LCDに表示する

こちらの記事を参考にさせていただきました
https://qiita.com/tab4moji/items/e669deeb2efb5ff2c775

M5StackのLCDは幸いにもVSPIに接続されていました
(余談ですがM5StampとかAtomLiteとかは、ハードウェアSPIがピンに割り当てられてなかったりするので不便です)
image.png
https://micropython-docs-ja.readthedocs.io/ja/latest/esp32/quickref.html#hardware-spi-bus

image.png
https://docs.m5stack.com/en/core/basic

コードの修正

ライブラリの ili9341.pyに一部修正が必要です。
SPIにwriteするときdataが0の時があって ValueError: buffer too shortが出るのを防ぎます

ili9341.py
    def _data(self, data):
        self.dc.value(1)
        self.cs.value(0)
        if data:
            self.spi.write(data)
        self.cs.value(1)
lcd_test.py
import ili9342c
color565 = ili9342c.color565
from machine import Pin, SPI, SoftSPI
#spi = SoftSPI(miso=Pin(19), mosi=Pin(23, Pin.OUT), sck=Pin(18, Pin.OUT))
spi = SPI(2, baudrate=40000000)
display = ili9342c.ILI934X(spi, cs=Pin(14), dc=Pin(27), rst=Pin(33), bl=Pin(32))

c = color565(0,10,0)
#display.fill_rectangle(10,10,100,100,c)
display.fill(c)
count=0
while True:
    count += 1
    display.text(f"Hello,World! {count}", 16, 128)

ライブラリに渡すspiをSoftSPIにすると速度の違いを確認できると思います。
文字を表示させるぐらいなら十分使えそうです。

3
1
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
3
1