Serial Communication: UART
The simplest way two chips talk to each other: one wire out, one wire in, at an agreed-upon speed.
Once a project involves more than one chip, they need a way to exchange data. UART (universal asynchronous receiver/transmitter) is the simplest and oldest of the common methods, and it's the same basic scheme used by old computer serial ports and most microcontroller-to-computer debug connections today.
A UART connection uses just two data wires between two devices: TX (transmit) on one device connects to RX (receive) on the other, and vice versa — each device's TX feeds the other's RX. Data travels as a stream of individual bits, one at a time, HIGH or LOW, sent at a fixed, agreed-upon rate called the baud rate (commonly 9600 or 115200 bits per second).
The word "asynchronous" in the name is the key detail: there's no separate clock wire keeping the two devices in sync. Instead, both devices are pre-configured to expect the exact same baud rate, and each byte of data is wrapped with a start bit and stop bit that let the receiver figure out exactly when each byte begins and ends, purely by timing. If the two devices' baud rates don't match, the received data comes out as garbage — this mismatch is the most common source of UART bugs.
Because it only needs two wires and no shared clock, UART is popular for simple point-to-point links: a microcontroller talking to a computer over USB, or two boards exchanging simple commands. Its major limitation is that it's only designed for exactly two devices — for connecting many devices on the same wires, you'll want I2C or SPI, covered next.