Taula de continguts:

Comunicació en sèrie Arduino: 5 passos
Comunicació en sèrie Arduino: 5 passos

Vídeo: Comunicació en sèrie Arduino: 5 passos

Vídeo: Comunicació en sèrie Arduino: 5 passos
Vídeo: Entradas analógicas e serial - Arduino #005 (Série Primeiros Passos) 2024, De novembre
Anonim
Comunicació en sèrie Arduino
Comunicació en sèrie Arduino

Molts projectes Arduino es basen en la transmissió de dades entre diversos Arduinos.

Tant si sou un aficionat a la construcció d’un cotxe RC, un avió RC, o bé dissenyant una estació meteorològica amb pantalla remota, haureu de saber transferir de manera fiable dades de sèrie d’un Arduino a un altre. Malauradament, és difícil per als aficionats aconseguir que la comunicació de dades en sèrie funcioni en els seus propis projectes, ja que les dades en sèrie s’envien com un flux de bytes.

Sense cap tipus de context dins del flux de bytes, és gairebé impossible interpretar les dades. Sense poder interpretar les dades, els vostres Arduinos no podran comunicar-se de manera fiable. La clau és afegir aquestes dades de context al flux de bytes mitjançant un disseny de paquets en sèrie estàndard.

El disseny de paquets en sèrie, el farciment de paquets i l’anàlisi de paquets és complex i difícil d’aconseguir. Per sort per als usuaris d'Arduino, hi ha biblioteques disponibles que poden fer tota aquesta complexa lògica entre bastidors perquè pugueu centrar-vos a fer que el vostre projecte funcioni sense cap tipus de suport. Aquest instructable utilitzarà la biblioteca SerialTransfer.h per al processament de paquets en sèrie.

En resum: aquest instructiu explicarà com podeu implementar dades de sèrie robustes fàcilment en qualsevol projecte mitjançant la biblioteca SerialTransfer.h. Si voleu obtenir més informació sobre la teoria de baix nivell sobre una comunicació seriosa sòlida, consulteu aquest tutorial.

Subministraments

  • 2 arduinos

    Es recomana que feu servir Arduinos que tinguin diversos UART de maquinari (és a dir, Arduino Mega)

  • Cable de connexió
  • Instal·leu SerialTransfer.h

    Disponible a través del gestor de biblioteques d'Arduino IDE

Pas 1: connexions físiques

Connexions físiques
Connexions físiques

Quan s’utilitza la comunicació en sèrie, cal tenir en compte alguns punts de cablejat:

  • Assegureu-vos que tots els terrenys estan connectats.
  • El pin Arduino TX (Transmit) ha d’estar connectat a l’altre pin RX (Receive) d’Arduino

Pas 2: Com utilitzar la biblioteca

Com utilitzar la biblioteca
Com utilitzar la biblioteca

SerialTransfer.h us permet enviar fàcilment grans quantitats de dades mitjançant un protocol de paquets personalitzat. A continuació es mostra una descripció de totes les funcions de la biblioteca, moltes de les quals utilitzarem més endavant en aquest tutorial:

SerialTransfer.txBuff

Es tracta d’una matriu de bytes on totes les dades de càrrega útil que s’enviaran per sèrie es guardaran en memòria intermèdia abans de la transmissió. Podeu omplir aquest buffer amb bytes de dades per enviar-los a un altre Arduino.

SerialTransfer.rxBuff

Es tracta d’una matriu de bytes on es guarden totes les dades de càrrega útil rebudes de l’altre Arduino.

SerialTransfer.bytesRead

El nombre de bytes de càrrega útil rebuts per l'altre Arduino i emmagatzemats a SerialTransfer.rxBuff

SerialTransfer.begin (Stream i _port)

Inicialitza una instància de la classe de la biblioteca. Podeu passar qualsevol objecte de classe "Serial" com a paràmetre, fins i tot objectes de classe "SoftwareSerial".

SerialTransfer.sendData (const uint16_t & messageLen)

Això fa que el vostre Arduino enviï el número de bytes "messageLen" a la memòria intermèdia de transmissió a l'altre Arduino. Per exemple, si "messageLen" és 4, els primers 4 bytes de SerialTransfer.txBuff s'enviaran per sèrie a l'altre Arduino.

SerialTransfer.available ()

Això fa que el vostre Arduino analitzi les dades de sèrie rebudes de l’altre Arduino. Si aquesta funció retorna el valor booleà "true", significa que s'ha analitzat correctament un nou paquet i que les dades del paquet recentment rebut estan emmagatzemades / disponibles a SerialTransfer.rxBuff.

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

Emmagatzema "len" el nombre de bytes d'un objecte arbitrari (byte, int, float, double, struct, etc …) a la memòria intermèdia de transmissió començant per l'índex tal com s'especifica amb l'argument "index".

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

Llegeix el nombre "by" de la memòria intermèdia de recepció (rxBuff) a partir de l'índex, tal com s'especifica amb l'argument "index", en un objecte arbitrari (byte, int, float, double, struct, etc …).

NOTA:

La forma més senzilla de transmetre dades és definir primer una estructura que conté totes les dades que voleu enviar. L'Arduino a l'extrem receptor hauria de tenir una estructura idèntica definida.

Pas 3: transmeteu les dades bàsiques

El següent esbós transmet tant el valor ADC de analogRead (0) com el valor de analogRead (0) convertit a voltatge a Arduino # 2.

Pengeu l'esbós següent a Arduino # 1:

#include "SerialTransfer.h"

SerialTransfer myTransfer; struct STRUCT {uint16_t adcVal; tensió flotant; } dades; configuració nul·la () {Serial.begin (115200); Serial1.begin (115200); myTransfer.begin (sèrie1); } void loop () {data.adcVal = analogRead (0); data.voltage = (data.adcVal * 5.0) / 1023.0; myTransfer.txObj (dades, mida de (dades)); myTransfer.sendData (sizeof (data)); retard (100); }

Pas 4: rebre dades bàsiques

El següent codi imprimeix els valors ADC i voltatge rebuts d'Arduino # 1.

Pengeu el següent codi a Arduino # 2:

#include "SerialTransfer.h"

SerialTransfer myTransfer; struct STRUCT {uint16_t adcVal; tensió flotant; } dades; configuració nul·la () {Serial.begin (115200); Serial1.begin (115200); myTransfer.begin (sèrie1); } 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")); }}

Pas 5: proves

Una vegada que tots dos esbossos s'han carregat als seus respectius Arduinos, podeu utilitzar el monitor de sèrie a Arduino # 2 per verificar que esteu rebent dades d'Arduino # 1.

Recomanat: