Saltar al contenido principal

Comunicación: UART, I2C y SPI

Los sensores sencillos dan una tensión o un HIGH/LOW. Los más avanzados (una IMU, un LiDAR, una pantalla) envían datos en forma de bytes. Para eso usan un protocolo de comunicación: unas reglas comunes para hablar por unos pocos cables.

UART (puerto serie)​

Dos cables cruzados: lo que uno transmite (TX) llega a lo que el otro recibe (RX).

Arduino TX ──→ RX dispositivo
Arduino RX ←── TX dispositivo
GND ─── GND
  • Comunica dos dispositivos
  • Ambos deben usar la misma velocidad (baud rate), por ejemplo 9600 o 115200
  • Es lo que usa el Monitor Serie del Arduino IDE a través del USB
Serial.begin(9600);
Serial.println("Hola");

Un ejemplo real: el LiDAR del Rover envía sus medidas por UART, a través de un adaptador USB.

I2C​

Dos cables compartidos por muchos dispositivos a la vez:

  • SDA: los datos
  • SCL: el reloj que marca el ritmo
Bus I2C con un Arduino y tres dispositivos conectados a SDA y SCL

Cada dispositivo tiene una dirección (un número como 0x68) y solo responde cuando le llaman por ella. En el UNO, SDA es A4 y SCL es A5 (también están duplicados junto al pin AREF).

#include <Wire.h>

void setup() {
Wire.begin(); // el Arduino controla el bus
}

Lo usarás con la IMU MPU6050.

tip

¿No sabes qué dirección tiene un módulo? Un escáner I2C recorre el bus y te muestra las direcciones que responden. Tienes uno listo en la guía de la IMU.

SPI​

Cuatro cables y mucha velocidad. Se usa con tarjetas SD, pantallas y algunos sensores rápidos.

SeñalFunciónPin UNO
MOSIdatos del Arduino al dispositivo11
MISOdatos del dispositivo al Arduino12
SCKreloj13
CSelige con qué dispositivo se hablacualquiera (normalmente 10)

Cuál es cuál​

UARTI2CSPI
Cables2 (+ GND)2 (+ GND)4 (+ GND)
Dispositivos2hasta ~100varios, un CS por cada uno
Velocidadmediamediaalta
EjemploGPS, LiDARIMU, pantallas OLEDtarjeta SD

En la práctica, la librería de cada módulo se encarga del protocolo. Lo que te toca a ti es conectar bien los cables, y para eso basta con saber cuál usa.