UART vs SPI vs I2C
RX
RX
TX
TX
VCC
GND
GND
VCC
ESP8266
SENZOR
RX
RX
TX
TX
VCC
GND
GND
VCC
ESP8266
SENZOR
Dátove vodiče RX a TX sa vždy zapájajú do kríža
RX
RX
TX
TX
VCC
GND
GND
VCC
ESP8266
SENZOR
RX
TX
GND
VCC
DISPLEJ
Zapojenie dvoch UART zariadení
RX1
RX
TX
TX1
VCC
GND
GND
VCC
ESP8266
SENZOR
RX
TX
GND
VCC
DISPLEJ
Zapojenie dvoch UART zariadení vyžaduje 2 samostatné porty
UART1
UART2
RX2
TX2
Čo ak nemáme dostatok
UART pinov?
SPI
Serial Peripheral Interface
RX
RX
TX
TX
VCC
GND
GND
VCC
ESP8266
SENZOR
MOSI
MISO
MOSI
MISO
MISO - Master Input Slave Output
MOSI - Master Output Slave Input
MISO
MISO
MOSI
MOSI
VCC
GND
GND
VCC
ESP8266
SENZOR
MASTER
SLAVE 1
SENZOR
SLAVE 2
MISO
MOSI
GND
VCC
SCLCK
SS
SS1
SCLCK
SCLCK
SS
SS2
SSn
SPI
...
SPI
MOSI - Dáta posielané master zariadenim (ESP8266)
MISO - Dáta posielané slave zariadenim (senzor)
SCLCK - Source clock - hodinový signál, slúži na synchronizáciu zariadeni
CS/SS - Slave Select, ide o negovaný signál pomocou ktorého master určuje s ktorým slavom bude komunikovať
Čo ak nemáme dostatok
UART pinov?
SPI
I2C
Inter Integrated Circuit
SCK
SCK
SDA
SDA
VCC
GND
GND
VCC
ESP8266
SENZOR
I2C
SCK - Serial Clock
SDA - Serial Data
MASTER
SLAVE
pull-up
Pull-up rezistor zabezpečuje log 1 na linke. Master/slave generujú log 0
SCK
SCK
SDA
SDA
VCC
GND
GND
VCC
ESP8266
SENZOR
MASTER
SLAVE 1
SENZOR
SLAVE 2
SCK
SDA
GND
VCC
I2C
max 128
slave zariadení
max 128
slave zariadení
Unikátna adresa
UART | SPI | I2C | |
---|---|---|---|
Počet vodičov | 3 | 3+n | 3 |
Počet slave zariadení | 1 | n | 128 |
Rýchlosť | 14 kbit/s 1 mbit/s |
8 mbit/s 24 mbit/s |
100 kbit/s 400 kbit/s 1 mbit/s 3,2 mbit/s |
Vzdialenosť | 100m | 5m | 2m |
Použitie | uC <> uC uC <> PC HMI, LoRa, GSM, GPS... |
SD karty, displeje, akcelerometre a iné rýchlo meniace sa senzory |
EEPROM, A/D, D/A prevodníky, multiplexery, pomalé senzory |
UART
I2C
PWM
SPI
Teplomer
RFID čítačka
Servo
Displej
WiFi
MQTT
SPI.begin();
writeRegister(address, data);
readRegister(address, number_of_bytes);
SPI.begin();
pinMode(chipSelectPin, OUTPUT);
//Configure SCP1000 for low noise configuration:
writeRegister(0x02, 0x2D);
writeRegister(0x01, 0x03);
writeRegister(0x03, 0x02);
// give the sensor time to set up:
delay(100);
//Select High Resolution Mode
writeRegister(0x03, 0x0A);
int tempData = readRegister(0x21, 2);
// convert the temperature to celsius and display it:
float realTemp = (float)tempData / 20.0;
//Read the pressure data highest 3 bits:
byte pressure_data_high = readRegister(0x1F, 1);
pressure_data_high &= 0b00000111;
//Read the pressure data lower 16 bits:
unsigned int pressure_data_low = readRegister(0x20, 2);
//combine the two parts into one 19-bit number:
long pressure = ((pressure_data_high << 16) | pressure_data_low) / 4;
SPI.begin();
writeRegister(address, data);
readRegister(address, number_of_bytes);
Libraries
#include <SPI.h>
#include <BME280.h>
#define BME_CS 3;
BME280 bme(BME_CS);
bme.begin();
double pressure = bme.readPressure();
Serial.println(pressure);
Čo by ste si mali zapamätať
- UART = sériova linka, používa sa hlavne na prepojenie PC a embedded zariadenia
- SPI, I2C= umožnujú komunikáciu viacerých slave zariadení (senzorov) po jednej zbernici
- Porovnať UART, SPI, I2C
- Pre mnoho modulov/senzorov existujú knižnice uľahčujúce komunikáciu
Nasledujúce protokoly majú veľa spoločného a predsa sa v mnohom odlišujú.
UART, USB, RS232, RS485, Modbus, CAN-BUS
- Porovnajte ich podľa ľubovoľného kritéria/kritérií
- Napíšte, kde sa používajú
- Skúste nájsť na www.aliexpress.com nejaký modul/senzor ku každému hore uvedenému protokolu + SPI a I2C
- Skúste napísať na čo sa dá nájdený modul/senzor použiť
Dobrovoľná domáca úloha
FORMA: ľubovoľná (txt, word, excel...)
HODNOTENIE: známka na stupnici 1 až 2 v prípade 2 máte možnosť odmietnuť zapísať si známku.
TERMÍN: do Nedele 6.2.2022 do 23:59
UART vs I2C vs SPI
By tomaslorinc
UART vs I2C vs SPI
- 580