Πίνακας περιεχομένων:
- Προμήθειες
- Βήμα 1: Βιβλιοθήκη
- Βήμα 2: Pinout
- Βήμα 3: AUX Pin
- Βήμα 4: Πλήρως συνδεδεμένο σχήμα Esp8266
- Βήμα 5: Πλήρως συνδεδεμένο σχήμα Arduino
- Βήμα 6: Βιβλιοθήκη: Κατασκευαστής
- Βήμα 7: Ξεκινήστε
- Βήμα 8: Διαμόρφωση και μέθοδος πληροφοριών
- Βήμα 9: Δοχείο απόκρισης
- Βήμα 10: Βασική επιλογή διαμόρφωσης
- Βήμα 11: Αποστολή μηνύματος λήψης
- Βήμα 12: Κανονική λειτουργία μετάδοσης
- Βήμα 13: Διαχείριση δομής
- Βήμα 14: Σταθερή λειτουργία αντί για κανονική λειτουργία
- Βήμα 15: Ευχαριστώ
Βίντεο: Ασύρματη επικοινωνία LoRa 3Km έως 8Km με χαμηλό κόστος E32 (sx1278/sx1276) Συσκευή για Arduino, Esp8266 ή Esp32: 15 βήματα
2024 Συγγραφέας: John Day | [email protected]. Τελευταία τροποποίηση: 2024-01-30 08:32
Δημιουργώ μια βιβλιοθήκη για τη διαχείριση του EBYTE E32 με βάση τη σειρά Semtech της συσκευής LoRa, πολύ ισχυρή, απλή και φθηνή συσκευή.
Μπορείτε να βρείτε έκδοση 3Km εδώ, έκδοση 8Km εδώ
Μπορούν να λειτουργήσουν σε απόσταση 3000m έως 8000m και έχουν πολλά χαρακτηριστικά και παράμετρο. Έτσι δημιουργώ αυτήν τη βιβλιοθήκη για να απλοποιήσω τη χρήση.
Είναι μια λύση για ανάκτηση δεδομένων από μητροπολιτικούς αισθητήρες ή για έλεγχο drone.
Προμήθειες
Arduino UNO
Wemos D1 mini
Έκδοση LoRa E32 TTL 100 3Km
Έκδοση LoRa E32 TTL 1W 8Km
Βήμα 1: Βιβλιοθήκη
Μπορείτε να βρείτε τη βιβλιοθήκη μου εδώ.
Για να κατεβάσετε.
Κάντε κλικ στο κουμπί DOWNLOADS στην επάνω δεξιά γωνία, μετονομάστε τον ασυμπίεστο φάκελο LoRa_E32.
Βεβαιωθείτε ότι ο φάκελος LoRa_E32 περιέχει LoRa_E32.cpp και LoRa_E32.h.
Τοποθετήστε το φάκελο βιβλιοθήκης LoRa_E32 στον / βιβλιοθήκες / φάκελό σας. Mayσως χρειαστεί να δημιουργήσετε τον υποφάκελο βιβλιοθηκών εάν είναι η πρώτη σας βιβλιοθήκη.
Επανεκκινήστε το IDE.
Βήμα 2: Pinout
Όπως μπορείτε να δείτε, μπορείτε να ορίσετε διάφορες λειτουργίες μέσω ακίδων M0 και M1.
Υπάρχουν ορισμένες ακίδες που μπορούν να χρησιμοποιηθούν με στατικό τρόπο, αλλά αν το συνδέσετε με τον μικροελεγκτή και τις ρυθμίσετε στη βιβλιοθήκη κερδίζετε απόδοση και μπορείτε να ελέγχετε όλες τις λειτουργίες μέσω λογισμικού, αλλά θα εξηγήσουμε καλύτερα στη συνέχεια.
Βήμα 3: AUX Pin
Όπως ήδη είπα Δεν είναι σημαντικό να συνδέσετε όλα τα pin στην έξοδο του μικροελεγκτή, μπορείτε να βάλετε τις ακίδες M0 και M1 στο HIGH ή LOW για να λάβετε την επιθυμητή διαμόρφωση και αν δεν συνδέσετε το AUX, η βιβλιοθήκη θέτει μια λογική καθυστέρηση για να είστε σίγουροι ότι η λειτουργία έχει ολοκληρωθεί.
AUX καρφίτσα
Κατά τη μετάδοση δεδομένων μπορεί να χρησιμοποιηθεί για αφύπνιση εξωτερικού MCU και επιστροφή HIGH στο τέλος της μεταφοράς δεδομένων.
Όταν λαμβάνετε AUX πηγαίνετε LOW και επιστρέφετε HIGH όταν το buffer είναι κενό.
Χρησιμοποιείται επίσης για αυτοέλεγχο για αποκατάσταση της κανονικής λειτουργίας (σε λειτουργία ενεργοποίησης και ύπνου/προγράμματος).
Βήμα 4: Πλήρως συνδεδεμένο σχήμα Esp8266
Το σχήμα σύνδεσης esp8266 είναι πιο απλό επειδή λειτουργεί στην ίδια τάση λογικών επικοινωνιών (3.3v).
Είναι σημαντικό να προσθέσετε αντίσταση έλξης (4, 7Kohm) για να έχετε καλή σταθερότητα.
Βήμα 5: Πλήρως συνδεδεμένο σχήμα Arduino
Η τάση λειτουργίας του Arduino είναι 5v, οπότε πρέπει να προσθέσουμε ένα διαχωριστή τάσης στην ακίδα RX M0 και M1 της μονάδας LoRa για να αποφύγουμε ζημιές, μπορείτε να πάρετε περισσότερες πληροφορίες εδώ Διαχωριστής τάσης: αριθμομηχανή και εφαρμογή.
Μπορείτε να χρησιμοποιήσετε μια αντίσταση 2Kohm στο GND και 1Kohm από το σήμα από ό, τι μαζί σε RX.
Βήμα 6: Βιβλιοθήκη: Κατασκευαστής
Δημιούργησα μια σειρά από πολυάριθμους κατασκευαστές, επειδή μπορούμε να έχουμε περισσότερες επιλογές και καταστάσεις για διαχείριση.
LoRa_E32 (byte rxPin, byte txPin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
LoRa_E32 (byte rxPin, byte txPin, byte auxPin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600); LoRa_E32 (byte rxPin, byte txPin, byte auxPin, byte m0Pin, byte m1Pin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
Το πρώτο σύνολο κατασκευαστών δημιουργείται για να αναθέσει τη διαχείριση σειριακών και άλλων καρφιτσών στη βιβλιοθήκη.
Το rxPin και το txPin είναι το pin για σύνδεση στο UART και είναι υποχρεωτικά.
Το auxPin είναι ένας ακροδέκτης που ελέγχει τη λειτουργία, τη μετάδοση και τη λήψη (θα εξηγήσουμε καλύτερα στη συνέχεια), αυτός ο ακροδέκτης Δεν είναι υποχρεωτικό, αν δεν το ορίσετε, εφαρμόζω καθυστέρηση για να επιτρέψει την ολοκλήρωση της λειτουργίας (με καθυστέρηση).
Το m0pin και το m1Pin είναι οι ακίδες για να αλλάξετε τη λειτουργία MODE (δείτε τον επάνω πίνακα), νομίζω ότι αυτές οι ακίδες στην "παραγωγή" πρόκειται να συνδεθούν απευθείας Υ HIGHΗΛΕΣ ή ΧΑΜΗΛΕΣ, αλλά για δοκιμή θα είναι χρήσιμες για τη διαχείρισή τους από τη βιβλιοθήκη.
bpsRate είναι το boudrate του SoftwareSerial κανονικά είναι 9600 (ο μόνος ρυθμός baud στη λειτουργία προγραμματισμού/αναστολής λειτουργίας)
Ένα απλό παράδειγμα είναι
#include "LoRa_E32.h" LoRa_E32 e32ttl100 (2, 3); // RX, TX // LoRa_E32 e32ttl100 (2, 3, 5, 6, 7); // RX, TX
Μπορούμε να χρησιμοποιήσουμε απευθείας ένα SoftwareSerial με άλλο κατασκευαστή
LoRa_E32 (Σειρά HardwareSerial*, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
LoRa_E32 (Σειρά HardwareSerial*, byte auxPin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
LoRa_E32 (Σειρά HardwareSerial*, byte auxPin, byte m0Pin, byte m1Pin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
Το επάνω παράδειγμα με αυτόν τον κατασκευαστή μπορεί να είναι έτσι.
#include #include "LoRa_E32.h"
SoftwareSerial mySerial (2, 3); // RX, TX
LoRa_E32 e32ttl100 (& mySerial);
// LoRa_E32 e32ttl100 (& mySerial, 5, 7, 6);
Το τελευταίο σύνολο κατασκευαστή είναι να επιτρέψει τη χρήση ενός HardwareSerial αντί του SoftwareSerial.
LoRa_E32 (σειριακό λογισμικό*, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
LoRa_E32 (σειριακό SoftwareSerial*, byte auxPin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
LoRa_E32 (σειριακό SoftwareSerial*, byte auxPin, byte m0Pin, byte m1Pin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
Βήμα 7: Ξεκινήστε
Η εντολή έναρξης χρησιμοποιείται για την εκκίνηση σειριακών και καρφιτσών στη λειτουργία εισόδου και εξόδου.
void begin ()?
σε εκτέλεση είναι
// Εκκίνηση όλων των καρφιτσών και UART
e32ttl100.begin ();
Βήμα 8: Διαμόρφωση και μέθοδος πληροφοριών
Υπάρχει ένα σύνολο μεθόδων για τη διαχείριση της διαμόρφωσης και τη λήψη πληροφοριών για τη συσκευή.
ResponseStructContainer getConfiguration ();
ResponseStatus setConfiguration (Διαμόρφωση διαμόρφωσης, PROGRAM_COMMAND saveType = WRITE_CFG_PWR_DWN_LOSE);
ResponseStructContainer getModuleInformation ();
void printParameters (struct Configuration Configuration)?
ResponseStatus resetModule ();
Βήμα 9: Δοχείο απόκρισης
Για να απλοποιήσω τη διαχείριση της απόκρισης, δημιουργώ ένα σύνολο κοντέινερ, για μένα πολύ χρήσιμο για τη διαχείριση σφαλμάτων και την επιστροφή γενικών δεδομένων.
Κατάσταση ResponseStatus
Αυτό είναι ένα κοντέινερ κατάστασης και έχει 2 απλά σημεία εισόδου, με αυτό μπορείτε να λάβετε τον κωδικό κατάστασης και την περιγραφή του κωδικού κατάστασης
Serial.println (c.getResponseDescription ()); // Περιγραφή κώδικα
Serial.println (c.code); // 1 εάν Επιτυχία
Ο κωδικός είναι
ΕΠΙΤΥΧΙΑ = 1, ERR_UNKNOWN, ERR_NOT_SUPPORT, ERR_NOT_IMPLEMENT, ERR_NOT_INITIAL, ERR_INVALID_PARAM, ERR_DATA_SIZE_NOT_MATCH, ERR_BUF_TOO_SMALL, ERR_TIMEOUT, ERR_HARDWARE, ERR_HEAD_NOT_RECOGNIZED
ResponseContainer
Αυτό το κοντέινερ έχει δημιουργηθεί για τη διαχείριση της απόκρισης συμβολοσειράς και έχει 2 σημεία εισόδου.
δεδομένα με τη συμβολοσειρά επέστρεψαν από το μήνυμα και την κατάσταση μια παρουσία του RepsonseStatus.
ResponseContainer rs = e32ttl.receiveMessage ();
Μήνυμα συμβολοσειράς = rs.data;
Serial.println (rs.status.getResponseDescription ());
Serial.println (μήνυμα);
ResponseStructContainer
Αυτό είναι το πιο «πολύπλοκο» κοντέινερ, το χρησιμοποιώ για τη διαχείριση της δομής, έχει το ίδιο σημείο εισόδου του ResponseContainer, αλλά τα δεδομένα είναι ένας κενός δείκτης για τη διαχείριση σύνθετης δομής.
ResponseStructContainer c;
c = e32ttl100.getConfiguration (); // Είναι σημαντικό να λάβετε δείκτη διαμόρφωσης πριν από όλες τις άλλες λειτουργίες
Configuration configuration = *(Configuration *) c.data;
Serial.println (c.status.getResponseDescription ());
Serial.println (c.status.code);
getConfiguration και setConfiguration
Η πρώτη μέθοδος είναι το getConfiguration, μπορείτε να το χρησιμοποιήσετε για να ανακτήσετε όλα τα δεδομένα που είναι αποθηκευμένα στη συσκευή.
ResponseStructContainer getConfiguration ();
Εδώ ένα παράδειγμα χρήσης.
ResponseStructContainer c;
c = e32ttl100.getConfiguration (); // Είναι σημαντικό να λάβετε δείκτη διαμόρφωσης πριν από όλες τις άλλες λειτουργίες
Configuration configuration = *(Configuration *) c.data;
Serial.println (c.status.getResponseDescription ());
Serial.println (c.status.code);
Serial.println (configuration. SPED.getUARTBaudRate ());
Η δομή της διαμόρφωσης έχει όλα τα δεδομένα των ρυθμίσεων και προσθέτω μια σειρά λειτουργιών για να λάβω όλη την περιγραφή μεμονωμένων δεδομένων.
configuration. ADDL = 0x0; // Πρώτο μέρος της διεύθυνσης configuration. ADDH = 0x1; // Δεύτερο μέρος της διαμόρφωσης διεύθυνσης. CHAN = 0x19; // διαμόρφωση καναλιού. OPTION.fec = FEC_0_OFF; // Προώθηση διαμόρφωσης διακόπτη διόρθωσης σφαλμάτων. OPTION.fixedTransmission = FT_TRANSPARENT_TRANSMISSION; // Configuration mode configuration. OPTION.ioDriveMode = IO_D_MODE_PUSH_PULLS_PULL_UPS; // Pull-up management configuration. OPTION.transmissionPower = POWER_17; // dBm μετάδοση ισχύος configuration. OPTION.wirelessWakeupTime = WAKE_UP_1250; // Χρόνος αναμονής για το configuration. SPED.airDataRate = AIR_DATA_RATE_011_48; // Ρύθμιση ρυθμού δεδομένων αέρα. SPED.uartBaudRate = UART_BPS_115200; // Ρύθμιση baud rate επικοινωνίας. SPED.uartParity = MODE_00_8N1; // bit ισοτιμίας
Έχετε την ισοδύναμη συνάρτηση για όλα τα χαρακτηριστικά για να λάβετε όλη την περιγραφή:
Serial.print (F ("Chan:")); Serial.print (configuration. CHAN, DEC); Serial.print (" ->"); Serial.println (configuration.getChannelDescription ()); Serial.println (F ("")); Serial.print (F ("SpeedParityBit:")); Serial.print (configuration. SPED.uartParity, BIN); Serial.print (" ->"); Serial.println (configuration. SPED.getUARTParityDescription ()); Serial.print (F ("SpeedUARTDatte:")); Serial.print (configuration. SPED.uartBaudRate, BIN); Serial.print (" ->"); Serial.println (configuration. SPED.getUARTBaudRate ()); Serial.print (F ("SpeedAirDataRate:")); Serial.print (configuration. SPED.airDataRate, BIN); Serial.print (" ->"); Serial.println (configuration. SPED.getAirDataRate ()); Serial.print (F ("OptionTrans:")); Serial.print (configuration. OPTION.fixedTransmission, BIN); Serial.print (" ->"); Serial.println (configuration. OPTION.getFixedTransmissionDescription ()); Serial.print (F ("OptionPullup:")); Serial.print (configuration. OPTION.ioDriveMode, BIN); Serial.print (" ->"); Serial.println (configuration. OPTION.getIODroveModeDescription ()); Serial.print (F ("OptionWakeup:")); Serial.print (configuration. OPTION.wirelessWakeupTime, BIN); Serial.print (" ->"); Serial.println (configuration. OPTION.getWirelessWakeUPTimeDescription ()); Serial.print (F ("OptionFEC:")); Serial.print (configuration. OPTION.fec, BIN); Serial.print (" ->"); Serial.println (configuration. OPTION.getFECDescription ()); Serial.print (F ("OptionPower:")); Serial.print (configuration. OPTION.transmissionPower, BIN); Serial.print (" ->"); Serial.println (configuration. OPTION.getTransmissionPowerDescription ());
Με τον ίδιο τρόπο, το setConfiguration θέλει μια δομή διαμόρφωσης, οπότε πιστεύω ότι ο καλύτερος τρόπος διαχείρισης της διαμόρφωσης είναι να ανακτήσετε την τρέχουσα, να εφαρμόσετε τη μόνη αλλαγή που χρειάζεστε και να την ορίσετε ξανά.
ResponseStatus setConfiguration (Διαμόρφωση διαμόρφωσης, PROGRAM_COMMAND saveType = WRITE_CFG_PWR_DWN_LOSE);
η ρύθμιση παραμέτρων είναι η επίκαιρη εμφάνιση, το saveType σας επιτρέπει να επιλέξετε εάν η αλλαγή γίνει μόνιμα μόνο για την τρέχουσα περίοδο λειτουργίας.
ResponseStructContainer c; c = e32ttl100.getConfiguration (); // Είναι σημαντικό να λάβετε δείκτη διαμόρφωσης πριν από κάθε άλλη λειτουργία Configuration configuration = *(Configuration *) c.data; Serial.println (c.status.getResponseDescription ()); Serial.println (c.status.code); printParameters (διαμόρφωση); configuration. ADDL = 0x0; configuration. ADDH = 0x1; configuration. CHAN = 0x19; configuration. OPTION.fec = FEC_0_OFF; configuration. OPTION.fixedTransmission = FT_TRANSPARENT_TRANSMISSION; configuration. OPTION.ioDriveMode = IO_D_MODE_PUSH_PULLS_PULL_UPS; configuration. OPTION.transmissionPower = POWER_17; configuration. OPTION.wirelessWakeupTime = WAKE_UP_1250; configuration. SPED.airDataRate = AIR_DATA_RATE_011_48; configuration. SPED.uartBaudRate = UART_BPS_115200; configuration. SPED.uartParity = MODE_00_8N1; // Η ρύθμιση διαμόρφωσης άλλαξε και ορίστηκε ώστε να μην διατηρείται η διαμόρφωση ResponseStatus rs = e32ttl100.setConfiguration (διαμόρφωση, WRITE_CFG_PWR_DWN_LOSE); Serial.println (rs.getResponseDescription ()); Serial.println (rs.code); printParameters (διαμόρφωση);
Όλες οι παράμετροι διαχειρίζονται ως σταθερές:
Βήμα 10: Βασική επιλογή διαμόρφωσης
Βήμα 11: Αποστολή μηνύματος λήψης
Πρώτα πρέπει να εισαγάγουμε μια απλή αλλά χρήσιμη μέθοδο για να ελέγξουμε αν υπάρχει κάτι στο buffer λήψης
int διαθέσιμο ();
Απλώς επιστρέφει πόσα byte έχετε στην τρέχουσα ροή.
Βήμα 12: Κανονική λειτουργία μετάδοσης
Η κανονική/διαφανής λειτουργία μετάδοσης χρησιμοποιείται για την αποστολή μηνυμάτων σε όλες τις συσκευές με την ίδια διεύθυνση και το ίδιο κανάλι.
Υπάρχουν πολλοί τρόποι αποστολής/λήψης μηνυμάτων, θα εξηγήσουμε λεπτομερώς:
ResponseStatus sendMessage (const String message);
ResponseContainer دریافتMessage ();
Η πρώτη μέθοδος είναι το sendMessage και χρησιμοποιείται για την αποστολή μιας συμβολοσειράς σε μια συσκευή σε κανονική λειτουργία.
ResponseStatus rs = e32ttl.sendMessage ("Prova"); Serial.println (rs.getResponseDescription ());
Η άλλη συσκευή κάνει απλά στον βρόχο
if (e32ttl.available ()> 1) {ResponseContainer rs = e32ttl.receiveMessage (); Μήνυμα συμβολοσειράς = rs.data; // Λάβετε πρώτα τα δεδομένα Serial.println (rs.status.getResponseDescription ()); Serial.println (μήνυμα); }
Βήμα 13: Διαχείριση δομής
Εάν θέλετε να στείλετε μια σύνθετη δομή, μπορείτε να χρησιμοποιήσετε αυτήν τη μέθοδο
ResponseStatus sendMessage (const void *message, const uint8_t size); ResponseStructContainer دریافتMessage (μέγεθος uint8_t);
Χρησιμοποιείται για την αποστολή strucutre, για παράδειγμα:
struct Messaggione {char type [5]; char μήνυμα [8]; bool mitico? }; struct Messaggione messaggione = {"TEMP", "Peple", true}; ResponseStatus rs = e32ttl.sendMessage (& messaggione, sizeof (Messaggione)); Serial.println (rs.getResponseDescription ());
και στην άλλη πλευρά μπορείτε να λάβετε το μήνυμα έτσι
ResponseStructContainer rsc = e32ttl.receiveMessage (sizeof (Messaggione)); struct Messaggione messaggione = *(Messaggione *) rsc.data; Serial.println (messaggione.message); Serial.println (messaggione.mitico);
Διαβάστε μερική δομή
Εάν θέλετε να διαβάσετε το πρώτο μέρος του μηνύματος για να διαχειριστείτε περισσότερους τύπους strucutre, μπορείτε να χρησιμοποιήσετε αυτήν τη μέθοδο.
ResponseContainer ReceInitialMessage (μέγεθος uint8_t);
Το δημιουργώ για να λαμβάνω μια συμβολοσειρά με τύπο ή άλλο για να προσδιορίσω τη δομή για φόρτωση.
struct Messaggione {// Μερικό strucutre χωρίς μήνυμα πληκτρολογίου [8]; bool mitico? }; τύπος κάρβουνο [5]; // πρώτο μέρος της δομής ResponseContainer rs = e32ttl.receiveInitialMessage (sizeof (τύπος)); // Τοποθετήστε συμβολοσειρά σε έναν πίνακα char (δεν απαιτείται) memcpy (τύπος, rs.data.c_str (), sizeof (τύπος)); Serial.println ("ΔΙΑΒΑΣΤΕ ΤΥΠΟ:"); Serial.println (rs.status.getResponseDescription ()); Serial.println (τύπος); // Διαβάστε την υπόλοιπη δομή ResponseStructContainer rsc = e32ttl.receiveMessage (sizeof (Messaggione)); struct Messaggione messaggione = *(Messaggione *) rsc.data;
Βήμα 14: Σταθερή λειτουργία αντί για κανονική λειτουργία
Με τον ίδιο τρόπο δημιουργώ ένα σύνολο μεθόδων για χρήση με σταθερή μετάδοση
Σταθερή μετάδοση
Πρέπει να αλλάξετε μόνο τη μέθοδο αποστολής, επειδή η συσκευή προορισμού δεν λαμβάνει το προοίμιο με τη Διεύθυνση και το κανάλι που ρυθμίζει τη σταθερή λειτουργία.
Έτσι για το String μήνυμα που έχετε
ResponseStatus sendFixedMessage (byte ADDL, byte ADDH, byte CHAN, const String message); ResponseStatus sendBroadcastFixedMessage (byte CHAN, const String message);
και για δομή που έχετε
ResponseStatus sendFixedMessage (byte ADDL, byte ADDH, byte CHAN, const void *message, const uint8_t size); ResponseStatus sendBroadcastFixedMessage (byte CHAN, const void *message, const uint8_t size);
Εδώ ένα απλό παράδειγμα
ResponseStatus rs = e32ttl.sendFixedMessage (0, 0, 0x17, & messaggione, sizeof (Messaggione)); // ResponseStatus rs = e32ttl.sendFixedMessage (0, 0, 0x17, "Ciao");
Η σταθερή μετάδοση έχει περισσότερα σενάρια
Εάν στέλνετε σε μια συγκεκριμένη συσκευή (δεύτερα σενάρια Σταθερή μετάδοση), πρέπει να προσθέσετε ADDL, ADDH και CHAN για να το προσδιορίσετε απευθείας.
ResponseStatus rs = e32ttl.sendFixedMessage (2, 2, 0x17, "Message to a device");
Εάν θέλετε να στείλετε ένα μήνυμα σε όλες τις συσκευές σε ένα καθορισμένο κανάλι, μπορείτε να χρησιμοποιήσετε αυτήν τη μέθοδο.
ResponseStatus rs = e32ttl.sendBroadcastFixedMessage (0x17, "Μήνυμα σε συσκευές καναλιού");
Εάν θέλετε να λαμβάνετε όλα τα μηνύματα μετάδοσης στο δίκτυο, πρέπει να ορίσετε το ADDH και το ADDL με BROADCAST_ADDRESS.
ResponseStructContainer c; c = e32ttl100.getConfiguration (); // Είναι σημαντικό να λάβετε δείκτη διαμόρφωσης πριν από όλες τις άλλες λειτουργίες Configuration configuration = *(Configuration *) c.data; Serial.println (c.status.getResponseDescription ()); Serial.println (c.status.code); printParameters (διαμόρφωση); configuration. ADDL = BROADCAST_ADDRESS; configuration. ADDH = BROADCAST_ADDRESS; // Η ρύθμιση διαμόρφωσης άλλαξε και ορίστηκε ώστε να μην διατηρείται η διαμόρφωση ResponseStatus rs = e32ttl100.setConfiguration (διαμόρφωση, WRITE_CFG_PWR_DWN_LOSE); Serial.println (rs.getResponseDescription ()); Serial.println (rs.code); printParameters (διαμόρφωση);
Βήμα 15: Ευχαριστώ
Τώρα έχετε όλες τις πληροφορίες για να κάνετε τη δουλειά σας, αλλά νομίζω ότι είναι σημαντικό να δείξετε κάποια ρεαλιστικά παραδείγματα για να κατανοήσετε καλύτερα όλες τις δυνατότητες.
- Συσκευή LoRa E32 για Arduino, esp32 ή esp8266: ρυθμίσεις και βασική χρήση
- Συσκευή LoRa E32 για Arduino, esp32 ή esp8266: βιβλιοθήκη
- Συσκευή LoRa E32 για Arduino, esp32 ή esp8266: διαμόρφωση
- Συσκευή LoRa E32 για Arduino, esp32 ή esp8266: σταθερή μετάδοση
- Συσκευή LoRa E32 για Arduino, esp32 ή esp8266: εξοικονόμηση ενέργειας και αποστολή δομημένων δεδομένων
Συνιστάται:
GPSDO YT, Disciplin Oscillator 10Mhz Reference Frequency. Χαμηλό κόστος. Ακριβής .: 3 βήματα
GPSDO YT, Disciplin Oscillator 10Mhz Reference Frequency. Χαμηλό κόστος. Ακριβές .: ******************************************* ******************************* STOP STOP STOP STOP STOP STOP STOP STOP STOP Αυτό είναι ένα ξεπερασμένο έργο. Αντ 'αυτού ελέγξτε το νέα έκδοση οθόνης 2x16 LCD που διατίθεται εδώ: https: //www.instructables.com/id
LoRa Remote Control Messenger With TFT 1,8 "για αποστάσεις έως 8km: 8 βήματα
LoRa Remote Control Messenger With TFT 1,8 "για αποστάσεις έως 8χλμ: Συνδέστε το έργο στο φορητό υπολογιστή ή το τηλέφωνό σας και, στη συνέχεια, συνομιλήστε μεταξύ των συσκευών χωρίς internet ή SMS χρησιμοποιώντας μόνο το LoRa. Γεια σας, τι γίνεται, παιδιά; Akarsh εδώ από το CETech. Αυτό Το PCB διαθέτει επίσης οθόνη και 4 κουμπιά που μπορούν να χρησιμοποιηθούν ως τηλεχειριστήριο για
Τρισδιάστατη εκτύπωση - Χαμηλό κόστος Lightsaber!: 12 βήματα
Τρισδιάστατη εκτύπωση - Χαμηλό κόστος Lightsaber !: Χαμηλού κόστους, τρισδιάστατη εκτύπωση και πτυσσόμενη φωτόσπαθο. Το RGB LED επιτρέπει την επιλογή μεταξύ κόκκινου, πράσινου και μπλε άξονα, τα οποία μπορούν να επιλεγούν χρησιμοποιώντας τον περιστροφικό διακόπτη που βρίσκεται στην λαβή του Lightsaber. Η πτυσσόμενη φύση του άξονα το κάνει να
Μεγάλη εμβέλεια, 1,8χλμ., Ασύρματη επικοινωνία Arduino έως Arduino με το HC-12 .: 6 βήματα (με εικόνες)
Long Range, 1,8km, Arduino to Arduino Wireless Communication With the HC-12 .: Σε αυτό το εκπαιδευτικό πρόγραμμα θα μάθετε πώς να επικοινωνείτε μεταξύ του Arduinos σε μεγάλη απόσταση έως 1,8km σε εξωτερικούς χώρους. Το HC-12 είναι μια ασύρματη σειριακή θύρα ενότητα επικοινωνίας που είναι πολύ χρήσιμη, εξαιρετικά ισχυρή και εύκολη στη χρήση. Αρχικά θα αφήσετε
UDuino: Συμβατός πίνακας ανάπτυξης Arduino με πολύ χαμηλό κόστος: 7 βήματα (με εικόνες)
UDuino: Συμβατός πίνακας ανάπτυξης Arduino με πολύ χαμηλό κόστος: Οι πίνακες Arduino είναι εξαιρετικοί για την πρωτοτυπία. Ωστόσο, γίνονται αρκετά ακριβά όταν έχετε πολλά ταυτόχρονα έργα ή χρειάζεστε πολλούς πίνακες ελεγκτών για ένα μεγαλύτερο έργο. Υπάρχουν μερικές εξαιρετικές, φθηνότερες εναλλακτικές λύσεις (Boarduino, Freeduino), αλλά