lora — מנהל התקן מודם LoRa¶
המודול lora מספק מנהל התקן עבור מודם ה-LoRa מסוג Murata CMWX1ZZABZ שעל גבי Arduino Portenta Vision Shield. הוא חושף מחלקת Lora ברמה גבוהה העוטפת את מערך פקודות ה-AT שבו משתמשת קושחת המודם (כולל קושחת ה-Arduino MKRWAN ARD-078), כך שיישום יכול להצטרף לרשת LoRaWAN ולשלוח ולקבל מנות.
דוגמה:
import lora
modem = lora.Lora(band=lora.BAND_EU868, debug=True)
print("Device EUI:", modem.get_device_eui())
if modem.join_OTAA("0000000000000000", "00000000000000000000000000000000"):
modem.send_data(b"hello", confirmed=True)
קבועים¶
מצבי הפעלה¶
מצבי פלט RF¶
תחומים (Bands)¶
מחלקות התקן¶
חריגות¶
- exception lora.LoraError¶
חריגת בסיס המועלית עבור כל שגיאה המוחזרת מהמודם או ממנהל ההתקן.
- exception lora.LoraErrorTimeout¶
מועלית כאשר המודם אינו מגיב בתוך פרק הזמן הקצוב שהוגדר (חוצץ הקבלה ריק).
- exception lora.LoraErrorParam¶
מועלית בתגובת
+ERR_PARAMכאשר פקודת AT הונפקה עם פרמטר לא חוקי.
- exception lora.LoraErrorBusy¶
מועלית בתגובת
+ERR_BUSYכאשר המודם עסוק בעיבוד פקודה קודמת.
- exception lora.LoraErrorOverflow¶
מועלית בתגובת
+ERR_PARAM_OVERFLOWכאשר פרמטר חורג מהאורך המרבי המותר.
- exception lora.LoraErrorNoNetwork¶
מועלית בתגובת
+ERR_NO_NETWORKכאשר המודם לא הצטרף לרשת.
- exception lora.LoraErrorRX¶
מועלית בתגובת
+ERR_RXכאשר מתרחשת שגיאה במהלך קבלת קישור-יורד (downlink).
- exception lora.LoraErrorUnknown¶
מועלית בתגובת
+ERR_UNKNOWNאו כאשר המודם מדווח על שגיאה שאינה מתועדת.
מחלקות¶
- class lora.Lora(uart: machine.UART | None = None, rst_pin: machine.Pin | None = None, boot_pin: machine.Pin | None = None, band: int = BAND_EU868, poll_ms: int = 300000, debug: bool = False)¶
בונה מנהל התקן מודם חדש. הבנאי מאתחל (או יוצר אוטומטית) את ה-UART ואת פיני האיפוס/האתחול, מבצע איפוס חומרה של המודול, מבצע סנכרון autobaud, מאתחל מחדש את המודול, שואל את גרסת הקושחה שלו, ומגדיר את ה-
bandהאזורי המבוקש.- פרמטרים:
uart – מופע
machine.UARTמוגדר מראש המשמש לתקשורת עם המודם. אםNone, מנהל ההתקן פותחUART(8, 19200)עם מסגור 8N2 (ברירת המחדל של ה-Portenta Vision Shield).rst_pin – מופע
machine.Pinהמניע את קו האיפוס של המודם. אםNone,"PC6"מוגדר כפלט דחיפה-משיכה (push-pull).boot_pin – מופע
machine.Pinהמניע את קו בחירת האתחול (boot-select) של המודם. אםNone,"PG7"מוגדר כפלט דחיפה-משיכה (push-pull) המושך כלפי מטה.band – התחום האזורי שיוגדר. אחד מהקבועים
BAND_*.poll_ms – מרווח במילישניות בין קישורי-עולה (uplinks) ריקים אוטומטיים המופעלים על ידי
poll()כדי לשמור את חלון הקישור-יורד פתוח.debug – כאשר
True, כל תעבורת ה-UART מודפסת באמצעותprint().
- LoraErrors: dict¶
מיפוי ממחרוזות תגובת שגיאה של המודם (לדוגמה
"+ERR_BUSY") למחלקת החריגה המתאימה. משמש באופן פנימי על ידיhandle_error().
- init_modem() None¶
מאתחל באופן עצל (lazy) את
self.uart,self.rst_pinו-self.boot_pinלברירות המחדל של ה-Portenta Vision Shield אם הם עדיין לא הוגדרו. נקרא מהבנאי; בדרך כלל אינו מופעל על ידי קוד המשתמש.
- is_arduino_firmware() bool¶
מחזיר
Trueאם המודם מריץ את קושחת ה-Arduino MKRWANARD-078(מזוהה מתוך מחרוזת ה-fw_versionשנשמרה במטמון).
- configure_band(band: int) bool¶
מגדיר את התחום האזורי, ובקושחת Arduino עם
BAND_EU868, מפעיל את מגביל מחזור-העבודה (duty-cycle) של ETSI. מחזירTrueבהצלחה.- פרמטרים:
band – אחד מהקבועים
BAND_*.
- set_baudrate(baudrate: int) None¶
משנה את קצב הבָּאוּד (baud rate) של ה-UART של המודם (
AT+UART).- פרמטרים:
baudrate – קצב בָּאוּד (baud rate) חדש, בביטים לשנייה.
- set_autobaud(timeout: int = 10000) bool¶
שולח פקודות
ATריקות עד שהמודם מגיב ב-+OKאו עד שחולפותtimeoutמילישניות. מחזירTrueאם הסנכרון הצליח.- פרמטרים:
timeout – הזמן המרבי להקדיש לניסיון, במילישניות.
- get_fw_version() str¶
שואל את מחרוזת התקן המודם (
AT+DEV?) ואת גרסת הקושחה (AT+VER?) ומחזיר אותן כמחרוזת יחידה מופרדת ברווחים.
- restart() None¶
מסנכרן מחדש את קצב הבָּאוּד (baud rate), מאתחל מחדש את המודם, קורא מחדש את גרסת הקושחה, ומיישם מחדש את התחום האזורי שהוגדר. מעלה
LoraErrorבמקרה של כשל.
- set_rf_power(mode: int, power: int) None¶
מגדיר את שלב פלט ה-RF של המודם (
AT+RFPOWER).- פרמטרים:
mode – אחד מ-
RF_MODE_RFO,RF_MODE_PABOOST.power – אינדקס הספק הפלט, ביחידות ספציפיות לקושחה.
- set_port(port: int) None¶
מגדיר את פורט יישום ה-LoRaWAN (1..223) שבו ישתמשו קריאות
send_data()הבאות.- פרמטרים:
port – LoRaWAN FPort.
- set_public_network(enable: bool) None¶
מפעיל או מבטל את מילת הסנכרון (sync word) של הרשת הציבורית.
- פרמטרים:
enable –
Trueעבור מילת הסנכרון הציבורית של LoRaWAN,Falseעבור הפרטית.
- format(hexMode: bool) None¶
בוחר את תבנית הנתונים המשמשת על גבי ה-UART עבור בייטי המטען (payload).
- פרמטרים:
hexMode –
Trueעבור תבנית מטען ASCII-hex,Falseעבור בינארי גולמי.
- set_datarate(dr: int) None¶
מגדיר את אינדקס קצב הנתונים של LoRaWAN (
AT+DR).- פרמטרים:
dr – אינדקס קצב נתונים ספציפי לאזור.
- set_adr(adr: bool) None¶
מפעיל או מבטל את Adaptive Data Rate.
- פרמטרים:
adr –
Trueכדי להפעיל ADR,Falseכדי לבטלו.
- set_rx2dr(dr: int) None¶
מגדיר את אינדקס קצב הנתונים המשמש את חלון הקבלה RX2.
- פרמטרים:
dr – אינדקס קצב נתונים ספציפי לאזור.
- set_fcu(fcu: int) None¶
מגדיר את מונה מסגרות הקישור-עולה (uplink) (
AT+FCU).- פרמטרים:
fcu – ערך מונה מסגרות הקישור-עולה (uplink) חדש.
- set_fcd(fcd: int) None¶
מגדיר את מונה מסגרות הקישור-יורד (downlink) (
AT+FCD).- פרמטרים:
fcd – ערך מונה מסגרות הקישור-יורד (downlink) חדש.
- join(timeout_ms: int) bool¶
מנפיק
AT+JOINוממתין לאירוע אישור-ההצטרפות (join-accept). מחזירTrueאם המודם מדווח+EVENT=1,1(ההצטרפות הצליחה) בתוךtimeout_ms.- פרמטרים:
timeout_ms – הזמן המרבי להמתנה הן ל-
+ACKוהן לאירוע ההצטרפות שלאחריו, במילישניות.
- get_max_size() int¶
מחזיר את גודל המטען (payload) המרבי של LoRaWAN, בבייטים, עבור קצב הנתונים הנוכחי. בקושחת Arduino ערך זה קבוע על
64.
- poll() None¶
אם חלפו יותר מ-
poll_msמילישניות מאז הקריאה האחרונה, שולח קישור-עולה (uplink) מאושר ריק כדי לרוקן קישורי-יורד (downlinks) ממתינים. מיועד להיקרא לעיתים תכופות מהלולאה הראשית של היישום.
- send_data(buff: bytes, confirmed: bool = True) bool¶
משדר קישור-עולה (uplink) של LoRaWAN. מעלה
LoraErrorאםbuffגדול מ-get_max_size().- פרמטרים:
buff – בייטי המטען (payload) לשידור.
confirmed – כאשר
True, שולח קישור-עולה (uplink) מאושר (+CTX) וממתין ל-+ACKמשרת הרשת. כאשרFalse, שולח קישור-עולה (uplink) לא מאושר (+UTX).
- מחזיר:
Trueאם המודם קיבל את המנה (ועבור קישורי-עולה (uplinks) מאושרים, הרשת אישרה אותה),Falseאחרת.
- receive_data(timeout: int = 1000) dict | None¶
ממתין לקישור-יורד (downlink). מחזיר
Noneאם לא התקבל אירוע+RECVבתוךtimeoutמילישניות, אחרת מילון{"port": str, "data": str}המכיל את ה-FPort ואת בייטי המטען (payload).- פרמטרים:
timeout – הזמן המרבי להמתנה, במילישניות.
- receive(delimiter: str | list | None = None, max_bytes: int | None = None, timeout: int = 1000) str¶
קריאת UART ברמה נמוכה. קורא תווים מהמודם עד שמותאם תו מפריד, עד שנקראו
max_bytesתווים, או עד שחולפותtimeoutמילישניות, ואז מחזיר את המחרוזת המצטברת כשכל\rעוקב מוסר.- פרמטרים:
delimiter – אחד מאלה: תו יחיד להתאמה בסוף החוצץ, מחרוזת מרובת-תווים להתאמה מול החוצץ המקוצץ המלא, או רשימה של מחרוזות כאלה.
max_bytes – אם מוגדר, מחזיר ברגע שנקראו בדיוק כמות זו של בייטים.
timeout – פרק הזמן הקצוב הכולל לקריאה, במילישניות.
- join_OTAA(appEui: str, appKey: str, devEui: str = None, timeout: int = 60000) bool¶
מחליף את המודם למצב OTAA, מתכנת את המפתחות וה-EUIs שסופקו, ואז מנסה להצטרף לרשת. מחזיר
Trueאם ההצטרפות הצליחה.- פרמטרים:
appEui – Application/Join EUI בן 64 ביטים כמחרוזת הקס.
appKey – Application Key בן 128 ביטים כמחרוזת הקס.
devEui – Device EUI אופציונלי בן 64 ביטים כמחרוזת הקס. אם
None, נעשה שימוש ב-Device EUI שתוכנת על ידי היצרן.timeout – פרק הזמן הקצוב להצטרפות, במילישניות.
- join_ABP(nwkId: int, devAddr: str, nwkSKey: str, appSKey: str, timeout: int = 60000) bool¶
מחליף את המודם למצב ABP, מתכנת את הכתובות והמפתחות שסופקו, ואז מנסה להצטרף. מחזיר את תוצאת
get_join_status().- פרמטרים:
nwkId – מזהה רשת (כרגע מתעלמת ממנו הקושחה).
devAddr – Device Address בן 32 ביטים כמחרוזת הקס.
nwkSKey – Network Session Key בן 128 ביטים כמחרוזת הקס.
appSKey – Application Session Key בן 128 ביטים כמחרוזת הקס.
timeout – פרק הזמן הקצוב להצטרפות, במילישניות.
- handle_error(command: str, data: str) None¶
בודק תגובת מודם ומעלה את תת-מחלקת
LoraErrorהמתאימה אם היא מייצגת שגיאה. אינו עושה דבר עבור תגובות שאינן שגיאה.- פרמטרים:
command – פקודת ה-AT (ללא הקידומת
AT) שהפיקה אתdata.data – מחרוזת התגובה שהוחזרה על ידי המודם.
- send_command(cmd: str, *args, delimiter: str = '\\r', data: bytes = None, timeout: int = 1000, raise_error: bool = True) str¶
בונה פקודת AT מתוך
cmdו-args, מצרף באופן אופציונלי מטעןdataגולמי, משדר אותה, ומחזיר את תגובת המודם. עבור פקודות שאילתה המסתיימות ב-?, מוחזר רק חלק הערך (תת-המחרוזת שאחרי=).- פרמטרים:
cmd – סיומת פקודת AT (לדוגמה
"+JOIN","+DR="); הקידומת"AT"ו-\rהעוקב מתווספים אוטומטית.args – ארגומנטים נוספים המשורשרים ל-
cmdלאחר המרה למחרוזת.delimiter – תו מפריד המועבר ל-
receive().data – בייטים גולמיים אופציונליים הנכתבים מיד לאחר פקודת ה-AT (משמשים למטעני קישור-עולה (uplink) בינאריים).
timeout – פרק הזמן הקצוב לתגובה, במילישניות.
raise_error – כאשר
True, תגובות שגיאה מומרות לחריגותLoraError; כאשרFalse, התגובה הגולמית מוחזרת לקורא.