- חומרים נדרשים
- חיבור פטל פטל עם LoRa
- חיבור Arduino עם LoRa
- pyLoRa עבור פטל פי
- קביעת תצורה של מודול ה- Raspberry Pi for LoRa
- תכנות פטל פאי עבור LoRa
- קוד ארדואינו ל- LoRa לתקשר עם פטל פי
- בדיקת תקשורת LoRa בין פטל פי לארדואינו
LoRa הופכת פופולארית יותר ויותר עם כניסתם של IoT, מכוניות מחוברות, M2M, תעשיה 4.0 וכו '. בגלל יכולתה לתקשר למרחקים ארוכים עם פחות כוח רב, עדיף שהיא משמשת מעצבים לשליחה / קבלה של נתונים מהסוללה. כבר דנו ביסודות של LoRa וכיצד להשתמש ב- LoRa עם Arduino. למרות שהטכנולוגיה נועדה במקור לצומת LoRa כדי לתקשר עם שער LoRa, ישנם תרחישים רבים בהם צומת LoRa צריכה לתקשר עם צומת LoRa אחר כדי להחליף מידע על פני מרחק רב. לכן, במדריך זה נלמד כיצד להשתמש במודול LoRa SX1278 עם Raspberry piלתקשר עם SX1278 אחר המחובר למיקרו-בקר כמו Arduino. שיטה זו יכולה להיות שימושית במקומות רבים מכיוון שהארדואינו יכול לשמש כשרת לאסוף נתונים מחיישנים ולשלוח אותם למרחק רב דרך LoRa ואז ה- Pi המשמש כלקוח יכול לקבל מידע זה ולהעלות אותו אל יכול שכן יש לו גישה לאינטרנט. נשמע מעניין נכון? אז בואו נתחיל.
חומרים נדרשים
- SX1278 433MHz מודול LoRa - 2 מס '
- אנטנת LoRa 433MHz - 2Nos
- ארדואינו UNO- או גרסה אחרת
- פטל פי 3
ההנחה היא כי ה- Raspberry Pi שלך כבר מהבהב עם מערכת הפעלה ומסוגל להתחבר לאינטרנט. אם לא, עקוב אחר ההדרכה תחילת העבודה עם פטל פי לפני שתמשיך. כאן אנו משתמשים ב- Rasbian Jessie המותקן Raspberry Pi 3.
אזהרה: השתמש תמיד במודול SX1278 LoRa שלך עם אנטנות 433 מגה-הרץ; אחרת המודול עלול להיפגע.
חיבור פטל פטל עם LoRa
לפני שניכנס לחבילות התוכנה, בואו ויהיה מוכן לחומרה. SX1278 הוא 16 פינים מודול לורה אשר מתקשר באמצעות SPI על לוגיקה 3.3V. ה- Raspberry pi פועל גם ברמת לוגיקה 3.3V ויש לו גם יציאת SPI מובנית ורגולטור 3.3V. כדי שנוכל לחבר ישירות את מודול ה- LoRa ל- Raspberry Pi. טבלת החיבורים מוצגת להלןפאי פטל | לורה - מודול SX1278 |
3.3 וולט | 3.3 וולט |
קרקע, אדמה | קרקע, אדמה |
GPIO 10 | MOSI |
GPIO 9 | מיסו |
GPIO 11 | SCK |
GPIO 8 | Nss / אפשר |
GPIO 4 | DIO 0 |
GPIO 17 | DIO 1 |
GPIO 18 | DIO 2 |
GPIO 27 | DIO 3 |
GPIO 22 | RST |
אתה יכול גם להשתמש בתרשים המעגל להלן לצורך התייחסות. שים לב שתרשים המעגל נוצר באמצעות מודול RFM9x הדומה מאוד למודול SX1278, ומכאן שהמראה עשוי להיות שונה בתמונה למטה.
החיבורים די פשוטים קדימה, הבעיה היחידה שאתה עשוי להיתקל בה היא שה- SX1278 אינו תואם קרש לחם ולכן עליך להשתמש בחוטי חיבור ישירות כדי ליצור את החיבורים או להשתמש בשני קרשי לחם קטנים כמוצג להלן. כמו כן, מעטים האנשים שמציעים להפעיל את מודול ה- LoRa עם מסילת חשמל נפרדת של 3.3 וולט, מכיוון שה- Pi לא יוכל לספק מספיק זרם. עם זאת, לורה בהיותה מודול הספק נמוך צריכה לעבוד על המעקה 3.3V של Pi, בדקתי אותו וגיליתי שהוא עובד ללא שום בעיה. אבל, בכל זאת קחו את זה עם קורט מלח. הגדרת החיבור שלי של LoRa עם Raspberry pi נראית ככה למטה
חיבור Arduino עם LoRa
החיבור למודול הארדואינו נשאר זהה לזה שהשתמשנו בהדרכה הקודמת שלנו. ההבדל היחיד יהיה במקום להשתמש בספרייה של Sandeep Mistry, נשתמש בספריית Rspreal המבוססת על ראש הרדיו, עליה נדבר בהמשך הפרויקט. המעגל הוא למטה
שוב אתה יכול להשתמש בסיכה 3.3V ב- Arduino Uno או להשתמש בווסת 3.3V נפרד. בפרויקט זה השתמשתי בווסת המתח שעל הלוח. טבלת חיבורי הסיכות מוצגת להלן כדי לעזור לך ליצור את החיבורים בקלות.
מודול LoRa SX1278 | מועצת UNO של ארדואינו |
3.3 וולט | 3.3 וולט |
Gnd | Gnd |
En / Nss | D10 |
G0 / DIO0 | D2 |
SCK | D13 |
מיסו | D12 |
MOSI | D11 |
RST | D9 |
מכיוון שהמודול אינו מתאים לקרש לחם השתמשתי בחוטי החיבור ישירות לביצוע החיבורים. לאחר חיבור ההתקנה של Arduino LoRa ההתקנה תיראה ככה למטה
pyLoRa עבור פטל פי
ישנן חבילות פיתון רבות בהן תוכלו להשתמש עם LoRa. בדרך כלל ה- Raspberry Pi משמש כ- LoRaWAN כדי לקבל נתונים מכמה צמתים של LoRa. אבל, בפרויקט זה המטרה שלנו היא לבצע תקשורת בין עמיתים לעמית בין שני מודולי פטל או בין פטל פטל לארדואינו. אז החלטתי להשתמש בחבילת pyLoRa. יש לו מודולי rpsreal LoRa Arduino ו- Rpsreal LoRa Raspberry pi שניתן להשתמש בהם בארדואינו ובסביבת Raspberry Pi. לעת עתה, בואו נתמקד בסביבת Raspberry Pi.
קביעת תצורה של מודול ה- Raspberry Pi for LoRa
כפי שנאמר קודם, מודול ה- LoRa עובד עם תקשורת SPI, לכן עלינו לאפשר SPI ב- Pi ואז להתקין את חבילת ה- pylora . בצע את הצעדים הבאים כדי לעשות את אותו הדבר לאחר פתיחת חלון המסוף של Pi. שוב, אני משתמש במרק כדי להתחבר ל- Pi שלי, אתה יכול להשתמש בשיטה הנוחה שלך.
שלב 1: היכנס לחלון התצורה באמצעות הפקודה הבאה. כדי לקבל את החלון שלמטה
sudo raspi-config
שלב 2: נווט לאפשרויות הממשק והפעל SPI כפי שמוצג בתמונה למטה. עלינו לאפשר את ממשק ה- SPI מכיוון שכאשר דנו ה- LCD וה- PI מתקשרים באמצעות פרוטוקול SPI
שלב 3: שמור את השינויים וחזור לחלון המסוף. וודא כי pip ו- python מעודכן ואז התקן את חבילת RPi.GPIO באמצעות הפקודה הבאה.
pip להתקין RPi.GPIO
כיתת חבילה זו תעזור לנו לשלוט על סיכת ה- GPIO ב- Pi. אם מותקן בהצלחה המסך שלך ייראה כך
שלב 4: באופן דומה המשך בהתקנת חבילת spidev באמצעות הפקודה הבאה. Spidev הוא מחייב פיתון עבור לינוקס אשר ניתן להשתמש בו לביצוע תקשורת SPI ב- Raspberry Pi.
pip להתקין spidev
אם ההתקנה מצליחה המסוף אמור להיראות כך למטה.
שלב 5: הבא מאפשר להתקין את חבילת pyLoRa באמצעות פקודת pip הבאה. חבילה זו מתקינה את דגמי הרדיו המשויכים ל- LoRa.
pip להתקין את pyLoRa
אם ההתקנה תצליח תראה את המסך הבא.
חבילת PyLoRa תומכת גם בתקשורת מוצפנת אשר ניתן להשתמש בה עם Arduino ו- Raspberry Pi בצורה חלקה. זה ישפר את אבטחת הנתונים בתקשורת שלך. אך עליך להתקין חבילה נפרדת לאחר שלב זה אשר אינני עושה מכיוון שההצפנה אינה במסגרת מדריך זה. תוכל לעקוב אחר קישורי github לעיל לפרטים נוספים.
לאחר מכן, שלב זה באפשרותך להוסיף את נתיב החבילה ל- pi ולנסות עם תוכנית הפיתון שניתנה בסוף. אך לא הצלחתי להוסיף את הנתיב בהצלחה ולכן נאלצתי להוריד ידנית את הספרייה ולהשתמש בו ישירות עבור התוכניות שלי. אז הייתי צריך להמשיך בשלבים הבאים
שלב 6: הורד והתקן את חבילת python-rpi.gpio ואת חבילת spidev באמצעות הפקודה שלהלן.
sudo apt-get install python-rpi.gpio python3-rpi.gpio sudo apt-get install python-spidev python3-spidev
חלון המסוף צריך להציג משהו כזה לאחר שתי ההתקנות.
שלב 7: התקן גם git ואז השתמש בו כדי לשכפל את ספריית הפיתון עבור ה- Raspberry Pi שלנו. אתה יכול לעשות זאת באמצעות הפקודות הבאות.
sudo apt-get install git sudo git clone
לאחר השלמת שלב זה, עליך למצוא את ספריה המשנה SX127x בתיקיית הבית של Raspberry Pi. זה יכלול את כל הקבצים הנדרשים המשויכים לספריה.
תכנות פטל פאי עבור LoRa
בתקשורת LoRa של עמית לעמית, המודול שמעביר את המידע נקרא שרת והמודול שמקבל את המידע נקרא לקוח. ברוב המקרים ישמש את הארדואינו בשטח עם חיישן למדידת נתונים וה- Pi ישמש לקבלת נתונים אלה. אז החלטתי להשתמש ב- Raspberry Pi כלקוח וב- Arduino כשרת במדריך זה. תוכנית הלקוח פטל Pi מלאה ניתן למצוא בתחתית הדף הזה. כאן אנסה להסביר את השורות החשובות בתוכנית.
זהירות: ודא שקובץ התוכנית נמצא באותה ספריה בה נמצאת תיקיית הספרייה SX127x. אתה יכול להעתיק תיקיה זו ולהשתמש בה בכל מקום אם ברצונך להעביר את הפרויקט.
התוכנית די פשוטה, עלינו להגדיר את מודול ה- LoRa לעבוד ב 433Mhz ואז להקשיב לחבילות נכנסות. אם נקבל משהו אנחנו פשוט מדפיסים אותם על המסוף. כמו תמיד אנו מתחילים את התוכנית בייבוא ספריות הפיתון הנדרשות.
ממועד ייבוא שינה מ- SX127x.LoRa ייבוא * מ- SX127x.board_config ייבא BOARD BOARD.setup ()
במקרה זה חבילת הזמן משמשת ליצירת עיכובים, חבילת לורה משמשת לתקשורת LoRa ו- board_config משמש להגדרת הפרמטרים של הלוח וה- LoRa. אנו גם מקימים את הלוח באמצעות הפונקציה BOARD.setup () .
לאחר מכן אנו יוצרים את מחלקת LoRa של פיתון עם שלוש הגדרות. מכיוון שאנו רק מכניסים את התוכנית לעבודה כלקוח פטל, למחלקה יש רק שלוש פונקציות, כלומר מחלקת init, מחלקת התחלה ומחלקת on_rx_done . מחלקת init מאותתת את מודול ה- LoRa ב- 433MHz עם רוחב פס של 125kHz כפי שנקבע בשיטת set_pa_config . אז זה גם מכניס את המודול למצב שינה כדי לחסוך בצריכת החשמל.
# ברירות מחדל לטווח בינוני לאחר init הן 434.0MHz, Bw = 125 kHz, Cr = 4/5, Sf = 128chips / symbol, CRC ב- 13 dBm lora.set_pa_config (pa_select = 1) def __init __ (עצמי, verbose = False): סופר (LoRaRcvCont, עצמי).__ init __ ( מילולית ) self.set_mode (MODE.SLEEP) self.set_dio_mapping (* 6)
פונקציית ההתחלה היא המקום בו אנו מגדירים את המודול כמקלט ומקבלים כמו RSSI (מחוון עוצמת אות קבלה), מצב, תדר הפעלה וכו '. אנו מגדירים את המודול לעבוד במצב מקלט רציף (RXCONT) ממצב שינה ואז משתמשים בלולאת זמן כדי לקרוא ערכים כמו RSSI ומצב מודם. אנו גם שוטפים את הנתונים במאגר הסדרתי למסוף.
def start (עצמי): self.reset_ptr_rx () self.set_mode (MODE.RXCONT) בעוד נכון: שינה (.5) rssi_value = self.get_rssi_value () status = self.get_modem_status () sys.stdout.flush ()
לבסוף הפונקציה on_rx_done מבוצעת לאחר קריאת החבילה הנכנסת. בפונקציה זו הערכים שהתקבלו מועברים למשתנה שנקרא מטען ממאגר ה- Rx לאחר הגדרת הדגל המקבל גבוה. לאחר מכן מפוענחים הערכים שהתקבלו עם utf-8 כדי להדפיס נתונים הקריאים למשתמש על הקליפה. אנו מחזירים את המודול למצב שינה עד לקבלת ערך אחר.
def on_rx_done (עצמי): הדפס ("\ n התקבל:") self.clear_irq_flags (RxDone = 1) מטען = self.read_payload (nocheck = True) הדפס (בתים (מטען). decode ("utf-8", 'התעלם'))) self.set_mode (MODE.SLEEP) self.reset_ptr_rx () self.set_mode (MODE.RXCONT)
החלק הנותר של התוכנית הוא רק להדפיס את הערכים שהתקבלו על המסוף ולסיים את התוכנית באמצעות הפרעה במקלדת. שוב הגדרנו את הלוח למצב שינה גם לאחר סיום התוכנית כדי לחסוך בחשמל.
נסה: lora.start () למעט KeyboardInterrupt: sys.stdout.flush () הדפס ("") sys.stderr.write ("KeyboardInterrupt \ n") לבסוף: sys.stdout.flush () הדפס ("") לורה. set_mode (MODE.SLEEP) BOARD.teardown ()
קוד ארדואינו ל- LoRa לתקשר עם פטל פי
כפי שציינתי קודם הקוד rpsreal תומך גם בארדואינו וגם בפי ולכן תקשורת בין ארדואינו ופי אפשרית. זה עובד על בסיס ספריית רדיוהד מבית AirSpayce. אז אתה צריך להתקין את ספריית ראש הרדיו תחילה ל- IDE שלך ב- Arduino.
לשם כך בקר בדף Github והורד את הספרייה בתיקיית ZIP. ואז למקם אותו בתיקיית הספרייה של ה- IDE של ארדואינו. עכשיו, הפעל מחדש את ה- Arduino IDE ותמצא קבצי דוגמה לספריית ראש הרדיו. כאן נתכנת את הארדואינו לעבוד כשרת LoRa כדי לשלוח חבילות בדיקה כמו 0 עד 9. את הקוד השלם לשם כך ניתן למצוא בתחתית העמוד כמו תמיד. כאן אסביר על כמה שורות חשובות בתוכנית.
אנו מתחילים את התוכנית בייבוא ספריית SPI (מותקנת כברירת מחדל) לשימוש בפרוטוקול SPI ואז בספריית RH_RF95 מראש הרדיו לביצוע תקשורת LoRa. לאחר מכן אנו מגדירים לאיזה סיכה של Arduino חיברנו את ה- Chip select (CS), Reset (RST) ו- Interrupt (INT) של LoRa עם Arduino. לבסוף אנו מגדירים גם כי על המודול לעבוד בתדר 434 מגה-הרץ ולאתחל את מודול ה- LoRa.
#לִכלוֹל
בתוך פונקציית ההתקנה נאפס את מודול ה- LoRa על ידי משיכת סיכת האיפוס שלו נמוכה למשך 10 מילי שניה כדי להתחיל טרי. לאחר מכן אנו מאותחלים אותו עם המודול שיצרנו קודם באמצעות ספריית ראש רדיו. לאחר מכן, הגדרנו את תדר ועוצמת השידור עבור שרת LoRa. הגדל את השידור יותר מרחק החבילות שלך יעברו אך יצרכו יותר כוח.
התקנת חלל () { // אתחל צג סידורי Serial.begin (9600); // איפוס pinMode של מודול LoRa (RFM95_RST, OUTPUT); digitalWrite (RFM95_RST, LOW); עיכוב (10); digitalWrite (RFM95_RST, HIGH); עיכוב (10); // אתחל את מודול LoRa תוך כדי (! Rf95.init ()) { Serial.println ("LoRa init init נכשל"); ואילו (1); } // הגדר את תדר ברירת המחדל 434.0MHz אם (! Rf95.setFrequency (RF95_FREQ)) { Serial.println ("setFrequency נכשל"); ואילו (1); } rf95.setTxPower (18); // כוח השידור של מודול לורה }
בתוך פונקציית הלולאה האינסופית, עלינו פשוט לשלוח את חבילת הנתונים דרך מודול ה- LoRa. נתונים אלה יכולים להיות בערך כמו חיישן של פקודת המשתמש. אך למען הפשטות אנו נשלח את ערך char 0 עד 9 לכל מרווח של שנייה אחת ואז אתחל את הערך בחזרה ל- 0 לאחר שהגיע ל- 9. שים לב שניתן לשלוח את הערכים רק בפורמט מערך char וסוג הנתונים צריך להיות unit8_t הוא 1 בת אחד בכל פעם. הקוד לעשות את אותו הדבר מוצג להלן
לולאה בטלה () { Serial.print ("שלח:"); char radiopacket = char (value)}; rf95.send ((uint8_t *) radiopacket, 1); עיכוב (1000); ערך ++; אם (ערך> '9') ערך = 48; }
בדיקת תקשורת LoRa בין פטל פי לארדואינו
עכשיו, כשהכנו גם את החומרה וגם את התוכנית שלנו, עלינו פשוט להעלות את קוד הארדואינו ללוח UNO, ושרטוט הפיתון צריך להיות מופעל על פי. מערך הבדיקה שלי עם שני החומרה מחוברת, נראה בערך כך למטה
ברגע שהרישום של לקוח הפיתון יושק ב- Pi (השתמש רק בפייתון 3), אם הכל עובד כמו שצריך, אתה אמור לראות את חבילות Arduino שהתקבלו ב- pi למרות חלון הקליפה. עליך לשים לב ל"התקבל: 0 "עד 9 כמו שמוצג בתמונה למטה.
את קוד ה- Raspberry pi המלא עם כל הספריות הנדרשות ניתן להוריד מכאן.
כעת תוכל להזיז את שרת Arduino ולבדוק את טווח המודול; ניתן גם להציג את ערך ה- RSSI במעטפת במידת הצורך. את העבודה המלאה של הפרויקט ניתן למצוא בסרטון המקושר למטה. עכשיו, כשאנחנו יודעים ליצור תקשורת LoRa בעלת הספק נמוך למרחקים ארוכים בין Arduino ו- Raspberry pi, נוכל להמשיך ולהוסיף חיישן בצד Arduino ופלטפורמת ענן בצד Pi כדי ליצור חבילת IoT שלמה.
מקווה שהבנתם את הפרויקט ונהניתם לבנות אותו. אם יש לך בעיה לגרום לזה לעבוד, השתמש בסעיף ההערות שלמטה או בפורומים עבור שאלות טכניות אחרות.