mirror of https://github.com/arendst/Tasmota.git
Reformatted into Displays.md
parent
4f2d326f01
commit
a1b8e9f93b
|
@ -1,201 +0,0 @@
|
|||
The display driver supports the following commands:
|
||||
|
||||
Command | Payload | Description
|
||||
-----------------|--------------|---------------------------------------------------------------------------
|
||||
Display | | Show current display setting as JSON string
|
||||
DisplayAddress | 0..255 | Set display module address
|
||||
DisplayDimmer | 0..100 | Set display luminosity (only 8x8 Matrix, for the other display it switch the display on [> 0] or off [=0])
|
||||
DisplayMode | 0..5 | Set display mode, for details see [DisplayMode Command](#displaymode-command) below
|
||||
DisplayModel | 1..5 | Set display model, for details see [DisplayModel Command](#displaymodel-command) below
|
||||
DisplayRefresh | 1..7 | Set time (in seconds) to update predefined content when using `DisplayMode` ≠ `0`
|
||||
DisplayCols | 1..44 | Set number of display columns
|
||||
DisplayRows | 1..32 | Set number of display rows
|
||||
DisplaySize | 1..4 | Set display scale-up size (only OLED SSD 1306 and TFT ILI9341)
|
||||
DisplayFont | 1..4 | (currently unsupported)
|
||||
DisplayRotate | 0..3 | Set display rotation (0=0°, 1=90°, 2=180°, 3=270°)
|
||||
DisplayText | ([])Text | Display Text. [] are an optional prefix and contains display control commands, for details see [DisplayText Command](displaytext-command) below.
|
||||
|
||||
|
||||
## DisplayMode Command
|
||||
|
||||
The display driver is able to display predefined setups of text or user defined text. To display user defined
|
||||
text using `DisplayText` command set `DisplayMode` to `0` (or also `1` for Matrix).
|
||||
|
||||
The modes 1 to 5 are predfined displaying the following content (depends on display type):
|
||||
|
||||
DisplayMode | LCD Display | OLED Display | TFT Display
|
||||
------------|----------------------|-----------------------------------|----------------------------
|
||||
0 | DisplayText | DisplayText | DisplayText
|
||||
1 | Time/Date | Time/Date | Time/Date
|
||||
2 | Local sensors | Local sensors | Local sensors
|
||||
3 | MQTT and Time/Date | Local sensors and Time/Date | Local sensors and Time/Date
|
||||
4 | Local sensors | MQTT and local sensors | MQTT and local sensors
|
||||
5 | MQTT and Time/Date | MQTT, local sensors and Time/Date | MQTT, local sensors and Time/Date
|
||||
|
||||
|
||||
## DisplayModel Command
|
||||
|
||||
Using `DisplayModel` you set the display type you have connected to your Tasmota driven device:
|
||||
|
||||
DisplayModel | Display type
|
||||
-------------|----------------------------------------------
|
||||
1 | I2C LCD Display (default addresses 0x27, 0x3F)
|
||||
2 | OLED 128x32/128x64 with SSD 1306 controller (default addresses 0x3C, 0x3D)
|
||||
3 | 8x8 Dot-Matrix
|
||||
4 | TFT LCD Display ILI9341
|
||||
5 | E-Paper Display
|
||||
|
||||
|
||||
## DisplayText Command
|
||||
|
||||
**The functionality described here is expected to be merged from [PR 3748](https://github.com/arendst/Sonoff-Tasmota/pull/3748)**
|
||||
|
||||
The `DisplayText` command is used to display text as well as graphics and graphs on LCD, OLED and ePaper
|
||||
displays attached to tasmota. The command argument is a string that is printed on the display at the current position.
|
||||
The string can be prefixed by embedded controll commands enclosed in brackets `[]`.
|
||||
|
||||
In order to use the `DisplayText` command the `DisplayMode` must be set to `0` (or optional `1` on LCD displays) or other modes must be disabled
|
||||
before compilation with `#undef USE_DISPLAY_MODES1TO5`.
|
||||
|
||||
### DisplayText Control Commands
|
||||
|
||||
In the list below _p_ stands for parameter and may be a number from 1 to n digits.
|
||||
On monochrome graphics displays things are drawn into a local frame buffer and send to the display either
|
||||
via the `d` command or automatically at the end of the command.
|
||||
|
||||
#### Positioning
|
||||
|
||||
- l _p_ = sets a character line to print at
|
||||
- c _p_ = sets a character column to print at
|
||||
- x _p_ = sets the x position for consecutive prints
|
||||
- y _p_ = sets the y position for consecutive prints
|
||||
|
||||
Text is printed at the last provided position, either l or y for the vertical position,
|
||||
and either x or x for the horizontal position. Neither x nor y are advanced/updated after printing text.
|
||||
|
||||
#### Line primitives
|
||||
|
||||
- h _p_ = draws a horizontal line with length _p_ (x is advanced)
|
||||
- v _p_ = draws a vertical line with length _p_ (y is advanced)
|
||||
- L _p_:_p_ = draws a line to _p_:_p_ (x,y are advanced)
|
||||
- k _p_ = draws a circle with radius _p_
|
||||
- K _p_ = draws a filled circle with radius _p_
|
||||
- r _p_:_p_ = draws a rectangle with _p_ with and _p_ height
|
||||
- R _p_:_p_ = draws a filled rectangle with _p_ with and _p_ height
|
||||
|
||||
#### Miscellaneous
|
||||
|
||||
- z = clear the display
|
||||
- i = (re)init the display (in e-paper mode with partial update)
|
||||
- I = (re)init the display (in e-paper mode with full update)
|
||||
- d = update the display
|
||||
- D _p_ = switch display auto updates on(_p_=1)/off(_p_=0), when off display must be updated via cmd d
|
||||
- o = switch display off
|
||||
- O = switch display on
|
||||
- t = display Tasmota time in HH:MM
|
||||
- T = display Tasmota date in DD.MM.YY
|
||||
- s _p_ = set text scaling for classic GFX font (scaling factor 1...N)
|
||||
- f _p_ = set font (1=12, 2=24,(opt 3=8)) if font==0 the classic GFX font is used
|
||||
- C _p_ = set color (0,1) for black or white (later for color displays index colors)
|
||||
|
||||
### Notes about e-paper displays
|
||||
|
||||
E-paper displays have 2 operating modes: full update and partial update.
|
||||
While full update delivers a clean and sharp picture it has the disadvantage of taking several
|
||||
seconds for the screen update and shows severe flickering during update.
|
||||
Partial update is quite fast (300 ms) with no flickering but there is the possibility that erased
|
||||
content is still slightly visible.
|
||||
To "whiten" the display it is therefore useful to perform a full update in regular intervals (e.g each hour).
|
||||
|
||||
Defines => USE_SOFTSPI, USE_DISPLAY_EPAPER29, USE_DISPLAY_EPAPER42
|
||||
|
||||
## Hardware connections:
|
||||
|
||||
I2C displays are connected in the usual manner and defined via tasmota pin selection.
|
||||
The I2C Adress must be given by `DisplayAddress XX`, e.g. 60, and the model set with `DisplayModel`
|
||||
,e.g. 2 for SSD1306.
|
||||
To permanently turn the display on set `DisplayDimmer 100`.
|
||||
Display rotation can be permanently set using `DisplayRotate X` (0-3).
|
||||
|
||||
E-paper displays are connected via 3 wire SPI (CS, SCLK, MOSI) the other 3 Interface lines of the display
|
||||
(DC, Reset, busy) may be left unconnected.
|
||||
The jumper on the circuit board of the display must be set to 3 wire SPI.
|
||||
|
||||
## Examples
|
||||
|
||||
Print Text at size 1 on line 1, column 1:
|
||||
```
|
||||
DisplayText [s1l1c1]Hello how are you?
|
||||
```
|
||||
|
||||
Draw a rectangle and draw text inside with size 2 and 7 chars padded with spaces:
|
||||
```
|
||||
DisplayText [x85y95h130v30h-130v-30s2p7x90y100]37.25 C
|
||||
```
|
||||
|
||||
Clear screen:
|
||||
```
|
||||
DisplayText [z]
|
||||
```
|
||||
|
||||
Draw rectangle from x,y with width and height:
|
||||
```
|
||||
DisplayText [x50y50r200:100]
|
||||
```
|
||||
|
||||
### Display local sensors using rules
|
||||
|
||||
Show sensor values, time and a separation line, whiten display every 60 minutes (line breaks and
|
||||
indentation added for readability):
|
||||
```
|
||||
rule1 on tele-SHT3X-0x44#Temperature do DisplayText [f1p7x0y5]%value% C endon
|
||||
on tele-SHT3X-0x44#Humidity do DisplayText [f1p10x70y5]%value% %[x0y20h296x250y5t] endon
|
||||
on tele-BMP280#Pressure do DisplayText [f1p10x140y5]%value% hPa endon
|
||||
on Time#Minute|60 do DisplayText [Tt] endon
|
||||
```
|
||||
|
||||
Show 4 analog channels (line breaks and indentation added for readability):
|
||||
```
|
||||
rule1 on tele-ADS1115#A0 do DisplayText [s1p21c1l01]Analog1: %value% adc endon
|
||||
on tele-ADS1115#A1 do DisplayText [s1p21c1l3]Analog2: %value% adc endon
|
||||
on tele-ADS1115#A2 do DisplayText [s1p21c1l5]Analog3: %value% adc endon
|
||||
on tele-ADS1115#A3 do DisplayText [s1p21c1l7]Analog4: %value% adc endon
|
||||
```
|
||||
|
||||
Show BME280 + SGP30 (line breaks and indentation added for readability):
|
||||
```
|
||||
rule1 on tele-BME280#Temperature do DisplayText [s1p21x0y0]Temp: %value% C endon
|
||||
on tele-BME280#Humidity do DisplayText [s1p21x0y10]Hum : %value% %% endon
|
||||
on BME280#Pressure do DisplayText [s1p21x0y20]Prss: %value% hPa endon
|
||||
on tele-SGP30#TVOC do DisplayText [s1p21x0y30]TVOC: %value% ppb endon
|
||||
on tele-SGP30#eCO2 do DisplayText [s1p21x0y40]eCO2: %value% ppm [s1p0x0y50]Time: [x35y50t] endon
|
||||
```
|
||||
|
||||
## Notes about display drivers:
|
||||
|
||||
Waveshare has 2 kinds of display controllers: with partial update and without partial update. The 2.9 inch driver is for partial update and should support also other waveshare partial update models with modified WIDTH and HEIGHT parameters.
|
||||
The 4.2 inch driver is a hack which makes the full update display behave like a partial update and should probably work with other full update displays.
|
||||
|
||||
The drivers are subclasses of the Adafruit GFX library.
|
||||
The class hierarchy is `LOWLEVEL :: Paint :: Renderer :: GFX`, where:
|
||||
- `GFX`: unmodified Adafruit library
|
||||
- `Renderer`: the interface for Tasmota
|
||||
- `Paint`: the modified pixel driver for e-paper
|
||||
- there are several virtual functions that can be subclassed down to `LOWLEVEL`.
|
||||
|
||||
The display dispatcher only does the class init call.
|
||||
All other calls go to the `Renderer` class.
|
||||
|
||||
In black and white displays a local ram buffer must be allocated before calling the driver.
|
||||
This must be set to zero on character or TFT color displays.
|
||||
|
||||
To use the 400x300 e-paper display the Arduino library 2.4 or later must be used because it leaves much
|
||||
more RAM available than prior versions. This display requires 15k of RAM!
|
||||
|
||||
About 28 k flash is used by these 4 drivers, the epd fonts use about 9k space, which can be if-def'd.
|
||||
|
||||
- SSD1306 = 1,15 k
|
||||
- SH1106 = 1,18 k
|
||||
- EPD42 = 2,57 k
|
||||
- EPD29 = 2,1 k
|
||||
- Display and Render class about 12 k
|
|
@ -0,0 +1,183 @@
|
|||
Display support is in active development and not all features are implemented in the release version.
|
||||
|
||||
All display commands:
|
||||
|
||||
|Command | Parameters
|
||||
|:--- | :---
|
||||
<a id="Display"> </a> Display | Show current display setting as JSON string
|
||||
<a id="DisplayAddress"> </a> DisplayAddress | `0..255` = set display module address
|
||||
<a id="DisplayDimmer"> </a> DisplayDimmer | `0` = switch the display off<BR> `1..100` = switch the display on<BR>`0..100` = set display luminosity *(only on 8x8 Dot-Matrix displays)*
|
||||
<a id="DisplayMode"> </a> DisplayMode | `0..5` = set to display [predefined content](#displaymode-parameters) according to display type
|
||||
<a id="DisplayModel"> </a> DisplayModel | Set model of your display:<BR>`1` = I2C LCD Display (default addresses `0x27`, `0x3F`)<BR>`2` = [SSD1306](https://learn.adafruit.com/monochrome-oled-breakouts/arduino-library-and-examples) OLED 128x32/128x64 (default addresses `0x3C`, `0x3D`)<BR>`3` = 8x8 Dot-Matrix<BR>`4` = [ILI9341](https://www.adafruit.com/product/1770) TFT LCD<BR>`5` = E-Paper Display
|
||||
<a id="DisplayRefresh"> </a> DisplayRefresh | `1..7` = set time in seconds to update predefined content when using `DisplayMode` ≠ `0`
|
||||
<a id="DisplaySize"> </a> DisplaySize | `1..4` = set display scale-up size (only for `DisplayModel 2` (SSD1306 OLED) and `DisplayModel 4` (ILI9341 TFT LCD))
|
||||
<a id="DisplayRotate"> </a> DisplayRotate | Set rotation angle<BR> `0` = 0°<BR> `1` = 90°<BR> `2` = 180°<BR> `3` = 270°
|
||||
<a id="DisplayText"> </a> DisplayText | `<value>` = for a full guide see [DisplayText use](displays#displaytext-use)
|
||||
<a id="DisplayCols"> </a> DisplayCols | `1..44` = set number of display columns
|
||||
<a id="DisplayRows"> </a> DisplayRows | `1..32` = set number of display rows
|
||||
<a id="DisplayFont"> </a> DisplayFont | (reserved command, currently unsupported)
|
||||
|
||||
## DisplayMode Parameters
|
||||
|
||||
The display driver is able to display predefined setups of text or user defined text. To display user defined
|
||||
text using `DisplayText` command set `DisplayMode` to `0` (or also `1` for Matrix).
|
||||
|
||||
Parameter | LCD Display | OLED Display | TFT Display
|
||||
------------ | ---------------------- | ----------------------------------- | ----------------------------
|
||||
0 | DisplayText | DisplayText | DisplayText
|
||||
1 | Time/Date | Time/Date | Time/Date
|
||||
2 | Local sensors | Local sensors | Local sensors
|
||||
3 | MQTT and Time/Date | Local sensors and Time/Date | Local sensors and Time/Date
|
||||
4 | Local sensors | MQTT and local sensors | MQTT and local sensors
|
||||
5 | MQTT and Time/Date | MQTT, local sensors and Time/Date | MQTT, local sensors and Time/Date
|
||||
|
||||
# DisplayText Use
|
||||
|
||||
**The functionality described here is expected to be merged from [PR 3748](https://github.com/arendst/Sonoff-Tasmota/pull/3748)**
|
||||
|
||||
The `DisplayText` command is used to display text as well as graphics and graphs on LCD, OLED and e-Paper
|
||||
displays. The command argument is a string that is printed on the display at the current position.
|
||||
The string can be prefixed by embedded control commands enclosed in brackets `[]`.
|
||||
|
||||
In order to use the `DisplayText` command the `DisplayMode` must be set to `0` (or optional `1` on LCD displays) or other modes must be disabled before compilation with `#undef USE_DISPLAY_MODES1TO5`.
|
||||
|
||||
## DisplayText parameters
|
||||
|
||||
In the list below `_p_` stands for parameter and may be a number from 1 to n digits.
|
||||
On monochrome graphic displays things are drawn into a local frame buffer and sent to the display either
|
||||
via the `d` command or automatically at the end of the command.
|
||||
|
||||
### Positioning
|
||||
|
||||
`l _p_` = sets a character line to print at<BR>
|
||||
`c _p_` = sets a character column to print at<BR>
|
||||
`x _p_` = sets the x position for consecutive prints<BR>
|
||||
`y _p_` = sets the y position for consecutive prints<BR>
|
||||
|
||||
Text is printed at the last provided position, either l or y for the vertical position,
|
||||
and either x or x for the horizontal position. Neither x nor y are advanced/updated after printing text.
|
||||
|
||||
### Line primitives
|
||||
|
||||
`h _p_` = draws a horizontal line with length _p_ (x is advanced)<BR>
|
||||
`v _p_` = draws a vertical line with length _p_ (y is advanced)<BR>
|
||||
`L _p_:_p_` = draws a line to _p_:_p_ (x,y are advanced)<BR>
|
||||
`k _p_` = draws a circle with radius _p_<BR>
|
||||
`K _p_` = draws a filled circle with radius _p_<BR>
|
||||
`r _p_:_p_` = draws a rectangle with _p_ with and _p_ height<BR>
|
||||
`R _p_:_p_` = draws a filled rectangle with _p_ with and _p_ height<BR>
|
||||
|
||||
### Miscellaneous
|
||||
|
||||
`z` = clear the display<BR>
|
||||
`i` = (re)init the display (in e-Paper mode with partial update)<BR>
|
||||
`I` = (re)init the display (in e-Paper mode with full update)<BR>
|
||||
`d` = update the display<BR>
|
||||
`D _p_` = switch display auto updates on(_p_=1)/off(_p_=0), when off display must be updated with `d`<BR>
|
||||
`o` = switch display off<BR>
|
||||
`O` = switch display on<BR>
|
||||
`t` = display Tasmota time in HH:MM<BR>
|
||||
`T` = display Tasmota date in DD.MM.YY<BR>
|
||||
`s _p_` = set text scaling for classic GFX font (scaling factor 1...N)<BR>
|
||||
`f _p_` = set font (1=12, 2=24,(opt 3=8)) if font==0 the classic GFX font is used<BR>
|
||||
`C _p_` = set color (0,1) for black or white (later for color displays index colors)<BR>
|
||||
|
||||
## Notes about e-Paper displays
|
||||
|
||||
E-Paper displays have 2 operating modes: full update and partial update.
|
||||
While full update delivers a clean and sharp picture it has the disadvantage of taking several seconds for the screen update and shows severe flickering during update.
|
||||
Partial update is quite fast (300 ms) with no flickering but there is the possibility that erased content is still slightly visible.
|
||||
To "whiten" the display it is therefore useful to perform a full update in regular intervals (e.g each hour).
|
||||
|
||||
Defines => USE_SOFTSPI, USE_DISPLAY_EPAPER29, USE_DISPLAY_EPAPER42
|
||||
|
||||
## Hardware connections:
|
||||
|
||||
I2C displays are connected in the usual manner and defined via Tasmota pin selection.
|
||||
The I2C Adress must be given by `DisplayAddress XX`, e.g. 60, and the model set with `DisplayModel`
|
||||
,e.g. 2 for SSD1306.
|
||||
To permanently turn the display on set `DisplayDimmer 100`.
|
||||
Display rotation can be permanently set using `DisplayRotate X` (x = `0..3`).
|
||||
|
||||
E-Paper displays are connected via 3 wire SPI (CS, SCLK, MOSI) the other 3 Interface lines of the display
|
||||
(DC, Reset, busy) may be left unconnected.
|
||||
The jumper on the circuit board of the display must be set to 3 wire SPI.
|
||||
|
||||
# Examples
|
||||
|
||||
Print Text at size 1 on line 1, column 1:
|
||||
```
|
||||
DisplayText [s1l1c1]Hello how are you?
|
||||
```
|
||||
|
||||
Draw a rectangle and draw text inside with size 2 and 7 chars padded with spaces:
|
||||
```
|
||||
DisplayText [x85y95h130v30h-130v-30s2p7x90y100]37.25 C
|
||||
```
|
||||
|
||||
Clear screen:
|
||||
```
|
||||
DisplayText [z]
|
||||
```
|
||||
|
||||
Draw rectangle from x,y with width and height:
|
||||
```
|
||||
DisplayText [x50y50r200:100]
|
||||
```
|
||||
|
||||
### Display local sensors using rules
|
||||
|
||||
Show sensor values, time and a separation line, whiten display every 60 minutes (line breaks and
|
||||
indentation added for readability):
|
||||
```
|
||||
rule1 on tele-SHT3X-0x44#Temperature do DisplayText [f1p7x0y5]%value% C endon
|
||||
on tele-SHT3X-0x44#Humidity do DisplayText [f1p10x70y5]%value% %[x0y20h296x250y5t] endon
|
||||
on tele-BMP280#Pressure do DisplayText [f1p10x140y5]%value% hPa endon
|
||||
on Time#Minute|60 do DisplayText [Tt] endon
|
||||
```
|
||||
|
||||
Show 4 analog channels (line breaks and indentation added for readability):
|
||||
```
|
||||
rule1 on tele-ADS1115#A0 do DisplayText [s1p21c1l01]Analog1: %value% adc endon
|
||||
on tele-ADS1115#A1 do DisplayText [s1p21c1l3]Analog2: %value% adc endon
|
||||
on tele-ADS1115#A2 do DisplayText [s1p21c1l5]Analog3: %value% adc endon
|
||||
on tele-ADS1115#A3 do DisplayText [s1p21c1l7]Analog4: %value% adc endon
|
||||
```
|
||||
|
||||
Show BME280 + SGP30 (line breaks and indentation added for readability):
|
||||
```
|
||||
rule1 on tele-BME280#Temperature do DisplayText [s1p21x0y0]Temp: %value% C endon
|
||||
on tele-BME280#Humidity do DisplayText [s1p21x0y10]Hum : %value% %% endon
|
||||
on BME280#Pressure do DisplayText [s1p21x0y20]Prss: %value% hPa endon
|
||||
on tele-SGP30#TVOC do DisplayText [s1p21x0y30]TVOC: %value% ppb endon
|
||||
on tele-SGP30#eCO2 do DisplayText [s1p21x0y40]eCO2: %value% ppm [s1p0x0y50]Time: [x35y50t] endon
|
||||
```
|
||||
|
||||
## Notes about display drivers:
|
||||
|
||||
Waveshare has 2 kinds of display controllers: with partial update and without partial update. The 2.9 inch driver is for partial update and should support also other Waveshare partial update models with modified WIDTH and HEIGHT parameters.
|
||||
The 4.2 inch driver is a hack which makes the full update display behave like a partial update and should probably work with other full update displays.
|
||||
|
||||
The drivers are sub classes of the Adafruit GFX library.
|
||||
The class hierarchy is `LOWLEVEL :: Paint :: Renderer :: GFX`, where:
|
||||
`GFX`: unmodified Adafruit library
|
||||
`Renderer`: the interface for Tasmota
|
||||
`Paint`: the modified pixel driver for e-paper
|
||||
- there are several virtual functions that can be subclassed down to `LOWLEVEL`.
|
||||
|
||||
The display dispatcher only does the class init call.
|
||||
All other calls go to the `Renderer` class.
|
||||
|
||||
In black and white displays a local ram buffer must be allocated before calling the driver.
|
||||
This must be set to zero on character or TFT color displays.
|
||||
|
||||
To use the 400x300 e-Paper display the Arduino library 2.4 or later must be used because it leaves much
|
||||
more RAM available than prior versions. This display requires 15k of RAM!
|
||||
|
||||
About 28 k flash is used by these 4 drivers, the epd fonts use about 9k space, which can be if-def'd.
|
||||
|
||||
- SSD1306 = 1,15 k
|
||||
- SH1106 = 1,18 k
|
||||
- EPD42 = 2,57 k
|
||||
- EPD29 = 2,1 k
|
||||
- Display and Render class about 12 k
|
Loading…
Reference in New Issue