"Elecrow 5 Inch 800x480 TFT Raspberry Pi Touch Display with GPIO Backlight Control" Tips


Elecrow の5インチ液晶。
![IMG_20240708_225324.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/81d07c7e-bb8e-acb4-de55-88c174d7c64f.jpeg)

これにRaspberryPiをつなげてみました。
「Raspberry Pi で framebuffer で遊ぶ」
https://qiita.com/nanbuwks/items/71062ada859846ec89eb


そのときに工夫したアレコレ。

# 環境

- Elecrow 5 Inch 800x480 TFT Raspberry Pi Touch Display with GPIO Backlight Control
- Raspberry Pi 3B
- Raspberry Pi OS Lite (2024-07-04-raspios-bookworm-armhf-lite.img.xz)


# ドキュメント


わかりずらいけど、wiki はここ。

# /boot/firmware/config.txt

wiki の説明に従って、以下の内容を `/boot/firmware/config.txt` に追加する。

```
# --- added by elecrow-pitft-setup  ---
hdmi_force_hotplug=1
max_usb_current=1
hdmi_drive=1
hdmi_group=2
hdmi_mode=1
hdmi_mode=87
hdmi_cvt 800 480 60 6 0 0 0
dtoverlay=ads7846,cs=1,penirq=25,penirq_pull=2,speed=50000,keep_vref_on=0,swapxy=0,pmax=255,xohms=150,xmin=200,xmax=3900,ymin=200,ymax=3900
display_rotate=0
# --- end elecrow-pitft-setup  ---
```

デフォルトだとブートメッセージは表示されないけれど、上記設定をすると表示されるようになりました。

# gpiozero ライブラリとの競合

上記の内容を /boot/firmware/config.txt に書くと、 gpiozero ライブラリを使ったときに以下のエラーが出るようになりました。

```
$ python3 ac.py
/usr/lib/python3/dist-packages/gpiozero/pins/pi.py:465: SPISoftwareFallback: failed to initialize hardware SPI, falling back to software (error was: 'can not open SPI device')
  warnings.warn(
Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/gpiozero/devices.py", line 75, in __call__
    self = cls._instances[key]()
           ~~~~~~~~~~~~~~^^^^^
KeyError: ('GPIO11', 'GPIO8')

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/gpiozero/pins/pi.py", line 408, in pin
    pin = self.pins[info]
          ~~~~~~~~~^^^^^^
KeyError: PinInfo(number=24, name='GPIO8', names=frozenset({'BOARD24', 'GPIO8', 8, 'J8:24', '8', 'WPI10', 'BCM8'}), pull='', row=12, col=2, interfaces=frozenset({'spi', '', 'gpio', 'dpi'}))

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/pi/ac.py", line 17, in <module>
    mcp300802 = MCP3008(channel=2, device=0)
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/gpiozero/devices.py", line 103, in __call__
    self = super().__call__(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/gpiozero/spi_devices.py", line 428, in __init__
    super().__init__(channel, differential, max_voltage, **spi_args)
  File "/usr/lib/python3/dist-packages/gpiozero/spi_devices.py", line 286, in __init__
    super().__init__(channel, 10, differential, max_voltage, **spi_args)
  File "/usr/lib/python3/dist-packages/gpiozero/spi_devices.py", line 182, in __init__
    super().__init__(bits, max_voltage, **spi_args)
  File "/usr/lib/python3/dist-packages/gpiozero/spi_devices.py", line 129, in __init__
    super().__init__(shared=True, **spi_args)
  File "/usr/lib/python3/dist-packages/gpiozero/spi_devices.py", line 32, in __init__
    self._spi = self.pin_factory.spi(**spi_args)
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/gpiozero/pins/pi.py", line 469, in spi
    return self._get_spi_class(shared, hardware=False)(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/gpiozero/devices.py", line 78, in __call__
    self = super().__call__(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/gpiozero/pins/spi.py", line 47, in __init__
    self._select = OutputDevice(
                   ^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/gpiozero/devices.py", line 103, in __call__
    self = super().__call__(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/gpiozero/output_devices.py", line 74, in __init__
    super().__init__(pin, pin_factory=pin_factory)
  File "/usr/lib/python3/dist-packages/gpiozero/mixins.py", line 75, in __init__
    super().__init__(*args, **kwargs)
  File "/usr/lib/python3/dist-packages/gpiozero/devices.py", line 549, in __init__
    pin = self.pin_factory.pin(pin)
          ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/gpiozero/pins/pi.py", line 410, in pin
    pin = self.pin_class(self, info)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/gpiozero/pins/lgpio.py", line 126, in __init__
    lgpio.gpio_claim_input(
  File "/usr/lib/python3/dist-packages/lgpio.py", line 755, in gpio_claim_input
    return _u2i(_lgpio._gpio_claim_input(handle&0xffff, lFlags, gpio))
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/lgpio.py", line 458, in _u2i
    raise error(error_text(v))
lgpio.error: 'GPIO busy'
```


また、以下の内容とも競合し、スプラッシュがでなくなってしまいました。
「RaspberryPi Lite で起動スプラッシュを設定する」
https://qiita.com/nanbuwks/items/5c9bde5dce676de623a2


/boot/firmware/config.txt のここに問題があるようです。
```
dtoverlay=ads7846,cs=1,penirq=25,penirq_pull=2,speed=50000,keep_vref_on=0,swapxy=0,pmax=255,xohms=150,xmin=200,xmax=3900,ymin=200,ymax=3900
```

これをコメントアウトすると、gpiozero も スプラッシュも正常に動作するようになりました。


# ローテートはうまくいかない

HDMI コネクタは液晶上側にあります。向き変更アダプタがついてますが、それでもコネクタの位置が取り回しが良くないので液晶下側に設定できないかな?

# 電源供給
電源供給用のUSBポートがありますがかっこわるいので適当なところから電源を供給するようにしています。
![IMG_20240708_233803.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/5d998154-3849-6e34-d334-fe0a2b87eb47.jpeg)




```
display_rotate=1
fbcon=rotate:2
lcd_rorate=2
```


 上記の内容1つづつ、 `/boot/firmware/config.txt` に追加して試してみましたが、全て機能しませんでした。