Curso C para Arduino
📦 ¿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.
1️⃣ 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() {}
2️⃣ 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() {}
3️⃣ 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}
🧠 ¿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 |
🧪 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