UART/One byte on one wire/Two wires, no clock
Lesson 1 of 12 · in 3D and VR

Two wires, no clock

A UART link is three wires, TX to RX, RX to TX and ground to ground, and no clock wire at all. Both devices agreed the speed beforehand, so a link that fails is usually one of those three wires on the wrong pin, or that agreement broken.

Lonely BinaryUpdated 2026-10-014 min readNo board required

View it in VR

Lesson 1 of the UART course opens in a VR headset, on a table in front of you, and a voice starts three seconds after you arrive. Type this short address into the browser on a headset such as Meta Quest or Apple Vision Pro, and press Enter VR. No headset? Press Start the lesson: the same lesson, full screen.

learn.lonelybinary.com/vr/uart

Three wires

Two devices that talk over a UART are joined by three wires. The TX pin of each goes to the RX pin of the other, and the two grounds are joined. TX is where a device puts bytes out, and RX is where it takes them in, so the wires cross: what one end sends, the other end must receive.

Each direction has a wire of its own. That is why both devices can send at the same moment, and why neither is in charge: UART is peer to peer, with no addresses to say who may speak.

Ground is the reference

A pin's level is a voltage, and a voltage is always measured against something. The ground wire is that something, shared by both ends. It carries no data. Leave it out and the receiver has nothing to measure the other device's voltage against, and what you see is often not a clean silence but bytes that cannot be trusted.

No clock

SPI sends a clock on a wire of its own, and the receiver reads a bit on every tick. UART sends none. The ESP32 reference manual says it plainly: it is not necessary to add clocking information to the data, which requires the data rate, stop bits and parity to be identical at both ends.

So each device keeps its own time, and the two were told the same speed beforehand. That agreement is the only thing joining their clocks. Every later lesson in this course is about what that costs.

A frame is not a message

What goes down the wire is a frame, and a frame carries one byte. There is no address in it, no acknowledgement coming back and no resend. If a byte is lost, nobody is told. Anything that looks like a message, such as a line of text or a sensor reading, is made of many frames and held together by a rule of the program, not by the UART.

Where the picture bends

The cottages, switches and lamps are a drawing, and it is better to say now where it is wrong. A real beat lasts microseconds. At 9600 baud one beat is about 104 microseconds, not a fifth of a second. The switches and lamps are transistors, and the levels are 3.3 V or 5 V depending on the device. The receiver is a counter, not a person watching a lamp, and nothing on the wire carries time. The dial and markers in later lessons are this bench's drawing of what a receiver does.

The ESP32 book covers the same ground from the board's side in UART and baud rates.

Common mistakes

  • Wiring TX to TX. Both are outputs. Nothing is listening, and nothing arrives. Cross them, even when the silkscreen on one board makes it feel wrong.
  • Forgetting the common ground. The two devices share a data wire and not a reference, and the bytes that arrive, if any, cannot be trusted. Join the grounds first, then look at anything else.
  • Looking for the clock wire. There is none. If two devices disagree, the mistake is in the settings, not in a missing cable.

Edit this page — content/fundamentals/uart/two-wires-no-clock.mdx

Discuss this article

Ask about this page. The answer stays here, on the page it belongs to, for whoever hits the same wall next.

Browse Fundamentals on the forum →