Arduino - Comunicação

Centenas de protocolos de comunicação foram definidos para alcançar essa troca de dados. Cada protocolo pode ser categorizado em uma das duas categorias: paralelo ou serial.

Comunicação Paralela

A conexão paralela entre o Arduino e os periféricos via portas de entrada / saída é a solução ideal para distâncias mais curtas de até vários metros. Porém, em outros casos, quando é necessário estabelecer comunicação entre dois dispositivos para distâncias maiores, não é possível usar a conexão paralela. As interfaces paralelas transferem vários bits ao mesmo tempo. Eles geralmente requerem barramentos de dados - transmitindo através de oito, dezesseis ou mais fios. Os dados são transferidos em ondas gigantescas de 1 e 0.

Vantagens e desvantagens da comunicação paralela

A comunicação paralela certamente tem suas vantagens. É mais rápido do que serial, direto e relativamente fácil de implementar. No entanto, ele requer muitas portas e linhas de entrada / saída (E / S). Se você já teve que mover um projeto de um Arduino Uno básico para um Mega, sabe que as linhas de E / S em um microprocessador podem ser preciosas e poucas. Portanto, preferimos a comunicação serial, sacrificando a velocidade potencial para o espaço do pino.

Módulos de comunicação serial

Hoje, a maioria das placas Arduino são construídas com vários sistemas diferentes para comunicação serial como equipamento padrão.

Qual desses sistemas são usados ​​depende dos seguintes fatores -

  • Com quantos dispositivos o microcontrolador deve trocar dados?
  • Quão rápido deve ser a troca de dados?
  • Qual é a distância entre esses dispositivos?
  • É necessário enviar e receber dados simultaneamente?

Uma das coisas mais importantes em relação à comunicação serial é o Protocol, que deve ser estritamente observado. É um conjunto de regras que devem ser aplicadas para que os dispositivos possam interpretar corretamente os dados que trocam entre si. Felizmente, o Arduino automaticamente cuida disso, de modo que o trabalho do programador / usuário é reduzido a uma simples escrita (dados a serem enviados) e leitura (dados recebidos).

Tipos de comunicações seriais

A comunicação serial pode ser ainda classificada como -

  • Synchronous - Dispositivos que são sincronizados usam o mesmo relógio e seu tempo está sincronizado entre si.

  • Asynchronous - Os dispositivos assíncronos têm seus próprios relógios e são acionados pela saída do estado anterior.

É fácil descobrir se um dispositivo é síncrono ou não. Se o mesmo relógio for fornecido a todos os dispositivos conectados, eles serão síncronos. Se não houver linha do relógio, é assíncrono.

Por exemplo, o módulo UART (Universal Asynchronous Receiver Transmitter) é assíncrono.

O protocolo serial assíncrono possui várias regras integradas. Essas regras nada mais são do que mecanismos que ajudam a garantir transferências de dados robustas e sem erros. Esses mecanismos, que obtemos para evitar o sinal do relógio externo, são -

  • Bits de sincronização
  • Bits de dados
  • Bits de paridade
  • Taxa de transmissão

Bits de sincronização

Os bits de sincronização são dois ou três bits especiais transferidos com cada pacote de dados. Eles são o bit de início e o (s) bit (s) de parada. Fiel ao seu nome, esses bits marcam o início e o fim de um pacote, respectivamente.

Sempre há apenas um bit de início, mas o número de bits de parada é configurável para um ou dois (embora normalmente seja deixado em um).

O bit de início é sempre indicado por uma linha de dados ociosa indo de 1 a 0, enquanto o (s) bit (s) de parada farão a transição de volta ao estado ocioso mantendo a linha em 1.

Bits de dados

A quantidade de dados em cada pacote pode ser definida para qualquer tamanho de 5 a 9 bits. Certamente, o tamanho de dados padrão é o byte básico de 8 bits, mas outros tamanhos têm seus usos. Um pacote de dados de 7 bits pode ser mais eficiente do que 8, especialmente se você estiver apenas transferindo caracteres ASCII de 7 bits.

Bits de paridade

O usuário pode selecionar se deve haver um bit de paridade ou não e, em caso afirmativo, se a paridade deve ser ímpar ou par. O bit de paridade é 0 se o número de 1 entre os bits de dados for par. A paridade ímpar é exatamente o oposto.

Taxa de transmissão

O termo taxa de baud é usado para denotar o número de bits transferidos por segundo [bps]. Observe que se refere a bits, não bytes. Normalmente, o protocolo exige que cada byte seja transferido junto com vários bits de controle. Isso significa que um byte no fluxo de dados serial pode consistir em 11 bits. Por exemplo, se a taxa de baud for 300 bps, no máximo 37 e no mínimo 27 bytes podem ser transferidos por segundo.

Arduino UART

O código a seguir fará com que o Arduino envie hello world quando for inicializado.

void setup() {
   Serial.begin(9600); //set up serial library baud rate to 9600
   Serial.println("hello world"); //print hello world
}

void loop() {

}

Após o esboço do Arduino ter sido carregado para o Arduino, abra o monitor Serial na seção superior direita do IDE do Arduino.

Digite qualquer coisa na caixa superior do Monitor Serial e pressione enviar ou Enter no teclado. Isso enviará uma série de bytes para o Arduino.

O código a seguir retorna tudo o que recebe como entrada.

O código a seguir fará com que o Arduino forneça saída, dependendo da entrada fornecida.

void setup() {
   Serial.begin(9600); //set up serial library baud rate to 9600
}

void loop() {
   if(Serial.available()) //if number of bytes (characters) available for reading from { 
      serial port
      Serial.print("I received:"); //print I received
      Serial.write(Serial.read()); //send what you read
   }
}

Notar que Serial.print e Serial.println irá enviar de volta o código ASCII real, enquanto Serial.writeirá enviar de volta o texto real. Consulte os códigos ASCII para obter mais informações.