Waveshare LCDs

From Humanoid Robots Wiki
Jump to: navigation, search

Instructions to run the Waveshare 1.69in LCDs on the Jetson carrier boards

Jetson BCM Mapping.png

Note the Linux BCM mappings in the image shown. Theoretically with the Jetson.GPIO library, you are able to use either the physical board pin mapping or the BCM mapping, but this process has only been vetted for the BCM mode. When referring to pins in the Python package, use the BCM mapping. For example, if you use pin 32, use "D12" when referring to the pin. With the Adafruit package, this is written as "board.D12"


The 1.5 Inch LCD Module page actually tells you how to set up the Jetson for the Waveshare LCDs. However, since it uses a different controller, the actual firmware needs to be modified.

You can find the draft changes repo here.

Steps to reproduce:

  1. On Jetson, use the jetson-io to enable SPI1. Steps are shown in the Jetson Nano section in the 1.5in LCD Guide. Follow the "Enable SPI" and "Library Installation" sections. Stop before the "Download Example" section.
  2. Power down the Jetson and wire up the display using the following pinout:
Function Jetson Pin BCM Pin
3v3 1 3v3
GND 6 GND
DIN/MOSI 19 D10 (Automatically selected by Jetson-GPIO)
SCK 23 D11 (Automatically selected)
CS 24 CE0 (Automatically selected)
DC 22 D25
RST 31 D6
BL 32 D12

Clone the repository and launch run.py. You may need to install the following pip dependencies:

  • Jetson.GPIO
  • adafruit-circuitpython-busdevice
  • spidev
  • adafruit-blinka-displayio
  • adafruit-circuitpython-rgb-display
  • adafruit-circuitpython-st7789
  • Pillow

You may also need to run "sudo modprobe spidev" to get the spidev driver loaded.

The example code should draw some shapes every 2 seconds, followed by the Waveshare logo, then a Yuan dynasty poem, and lastly a series of images.

Testing with 2 LCDs[edit]

Ideally, we run both screens off the same SPI line and use the built-in chip-select pins on the Jetson. However, based on current testing, the Jetson-IO CS functionality does not work. If a device is connected to CS1 and CS0, CS0 will always remain low. The code in the repository assumes you use both spi lines (SPI0 and SPI2, so spidev0.0 and spidev2.0 respectively).

Wire up the second display as such:

Function Jetson Pin BCM Pin
3v3 17 3v3
GND 9 GND
DIN/MOSI 37 D26 (Automatically selected by Jetson-GPIO)
SCK 13 D27 (Automatically selected)
CS 18 D24 (Automatically selected)
DC 36 D16
RST 38 D20
BL 33 D13

The code in the repository should already specify these pins for the second screen.