- Η ενότητα RF nRF24L01
- Διάγραμμα κυκλώματος
- Προγραμματισμός του Raspberry Pi για αποστολή μηνύματος χρησιμοποιώντας το nRF24l01
- Προγραμματισμός του Arduino UNO για λήψη μηνύματος χρησιμοποιώντας το nRF24l01
Οι σχεδιαστές χρησιμοποιούν πολλά ασύρματα συστήματα επικοινωνίας όπως Bluetooth Low Energy (BLE 4.0), Zigbee, ESP8266 Wi-Fi Modules, 433MHz RF Modules, Lora, nRF κ.λπ. Και η επιλογή του μέσου εξαρτάται από τον τύπο της εφαρμογής στην οποία χρησιμοποιείται. Όλα, ένα δημοφιλές ασύρματο μέσο για τοπική επικοινωνία δικτύου είναι το nRF24L01. Αυτές οι μονάδες λειτουργούν σε 2,4GHz (ζώνη ISM) με ρυθμό baud από 250Kbps έως 2Mbps, το οποίο είναι νόμιμο σε πολλές χώρες και μπορεί να χρησιμοποιηθεί σε βιομηχανικές και ιατρικές εφαρμογές. Υποστηρίζεται επίσης ότι με κατάλληλες κεραίες αυτές οι μονάδες μπορούν να μεταδίδουν και να λαμβάνουν σήματα σε απόσταση 100 μέτρων μεταξύ τους. Χρησιμοποιήσαμε προηγουμένως το nRF24L01 με το Arduino για τον έλεγχο του σερβοκινητήρα και τη δημιουργία μιας αίθουσας συνομιλίας.
Εδώ θα χρησιμοποιήσουμε το nRF24L01 - 2.4GHz RF Transceiver module με Arduino UNO και Raspberry Pi για να δημιουργήσουμε μια ασύρματη επικοινωνία μεταξύ τους. Το Raspberry pi θα λειτουργήσει ως πομπός και το Arduino Uno θα ακούσει το Raspberry Pi και θα εκτυπώσει το μήνυμα που έστειλε το Raspberry Pi χρησιμοποιώντας το nRF24L01 σε οθόνη LCD 16x2. Το nRF24L01 έχει επίσης ενσωματωμένες δυνατότητες BLE και μπορεί επίσης να επικοινωνεί ασύρματα χρησιμοποιώντας το BLE.
Το σεμινάριο χωρίζεται σε δύο ενότητες. Το πρώτο τμήμα θα περιλαμβάνει τη διασύνδεση του nRF24L01 με το Arduino για να ενεργεί ως δέκτης και το δεύτερο τμήμα θα περιλαμβάνει τη διασύνδεση του nRF24L01 με το Raspberry Pi για να ενεργεί ως πομπός. Ο πλήρης κωδικός και για τις δύο ενότητες με βίντεο εργασίας θα επισυναφθεί στο τέλος αυτού του σεμιναρίου.
Η ενότητα RF nRF24L01
Οι μονάδες nRF24L01 είναι μονάδες πομποδέκτη, που σημαίνει ότι κάθε λειτουργική μονάδα μπορεί να στέλνει και να λαμβάνει δεδομένα, αλλά δεδομένου ότι είναι ημι-αμφίδρομη μπορεί είτε να στείλει είτε να λάβει δεδομένα κάθε φορά. Η μονάδα διαθέτει το γενικό ICRR24L01 από Nordic ημιαγωγούς που είναι υπεύθυνος για τη μετάδοση και τη λήψη δεδομένων. Το IC επικοινωνεί χρησιμοποιώντας το πρωτόκολλο SPI και ως εκ τούτου μπορεί να συνδεθεί εύκολα με οποιονδήποτε μικροελεγκτή. Γίνεται πολύ πιο εύκολο με το Arduino, καθώς οι βιβλιοθήκες είναι άμεσα διαθέσιμες. Τα pinouts μιας τυπικής μονάδας nRF24L01 παρουσιάζονται παρακάτω
Η μονάδα έχει τάση λειτουργίας από 1,9V έως 3,6V (συνήθως 3,3V) και καταναλώνει πολύ λιγότερο ρεύμα μόνο 12mA κατά τη διάρκεια της κανονικής λειτουργίας, γεγονός που το καθιστά αποδοτικό στην μπαταρία και ως εκ τούτου μπορεί να λειτουργήσει ακόμη και σε κελιά νομισμάτων. Παρόλο που η τάση λειτουργίας είναι 3,3V, οι περισσότερες ακίδες είναι ανθεκτικές στα 5V και ως εκ τούτου μπορούν να συνδεθούν απευθείας με μικροελεγκτές 5V όπως το Arduino. Ένα άλλο πλεονέκτημα της χρήσης αυτών των ενοτήτων είναι ότι, κάθε ενότητα έχει 6 αγωγούς. Δηλαδή, κάθε ενότητα μπορεί να επικοινωνήσει με 6 άλλες ενότητες για μετάδοση ή λήψη δεδομένων. Αυτό καθιστά τη μονάδα κατάλληλη για τη δημιουργία δικτύων αστεριού ή πλέγματος σε εφαρμογές IoT. Επίσης, έχουν ένα ευρύ φάσμα διευθύνσεων 125 μοναδικών αναγνωριστικών, επομένως σε μια κλειστή περιοχή μπορούμε να χρησιμοποιήσουμε 125 από αυτές τις ενότητες χωρίς να παρεμβαίνουμε.
Διάγραμμα κυκλώματος
nRF24L01 με Arduino:
Το διάγραμμα κυκλώματος για τη σύνδεση του nRF24L01 με το Arduino είναι εύκολο και δεν έχει πολλά εξαρτήματα. Το nRF24l01 θα συνδεθεί με διασύνδεση SPI και η οθόνη LCD 16x2 διασυνδέεται με πρωτόκολλο I2C που χρησιμοποιεί μόνο δύο καλώδια.
nRF24L01 με Raspberry Pi:
Το διάγραμμα κυκλώματος για τη σύνδεση nRF24L01 με Raspberry Pi είναι επίσης πολύ απλό και μόνο η διασύνδεση SPI χρησιμοποιείται για τη σύνδεση Raspberry Pi και nRF24l01.
Προγραμματισμός του Raspberry Pi για αποστολή μηνύματος χρησιμοποιώντας το nRF24l01
Ο προγραμματισμός του Raspberry Pi θα γίνει χρησιμοποιώντας το Python3. Μπορείτε επίσης να χρησιμοποιήσετε το C / C ++ ως Arduino. Αλλά υπάρχει ήδη μια βιβλιοθήκη διαθέσιμη για το nRF24l01 στο python, η οποία μπορεί να ληφθεί από τη σελίδα github. Σημειώστε ότι το πρόγραμμα python και η βιβλιοθήκη θα πρέπει να βρίσκονται στον ίδιο φάκελο, διαφορετικά το πρόγραμμα python δεν θα μπορεί να εντοπίσει τη βιβλιοθήκη. Μετά τη λήψη της βιβλιοθήκης απλώς εξαγάγετε και δημιουργήστε ένα φάκελο όπου θα αποθηκεύονται όλα τα προγράμματα και τα αρχεία της βιβλιοθήκης. Όταν ολοκληρωθεί η εγκατάσταση της βιβλιοθήκης, απλώς ξεκινήστε να γράφετε το πρόγραμμα. Το πρόγραμμα ξεκινά με τη συμπερίληψη βιβλιοθηκών που θα χρησιμοποιηθούν σε κώδικα όπως εισαγωγή βιβλιοθήκης GPIO για πρόσβαση στο GPIO Raspberry Pi και χρόνος εισαγωγής για πρόσβαση στις συναρτήσεις του χρόνου. Εάν είστε νέοι στο Raspberry Pi τότε επιστρέψτε στο να ξεκινήσετε με το Raspberry pi.
εισαγωγή RPi.GPIO ως GPIO εισαγωγή χρόνου εισαγωγής spidev από lib_nrf24 εισαγωγή NRF24
Ρυθμίστε τη λειτουργία GPIO στο " κανάλι Broadcom SOC". Αυτό σημαίνει ότι αναφέρεστε στις ακίδες με τον αριθμό "Broadcom SOC channel", αυτοί είναι οι αριθμοί μετά το "GPIO" (για παράδειγμα GPIO01, GPIO02…). Αυτοί δεν είναι οι αριθμοί πινάκων.
GPIO.setmode (GPIO.BCM)
Στη συνέχεια θα το ρυθμίσουμε τη διεύθυνση του σωλήνα. Αυτή η διεύθυνση είναι σημαντική για την επικοινωνία με τον δέκτη Arduino. Η διεύθυνση θα είναι στον δεκαεξαδικό κωδικό.
σωλήνες =,]
Ξεκινήστε το ραδιόφωνο χρησιμοποιώντας GPIO08 ως CE και GPIO25 ως καρφίτσες CSN.
radio.begin (0, 25)
Ορίστε το μέγεθος ωφέλιμου φορτίου ως 32 bit, τη διεύθυνση καναλιού ως 76, το ρυθμό δεδομένων 1 mbps και το επίπεδο ισχύος ως ελάχιστο
radio.setPayloadSize (32) radio.setChannel (0x76) radio.setDataRate (NRF24.BR_1MBPS) radio.setPALevel (NRF24.PA_MIN)
Ανοίξτε τους σωλήνες για να αρχίσετε να γράφετε τα δεδομένα και να εκτυπώσετε τις βασικές λεπτομέρειες του nRF24l01.
radio.openWritingPipe (σωλήνες) radio.print Λεπτομέρειες ()
Προετοιμάστε ένα μήνυμα με τη μορφή συμβολοσειράς. Αυτό το μήνυμα θα σταλεί στο Arduino UNO.
sendMessage = list ("Hi..Arduino UNO") ενώ len (sendMessage) <32: sendMessage.append (0)
Ξεκινήστε να γράφετε στο ραδιόφωνο και συνεχίστε να γράφετε ολόκληρη τη συμβολοσειρά μέχρι να είναι διαθέσιμο το ραδιόφωνο. Μαζί με αυτό, σημειώστε την ώρα και εκτυπώστε μια δήλωση εντοπισμού σφαλμάτων παράδοσης μηνυμάτων.
ενώ True: start = time.time () radio.write (sendMessage) εκτύπωση ("Στάλθηκε το μήνυμα: {}". format (sendMessage)) αποστολή radio.startListening ()
Εάν η συμβολοσειρά έχει ολοκληρωθεί και ο σωλήνας είναι κλειστός, εκτυπώστε ένα μήνυμα εντοπισμού σφαλμάτων που έχει λήξει.
ενώ δεν είναι radio.available (0): time.sleep (1/100) if time.time () - start> 2: print ("Timed out.") # μήνυμα σφάλματος εκτύπωσης εάν το ραδιόφωνο αποσυνδεθεί ή δεν λειτουργεί πια διακοπή
Σταματήστε να ακούτε ραδιόφωνο και κλείστε την επικοινωνία και επανεκκινήστε την επικοινωνία μετά από 3 δευτερόλεπτα για να στείλετε άλλο μήνυμα.
radio.stopListening () # close radio time.sleep (3) # δίνουν καθυστέρηση 3 δευτερολέπτων
Το πρόγραμμα Raspberry είναι απλό να γίνει κατανοητό εάν γνωρίζετε τα βασικά του python. Πλήρες πρόγραμμα Python δίνεται στο τέλος του σεμιναρίου.
Εκτέλεση του προγράμματος Python στο Raspberry Pi:
Η εκτέλεση του προγράμματος είναι πολύ εύκολη αφού ακολουθήσετε τα παρακάτω βήματα:
- Αποθηκεύστε τα αρχεία προγράμματος και βιβλιοθήκης Python στον ίδιο φάκελο.
- Το όνομα αρχείου προγράμματος μου για το Sender είναι nrfsend.py και επίσης όλα τα αρχεία βρίσκονται στον ίδιο φάκελο
- Μεταβείτε στο Command Terminal του Raspberry Pi. Και εντοπίστε το αρχείο προγράμματος python χρησιμοποιώντας την εντολή "cd".
- Στη συνέχεια, ανοίξτε το φάκελο και γράψτε την εντολή " sudo python3 your_program.py " και πατήστε enter. Θα μπορείτε να δείτε τις βασικές λεπτομέρειες του nRf24 και το ραδιόφωνο θα αρχίσει να στέλνει τα μηνύματα μετά από κάθε 3 δευτερόλεπτα. Το μήνυμα εντοπισμού σφαλμάτων θα εμφανιστεί αφού ολοκληρωθεί η αποστολή με όλους τους χαρακτήρες που αποστέλλονται.
Τώρα θα δούμε το ίδιο πρόγραμμα με τον δέκτη στο Arduino UNO.
Προγραμματισμός του Arduino UNO για λήψη μηνύματος χρησιμοποιώντας το nRF24l01
Ο προγραμματισμός του Arduino UNO είναι παρόμοιος με τον προγραμματισμό του Raspberry Pi. Θα ακολουθήσουμε παρόμοιες μεθόδους αλλά με διαφορετική γλώσσα προγραμματισμού και βήματα. Τα βήματα θα περιλαμβάνουν το τμήμα ανάγνωσης του nRF24l01. Μπορείτε να κατεβάσετε τη βιβλιοθήκη για το nRF24l01 για το Arduino από τη σελίδα github. Ξεκινήστε με τη συμπερίληψη των απαραίτητων βιβλιοθηκών. Χρησιμοποιούμε LCD 16x2 χρησιμοποιώντας το I2C Shield, έτσι συμπεριλάβετε τη βιβλιοθήκη Wire.h και επίσης το nRF24l01 είναι διασυνδεδεμένο με το SPI, έτσι συμπεριλάβετε και τη βιβλιοθήκη SPI.
#περιλαμβάνω
Συμπεριλάβετε βιβλιοθήκη RF24 και LCD για πρόσβαση στις λειτουργίες RF24 και LCD.
#περιλαμβάνω
Η διεύθυνση LCD για το I2C είναι 27 και είναι μια οθόνη LCD 16x2 οπότε γράψτε το στη λειτουργία.
LiquidCrystal_I2C lcd (0x27, 16, 2);
Το RF24 συνδέεται με τυπικούς πείρους SPI μαζί με CE στον πείρο 9 και CSN στον πείρο 10.
Ραδιόφωνο RF24 (9, 10);
Ξεκινήστε το ραδιόφωνο, ρυθμίστε το επίπεδο ισχύος και ορίστε το κανάλι σε 76. Επίσης, ορίστε τη διεύθυνση του σωλήνα όπως το Raspberry Pi και ανοίξτε το σωλήνα για ανάγνωση.
radio.begin (); radio.setPALevel (RF24_PA_MAX); radio.setChannel (0x76); const uint64_t pipe = 0xE0E0F1F1E0LL; radio.openReadingPipe (1, σωλήνας);
Ξεκινήστε την επικοινωνία I2C και αρχικοποιήστε την οθόνη LCD.
Wire.begin (); lcd.begin (); lcd.home (); lcd.print ("Έτοιμο για λήψη");
Ξεκινήστε να ακούτε ραδιόφωνο για εισερχόμενα μηνύματα και ορίστε το μήκος του μηνύματος ως 32 byte.
radio.startListening (); char diterimaMessage = {0}
Εάν το ραδιόφωνο είναι συνδεδεμένο, αρχίστε να διαβάζετε το μήνυμα και αποθηκεύστε το. Εκτυπώστε το μήνυμα στη σειριακή οθόνη και επίσης εκτυπώστε στην οθόνη μέχρι να φτάσει το επόμενο μήνυμα. Σταματήστε το ραδιόφωνο για να ακούσετε και να προσπαθήσετε ξανά μετά από κάποιο διάστημα. Εδώ είναι 10 μικρο δευτερόλεπτα.
εάν (radio.available ()) { radio.read (diterimaMessage, sizeof (diterimaMessage)); Serial.println (ληφθέν μήνυμα); Serial.println ("Απενεργοποίηση ραδιοφώνου."); radio.stopListening (); String stringMessage (ReceiveMessage); lcd.clear (); καθυστέρηση (1000) lcd.print (stringMessage); }
Ανεβάστε τον πλήρη κωδικό που αναφέρεται στο τέλος του Arduino UNO και περιμένετε να ληφθεί το μήνυμα.
Αυτό ολοκληρώνει το πλήρες σεμινάριο για την αποστολή ενός μηνύματος χρησιμοποιώντας το Raspberry Pi & nRf24l01 και τη λήψη του χρησιμοποιώντας το Arduino UNO & nRF24l01. Το μήνυμα θα εκτυπωθεί στην οθόνη LCD 16x2. Οι διευθύνσεις των σωλήνων είναι πολύ σημαντικές τόσο στο Arduino UNO όσο και στο Raspberry Pi. Εάν αντιμετωπίζετε δυσκολίες κατά την εκτέλεση αυτού του έργου, παρακαλώ σχολιάστε παρακάτω ή επικοινωνήστε με το φόρουμ για πιο λεπτομερή συζήτηση.
Δείτε επίσης το βίντεο επίδειξης παρακάτω.