kopia lustrzana https://github.com/devbis/st7789_mpy
Change the image path back after merging
rodzic
3eb11c5245
commit
0182cdcc3f
62
README.md
62
README.md
|
@ -4,11 +4,11 @@ ST7789 Driver for MicroPython
|
||||||
|
|
||||||
Overview
|
Overview
|
||||||
--------
|
--------
|
||||||
This is a driver for MicroPython to handle cheap displays
|
This is a driver for MicroPython to handle cheap displays
|
||||||
based on ST7789 chip.
|
based on ST7789 chip.
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="https://raw.githubusercontent.com/dvarrel/st7789_mpy/master/docs/ST7789.jpg" alt="ST7789 display photo"/>
|
<img src="https://raw.githubusercontent.com/devbis/st7789_mpy/master/docs/ST7789.jpg" alt="ST7789 display photo"/>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
It supports both 240x240 and 135x240 variants of displays.
|
It supports both 240x240 and 135x240 variants of displays.
|
||||||
|
@ -22,7 +22,7 @@ Building instruction
|
||||||
---------------------
|
---------------------
|
||||||
|
|
||||||
Prepare build tools as described in the manual.
|
Prepare build tools as described in the manual.
|
||||||
You should follow the instruction for building MicroPython and
|
You should follow the instruction for building MicroPython and
|
||||||
ensure that you can build the firmware without this display module.
|
ensure that you can build the firmware without this display module.
|
||||||
|
|
||||||
Clone this module alongside the MPY sources:
|
Clone this module alongside the MPY sources:
|
||||||
|
@ -33,21 +33,21 @@ Go to MicroPython ports directory and for ESP8266 run:
|
||||||
|
|
||||||
$ cd micropython/ports/esp8266
|
$ cd micropython/ports/esp8266
|
||||||
|
|
||||||
for ESP32:
|
for ESP32:
|
||||||
|
|
||||||
$ cd micropython/ports/esp32
|
$ cd micropython/ports/esp32
|
||||||
|
|
||||||
And then compile the module with specified USER_C_MODULES dir
|
And then compile the module with specified USER_C_MODULES dir
|
||||||
|
|
||||||
$ make USER_C_MODULES=../../../st7789_mpy/ all
|
$ make USER_C_MODULES=../../../st7789_mpy/ all
|
||||||
|
|
||||||
|
|
||||||
If you have other user modules, copy the st7789_driver/st7789 to
|
If you have other user modules, copy the st7789_driver/st7789 to
|
||||||
the user modules directory
|
the user modules directory
|
||||||
|
|
||||||
Upload the resulting firmware to your MCU as usual with esptool.py
|
Upload the resulting firmware to your MCU as usual with esptool.py
|
||||||
(See
|
(See
|
||||||
[MicroPython docs](http://docs.micropython.org/en/latest/esp8266/tutorial/intro.html#deploying-the-firmware)
|
[MicroPython docs](http://docs.micropython.org/en/latest/esp8266/tutorial/intro.html#deploying-the-firmware)
|
||||||
for more info)
|
for more info)
|
||||||
|
|
||||||
$ make deploy
|
$ make deploy
|
||||||
|
@ -57,12 +57,12 @@ Working examples
|
||||||
|
|
||||||
This module was tested on ESP32 and ESP8266 MCUs.
|
This module was tested on ESP32 and ESP8266 MCUs.
|
||||||
|
|
||||||
You have to provide `machine.SPI` object and at least two pins for RESET and
|
You have to provide `machine.SPI` object and at least two pins for RESET and
|
||||||
DC pins on the screen for the display object.
|
DC pins on the screen for the display object.
|
||||||
|
|
||||||
|
|
||||||
# ESP 8266
|
# ESP 8266
|
||||||
|
|
||||||
import machine
|
import machine
|
||||||
import st7789
|
import st7789
|
||||||
spi = machine.SPI(1, baudrate=40000000, polarity=1)
|
spi = machine.SPI(1, baudrate=40000000, polarity=1)
|
||||||
|
@ -72,7 +72,7 @@ DC pins on the screen for the display object.
|
||||||
|
|
||||||
For ESP32 modules you have to provide specific pins for SPI.
|
For ESP32 modules you have to provide specific pins for SPI.
|
||||||
Unfortunately, I was unable to run this display on SPI(1) interface.
|
Unfortunately, I was unable to run this display on SPI(1) interface.
|
||||||
For machine.SPI(2) == VSPI you have to use
|
For machine.SPI(2) == VSPI you have to use
|
||||||
|
|
||||||
- CLK: Pin(18)
|
- CLK: Pin(18)
|
||||||
- MOSI: Pin(23)
|
- MOSI: Pin(23)
|
||||||
|
@ -104,27 +104,27 @@ This driver supports only 16bit colors in RGB565 notation.
|
||||||
- `ST7789.pixel(x, y, color)`
|
- `ST7789.pixel(x, y, color)`
|
||||||
|
|
||||||
Set the specified pixel to the given color.
|
Set the specified pixel to the given color.
|
||||||
|
|
||||||
- `ST7789.line(x0, y0, x1, y1, color)`
|
- `ST7789.line(x0, y0, x1, y1, color)`
|
||||||
|
|
||||||
Draws a single line with the provided `color` from (`x0`, `y0`) to
|
Draws a single line with the provided `color` from (`x0`, `y0`) to
|
||||||
(`x1`, `y1`).
|
(`x1`, `y1`).
|
||||||
|
|
||||||
- `ST7789.hline(x, y, length, color)`
|
- `ST7789.hline(x, y, length, color)`
|
||||||
|
|
||||||
Draws a single horizontal line with the provided `color` and `length`
|
Draws a single horizontal line with the provided `color` and `length`
|
||||||
in pixels. Along with `vline`, this is a fast version with reduced
|
in pixels. Along with `vline`, this is a fast version with reduced
|
||||||
number of SPI calls.
|
number of SPI calls.
|
||||||
|
|
||||||
- `ST7789.vline(x, y, length, color)`
|
- `ST7789.vline(x, y, length, color)`
|
||||||
|
|
||||||
Draws a single horizontal line with the provided `color` and `length`
|
Draws a single horizontal line with the provided `color` and `length`
|
||||||
in pixels.
|
in pixels.
|
||||||
|
|
||||||
- `ST7789.rect(x, y, width, height, color)`
|
- `ST7789.rect(x, y, width, height, color)`
|
||||||
|
|
||||||
Draws a rectangle from (`x`, `y`) with corresponding dimensions
|
Draws a rectangle from (`x`, `y`) with corresponding dimensions
|
||||||
|
|
||||||
- `ST7789.fill_rect(x, y, width, height, color)`
|
- `ST7789.fill_rect(x, y, width, height, color)`
|
||||||
|
|
||||||
Fill a rectangle starting from (`x`, `y`) coordinates
|
Fill a rectangle starting from (`x`, `y`) coordinates
|
||||||
|
@ -144,22 +144,22 @@ Helper functions
|
||||||
- `color565(r, g, b)`
|
- `color565(r, g, b)`
|
||||||
|
|
||||||
Pack a color into 2-bytes rgb565 format
|
Pack a color into 2-bytes rgb565 format
|
||||||
|
|
||||||
- `map_bitarray_to_rgb565(bitarray, buffer, width, color=WHITE, bg_color=BLACK)`
|
- `map_bitarray_to_rgb565(bitarray, buffer, width, color=WHITE, bg_color=BLACK)`
|
||||||
|
|
||||||
Convert a bitarray to the rgb565 color buffer which is suitable for blitting.
|
Convert a bitarray to the rgb565 color buffer which is suitable for blitting.
|
||||||
Bit 1 in bitarray is a pixel with `color` and 0 - with `bg_color`.
|
Bit 1 in bitarray is a pixel with `color` and 0 - with `bg_color`.
|
||||||
|
|
||||||
This is a helper with a good performance to print text with a high
|
This is a helper with a good performance to print text with a high
|
||||||
resolution font. You can use an awesome tool
|
resolution font. You can use an awesome tool
|
||||||
https://github.com/peterhinch/micropython-font-to-py
|
https://github.com/peterhinch/micropython-font-to-py
|
||||||
to generate a bitmap fonts from .ttf and use them as a frozen bytecode from
|
to generate a bitmap fonts from .ttf and use them as a frozen bytecode from
|
||||||
the ROM memory.
|
the ROM memory.
|
||||||
|
|
||||||
Performance
|
Performance
|
||||||
-----------
|
-----------
|
||||||
|
|
||||||
For the comparison I used an excellent library for Arduino
|
For the comparison I used an excellent library for Arduino
|
||||||
that can handle this screen.
|
that can handle this screen.
|
||||||
|
|
||||||
https://github.com/ananevilya/Arduino-ST7789-Library/
|
https://github.com/ananevilya/Arduino-ST7789-Library/
|
||||||
|
@ -186,7 +186,7 @@ Troubleshooting
|
||||||
|
|
||||||
#### Overflow of iram1_0_seg
|
#### Overflow of iram1_0_seg
|
||||||
|
|
||||||
When building a firmware for esp8266 you can see this failure message from
|
When building a firmware for esp8266 you can see this failure message from
|
||||||
the linker:
|
the linker:
|
||||||
|
|
||||||
LINK build/firmware.elf
|
LINK build/firmware.elf
|
||||||
|
@ -194,7 +194,7 @@ the linker:
|
||||||
xtensa-lx106-elf-ld: region `iram1_0_seg' overflowed by 292 bytes
|
xtensa-lx106-elf-ld: region `iram1_0_seg' overflowed by 292 bytes
|
||||||
Makefile:192: recipe for target 'build/firmware.elf' failed
|
Makefile:192: recipe for target 'build/firmware.elf' failed
|
||||||
|
|
||||||
To fix this issue, you have to put st7789 module to irom0 section.
|
To fix this issue, you have to put st7789 module to irom0 section.
|
||||||
Edit `esp8266_common.ld` file in the `ports/esp8266` dir and add a line
|
Edit `esp8266_common.ld` file in the `ports/esp8266` dir and add a line
|
||||||
|
|
||||||
*st7789/*.o(.literal* .text*)
|
*st7789/*.o(.literal* .text*)
|
||||||
|
@ -205,6 +205,6 @@ in the `.irom0.text : ALIGN(4)` section
|
||||||
#### Unsupported dimensions
|
#### Unsupported dimensions
|
||||||
|
|
||||||
This driver supports only 240x240 and 135x240 pixel displays.
|
This driver supports only 240x240 and 135x240 pixel displays.
|
||||||
If you have a display with an unsupported resolution, you can pass
|
If you have a display with an unsupported resolution, you can pass
|
||||||
`xstart` and `ystart` parameters to the display constructor to set the
|
`xstart` and `ystart` parameters to the display constructor to set the
|
||||||
required offsets.
|
required offsets.
|
||||||
|
|
Ładowanie…
Reference in New Issue