Arduino Seriële Communicatie: UART Basis & Troubleshooting
Arduino Serial: Seriële Communicatie met Arduino
Achtergrond: Van Parallel naar Serieel
Microcontrollers communiceren oorspronkelijk via parallelle communicatie (8 datalijnen + besturing) – duur, ruisgevoelig over lange afstanden, veel pinnen. De oplossing: seriële communicatie – data bit voor bit over 2 draden (TX, RX) (+ gemeenschappelijke GND).
Serieel Protocol: UART / RS-232
- Asynchroon (meest gebruikt): Geen kloklijn. Start/stop bits synchroniseren. Byte-voor-byte.
- Synchroon: Met kloklijn (bijv. SPI, I2C). Blokken data.
Communicatiemodi
| Modus | Beschrijving |
|---|---|
| Simplex | Alleen zenden OF ontvangen |
| Half-duplex | Zenden OF ontvangen, niet tegelijk (bijv. RS-485) |
| Vol-duplex | Tegelijk zenden en ontvangen (standaard UART) |
Framing (RS-232 / UART)
1 byte data (8 bits) wordt ingepakt in een frame:
[Start bit (0)] + [8 Data bits LSB first] + [Parity bit (optioneel)] + [Stop bit(s) (1)]
Standaard: 8N1 = 8 data bits, Geen pariteit, 1 stop bit.
Spanningsniveaus: TTL vs RS-232
- TTL (Arduino logica): 0V = Logisch 0, 5V (of 3,3V) = Logisch 1.
- RS-232 (PC seriële poort, legacy): -3V tot -25V = Logisch 1, +3V tot +25V = Logisch 0 (geïnverteerd!).
- Conversie: MAX232 IC (of moderne USB-naar-TTL converters zoals CP2102, CH340, FTDI) voor PC-koppeling. Arduino heeft USB-naar-serieel converter on-board (ATmega16U2 / CH340).
Programmeren: Belangrijkste Serial Functies
| Functie | Doel | Voorbeeld |
|---|---|---|
Serial.begin(baud) | Initialiseer seriële poort (in setup()) | Serial.begin(9600); |
Serial.available() | Retourneert bytes in ontvangstbuffer (0 = leeg) | if (Serial.available() > 0) { ... } |
Serial.read() | Leest 1 byte uit buffer (retourneert int, -1 als leeg) | char c = Serial.read(); |
Serial.readString() | Leest string tot timeout | String s = Serial.readString(); |
Serial.parseInt() | Parseert integer uit stream | int val = Serial.parseInt(); |
Serial.print(val) | Zendt data (geen newline) | Serial.print("Temp: "); |
Serial.println(val) | Zendt data met newline | Serial.println(temp); |
Serial.write(byte) | Zendt raw byte(s) | Serial.write(0x55); |
Serial.flush() | Wacht tot verzendbuffer leeg is (niet ontvangstbuffer!) | Serial.flush(); |
Voorbeeld: Echo met Verwerking
void setup() {
Serial.begin(9600);
Serial.println("Arduino Serial Demo - Typ iets...");
}
void loop() {
if (Serial.available() > 0) {
char incoming = Serial.read();
// Echo met verwerking
if (incoming >= 'a' && incoming <= 'z') {
incoming = incoming - 'a' + 'A'; // Naar hoofdletters
}
Serial.print("Ontvangen: ");
Serial.println(incoming);
}
}
Veelgemaakte Fouten & Troubleshooting
- Verkeerde baudrate: Zender en ontvanger moeten identieke baudrate hebben (standaard 9600, 115200, etc.).
- TX/RX omgedraaid: Arduino TX → Module RX, Arduino RX → Module TX.
- Geen gemeenschappelijke GND: Altijd GND's verbinden tussen apparaten!
- Spanningsniveau mismatch: 5V Arduino ↔ 3,3V module → level shifter of voltage divider nodig.
Serial.flush()wacht op verzenden, leegt niet de ontvangstbuffer (gebruikwhile(Serial.available()) Serial.read();).- String-klasse kan geheugenfragmentatie veroorzaken. Voor embedded: liever
chararrays /Serial.parseInt().
Meerdere Seriële Poorten
- UNO/Nano: 1 hardware UART (pins 0/1) + SoftwareSerial bibliotheek (op elke pin, beperkt tot ~9600 baud, geen interrupts tijdens rx).
- Mega: 4 hardware UARTs (Serial, Serial1, Serial2, Serial3).
- ESP32/ESP8266: 3 hardware UARTs, matrix-gerouteerd naar elke GPIO.
Industriële technologie
- Naadloze Arduino‑Raspberry Pi 2 I2C-integratie voor IoT-sensorprojecten
- Arduino Draadloze Magnetische Dataoverdracht met Infineon 3D-Sensor
- Communicatie voor doofblinden vergemakkelijken met 1Sheeld en Arduino
- Arduino temperatuur- en vochtigheidslogger met DHT11 en Ethernet Shield
- Arduino UNO & WiFi Shield: Realtime Temperatuurweergave op het Web via Serieel
- Datastroom begrijpen: van simplex naar full-duplex communicatie
- Optische data communicatie: licht benutten voor hoge-bandbreedte, storingvrije transmissie
- Netwerkprotocollen begrijpen: van fysieke laag tot geavanceerde arbitrage
- Microprocessoren: de evolutie van stored-program computing
- MQTT vs. DDS: De Juiste M2M Protocol Kiezen voor IoT
- Industrial IoT Communicatie: 6 Bewezen Infrastructuurprotocollen