- מודול RF nRF24L01
- תרשים מעגל
- תכנות פטל פי לשליחת הודעה באמצעות nRF24l01
- תכנות Arduino UNO לקבלת הודעה באמצעות nRF24l01
מעצבים משתמשים במערכות תקשורת אלחוטיות רבות כמו Bluetooth Low Energy (BLE 4.0), Zigbee, ESP8266 Wi-Fi Modules, 433MHz RF Modules, Lora, nRF וכו 'ובחירת המדיום תלויה בסוג היישום שהוא משמש בו. בין בסך הכל, מדיום אלחוטי פופולרי אחד לתקשורת רשת מקומית הוא nRF24L01. מודולים אלה פועלים על 2.4GHz (פס ISM) עם קצב שידור בין 250Kbps ל -2Mbps וזה חוקי במדינות רבות ויכול לשמש ביישומים תעשייתיים ורפואיים. כמו כן, נטען כי בעזרת אנטנות מתאימות המודולים הללו יכולים לשדר ולקבל אותות עד למרחק של 100 מטר ביניהם. בעבר השתמשנו ב- nRF24L01 עם Arduino כדי לשלוט על מנוע סרוו וליצור חדר צ'ט.
כאן נשתמש במודול משדר RF RF nRF24L01 - 2.4 GHz עם 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 הם משדר מודולים, כלומר כל מודול יכול גם לשלוח ולקבל נתונים אבל מאז הם חצי דופלקס הם גם יכולים לשלוח או לקבל נתונים בזמן. למודול יש את ה- IC nRF24L01 הגנרי ממוליכים למחצה נורדיים שאחראי על העברת וקליטת נתונים. ה- IC מתקשר באמצעות פרוטוקול SPI ומכאן ניתן להתממשק בקלות עם כל מיקרו-בקרים. זה נעשה הרבה יותר קל עם Arduino מכיוון שהספריות זמינות. תרשים הפינים של מודול nRF24L01 תקן מוצג להלן
המודול פועל על מתח ההפעלה מ- 1.9 וולט ל -3.6 וולט (בדרך כלל 3.3 וולט) והוא צורך פחות מאוד זרם של 12mA בלבד במהלך פעולה רגילה מה שהופך אותו לחסכוני בסוללה ולכן יכול אפילו לפעול על תאי מטבע. למרות שמתח ההפעלה הוא 3.3 וולט, רוב הפינים סובלים 5 וולט ולכן ניתן להתממשק ישירות למיקרו בקרים 5V כמו ארדואינו. יתרון נוסף בשימוש במודולים אלה הוא שבכל מודול יש 6 צינורות. כלומר, כל מודול יכול לתקשר עם 6 מודולים אחרים להעברה או לקבל נתונים. זה הופך את המודול למתאים ליצירת רשתות כוכבים או רשת ביישומי IoT. כמו כן יש להם טווח כתובות רחב של 125 תעודות זהות ייחודיות, ולכן באזור סגור נוכל להשתמש ב -125 ממודולים אלה מבלי להפריע זה לזה.
תרשים מעגל
nRF24L01 עם Arduino:
תרשים המעגל לחיבור nRF24L01 עם Arduino קל ואין בו הרבה רכיבים. ה- nRF24l01 יחובר על ידי ממשק SPI ו- LCD 16x2 מממשק לפרוטוקול I2C המשתמש בשני חוטים בלבד.
nRF24L01 עם Raspberry Pi:
תרשים המעגל לחיבור nRF24L01 עם Raspberry Pi הוא גם פשוט מאוד ורק ממשק SPI משמש לחיבור Raspberry Pi ו- nRF24l01.
תכנות פטל פי לשליחת הודעה באמצעות nRF24l01
תכנות ה- Raspberry Pi יתבצע באמצעות Python3. אתה יכול גם להשתמש ב- C / C ++ כ- Arduino. אבל יש כבר ספרייה זמינה עבור nRF24l01 בפיתון שניתן להוריד מדף github. שים לב שתוכנית הפיתון והספרייה צריכים להיות באותה תיקייה, או שתוכנית הפיתון לא תוכל למצוא את הספרייה. לאחר הורדת הספרייה פשוט חילצו וצרו תיקיה בה כל התוכניות וקבצי הספריה יהיו חנויות. לאחר התקנת הספרייה, פשוט התחל לכתוב את התוכנית. התוכנית מתחילה בהכללת ספריות אשר ישמשו בקוד כמו ספריית GPIO ייבוא לגישה ל- Raspberry Pi GPIO וזמן ייבוא. לגישה לפונקציות הקשורות לזמן. אם אתה חדש ב- Raspberry Pi אז חזור להתחיל עם Raspberry pi.
ייבא RPi.GPIO כ- GPIO ייבוא זמן ייבוא spidev מ lib_nrf24 ייבא NRF24
הגדר את מצב ה- GPIO ב"ערוץ Broadcom SOC ". פירוש הדבר שאתה מתייחס לסיכות לפי מספר "ערוץ Broadcom SOC", אלה המספרים אחרי "GPIO" (למשל GPIO01, GPIO02…). אלה אינם מספרי הלוח.
GPIO.setmode (GPIO.BCM)
לאחר מכן נגדיר את כתובת הצינור. כתובת זו חשובה על מנת לתקשר עם מקלט הארדואינו. הכתובת תהיה בקוד ה- hex.
צינורות =,]
התחל את הרדיו באמצעות GPIO08 כ- CE ו- GPIO25 כסיכות CSN.
radio.begin (0, 25)
הגדירו את גודל המטען כ- 32 ביט, כתובת הערוץ כ- 76, קצב נתונים של 1 מגה לשנייה ורמות הספק כמינימום.
radio.setPayloadSize (32) radio.setChannel (0x76) radio.setDataRate (NRF24.BR_1MBPS) radio.setPALevel (NRF24.PA_MIN)
פתח את הצינורות כדי להתחיל לכתוב את הנתונים ולהדפיס את הפרטים הבסיסיים של nRF24l01.
radio.openWritingPipe (צינורות) radio.printDetails ()
הכן הודעה בטופס המחרוזת. הודעה זו תישלח ל- Arduino UNO.
sendMessage = list ("היי..ארדואינו UNO") ואילו len (sendMessage) <32: sendMessage.append (0)
התחל לכתוב לרדיו והמשיך לכתוב את המחרוזת השלמה עד שהרדיו יהיה זמין. יחד עם זה, רשמו את השעה והדפיסו הצהרת ניפוי באגים למסירת ההודעות.
בעוד True: start = time.time () radio.write (sendMessage) הדפס ("שלח את ההודעה: {}". פורמט (sendMessage)) שלח radio.startListening ()
אם המחרוזת הושלמה והצינור סגור, הדפס הודעת ניפוי שגיאות זמן קצוב.
בעוד לא radio.available (0): time.sleep (1/100) אם time.time () - התחל> 2: הדפסה ("תם הזמן.") הודעה # להדפיס שגיאה אם הרדיו מנותק או לא מתפקד יותר לשבור
הפסק להקשיב לרדיו וסגור את התקשורת והפעל מחדש את התקשורת לאחר 3 שניות כדי לשלוח הודעה נוספת.
radio.stopListening () # זמן רדיו קרוב. שינה (3) # נותן עיכוב של 3 שניות
תוכנית פטל פשוטה להבנה אם אתה מכיר את יסודות הפיתון. תוכנית פייתון שלמה ניתנת בסוף ההדרכה.
ביצוע תוכנית פייתון ב- Raspberry Pi:
ביצוע התוכנית קל מאוד לאחר ביצוע השלבים הבאים:
- שמור את קבצי Python Program ו- Library באותה תיקייה.
- שם קובץ התוכנית שלי לשולח הוא nrfsend.py וגם כל הקבצים נמצאים באותה תיקייה
- עבור למסוף הפיקוד של פטל פי. ואתר את קובץ תוכנית הפיתון באמצעות הפקודה "cd".
- ואז פתח את התיקיה וכתוב את הפקודה " sudo python3 your_program.py " ולחץ על Enter. תוכל לראות את הפרטים הבסיסיים של nRf24 והרדיו יתחיל לשלוח את ההודעות לאחר כל 3 שניות. ניפוי הבאגים להודעות יוצג לאחר שליחתו עם כל התווים שנשלחו.
עכשיו נראה את אותה התוכנית כמו המקלט בארגון UNO Arduino.
תכנות 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, pipe);
התחל בתקשורת I2C ואתחל את תצוגת ה- LCD.
Wire.begin (); lcd.begin (); lcd.home (); lcd.print ("מוכן לקבל");
התחל להאזין לרדיו להודעות נכנסות והגדר את אורך ההודעה כ- 32 בתים.
radio.startListening (); char receivedMessage = {0}
אם מצורף רדיו התחל לקרוא את ההודעה ושמור אותה. הדפיסו את ההודעה לצג הסדרתי וגם הדפיסו לתצוגה עד שתגיע ההודעה הבאה. עצור את הרדיו כדי להאזין ולנסות שוב לאחר זמן מה. הנה זה 10 מיקרו שניות.
אם (radio.available ()) { radio.read (receivedMessage, sizeof (receivedMessage)); Serial.println (receivedMessage); Serial.println ("כיבוי הרדיו."); radio.stopListening (); מחרוזת stringMessage (receivedMessage); lcd.clear (); עיכוב (1000); lcd.print (stringMessage); }
העלה את הקוד השלם שניתן בסוף ל- UND Arduino והמתין לקבלת ההודעה.
זה מסיים את ההדרכה המלאה לשליחת הודעה באמצעות Raspberry Pi & nRf24l01 וקבלת אותה באמצעות Arduino UNO & nRF24l01. ההודעה יודפסה על גבי LCD 16x2. כתובות הצינור חשובות מאוד גם בארדואינו UNO וגם ב- Raspberry Pi. אם אתה נתקל בקשיים כלשהם בעת ביצוע פרויקט זה, אנא הגיב למטה או פנה לפורום לדיון מפורט יותר.
בדוק גם את סרטון ההדגמה למטה.