UART (universal asynchronous receiver/transmitter)
UART is the oldest and simplest way for two chips to talk: a pair of wires, one sending and one receiving, shifting data out one bit at a time. The word 'asynchronous' is the key — there is no shared clock wire. Instead both sides agree in advance on a speed (the baud rate, e.g. 9600 or 115200 bits per second) and each frame is wrapped in a start bit and a stop bit so the receiver knows where a byte begins and ends. It's like two telegraph operators who've agreed to tap at the same fixed tempo: as long as both keep that rhythm, no separate ticking clock is needed.
Each byte travels as: an idle-high line drops low for one start bit, then 8 data bits (least-significant first), an optional parity bit, then a high stop bit. Mismatch the baud rate and you get garbage — the classic 'why is my serial monitor printing gibberish?' bug. UART connects only two devices point-to-point (TX→RX, RX←TX, and a shared ground), which keeps it dead simple but unscalable. It's everywhere: debug consoles, GPS modules, Bluetooth and Wi-Fi modems, and the serial monitor you stare at while debugging firmware. Add a level shifter and it becomes RS-232; add transceivers and it becomes the robust RS-485 used in industry.
UART is asynchronous (no clock line, both sides must pre-agree on baud rate), which distinguishes it from SPI and I2C — both of which carry an explicit clock wire so the receiver is told exactly when to sample each bit.