MicroPythonを入れたESP32でモノクロ反射型TFTメモリ液晶LS027B4DH01を表示してみる(SPIで制御)

前回、GPIOで制御したプログラムをESP32のハードウェアSPIの機能を使うプログラムに書き換えてみました。GPIOのオンオフよりもかなり描画が高速になりました。

SPI通信の設定

ESP32のMicroPythonにはソフトウェアSPIとハードウェアSPIがあり、下記のようにそれぞれ使用できるピンと最大速度が異なります。

今回はハードウェアSPIのVSPIを10MHzで使用することにしました。この液晶はLSBでデータを送信する必要があるのでfirstbit=SPI.LSBとしています。通信速度は80MHzから10MHzずつ下げていき、液晶を表示することができたのが10MHzだったので10MHzとしています。

SPI(
    2, #vspi = id = 2
    baudrate=10000000, #10MHz
    polarity=0, phase=0, bits=8, firstbit=SPI.LSB,
    sck=Pin(18), mosi=Pin(23), miso=Pin(19)
)

1ライン更新

前回と同様にデータの更新には1ライン更新モードを使用しました。コードは前回書いたものをspi.write()に書き換えたものです。spi.write()の引数にはbytearray()を渡す必要があり、リストを渡したらエラーを吐きました。1バイトだけの送信でもbytearray()にする必要があるため少し面倒だなと思います。

def update_one_line(self, line, data_array):
    self.scs.on()
    # send mode
    buffer = bytearray(1)
    buffer[0] = 0x01
    self.spi.write(buffer)
    # send gate line address
    buffer[0] = line
    self.spi.write(buffer)
    # send data
    self.spi.write(data_array)
    # dummy data
    buffer = bytearray(2)
    buffer[0], buffer[1] = 0x00, 0x00
    self.spi.write(buffer)
    self.scs.off()

動作の様子

前回よりもかなり高速に描画できるようになりました。前回はGPIOをオンオフして制御していたので、大量にデータを送信するとなると処理にかなりの時間が掛かっていたようです。それをハードウェアに任せることでここまで高速に通信できるようになるんですね。

記事の共有

関連記事

コメント

comments powered by Disqus