Índice:

Comunicação serial do Arduino: 5 etapas
Comunicação serial do Arduino: 5 etapas

Vídeo: Comunicação serial do Arduino: 5 etapas

Vídeo: Comunicação serial do Arduino: 5 etapas
Vídeo: Curso Arduino Etapa 4 - Comunicação Serial 2024, Julho
Anonim
Comunicação Serial Arduino
Comunicação Serial Arduino

Muitos projetos do Arduino dependem da transmissão de dados entre vários Arduinos.

Quer você seja um amador que está construindo um carro RC, um avião RC ou projetando uma estação meteorológica com um display remoto, você precisará saber como transferir dados seriais de forma confiável de um Arduino para outro. Infelizmente, é difícil para os amadores conseguir que a comunicação de dados seriais funcione em seus próprios projetos. Isso ocorre porque os dados seriais são enviados como um fluxo de bytes.

Sem qualquer tipo de contexto dentro do fluxo de bytes, é quase impossível interpretar os dados. Sem ser capaz de interpretar os dados, seus Arduinos não serão capazes de se comunicar de forma confiável. A chave é adicionar esses dados de contexto ao fluxo de bytes usando um design de pacote serial padrão.

O design de pacotes seriais, o enchimento de pacotes e a análise de pacotes são complexos e difíceis de alcançar. Felizmente para os usuários do Arduino, existem bibliotecas disponíveis que podem fazer toda essa lógica complexa nos bastidores, para que você possa se concentrar em fazer seu projeto funcionar sem esforço extra. Este Instructable usará a biblioteca SerialTransfer.h para processamento de pacotes seriais.

Resumindo: este Instrutor explicará como você pode implementar dados seriais robustos facilmente em qualquer projeto usando a biblioteca SerialTransfer.h. Se você quiser aprender mais sobre a teoria de baixo nível sobre comunicação serial robusta, consulte este tutorial.

Suprimentos

  • 2 Arduinos

    É altamente recomendável que você use Arduinos que tenham vários UARTs de hardware (ou seja, Arduino Mega)

  • Fio de conexão
  • Instale SerialTransfer.h

    Disponível através do gerenciador de bibliotecas do IDE do Arduino

Etapa 1: conexões físicas

Conexões Físicas
Conexões Físicas

Ao usar a comunicação serial, alguns pontos de fiação precisam ser mantidos em mente:

  • Certifique-se de que todos os aterramentos estejam conectados!
  • O pino Arduino TX (transmissão) precisa ser conectado ao outro pino RX (recepção) do Arduino

Etapa 2: como usar a biblioteca

Como usar a biblioteca
Como usar a biblioteca

O SerialTransfer.h permite enviar facilmente grandes quantidades de dados usando um protocolo de pacote personalizado. Abaixo está uma descrição de todos os recursos da biblioteca - muitos dos quais usaremos posteriormente neste tutorial:

SerialTransfer.txBuff

Esta é uma matriz de bytes em que todos os dados de carga útil a serem enviados via serial são armazenados em buffer antes da transmissão. Você pode preencher esse buffer com bytes de dados para enviar para outro Arduino.

SerialTransfer.rxBuff

Esta é uma matriz de bytes onde todos os dados de carga recebidos do outro Arduino são armazenados em buffer.

SerialTransfer.bytesRead

O número de bytes de carga útil recebidos pelo outro Arduino e armazenados em SerialTransfer.rxBuff

SerialTransfer.begin (Stream & _port)

Inicializa uma instância da classe da biblioteca. Você pode passar qualquer objeto da classe "Serial" como um parâmetro - até mesmo objetos da classe "SoftwareSerial"!

SerialTransfer.sendData (const uint16_t & messageLen)

Isso faz com que seu Arduino envie o número "messageLen" de bytes no buffer de transmissão para o outro Arduino. Por exemplo, se "messageLen" for 4, os primeiros 4 bytes de SerialTransfer.txBuff serão enviados via serial para o outro Arduino.

SerialTransfer.available ()

Isso faz com que seu Arduino analise quaisquer dados seriais recebidos do outro Arduino. Se esta função retornar o booleano "verdadeiro", significa que um novo pacote foi analisado com sucesso e os dados do pacote recém-recebido estão armazenados / disponíveis em SerialTransfer.rxBuff.

SerialTransfer.txObj (const T & val, const uint16_t & len, const uint16_t & index = 0)

Armazena o número "len" de bytes de um objeto arbitrário (byte, int, float, double, struct, etc …) no buffer de transmissão começando no índice conforme especificado pelo argumento "index".

SerialTransfer.rxObj (const T & val, const uint16_t & len, const uint16_t & index = 0)

Lê o número "len" de bytes do buffer de recebimento (rxBuff) começando no índice conforme especificado pelo argumento "index" em um objeto arbitrário (byte, int, float, double, struct, etc …).

NOTA:

A maneira mais fácil de transmitir dados é primeiro definir uma estrutura que contém todos os dados que você deseja enviar. O Arduino na extremidade receptora deve ter uma estrutura idêntica definida.

Etapa 3: Transmitir dados básicos

O esboço a seguir transmite o valor ADC de analogRead (0) e o valor de analogRead (0) convertido em tensão para o Arduino # 2.

Faça upload do seguinte esboço para o Arduino # 1:

#include "SerialTransfer.h"

SerialTransfer myTransfer; struct STRUCT {uint16_t adcVal; tensão flutuante; } dados; void setup () {Serial.begin (115200); Serial1.begin (115200); myTransfer.begin (Serial1); } void loop () {data.adcVal = analogRead (0); data.voltage = (data.adcVal * 5.0) / 1023.0; myTransfer.txObj (dados, sizeof (dados)); myTransfer.sendData (sizeof (dados)); atraso (100); }

Etapa 4: receba dados básicos

O código a seguir imprime o ADC e os valores de tensão recebidos do Arduino # 1.

Faça upload do seguinte código para o Arduino # 2:

#include "SerialTransfer.h"

SerialTransfer myTransfer; struct STRUCT {uint16_t adcVal; tensão flutuante; } dados; void setup () {Serial.begin (115200); Serial1.begin (115200); myTransfer.begin (Serial1); } void loop () {if (myTransfer.available ()) {myTransfer.rxObj (data, sizeof (data)); Serial.print (data.adcVal); Serial.print (''); Serial.println (data.voltage); Serial.println (); } else if (myTransfer.status <0) {Serial.print ("ERROR:"); if (myTransfer.status == -1) Serial.println (F ("CRC_ERROR")); else if (myTransfer.status == -2) Serial.println (F ("PAYLOAD_ERROR")); else if (myTransfer.status == -3) Serial.println (F ("STOP_BYTE_ERROR")); }}

Etapa 5: Teste

Uma vez que ambos os esboços tenham sido carregados para seus respectivos Arduinos, você pode usar o Monitor Serial no Arduino # 2 para verificar se está recebendo dados do Arduino # 1!

Recomendado: