Índice:
2025 Autor: John Day | [email protected]. Última modificação: 2025-01-23 15:03
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
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
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:
PIC MCU e comunicação serial Python: 5 etapas
Comunicação serial PIC MCU e Python: Olá, pessoal! Neste projeto, tentarei explicar meus experimentos em PIC MCU e comunicação serial Python. Na Internet, existem muitos tutoriais e vídeos sobre como se comunicar com PIC MCU através de um terminal virtual que é muito útil. No entanto
Comunicação serial Arduino e Python - Visor do teclado: 4 etapas
Arduino e Python Serial Communication - Keypad Display: Este projeto é feito para usuários de mac mas também pode ser implementado para Linux e Windows, o único passo que deve ser diferente é a instalação
Comunicação serial sem fio usando Bluefruit: 4 etapas
Comunicação serial sem fio usando Bluefruit: Aqui está um guia passo a passo simples para substituir seus fios por uma conexão bluetooth de baixa energia: Levei um tempo para descobrir isso porque quase não há nenhuma documentação sobre como fazer isso com tecnologia moderna de bluetooth de baixa energia, como como o Bluefrui
SmartMirror baseado na web usando comunicação serial: 6 etapas
SmartMirror baseado na Web usando comunicação serial: Este instrutível é entregue com todo o código pronto para uso. O desenvolvimento foi muito complicado, mas uma vez configurado, é muito fácil de personalizar. Dê uma olhada e divirta-se;)
Comunicação serial usando ARM Cortex-M4: 4 etapas
Comunicação serial usando ARM Cortex-M4: Este é um projeto baseado em breadboard que usa ARM Cortex-M4 (Texas Instruments EK-TM4C123GXL) para comunicação serial usando terminal virtual. A saída pode ser obtida na tela LCD 16x2 e a entrada para comunicação serial pode ser fornecida em Mo serial