Comunicaciones en Arduino
1. Por qué son importantes? #
La comunicación permite que Arduino:
- Interactúe con múltiples dispositivos a la vez.
- Envíe o reciba datos desde sensores inteligentes, pantallas, memorias, otros microcontroladores, etc.
- Controle periféricos complejos sin usar muchos pines.
2. Protocolo I2C (Inter-Integrated Circuit) #
Características #
- Usa solo 2 pines:
- SDA (datos)
- SCL (reloj)
- Permite conectar múltiples dispositivos (cada uno con una dirección única).
- Lento comparado con SPI, pero ideal para sensores, RTCs, pantallas OLED, etc.
Pines por placa: #
| Placa | SDA | SCL |
|---|---|---|
| Arduino UNO | A4 | A5 |
| Mega | 20 | 21 |
| ESP32 | GPIO21 (SDA), GPIO22 (SCL) |
Ejemplo: pantalla OLED I2C #
1#include <Wire.h> // comunicación I2C 2#include <Adafruit_GFX.h> 3#include <Adafruit_SSD1306.h> 4 5Adafruit_SSD1306 oled(128, 64, &Wire, -1); // sin pin RESET 6 7void setup() { 8 oled.begin(SSD1306_SWITCHCAPVCC, 0x3C); // dirección I2C por defecto 9 oled.clearDisplay(); 10 oled.setCursor(0, 0); 11 oled.print("Pantalla I2C OK"); 12 oled.display(); 13} 14 15void loop() {}
3. Protocolo SPI (Serial Peripheral Interface) #
Características #
-
Usa 4 pines principales:
- MOSI: Datos de Arduino al dispositivo
- MISO: Datos del dispositivo a Arduino
- SCK: Señal de reloj
- SS/CS: Selección del dispositivo
-
Muy rápido (ideal para memorias, pantallas TFT, sensores de alta velocidad).
-
Cada dispositivo debe tener su propio pin
CS.
Pines SPI en Arduino UNO: #
| Función | Pin |
|---|---|
| MOSI | 11 |
| MISO | 12 |
| SCK | 13 |
| SS | 10 |
Ejemplo: Módulo de tarjeta SD (usando SPI) #
1#include <SPI.h> 2#include <SD.h> 3 4const int pinCS = 10; 5 6void setup() { 7 Serial.begin(9600); 8 9 if (!SD.begin(pinCS)) { 10 Serial.println("Fallo al inicializar SD"); 11 return; 12 } 13 14 Serial.println("Tarjeta SD lista"); 15 16 File archivo = SD.open("datos.txt", FILE_WRITE); 17 if (archivo) { 18 archivo.println("Temperatura: 23.5 C"); 19 archivo.close(); 20 } 21} 22 23void loop() {}
4. Protocolo UART (Serial) #
Características #
- Comunicación punto a punto.
- Usa 2 pines:
- TX: transmisión
- RX: recepción
- Ya usado por defecto en Arduino para comunicar con el PC.
- Muy útil para conectar módulos Bluetooth, GPS, GSM, otro Arduino, etc.
Pines en Arduino UNO: #
| Función | Pin |
|---|---|
| TX | 1 |
| RX | 0 |
⚠️ No se puede usar Serial con PC y módulo UART al mismo tiempo sin un puerto extra (como SoftwareSerial).
Ejemplo: Módulo Bluetooth HC-05 con SoftwareSerial #
1#include <SoftwareSerial.h> 2 3SoftwareSerial bt(7, 8); // RX, TX del módulo HC-05 4 5void setup() { 6 Serial.begin(9600); 7 bt.begin(9600); // velocidad por defecto del módulo 8} 9 10void loop() { 11 if (bt.available()) { 12 char c = bt.read(); 13 Serial.print("Desde Bluetooth: "); 14 Serial.println(c); 15 } 16 17 if (Serial.available()) { 18 bt.write(Serial.read()); // reenviar lo que escribas al módulo 19 } 20}
5. Qué protocolo elegir? #
| Característica | I2C | SPI | UART |
|---|---|---|---|
| Pines usados | 2 | 4+1 por dispositivo | 2 |
| Velocidad | Media (~100kHz–400kHz) | Alta (MHz) | Media (~9600–115200) |
| Número de dispositivos | Muchos | Varios (con SS) | Solo 1 por puerto |
| Ejemplos típicos | OLED, RTC, sensores | SD, pantallas TFT | GPS, Bluetooth |
6. Proyecto sugerido integrador #
"Módulo sensor + pantalla + envío Bluetooth"
- DHT22 por I2C
- Pantalla OLED por I2C
- Módulo HC-05 por UART
- Muestra datos y los envía por Bluetooth al móvil
Resumen del tema
Conceptos clave #
- Protocolo I2C (Inter-Integrated Circuit): comunicación serie sincrónica sobre 2 líneas (SDA datos, SCL reloj) que permite conectar múltiples dispositivos mediante direcciones de 7 bits (usado en OLED, RTC, MPU6050 con
Wire.h). - Protocolo SPI (Serial Peripheral Interface): bus síncrono dúplex de alta velocidad a 4 hilos (MOSI, MISO, SCK, SS/CS) ideal para transferencia intensiva de datos como tarjetas SD y pantallas TFT (
SPI.h). - Protocolo UART / Serial: enlace punto a punto asíncrono sobre 2 líneas (TX, RX); ampliable a pines digitales arbitrarios mediante la librería
SoftwareSerial.h(módulos Bluetooth HC-05, GPS, módems).
Qué debes recordar #
Usa I2C para simplificar conexiones con pocos pines entre múltiples sensores y pantallas; usa SPI cuando necesites máxima velocidad de transferencia de datos.