Vamos ver como realizar a comunicação entre dois Arduinos localmente, e podendo através disso construir soluções que utilizam mais pinos digitais ou outras interfaces que possuem somente uma única 'cópia' disponível no modelo UNO que utilizamos no curso.
O Arduino UNO possui duas interfaces para comunicação Serial: via o próprio cabo USB, e pelos pinos digitais 0
e 1
, marcados como RX
e TX
. É por este motivo que no UNO não podemos utilizar esses 2 pinos caso estejamos utilizando também a comunicação via USB a partir do PC.
Os modelos maiores como o Mega possuem mais interfaces seriais em hardware, estas ficam expostas para Sketchs via as variáveis Serial1
, Serial2
, etc.
A comunicação Serial também pode ser feita através de qualquer par de pinos digitais utilizando a biblioteca SoftwareSerial.h
.
As principais restrições dessa interface é que -- como o nome indica -- ela mantém o timing delicado da comunicação em software ao invés de poder contar com os timers de hardware disponíveis para a interface principal.
Para comunicação entre dispositivos, seus pinos devem ser 'cruzados', i.e. o pino TX
deve ser conectado ao pino RX
da outra unidade.
// arduino1/arduino1.ino
void setup() {
Serial.begin(9600);
while(!Serial) {}
}
bool ligarLampada = false;
void loop() {
ligarLampada = !ligarLampada;
Serial.write(ligarLampada);
delay(500);
}
A função Serial.write()
escreve o byte diretamente, sem tentar convertê-lo para string, portanto o valor enviado será 0x0 e 0x1, ao invés de '0'
(valor 48
/ 0x30
) e '1'
(valor 49
/0x31
).
// arduino2/arduino2.ino
void setup() {
Serial.begin(9600);
while(!Serial) {}
pinMode(13, OUTPUT);
}
void loop() {
if(Serial.available()) {
byte ligarLampada = Serial.read();
if (ligarLampada) {
digitalWrite(13, HIGH);
} else {
digitalWrite(13, LOW);
}
}
}
O protocolo I2C utiliza os 2 pinos mais próximos do pino AREF
, no caso do UNO são os pinos A4
e A5
(analógicos).
Este protocolo funciona com uma estrutura Master-Slave, onde uma unidade principal (Master) coordena a comunicação e Slaves operam quando requisitados pelo Master.
Os pinos a serem utilizados por cada modelo são os seguintes:
Modelo | I2C |
---|---|
Uno, Ethernet | A4 (SDA), A5 (SCL) |
Mega2560 | 20 (SDA), 21 (SCL) |
Leonardo | 2 (SDA), 3 (SCL) |
Due | 20 (SDA), 21 (SCL), SDA1, SCL1 |
Eles devem ser conectados ao mesmo barramento (SDA com SDA, SCL com SCL)