@ -1,59 +1,123 @@
< div class = "Box" >
< h2 > Troubleshooting< / h2 >
< div class = "Box fold " >
< h2 > Tips & T roubleshooting< / h2 >
< div class = "Row v" >
< img src = "/img/adapter.jpg" class = "aside" alt = "ESPTerm v2" >
< ul >
< li > ESPTerm communicates with external µC via UART on pins < b > Rx< / b > and < b > Tx< / b > .
It can be configured in < a href = " <? = url ( 'cfg_system' ) ?> " > System Settings</ a > .
Make sure you're using the correct baud rate and other settings on the other side.
< li >< b > Communication UART (Rx, Tx)</ b > can be configured in the < a href = " <? = url ( 'cfg_system' ) ?> " > System Settings</ a > .
< li > Boot log and debug messages are available on pin < b > GPIO2< / b > (P2) at 115200\,bps, 1 stop bit, no parity.
< li > < b > Boot log and debug messages< / b > are available on pin < b > GPIO2< / b > (P2) at 115200\,baud, 1 stop bit, no parity.
Those messages may be disabled through compile flags.
< li > ESPTerm uses 3.3\,V logic. For communication with 5\,V logic (eg. Aurdino), 470\,R
protection resistors are recommended. The ESPTerm breakout board already includes those resistors.
< li > < b > Loopback test< / b > : Connect the Rx and Tx pins with a piece of wire. Anything you type in the browser should
appear on the screen. Set Parser Timeout = 0 in < a href = " <? = url ( 'cfg_term' ) ?> " > Terminal Settings</ a >
to be able to manually enter escape sequences.
< li > If the Low Voltage Detector ("LVD") LED on the ESPTerm breakout lights up, your power connections have too high
resistance or the power supply is insufficient. ESP8266 can consume in short spikes up to 500\,A and
the supply voltage on the module must not drop below about 2.7\,V. Avoid needless breadboard jumpers and too thin wires.
< li > < b > For best performance< / b > , use the module in Client mode (connected to external network) and minimize the number
of simultaneous connections. Enabling AP consumes extra RAM and strains the processor.
< li > Connect Rx and Tx with a piece of wire to verify that the terminal works correctly; you should then immediately
see what you type in the browser. < i > This won't work if your ESP8266 board has a built-in USB-serial
converter connected to those pins.< / i >
< li > In AP mode, < b > check that the WiFi channel used is clear< / b > ; interference may cause flaky connection.
A good mobile app to use for this is
< a href = "https://play.google.com/store/apps/details?id=com.farproc.wifi.analyzer" > WiFi Analyzer (Google Play)< / a > .
Adjust the hotspot strength and range using the Tx Power setting.
< li > For best performance, use the module in Client mode (connected to external network). Enabling AP mode consumes
extra RAM and cycles, since the captive portal DNS server and DHCP server are be loaded.
< li > Hold the BOOT button (GPIO0 to GND) for ~1 second to force enable AP. Hold it for ~6 seconds to restore default settings.
(This is indicated by the blue LED rapidly flashing). Default settings can be overwritten in the
< a href = " <? = url ( 'cfg_system' ) ?> " > System Settings</ a > .
< / ul >
< / div >
< / div >
< li > In AP mode, check that the channel used by ESPTerm is clear; interference may cause flaky connection. A good mobile app to use for this is < a href = "https://play.google.com/store/apps/details?id=com.farproc.wifi.analyzer" > WiFi Analyzer (Google Play)< / a >
< div class = "Box fold" >
< h2 > Escape Sequences Intro< / h2 >
< li > The terminal browser display needs WebSockets for the real-time updating to work.
It will not work with some old browsers (Android < 4.4 , IE < 10 , Opera Mini )
- see the < a href = "https://caniuse.com/websockets/embed/" > compatibility chart< / a > .
< div class = "Row v" >
< img src = "/img/vt100.jpg" class = "aside" alt = "VT102" >
< li > At most 4 clients can be connected to the AP at the same time. This is a limitation of the ESP8266 SDK.
< p > ESPTerm emulates VT102 (pictured) with some additions from later VT models and < code > xterm< / code > .
All commonly used attributes and commands are supported.
ESPTerm is capable of displaying ncurses applications such as < i > Midnight Commander< / i > using < i > agetty< / i > .< / p >
< p >
ESPTerm accepts UTF-8 characters received on the communication UART and displays them on the screen,
interpreting some codes as Control Characters. Those are e.g. Carriage Return (13), Line Feed (10), Tab (9), Backspace (8) and Bell (7).
Escape sequences start with the control character ESC (27), followed by any number of ASCII characters
forming the body of the command. On this page, we'll use < code > \e< / code > to indicate ESC.
< / p >
< p >
Escape sequences can be divided based on their first character and structure. Most common types are:
< / p >
< ul >
< li > CSI commands: < code > \e[< / code > followed by 1 optional leading character, multiple numbers divided by
semicolons, and one or two trailing characters. Those control the cursor, set attributes and manipulate screen content. E.g. < code > \e[?7;10h< / code > , < code > \e[2J< / code > < / li >
< li > SGR commands: CSI terminated by < code > m< / code > . Those set text attributes and colors. E.g. < code > \e[< / code > < / li >
< li > OSC commands: < code > \e]< / code > followed by any number of UTF-8 characters (ESPTerm supports up to 64)
terminated by < code > \e\\< / code > (ESC and backslash) or Bell (7). Those are used to exchange text strings.< / li >
< li > There are a few other commands that don't follow this pattern, such as < code > \e7< / code > or
< code > \e#8< / code > , mostly for historical reasons.< / li >
< / ul >
< p > A list of the most important escape sequences is presented in the following sections.< / p >
< / div >
< / div >
< div class = "Box" >
< h2 > Screen< / h2 >
< div class = "Box fold " >
< h2 > Screen Behavior < / h2 >
< ul >
< li > Most ANSI escape sequences are supported.
< div class = "Row v" >
< p > The initial screen size, title text and button labels can be configured in < a href = " <? = url ( 'cfg_term' ) ?> " > Terminal Settings</ a > .</ p >
< li > The initial screen size and other terminal options can be configured in
< a href = " <? = url ( 'cfg_term' ) ?> " > Terminal Settings</ a >
< p >
Screen updates are sent to the browser through a WebSocket after some time of inactivity on the communication UART
(called "Redraw Delay"). After an update is sent, at least a time of "Redraw Cooldown" must elapse before the next
update can be sent. Those delays are used is to avoid burdening the server with tiny updates during a large screen
repaint. If you experience issues (broken image due to dropped bytes), try adjusting those config options. It may also
be useful to try different baud rates.
< / p >
< / div >
< / div >
< li > Display updates are sent to the browser after 20 ms of inactivity on the communication UART.
This is to avoid hogging the server with tiny updates during large screen repaints.
< / ul >
< div class = "Box fold" >
< h2 > Text Attributes< / h2 >
< div class = "Row v" >
< p >
All text attributes are set using SGR commands like < code > \e[10;20;30m< / code > , with up to 10 numbers separated by semicolons.
To restore all attributes to their default states, use SGR 0: < code > \e[0m< / code > or < code > \e[m< / code > .
< / p >
< p > Those are the supported text attributes SGR codes:< / p >
< table >
< thead > < tr > < th > Style< / th > < th > Enable< / th > < th > Disable< / th > < / tr > < / thead >
< tbody >
< tr > < td > < b > Bold< / b > < / td > < td > 1< / td > < td > 21, 22< / td > < / tr >
< tr > < td style = "opacity:.6" > Faint< / td > < td > 2< / td > < td > 22< / td > < / tr >
< tr > < td > < i > Italic< / i > < / td > < td > 3< / td > < td > 23< / td > < / tr >
< tr > < td > < u > Underlined< / u > < / td > < td > 4< / td > < td > 24< / td > < / tr >
< tr > < td > Blink< / td > < td > 5< / td > < td > 25< / td > < / tr >
< tr > < td > < span style = "color:black;background:#ccc;" > Inverse< / span > < / td > < td > 7< / td > < td > 27< / td > < / tr >
< tr > < td > < s > Striked< / s > < / td > < td > 9< / td > < td > 29< / td > < / tr >
< tr > < td > 𝔉𝔯𝔞𝔨𝔱𝔲𝔯< / td > < td > 20< / td > < td > 23< / td > < / tr >
< / tbody >
< / table >
< / div >
< / div >
< div class = "Box theme-0" >
< h2 > Color Reference< / h2 >
< div class = "Box fold theme-0" >
< h2 > Colors < / h2 >
< p > Color is set using < code > \e[< c> m< / code > where < code > < c> < / code > are numbers separated by semicolons
(and < code > \e< / code > is ESC, code 27). The actual color representation depends on a color theme which
< div class = "Row v" >
< p > Colors are set using SGR commands (like < code > \e[10;20;30m< / code > ). The following tables list the SGR codes to use.
Selected colors are used for any new text entered, as well as for empty space when using line and screen clearing commands.
The configured default colors can be restored using SGR 39 for foreground and SGR 49 for background.< / p >
< p > The actual color representation depends on a color theme which
can be selected in < a href = " <? = url ( 'cfg_term' ) ?> " > Terminal Settings</ a > .</ p >
< b > Foreground< / b >
< h3 > Foreground colors < / h3 >
< div class = "colorprev" >
< span class = "bg7 fg0" > 30< / span >
@ -77,7 +141,7 @@
< span class = "bg0 fg15" > 97< / span >
< / div >
< b > Background< / b >
< h3 > Background colors < / h3 >
< div class = "colorprev" >
< span class = "bg0 fg15" > 40< / span >
@ -100,262 +164,435 @@
< span class = "bg14 fg0" > 106< / span >
< span class = "bg15 fg0" > 107< / span >
< / div >
< p > To make the text bold, use the "bold" attribute (eg. < code > \e[31;40;1m< / code > for
< span style = "padding: 2px;" class = "bg0 fg1 bold" > bold red on black< / span > ).< / p >
< p > The colors are reset to default using < code > \e[0m< / code > . For more info, see the tables below.< / p >
< / div >
< / div >
< div class = "Box" >
< div class = "Box fold" >
< h2 > User Input< / h2 >
< p >
All the user types on their keyboard is sent as-is to the UART, including ESC, ANSI sequences for arrow keys and CR-LF for Enter.
< / p >
< p > The buttons under the screen send ASCII codes 1, 2, 3, 4, 5. This choice was made to make their parsing as simple as possible.< / p >
< div class = "Row v" >
< h3 > Keyboard< / h3 >
< p >
Mouse input (click/tap) is sent as < code > \e[< y> ;< x> M< / code > . You can use this for virtual on-screen buttons.
The user can input text using their keyboard, or on Android, using the on-screen keyboard which is open using
a button beneath the screen. Supported are all printable characters, as well as many control keys, such as arrows, Ctrl+letters
and function keys. Sequences sent by function keys are based on VT102 and xterm. Here are some examples:
< / p >
< / div >
< div class = "Box" >
< h2 > Supported ANSI Escape Sequences< / h2 >
< p > Sequences are started by ASCII code 27 (ESC, < code > \e< / code > , < code > \x1b< / code > , < code > \033< / code > )< / p >
< p > Instead of < code > \a< / code > (BELL, ASCII 7) in the commands, you can use `\e\` (ESC + backslash). It's the Text Separator code.< / p >
< h3 > Text Attributes< / h3 >
< p >
All text attributes are set using < code > \e[...m< / code > where the dots are numbers separated by semicolons.
You can combine up to 3 attributes in a single command.
< / p >
< table class = "ansiref" >
< thead >
< table >
< thead > < tr > < th > Key< / th > < th > Code< / th > < th > Key< / th > < th > Code< / th > < / tr > < / thead >
< tr >
< th > Attribute< / th >
< th > Meaning< / th >
< td > 🡑< / td >
< td > < code > \e[A< / code > < / td >
< td > F1< / td >
< td > < code > \eOP< / code > < / td >
< / tr >
< / thead >
< tbody >
< tr >
< td > 0< / td >
< td > Reset text attributes to default< / td >
< td > 🡓< / td >
< td > < code > \e[B< / code > < / td >
< td > F2< / td >
< td > < code > \eOQ< / code > < / td >
< / tr >
< tr >
< td > 1< / td >
< td > Bold< / td >
< td > 🡒< / td >
< td > < code > \e[C< / code > < / td >
< td > F3< / td >
< td > < code > \eOR< / code > < / td >
< / tr >
< tr >
< td > 21 or 22< / td >
< td > Bold off< / td >
< td > 🡐< / td >
< td > < code > \e[D< / code > < / td >
< td > F4< / td >
< td > < code > \eOS< / code > < / td >
< / tr >
< tr >
< td > 7< / td >
< td > Inverse (fg/bg swap when printing)< / td >
< td > Home< / td >
< td > < code > \eOH< / code > < / td >
< td > F5< / td >
< td > < code > \e[15~< / code > < / td >
< / tr >
< tr >
< td > 27< / td >
< td > Inverse OFF< / td >
< td > End< / td >
< td > < code > \eOF< / code > < / td >
< td > F6< / td >
< td > < code > \e[17~< / code > < / td >
< / tr >
< tr >
< td > 30-37, 90-97< / td >
< td > Foreground color, normal and bright< / td >
< td > Insert< / td >
< td > < code > \e[2~< / code > < / td >
< td > F7< / td >
< td > < code > \e[18~< / code > < / td >
< / tr >
< tr >
< td > 40-47, 100-107< / td >
< td > Background color, normal and bright< / td >
< td > Delete< / td >
< td > < code > \e[3~< / code > < / td >
< td > F8< / td >
< td > < code > \e[19~< / code > < / td >
< / tr >
< tr >
< td > Page Up< / td >
< td > < code > \e[5~< / code > < / td >
< td > F9< / td >
< td > < code > \e[20~< / code > < / td >
< / tr >
< tr >
< td > Page Down< / td >
< td > < code > \e[6~< / code > < / td >
< td > F10< / td >
< td > < code > \e[21~< / code > < / td >
< / tr >
< tr >
< td > Enter< / td >
< td > < code > CR (13)< / code > < / td >
< td > F11< / td >
< td > < code > \e[23~< / code > < / td >
< / tr >
< tr >
< td > Ctrl+Enter< / td >
< td > < code > LF (10)< / code > < / td >
< td > F12< / td >
< td > < code > \e[24~< / code > < / td >
< / tr >
< tr >
< td > Tab< / td >
< td > < code > TAB (9)< / code > < / td >
< td > ESC< / td >
< td > < code > ESC (27)< / code > < / td >
< / tr >
< tr >
< td > Backspace< / td >
< td > < code > BS (8)< / code > < / td >
< td > Ctrl+A..Z< / td >
< td > < code > ASCII 1-26< / code > < / td >
< / tr >
< / tbody >
< / table >
< h3 > Cursor< / h3 >
< h3 > Action buttons< / h3 >
< p >
The blue buttons under the screen send ASCII codes 1, 2, 3, 4, 5, which incidentally correspond to Ctrl+A,B,C,D,E.
This choice was made to make button press parsing as simple as possible.
< / p >
< h3 > Mouse< / h3 >
< p >
ESPTerm in the current version does not implement standard mouse input. Instead, clicks/taps produce CSI sequences
< code > \e[< i > r< / i > ;< i > c< / i > M< / code > (row, column). You can use this for virtual on-screen buttons.
< / p >
< / div >
< / div >
< div class = "Box fold" >
< h2 > Cursor Commands< / h2 >
< div class = "Row v" >
< p >
The coordinates are 1-based, origin is top left. The cursor can move within the entire screen,
or in the active Scrolling Region if Origin Mode is enabled.
< / p >
< p > Movement commands scroll the screen if needed. The coordinates are 1-based, origin top left.< / p >
< p > After writing a character, the cursor advances to the right. If it has reached the end of the row,
it stays on the same line, but writing the next character makes it jump to the start of the next
line first, scrolling up if needed. If Auto-wrap mode is disabled, the cursor never wraps or scrolls
the screen.
< / p >
< p >
< b > Legend:< / b >
Italic letters such as < i > n< / i > are ASCII numbers that serve as arguments, separated with a semicolon.
If an argument is left out, it's treated as 0 or 1, depending on what makes sense for the command.
< / p >
< h3 > Movement< / h3 >
< table class = "ansiref w100" >
< thead >
< thead > < tr > < th > Code< / th > < th > Meaning< / th > < / tr > < / thead >
< tbody >
< tr >
< th > Code< / th >
< th > Params< / th >
< th > Meaning< / th >
< td >
\e[< i > n< / i > A< br >
\e[< i > n< / i > B< br >
\e[< i > n< / i > C< br >
\e[< i > n< / i > D
< / td >
< td > Move cursor up (A), down (B), right (C), left (D)< / td >
< / tr >
< / thead >
< tbody >
< tr >
< td > \e[< n> A< / td >
< td > [count]< / td >
< td > Move cursor up< / td >
< td >
\e[< i > n< / i > F< br >
\e[< i > n< / i > E
< / td >
< td > Go < i > n< / i > lines up (F) or down (E), start of line< / td >
< / tr >
< tr >
< td > \e[< n> B< / td >
< td > [count]< / td >
< td > Move cursor down< / td >
< td >
\e[< i > r< / i > d< br >
\e[< i > c< / i > G< br >
\e[< i > r< / i > ;< i > c< / i > H
< / td >
< td >
Go to absolute position - row (d), column (G), or both (H). Use < code > \e[H< / code > to go to 1,1.
< / td >
< / tr >
< tr >
< td > \e[< n> C< / td >
< td > [count]< / td >
< td > Move cursor forward (right)< / td >
< td > \e[6n< / td >
< td > Query cursor position. Sent back as < code > \e[< i > r< / i > ;< i > c< / i > R< / code > .< / td >
< / tr >
< / tbody >
< / table >
< h3 > Save / restore< / h3 >
< table class = "ansiref w100" >
< thead > < tr > < th > Code< / th > < th > Meaning< / th > < / tr > < / thead >
< tbody >
< tr >
< td > \e[< n> D< / td >
< td > [count]< / td >
< td > Move cursor backward (left)< / td >
< td > \e[s< br > \e[u< / td >
< td > Save (s) or restore (u) cursor position< / td >
< / tr >
< tr >
< td > \e[< n> E< / td >
< td > [count]< / td >
< td > Go N lines down, start of line< / td >
< td > \e7< br > \e8< / td >
< td > Save (7) or restore (8) cursor position and attributes< / td >
< / tr >
< / tbody >
< / table >
< h3 > Scrolling Region< / h3 >
< table class = "ansiref w100" >
< thead > < tr > < th > Code< / th > < th > Meaning< / th > < / tr > < / thead >
< tbody >
< tr >
< td > \e[< n> F< / td >
< td > [count]< / td >
< td > Go N lines up, start of line< / td >
< td > \e[< i > a< / i > ;< i > b< / i > r< / td >
< td > Set scrolling region to rows < i > a< / i > through < i > b< / i > and go to 1,1. By default, the
scrolling region spans the entire screen height. The cursor can leave the region using
absolute position commands, unless Origin Mode (see below) is active.< / td >
< / tr >
< tr >
< td > \e[< n> G< / td >
< td > column< / td >
< td > Go to column< / td >
< td > \e[?6h< br > \e[?6l < / td >
< td > Enable (h) or disable (l) Origin Mode and go to 1,1. In Origin Mode, all coordinates
are relative to the Scrolling Region and the cursor can't leave the region. < / td >
< / tr >
< tr >
< td > \e[< y> ;< x> G< / td >
< td > [row=1];[col=1]< / td >
< td > Go to row and column< / td >
< td >
\e[< i > n< / i > S< br >
\e[< i > n< / i > T
< / td >
< td > Move contents of the Scrolling Region up (S) or down (T), pad with empty lines of the current background color.< / td >
< / tr >
< / tbody >
< / table >
< h3 > Tab stops< / h3 >
< table class = "ansiref w100" >
< thead > < tr > < th > Code< / th > < th > Meaning< / th > < / tr > < / thead >
< tbody >
< tr >
< td > \e[6n< / td >
< td > --< / td >
< td > Query cursor position. Position is sent back as < code > \e[?;?R< / code > with row;column.< / td >
< td > \eH< / td >
< td > Set tab stop at the current column. There are, by default, tabs every 8 columns.< / td >
< / tr >
< tr >
< td > \e[s< / td >
< td > --< / td >
< td > Store position< / td >
< td >
\e[< i > n< / i > I< br >
\e[< i > n< / i > Z
< / td >
< td > Advance (I) or go back (Z) < i > n< / i > tab stops or end/start of line. ASCII TAB (9) is equivalent to < code > \e[1I< / code > < / td >
< / tr >
< tr >
< td > \e[u< / td >
< td > --< / td >
< td > Restore position< / td >
< td >
\e[0g< br >
\e[3g< br >
< / td >
< td > Clear tab stop at the current column (0), or all columns (3).< / td >
< / tr >
< / tbody >
< / table >
< h3 > Other options< / h3 >
< table class = "ansiref w100" >
< thead > < tr > < th > Code< / th > < th > Meaning< / th > < / tr > < / thead >
< tbody >
< tr >
< td > \e7< / td >
< td > --< / td >
< td > Store position & attributes< / td >
< td > \e[?7h< br > \e[?7l< / td >
< td > Enable (h) or disable (l) cursor auto-wrap and screen auto-scroll< / td >
< / tr >
< tr >
< td > \e8< / td >
< td > --< / td >
< td > Restore position & attributes< / td >
< td > \e[?25h< br > \e[?25l< / td >
< td > Show (h) or hide (l) the cursor< / td >
< / tr >
< / tbody >
< / table >
< / div >
< / div >
< div class = "Box fold" >
< h2 > Screen Content Manipulation< / h2 >
< div class = "Row v" >
< p >
< b > Legend:< / b >
Italic letters such as < i > n< / i > are ASCII numbers that serve as arguments, separated with a semicolon.
If an argument is left out, it's treated as 0 or 1, depending on what makes sense for the command.
< / p >
< table class = "ansiref w100" >
< thead > < tr > < th > Code< / th > < th > Meaning< / th > < / tr > < / thead >
< tbody >
< tr >
< td > \e[?25l< / td >
< td > --< / td >
< td > Hide cursor< / td >
< td > \e[< i > m< / i > J< / td >
< td > Clear part of screen. < i > m< / i > : 0 - from cursor, 1 - to cursor, 2 - all< / td >
< / tr >
< tr >
< td > \e[?25h< / td >
< td > --< / td >
< td > Show cursor< / td >
< td > \e[< i > m< / i > K< / td >
< td > Erase part of line. < i > m< / i > : 0 - from cursor, 1 - to cursor, 2 - all< / td >
< / tr >
< tr >
< td > \e[?7l< / td >
< td > --< / td >
< td > Disable cursor auto-wrap & auto-scroll at end of screen< / td >
< td >
\e[< i > n< / i > X
< / td >
< td > Erase < i > n< / i > characters in line.< / td >
< / tr >
< tr >
< td > \e[?7h< / td >
< td > --< / td >
< td > Enable cursor auto-wrap & auto-scroll at end of screen< / td >
< td >
\e[< i > n< / i > L< br >
\e[< i > n< / i > M
< / td >
< td > Insert (L) or delete (M) < i > n< / i > lines. Following lines are pulled up or pushed down.< / td >
< / tr >
< tr >
< td >
\e[< i > n< / i > @< br >
\e[< i > nP
< / td >
< td > Insert (@) or delete (P) < i > n< / i > characters. The rest of the line is pulled left or pushed right.
Characters going past the end of line are lost.< / td >
< / tr >
< / tbody >
< / table >
< / div >
< / div >
< div class = "Box fold" >
< h2 > Alternate Character Sets< / h2 >
< div class = "Row v" >
< p >
ESPTerm implements Alternate Character Sets as a way to print box drawing characters
and special symbols. A character set can change what each received ASCII character
is printed as on the screen (eg. "{" is "π" in codepage 0). The implementation is based
on the original VT devices.
Since ESPTerm also fully supports UTF-8, you can probably ignore this feature and use
Unicode directly. It's added for compatibility with some programs that use this.
< / p >
< p > The following codepages are implemented:< / p >
< h3 > Screen< / h3 >
< ul >
< li > B - US ASCII (default)< / li >
< li > A - UK ASCII: # replaced with £< / li >
< li > 0 - Symbols and basic line drawing (standard DEC alternate character set)< / li >
< li > 1 - Symbols and advanced line drawing (based on DOS codepage 437)< / li >
< / ul >
< p > To see what character maps to which symbol, look in the source code or try it. All codepages use codes 32-127, 32 being space.< / p >
< p >
There are two character set slots, G0 and G1.
Those slots are selected as active using ASCII codes Shift In and Shift Out (those originally served for shifting
a red-black typewriter tape). Each slot (G0 and G1) can have a different codepage assigned. G0 and G1 and the active slot number are
saved and restored with the cursor and cleared with a screen reset (< code > \ec< / code > ).
< / p >
< p > The following commands are used:< / p >
< table class = "ansiref w100" >
< thead >
< thead > < tr > < th > Code< / th > < th > Meaning< / th > < / tr > < / thead >
< tbody >
< tr >
< th > Code< / th >
< th > Params< / th >
< th > Meaning< / th >
< td > \e(< i > x< / i > < / td >
< td > Set G0 = codepage < i > x< / i > < / td >
< / tr >
< / thead >
< tbody >
< tr >
< td > \e[< m> J< / td >
< td > [mode=0]< / td >
< td > Clear screen. Mode: 0 - from cursor, 1 - to cursor, 2 - all< / td >
< td > \e)< i > x< / i > < / td >
< td > Set G1 = codepage < i > x< / i > < / td >
< / tr >
< tr >
< td > \e[< m> K< / td >
< td > [mode=0]< / td >
< td > Erase line. Mode: 0 - from cursor, 1 - to cursor, 2 - all< / td >
< td > SO (14)< / td >
< td > Activate G0< / td >
< / tr >
< tr >
< td > \e[< n> S< / td >
< td > [lines]< / td >
< td > Scroll screen content up, add empty line at the bottom< / td >
< td > SI (15)< / td >
< td > Activate G1< / td >
< / tr >
< / table >
< / div >
< / div >
< div class = "Box fold" >
< h2 > Title and Button Labels< / h2 >
< div class = "Row v" >
< p >
It's possible to dynamically change the screen title text and action button labels.
Setting an empty label to a button makes it look disabled. The buttons send ASCII 1-5 when clicked.
Those changes are not retained after restart.
< / p >
< table class = "ansiref w100" >
< thead > < tr > < th > Code< / th > < th > Meaning< / th > < / tr > < / thead >
< tbody >
< tr >
< td > \e[< n> T< / td >
< td > [lines]< / td >
< td > Scroll screen content down, add empty line at the top< / td >
< td > \e]0;< i > title< / i > \a< / td >
< td > Set screen title (this is a standard OSC command)< / td >
< / tr >
< tr >
< td > \e]W< r> ;< c> \a< / td >
< td > rows;cols< / td >
< td > Set screen size (max ~ 80x30). This also clears the screen. This is a custom ESPTerm OSC command.< / td >
< td >
\e]< i > 81< / i > ;< i > btn1< / i > \a< br >
\e]< i > 82< / i > ;< i > btn2< / i > \a< br >
\e]< i > 83< / i > ;< i > btn3< / i > \a< br >
\e]< i > 84< / i > ;< i > btn4< / i > \a< br >
\e]< i > 85< / i > ;< i > btn5< / i > \a< br >
< / td >
< td > Set button 1-5 label - eg. < code > \e]81;Yes\a< / code >
sets the first button text to "Yes".< / td >
< / tr >
< / tbody >
< / table >
< / div >
< / div >
< h3 > System Commands< / h3 >
< div class = "Box fold" >
< h2 > System Commands< / h2 >
< div class = "Row v" >
< table class = "ansiref w100" >
< thead >
< tr >
< th > Code< / th >
< th > Params< / th >
< th > Meaning< / th >
< / tr >
< / thead >
< thead > < tr > < th > Code< / th > < th > Meaning< / th > < / tr > < / thead >
< tbody >
< tr >
< td > \ec< / td >
< td > --< / td >
< td >
"Device Reset" - clear screen, reset attributes, show cursor & move it to 1,1 .
The screen size and WiFi settings stay unchanged.
Clear screen, reset attributes and cursor.
The screen size, title and button labels remain unchanged.
< / td >
< / tr >
< tr >
< td > \e[5n< / td >
< td > --< / td >
< td > Query device status, replies with < code > \e[0n< / code > "device is OK". Can be used to check if the UART works.< / td >
< / tr >
< tr >
< td > \e]TITLE=…\a< / td >
< td > Title text< / td >
< td > Set terminal title. This is a custom ESPTerm OSC command.< / td >
< / tr >
< tr >
< td > \e]BTNn=…\a< / td >
< td > 1-5, label< / td >
< td > Set button label. This is a custom ESPTerm OSC command.< / td >
< td >
Query device status, ESPTerm replies with < code > \e[0n< / code > "device is OK".
Can be used to check if the terminal has booted up and is ready to receive commands.< / td >
< / tr >
< tr >
< td > ASCII 24 (18h )< / td >
< td > < / td >
< td > This symbol is sent by ESPTerm when it becomes ready to receive commands. It can be used to wait before it becomes
ready on power-up, or to detect a spontaneous ESPTerm restart - that could happen due to RAM exhaustion due
to a memory leak, or perhaps a power outage .
< td > CAN (24)< / td >
< td >
This ASCII code is not a command, but is sent by ESPTerm when it becomes ready to receive commands.
When this code is received on the UART, it means ESPTerm has restarted and is ready. Use this to detect
spontaneous restarts which require a full screen repaint.
< / td >
< / tr >
< / tbody >
< / table >
< / div >
< / div >