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:

PlacaSDASCL
Arduino UNOA4A5
Mega2021
ESP32GPIO21 (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ónPin
MOSI11
MISO12
SCK13
SS10

📘 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ónPin
TX1
RX0

⚠️ 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ísticaI2CSPIUART
Pines usados24+1 por dispositivo2
VelocidadMedia (~100kHz–400kHz)Alta (MHz)Media (~9600–115200)
Número de dispositivosMuchosVarios (con SS)Solo 1 por puerto
Ejemplos típicosOLED, RTC, sensoresSD, pantallas TFTGPS, 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