Taula de continguts:
- Subministraments
- Pas 1: connexions físiques
- Pas 2: Com utilitzar la biblioteca
- Pas 3: transmeteu les dades bàsiques
- Pas 4: rebre dades bàsiques
- Pas 5: proves
Vídeo: Comunicació en sèrie Arduino: 5 passos
2024 Autora: John Day | [email protected]. Última modificació: 2024-01-30 08:12
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
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
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:
Comunicació sèrie Arduino i Python: pantalla del teclat: 4 passos
Arduino and Python Serial Communication - Keypad Display: Aquest projecte està dissenyat per a usuaris de Mac, però també es pot implementar per a Linux i Windows, l’únic pas que hauria de ser diferent és la instal·lació
Comunicació en sèrie sense fils mitjançant Bluefruit: 4 passos
Comunicació en sèrie sense fils mitjançant Bluefruit: aquí teniu una guia senzilla pas a pas per substituir els cables per una connexió Bluetooth de baixa energia: Vaig trigar una mica a esbrinar-ho perquè gairebé no hi ha documentació per fer-ho amb la tecnologia moderna Bluetooth de baix consum com el Bluefrui
Launchpad - Comunicació sèrie amb Matlab: 6 passos
Launchpad - Comunicació Serial Amb Matlab: Hola, benvingut a aquest tutorial on aprendre à s a comunicar la teva targeta LaunchPad TI Evaluation Kit amb Matlab.En aquest tutorial es fa enfocar á a la conexi ó n amb la Tiva C i l’usuari podrem á migrar f à cilmente a una ta
SmartMirror basat en web mitjançant comunicació en sèrie: 6 passos
SmartMirror basat en web mitjançant comunicacions en sèrie: aquest instructiu es lliura amb tot el codi a punt per utilitzar. El desenvolupament va ser molt complicat, però un cop configurat, és molt fàcil de personalitzar. Feu una ullada i gaudiu;)
Comunicació en sèrie mitjançant ARM Cortex-M4: 4 passos
Comunicació en sèrie mitjançant ARM Cortex-M4: es tracta d’un projecte basat en taulers que utilitza ARM Cortex-M4 (Texas Instruments EK-TM4C123GXL) per a la comunicació en sèrie mitjançant terminal virtual. La sortida es pot obtenir a la pantalla LCD de 16x2 i l'entrada per a la comunicació en sèrie es pot donar a Serial Mo