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

Share on:

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

SPI通信の設定

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

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

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

1ライン更新

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

 1def update_one_line(self, line, data_array):
 2    self.scs.on()
 3    # send mode
 4    buffer = bytearray(1)
 5    buffer[0] = 0x01
 6    self.spi.write(buffer)
 7    # send gate line address
 8    buffer[0] = line
 9    self.spi.write(buffer)
10    # send data
11    self.spi.write(data_array)
12    # dummy data
13    buffer = bytearray(2)
14    buffer[0], buffer[1] = 0x00, 0x00
15    self.spi.write(buffer)
16    self.scs.off()

動作の様子

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

関連記事