Πίνακας περιεχομένων:
- Προμήθειες
- Βήμα 1: Φυσικές συνδέσεις
- Βήμα 2: Πώς να χρησιμοποιήσετε τη βιβλιοθήκη
- Βήμα 3: Διαβίβαση βασικών δεδομένων
- Βήμα 4: Λήψη βασικών δεδομένων
- Βήμα 5: Δοκιμή
Βίντεο: Σειριακή επικοινωνία Arduino: 5 βήματα
2024 Συγγραφέας: John Day | [email protected]. Τελευταία τροποποίηση: 2024-01-30 08:33
Πολλά έργα Arduino βασίζονται στη μετάδοση δεδομένων μεταξύ αρκετών Arduinos.
Είτε είστε χόμπι που κατασκευάζει αυτοκίνητο RC, αεροπλάνο RC, είτε σχεδιάζει μετεωρολογικό σταθμό με απομακρυσμένη οθόνη, θα πρέπει να γνωρίζετε πώς να μεταφέρετε αξιόπιστα σειριακά δεδομένα από το ένα Arduino στο άλλο. Δυστυχώς, είναι δύσκολο για τους χομπίστες να αποκτήσουν επικοινωνία σειριακών δεδομένων στα δικά τους έργα. Αυτό συμβαίνει επειδή τα σειριακά δεδομένα αποστέλλονται ως μια ροή byte.
Χωρίς κανένα είδος περιβάλλοντος μέσα στο ρεύμα των byte, είναι σχεδόν αδύνατο να ερμηνευτούν τα δεδομένα. Χωρίς να μπορείτε να ερμηνεύσετε τα δεδομένα, το Arduinos σας δεν θα μπορεί να επικοινωνεί αξιόπιστα. Το κλειδί είναι να προσθέσετε αυτά τα δεδομένα περιβάλλοντος στη ροή byte χρησιμοποιώντας ένα τυπικό σχέδιο σειριακών πακέτων.
Ο σειριακός σχεδιασμός πακέτων, η γέμιση πακέτων και η ανάλυση των πακέτων είναι πολύπλοκος και δύσκολο να επιτευχθούν. Ευτυχώς για τους χρήστες του Arduino, υπάρχουν διαθέσιμες βιβλιοθήκες που μπορούν να κάνουν όλη αυτή τη σύνθετη λογική στα παρασκήνια, ώστε να μπορείτε να επικεντρωθείτε στο να λειτουργήσει το έργο σας χωρίς επιπλέον προφίλ. Αυτό το Instructable θα χρησιμοποιήσει τη βιβλιοθήκη SerialTransfer.h για σειριακή επεξεργασία πακέτων.
Εν ολίγοις: αυτό το Instructable θα εξετάσει πώς μπορείτε να εφαρμόσετε εύρωστα σειριακά δεδομένα εύκολα σε οποιοδήποτε έργο χρησιμοποιώντας τη βιβλιοθήκη SerialTransfer.h. Αν θέλετε να μάθετε περισσότερα σχετικά με τη θεωρία χαμηλού επιπέδου για την ισχυρή σειριακή επικοινωνία, δείτε αυτό το σεμινάριο.
Προμήθειες
-
2 Arduinos
Ενθαρρύνεται ιδιαίτερα η χρήση Arduinos που διαθέτουν πολλαπλά UARTs υλικού (δηλαδή Arduino Mega)
- Σύρμα σύνδεσης
-
Εγκαταστήστε το SerialTransfer.h
Διατίθεται μέσω του Διαχειριστή Βιβλιοθηκών του Arduino IDE
Βήμα 1: Φυσικές συνδέσεις
Όταν χρησιμοποιείτε σειριακή επικοινωνία, πρέπει να λάβετε υπόψη μερικά σημεία καλωδίωσης:
- Βεβαιωθείτε ότι όλες οι βάσεις είναι συνδεδεμένες!
- Η καρφίτσα Arduino TX (Transmit) πρέπει να συνδεθεί με την άλλη καρφίτσα RX (Receive) του Arduino
Βήμα 2: Πώς να χρησιμοποιήσετε τη βιβλιοθήκη
Το SerialTransfer.h σάς επιτρέπει να στέλνετε εύκολα μεγάλες ποσότητες δεδομένων χρησιμοποιώντας ένα προσαρμοσμένο πρωτόκολλο πακέτων. Παρακάτω είναι μια περιγραφή όλων των δυνατοτήτων της βιβλιοθήκης - πολλές από τις οποίες θα χρησιμοποιήσουμε αργότερα σε αυτό το σεμινάριο:
SerialTransfer.txBuff
Πρόκειται για έναν πίνακα byte όπου όλα τα δεδομένα ωφέλιμου φορτίου που θα αποσταλούν μέσω σειριακής μνήμης αποθηκεύονται πριν από τη μετάδοση. Μπορείτε να γεμίσετε αυτό το buffer με byte δεδομένων για αποστολή σε άλλο Arduino.
SerialTransfer.rxBuff
Αυτός είναι ένας πίνακας byte όπου όλα τα δεδομένα ωφέλιμου φορτίου που λαμβάνονται από το άλλο Arduino είναι προσωρινά αποθηκευμένα.
SerialTransfer.bytesRead
Ο αριθμός των byte ωφέλιμου φορτίου που έλαβε το άλλο Arduino και αποθηκεύτηκε στο SerialTransfer.rxBuff
SerialTransfer.begin (Ροή & _port)
Αρχικοποιεί ένα παράδειγμα της τάξης της βιβλιοθήκης. Μπορείτε να περάσετε οποιοδήποτε αντικείμενο κλάσης "Serial" ως παράμετρο - ακόμη και αντικείμενα κλάσης "SoftwareSerial"!
SerialTransfer.sendData (const uint16_t & messageLen)
Αυτό κάνει το Arduino να στέλνει αριθμό "by messageLen" byte στο buffer μετάδοσης στο άλλο Arduino. Για παράδειγμα, εάν το "messageLen" είναι 4, τα πρώτα 4 byte του SerialTransfer.txBuff θα σταλούν μέσω σειριακού στο άλλο Arduino.
SerialTransfer.available ()
Αυτό κάνει το Arduino σας να αναλύσει τυχόν ληφθέντα σειριακά δεδομένα από το άλλο Arduino. Εάν αυτή η συνάρτηση επιστρέψει το boolean "true", σημαίνει ότι ένα νέο πακέτο έχει αναλυθεί επιτυχώς και τα δεδομένα του πακέτου που έχουν ληφθεί πρόσφατα αποθηκεύονται/διατίθενται στο SerialTransfer.rxBuff.
SerialTransfer.txObj (const T & val, const uint16_t & len, const uint16_t & index = 0)
Συμπληρώνει "len" αριθμό byte ενός αυθαίρετου αντικειμένου (byte, int, float, double, struct, κ.λπ.) στο buffer μετάδοσης ξεκινώντας από το ευρετήριο όπως καθορίζεται από το επιχείρημα "index".
SerialTransfer.rxObj (const T & val, const uint16_t & len, const uint16_t & index = 0)
Διαβάζει "len" αριθμό byte από το buffer λήψης (rxBuff) ξεκινώντας από το ευρετήριο όπως καθορίζεται από το όρισμα "index" σε ένα αυθαίρετο αντικείμενο (byte, int, float, double, struct, κλπ …).
ΣΗΜΕΙΩΣΗ:
Ο ευκολότερος τρόπος για τη μετάδοση δεδομένων είναι να ορίσετε πρώτα μια δομή που περιέχει όλα τα δεδομένα που θέλετε να στείλετε. Το Arduino στο παραλήπτη πρέπει να έχει πανομοιότυπο δομή.
Βήμα 3: Διαβίβαση βασικών δεδομένων
Το παρακάτω σκίτσο μεταδίδει τόσο την τιμή ADC του analogRead (0) όσο και την τιμή του analogRead (0) που μετατράπηκε σε τάση στο Arduino #2.
Ανεβάστε το ακόλουθο σκίτσο στο Arduino #1:
#include "SerialTransfer.h"
SerialTransfer myTransfer? struct STRUCT {uint16_t adcVal; τάση πλωτήρα? } δεδομένα; 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 (δεδομένα, μέγεθος (δεδομένα)); myTransfer.sendData (μέγεθος (δεδομένα)); καθυστέρηση (100)? }
Βήμα 4: Λήψη βασικών δεδομένων
Ο παρακάτω κώδικας εκτυπώνει τις τιμές ADC και τάσης που λαμβάνονται από το Arduino #1.
Ανεβάστε τον ακόλουθο κώδικα στο Arduino #2:
#include "SerialTransfer.h"
SerialTransfer myTransfer? struct STRUCT {uint16_t adcVal; τάση πλωτήρα? } δεδομένα; 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")); }}
Βήμα 5: Δοκιμή
Αφού μεταφορτωθούν και τα δύο σκίτσα στο αντίστοιχο Arduinos, μπορείτε να χρησιμοποιήσετε το Serial Monitor στο Arduino #2 για να επαληθεύσετε ότι λαμβάνετε δεδομένα από το Arduino #1!
Συνιστάται:
Αυτόνομο Arduino 3.3V W / Εξωτερικό ρολόι 8 MHz που προγραμματίζεται από το Arduino Uno μέσω ICSP / ISP (με σειριακή παρακολούθηση!): 4 βήματα
Αυτόνομο Arduino 3.3V W / Εξωτερικό ρολόι 8 MHz που προγραμματίζεται από το Arduino Uno μέσω ICSP / ISP (με σειριακή παρακολούθηση!): Στόχοι: Δημιουργία ενός αυτόνομου Arduino που λειτουργεί με 3.3V από εξωτερικό ρολόι 8 MHz. Για να το προγραμματίσετε μέσω ISP (επίσης γνωστό ως ICSP, σειριακός προγραμματισμός σε κύκλωμα) από ένα Arduino Uno (τρέχει σε 5V) Για να επεξεργαστείτε το αρχείο bootloader και να κάνετε εγγραφή
PIC MCU και σειριακή επικοινωνία Python: 5 βήματα
Σειριακή επικοινωνία PIC MCU και Python: Γεια σας παιδιά! Σε αυτό το έργο θα προσπαθήσω να εξηγήσω τα πειράματά μου σε σειριακή επικοινωνία PIC MCU και Python. Στο διαδίκτυο, υπάρχουν πολλά σεμινάρια και βίντεο σχετικά με τον τρόπο επικοινωνίας με το PIC MCU μέσω εικονικού τερματικού, το οποίο είναι πολύ χρήσιμο. Howev
Σειριακή επικοινωνία Arduino και Python - Οθόνη πληκτρολογίου: 4 βήματα
Σειριακή επικοινωνία Arduino και Python - Ένδειξη πληκτρολογίου: Αυτό το έργο έχει σχεδιαστεί για χρήστες mac αλλά μπορεί να εφαρμοστεί και για Linux και Windows, το μόνο βήμα που θα πρέπει να είναι διαφορετικό είναι η εγκατάσταση
Ασύρματη σειριακή επικοινωνία χρησιμοποιώντας το Bluefruit: 4 βήματα
Ασύρματη σειριακή επικοινωνία χρησιμοποιώντας το Bluefruit: Ακολουθεί ένας απλός οδηγός βήμα προς βήμα για να αντικαταστήσετε τα καλώδιά σας με σύνδεση χαμηλής κατανάλωσης bluetooth: Μου πήρε λίγο χρόνο για να το καταλάβω, επειδή δεν υπάρχει σχεδόν καμία τεκμηρίωση για να το κάνουμε αυτό με τη σύγχρονη τεχνολογία bluetooth χαμηλής ενέργειας, όπως ως Bluefrui
Σειριακή επικοινωνία με χρήση ARM Cortex-M4: 4 βήματα
Σειριακή επικοινωνία με χρήση ARM Cortex-M4: Πρόκειται για ένα έργο που βασίζεται σε πλάκα που χρησιμοποιεί ARM Cortex-M4 (Texas Instruments EK-TM4C123GXL) για σειριακή επικοινωνία χρησιμοποιώντας εικονικό τερματικό. Η έξοδος μπορεί να ληφθεί σε οθόνη LCD 16x2 και η είσοδος για σειριακή επικοινωνία μπορεί να δοθεί σε Serial Mo