Docs: WEMOS D1 R1 (ESP8266) instead of ESP32

The reference build now uses a D1 R1. The example config targets
esp8266/d1 and sends on GPIO2 (header pin D9, UART1 TX), which leaves
UART0 free for the USB logger. The README wiring and signal-level notes
are updated to match.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
mangavalkandClaude Opus 5.5 committed 2026-11-02 18:19:24 +01:00
1 parent 592837c6de
commit ba83275d88
3 files changed
+34 -20

No files matched your search

+25 -10
View File
@@ -42,7 +42,7 @@ external_components:
uart:
id: uart_vfd
tx_pin: GPIO17
tx_pin: GPIO2 # D1 R1 pin D9 (UART1 TX on the ESP8266)
baud_rate: 9600 # match the display's jumpers (factory default: 9600, no parity)
time: # required by the component (used by samsung_vfd.printf)
@@ -54,6 +54,10 @@ samsung_vfd:
uart_id: uart_vfd
```
The `uart:` block above uses the pin from the reference build, a WEMOS D1 R1
(ESP8266); see [Hardware](#hardware). Any ESPHome board with a free TX pin
works.
For a complete device, copy [examples/samsung-vfd.yaml](examples/samsung-vfd.yaml)
into your ESPHome config folder. Add the keys from
[examples/secrets.yaml.example](examples/secrets.yaml.example) to your
@@ -65,13 +69,16 @@ The board in the photos is a 20L203DA5 (rev A). The included
[datasheet](docs/20L203DA12-datasheet.pdf) is for the 20L203DA12, a variant
with the same command set.
The reference build drives it from a WEMOS D1 R1, an UNO-sized ESP8266 board,
through a MAX3232. The [desk case](case/README.md) is made for that board.
### Connector (3-pin Molex 5046-03A)
| Pin | Signal | Connect to |
|-----|--------|------------|
| 1 | VCC | 5–24 V DC supply |
| 2 | RXD | MAX3232 T1OUT (T1IN ← ESP32 GPIO17), see below |
| 3 | GND | supply GND, MAX3232 GND **and** ESP32 GND |
| 2 | RXD | MAX3232 T1OUT (T1IN ← D1 R1 GPIO2), see below |
| 3 | GND | supply GND, MAX3232 GND **and** D1 R1 GND |
### Power
@@ -83,21 +90,21 @@ for example 12 V at 1 A, and connect the grounds together.
### Signal levels
The RXD input goes through an RS-232 receiver: it expects ±3 to ±15 V and
idles at the negative level (mark). It tolerates ±30 V, so a 3.3 V ESP32 pin
idles at the negative level (mark). It tolerates ±30 V, so a 3.3 V ESP8266 pin
can't damage it. There are two ways to connect it:
- **Through a MAX3232 (recommended, and how the original build is wired).**
Power the MAX3232 from the ESP32's 3.3 V, then wire GPIO17 → T1IN and
Power the MAX3232 from the D1's 3.3 V, then wire GPIO2 → T1IN and
T1OUT → display RXD. The MAX3232 produces real RS-232 levels and does the
inversion itself, so use the plain `tx_pin: GPIO17`.
- **Direct from the ESP32.** A plain TTL signal arrives inverted, so wire
GPIO17 straight to RXD and invert the pin in the UART config:
inversion itself, so use the plain `tx_pin: GPIO2`.
- **Direct from the ESP8266.** A plain TTL signal arrives inverted, so wire
GPIO2 straight to RXD and invert the pin in the UART config:
```yaml
uart:
id: uart_vfd
tx_pin:
number: GPIO17
number: GPIO2
inverted: true
baud_rate: 9600
```
@@ -109,6 +116,14 @@ can't damage it. There are two ways to connect it:
If the display shows garbage or nothing at all, the inversion setting is the
first thing to check: off with a MAX3232, on without one.
### Why GPIO2
The ESP8266 has two hardware UARTs. UART0 (GPIO1/GPIO3) is the USB serial
port that ESPHome's logger uses. UART1 can only transmit, and only on GPIO2,
which is all this display needs. On the D1 R1, GPIO2 is the pin labelled D9.
GPIO2 must be high at boot; the MAX3232's input doesn't pull it low, so that
is fine.
### Jumpers
The 2×8 pin header on the board selects the following. Jumpers are read only
@@ -209,7 +224,7 @@ table, character set and user characters. It sends them again after
| `samsung_vfd.set_blink` | `interval:` (templatable time): on for that long, off for that long, in 13 ms steps up to 3.3 s. `0ms` stops blinking. |
| `samsung_vfd.turn_off` / `turn_on` | Blanks the screen and brings it back without losing its contents. |
| `samsung_vfd.set_annunciator` | `column:` 1–20, or 0 for all; `state:` true/false (both templatable). Switches the triangle under that column. |
| `samsung_vfd.reinit` | Resets the display, re-applies all settings and redraws the screen. Use it when the display was power-cycled without the ESP. |
| `samsung_vfd.reinit` | Resets the display, re-applies all settings and redraws the screen. Use it when the display was power-cycled without the ESP8266. |
| `samsung_vfd.self_test` | Runs the built-in self-test (about 20 s), then restores settings and the screen. |
### Raw control