1. מבוא
OpenThread הוא הטמעת קוד פתוח של פרוטוקול הרשת Thread®, פרוטוקול רשת אלחוטי מאובטח וחזק שמיועד למכשירי האינטרנט של הדברים (IoT). OpenThread פותח על ידי צוות Nest של Google, והוא זמין לקהילת המפתחים ללא תשלום כפרויקט בקוד פתוח.
מפרט פרוטוקול Thread קובע פרוטוקול תקשורת אלחוטית אמין, מאובטח וחסכוני אנרגטית למכשירים מוגבלים במשאבים שנמצאים בדרך כלל בבתים חכמים ובבניינים מסחריים. OpenThread כולל את ההיקף המלא של שכבת הרשת בתוך פרוטוקול Thread, כמו IPv6, 6LoWPAN, IEEE 802.15.4 עם אבטחת MAC, הקמה של קישורים ברשת וניתוב רשת.
ב-Telink שילבו את הטמעת OpenThread ב-Zephyr RTOS, מה שמאפשר תאימות חלקה לחומרת Telink. את קוד המקור של השילוב הזה אפשר לגשת בקלות ב-GitHub, והוא זמין גם כערכת פיתוח תוכנה (SDK).
ב-Codelab הזה, אפשר לתכנת OpenThread בחומרה בפועל, ליצור ולנהל רשת בפרוטוקול Thread ולהחליף הודעות בין צמתים. בתמונה למטה מתוארת הגדרת החומרה, כולל נתב Border Border (OTBR) ומכשיר Thread אחד ב-Codelab.
מה תלמדו
- להגדיר הטמעת OpenThread באמצעות סביבת הפיתוח של Telink Zephyr.
- כדי לפתח את הדוגמאות של OpenThread CLI (
ot-cli-ftd
ו-ot-rcp
) ולהריץ אותן במתקני פיתוח B91 של Telink. - כדי להגדיר נתב Border Border (OTBR) באמצעות Docker ב-Raspberry Pi 3B+ ואילך.
- ליצור רשת של פרוטוקול Thread בפלטפורמת OTBR.
- כדי להוסיף מכשירים לרשת בפרוטוקול Thread באמצעות ניפוי באגים מחוץ למסגרת.
- לאמת את הקישוריות בין צמתים ברשת של פרוטוקול Thread באמצעות CLI.
למה תזדקק?
חומרה:
- שני לוחות פיתוח B91.
- תמונה אחת של Raspberry Pi 3B+ או יותר עם תמונה של Raspbian OS.
- מחשב Linux עם שתי יציאות USB לפחות.
- מתג (או נתב) שמחובר לאינטרנט וכמה כבלי אתרנט.
תוכנה:
- הכלי Telink Burning וניפוי באגים — LinuxBDT.
- כלי עם טרמינל עם יציאה טורית, כמו Puty.
- כלים אחרים כמו Git ו-Western Union.
2. דרישות מוקדמות
מושגי Thread ו-CLI של OpenThread
מומלץ לעבור על הקוד של OpenThread Simulation כדי להכיר את מושגי היסוד של פרוטוקול Thread ואת ה-CLI של OpenThread לפני ה-Codelab הזה.
מכונת Linux
מכונת Linux (Ubuntu מגרסה 20.04 LTS ואילך) משמשת כמכונת ה-build כדי להגדיר את סביבת הפיתוח Telink Zephyr ולהציג את כל לוחות הפיתוח בפרוטוקול Thread. כדי לבצע את המשימות האלה, למחשב Linux נדרשות שתי יציאות USB וחיבור לאינטרנט.
מסופים וחיבורי יציאה טורית
ניתן לחבר את המכשיר ישירות ליציאת ה-USB של מכונת Linux. בנוסף, כדי לגשת למכשירים יהיה צורך בכלי טרמינל של יציאה טורית.
ב-Codelab הזה, כלי הטרמינל Pu9 משמש לשליטה ב-FTD Joiner וב-Raspberry Pi. הוא מספק סקירה כללית של השימוש בו, אבל אפשר להשתמש גם בתוכנת מסוף אחרת.
ערכת הפיתוח של Telink B91
ל-Codelab הזה נדרשות שתי ערכות של ערכות פיתוח B91. בתמונה שלמטה רואים את הרכיבים המינימליים הנדרשים בקבוצה אחת.
אחת מהערכות האלה תשמש כ-RCP (מעבד רדיו משותף), והשנייה תפעל כ-FTD (מכשיר פרוטוקול Thread מלא). אם הערכה עדיין לא ברשותכם, תוכלו להשיג פרטים נוספים באתר הרשמי של Telink. הנה כמה רכיבים שכדאי להשתמש בהם:
אינדקס | שם |
1 | מועצת הפיתוח של Telink B91 |
2 | לוח עבור צריבה של Telink |
3 | אנטנת 2.4Ghz |
4 | כבל USB (USB A ל-מיני USB) |
Raspberry Pi 3B+ או יותר עם תמונה של Raspbian OS
ב-codelab הזה, יש צורך ב-Raspberry Pi 3B+ מגרסה 3B ומעלה עם תמונה של Raspbian Bullseye Lite OS או ב-Raspbian Bullseye עם מחשב. הוא מחובר לאינטרנט באמצעות אתרנט והוא יוגדר כמארח של נתב OpenThread Border (OTBR).
חיבור לרשת
מתג (או נתב) שמחובר לאינטרנט וכמה כבלי אתרנט. הם משמשים לחיבור ה-Raspberry Pi למכונת Linux, כדי לאפשר הגדרת משתמש ב-Raspberry Pi באמצעות המארח.
LinuxBDT
Burning and Debugging Tool (BDT), שחל על כל הסדרות של Telink Chip, מאפשר למחוק ולהריץ את הקושחה של OpenThread בלוחות הפיתוח של Telink B91. מתקינים במחשב Linux את הגרסה linuxBDT ל-Linux שמבוססת על X86.
אחרים
- Git, להגדרת סביבת פיתוח של Telink Zephyr.
- West, כדי לנהל את פרויקט Zephyr וליצור קבצים בינאריים של OpenThread.
3. הגדרת קושחה
הגדרת סביבת פיתוח של Telink Zephyr
במחשב Linux, פותחים טרמינל של CLI ומתחילים להריץ את הפקודות הבאות כדי לוודא שה-APT עדכני.
$ sudo apt update $ sudo apt upgrade
לאחר מכן, ממשיכים לבצע את השלבים הבאים.
- מתקינים את יחסי התלות.
נכון לעכשיו, ב-Zephyr נדרשות גרסאות מינימליות של יחסי תלות עיקריים, כמו CMake (3.20.0), Python3 (3.6) ו-Devicetree Compiler (1.4.6).$ wget https://apt.kitware.com/kitware-archive.sh $ sudo bash kitware-archive.sh $ sudo apt install --no-install-recommends git cmake ninja-build \ gperf ccache dfu-util device-tree-compiler python3-dev python3-pip \ python3-setuptools python3-tk python3-wheel xz-utils file make gcc \ gcc-multilib g++-multilib libsdl2-dev
לפני שממשיכים בשלבים הבאים, יש לאמת את הגרסאות המותקנות במערכת. אם הגרסאות שגויות, צריך להחליף את שיקוף ה-APT למראה יציבה ועדכנית, או לעדכן את יחסי התלות באופן ידני.$ cmake --version $ python3 --version $ dtc --version
- התקנה לכיוון מערב.
צריך לוודא שהשדה$ pip3 install --user -U west $ echo 'export PATH=~/.local/bin:"$PATH"' >> ~/.bashrc $ source ~/.bashrc
~/.local/bin
נמצא במשתנה הסביבה$PATH
. - מקבלים את קוד המקור של פרויקט Zephyr.
$ west init ~/zephyrproject $ cd ~/zephyrproject $ west update $ west blobs fetch hal_telink $ west zephyr-export
- מתקינים יחסי תלות נוספים של Python עבור Zephyr.
$ pip3 install --user -r ~/zephyrproject/zephyr/scripts/requirements.txt
- הגדרת 'צרור הכלים של Zephyr'. מורידים את ה-toolchain של Zephyr (בערך 1~2GB) לספרייה מקומית כדי שתוכלו להפעיל את רוב הלוחות.
מורידים את Zephyr SDK ומציבים אותו בנתיב המומלץ, כמו שמוצג בהמשך.$ wget https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.16.1/zephyr-sdk-0.16.1_linux-x86_64.tar.xz $ wget -O - https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.16.1/sha256.sum | shasum --check --ignore-missing
[ -x.y.z] הוא טקסט אופציונלי שיכול להיות כל טקסט, לדוגמה -0.16.1. לא ניתן להעביר את הספרייה אחרי התקנת ה-SDK. לאחר מכן מתקינים את 'צרור הכלים של Zephyr'.$HOME/zephyr-sdk[-x.y.z] $HOME/.local/zephyr-sdk[-x.y.z] $HOME/.local/opt/zephyr-sdk[-x.y.z] $HOME/bin/zephyr-sdk[-x.y.z] /opt/zephyr-sdk[-x.y.z] /usr/zephyr-sdk[-x.y.z] /usr/local/zephyr-sdk[-x.y.z]
$ tar xvf zephyr-sdk-0.16.1_linux-x86_64.tar.xz $ cd zephyr-sdk-0.16.1 $ ./setup.sh -t riscv64-zephyr-elf -h -c
- בניית הדוגמה של Hello World. קודם כול, מוודאים שההגדרה של פרויקט Zephyr הרשמית היא נכונה בעזרת הדוגמה Hello World, ואז ממשיכים בהגדרת הפרויקט בהתאמה אישית.
משתמשים בפקודת ה-build של West כדי ליצור את הדוגמה hello_world מספריית השורש של מאגר Zephyr. אפשר למצוא את הקושחה בשם$ cd ~/zephyrproject/zephyr $ west build -p auto -b tlsr9518adk80d samples/hello_world
zephyr.bin
מתחת לbuild/zephyr directory
. - מוסיפים את הסקריפט של סביבת Zephyr ל-
~/.bashrc
. מריצים את הפקודות הבאות.$ echo "source ~/zephyrproject/zephyr/zephyr-env.sh" >> ~/.bashrc $ source ~/.bashrc
- מוסיפים את המאגר המרוחק של Telink Zephyr. מורידים את המאגר של Telink באופן מקומי כענף פיתוח, ומעדכנים אותו.
$ cd ~/zephyrproject/zephyr $ git remote add telink-semi https://github.com/telink-semi/zephyr $ git fetch telink develop $ git checkout develop $ west update $ west blobs fetch hal_telink
למידע נוסף אפשר לעיין ב-Zephyr Doc – המדריך לתחילת העבודה.
הגדרת Telink LinuxBDT
מורידים את הכלי Telink LinuxBDT ומחלצים אותו לספרייה מקומית במחשב Linux, כמו ספריית הבית ~
, לצורך הפעלת קושחה מסוג Flash על לוח הפיתוח של B91.
$ cd ~ $ wget http://wiki.telink-semi.cn/tools_and_sdk/Tools/BDT/LinuxBDT.tar.bz2 $ tar -vxf LinuxBDT.tar.bz2
מחברים את Burning Board למחשב Linux דרך ממשק ה-USB ומזינים את הפקודות הבאות.
$ cd LinuxBDT $ sudo ./bdt lsusb -v Bus 002 Device 001: ID 1d6b:0003 xHCI Host Controller Bus 001 Device 003: ID 0bda:565a Integrated_Webcam_HD Bus 001 Device 023: ID 413c:301a Dell MS116 USB Optical Mouse Bus 001 Device 037: ID 248a:826a Telink Web Debugger v3.6 Bus 001 Device 001: ID 1d6b:0002 xHCI Host Controller
אם מופיעה ההודעה "Telink Web Debugger v3.6", זה אומר שמתכנת ה-BDT התחבר בהצלחה למחשב Linux.
הידור הקושחה
ה-Codelab הזה ייצור שני סוגים של קושחת OpenThread:
ot-cli-ftd
,- ו
ot-rcp
.
אלה שיטות ההידור:
- מעבד עזר לרדיו (
ot-rcp
)$ cd ~/zephyrproject $ rm -rf build_ot_coprocessor $ west build -b tlsr9518adk80d -d build_ot_coprocessor zephyr/samples/net/openthread/coprocessor -- -DDTC_OVERLAY_FILE="usb.overlay" -DOVERLAY_CONFIG=overlay-rcp-usb-telink.conf
- מכשיר בפרוטוקול Thread מלא עם שורת פקודה אינטראקטיבית (
ot-cli-ftd
)$ cd ~/zephyrproject $ rm -rf build_ot_cli_ftd $ west build -b tlsr9518adk80d -d build_ot_cli_ftd zephyr/samples/net/openthread/cli -- -DOVERLAY_CONFIG=overlay-telink-fixed-mac.conf -DCONFIG_OPENTHREAD_FTD=y
קושחה Flash
מחברים לוח פיתוח B91 ל-Burning Board באמצעות כבל USB, כפי שמתואר באיור שלמטה.
בשורת הפקודה, מריצים את הפקודות הבאות כדי לבצע שריפת קושחה (באמצעות ההבהוב של הקושחה ot-cli-ftd
כדוגמה).
$ cd ~/zephyrproject/build_ot_cli_ftd/zephyr $ cp zephyr.bin ~/LinuxBDT/bin/ot-cli-ftd.bin $ cd ~/LinuxBDT $ sudo ./bdt 9518 ac Activate OK! $ sudo ./bdt 9518 wf 0 -i bin/ot-cli-ftd.bin EraseSectorsize... Total Time: 2181 ms Flash writing... [100%][-] [##################################################] File Download to Flash at address 0x000000: 491700 bytes Total Time: 30087 ms
שיטת ה-Flash של ot-rcp
זהה בעיקרה לזו של ot-cli-ftd
. עם זאת, יש הבדלים בשמות ובנתיבי הקושחה.
לאחר ההבהוב, הבחנה בין שני לוחות הפיתוח של B91 על ידי סימון שלהם בהתאם. מוסיפים את התווית ot-cli-ftd
ללוח המהבהב עם התווית 'FTD Joiner' (איחוד FTD) והלוח הבהב עם הכיתוב ot-rcp
כ-"RCP".
4. הגדרת מסוף טורי עבור מכשיר ההצטרפות ל-FTD
כמו שמוצג בתמונה, מחברים את FTD Joiner ישירות ליציאת ה-USB של מחשב Linux.
אחרי שמחברים את מכשיר ה-FTD Joiner למכונת Linux, פותחים את PuLEARN. לאחר מכן יוצרים טרמינל חדש, מגדירים את פרטי היציאה הטורית ופותחים את היציאה הטורית.
כאן אפשר למצוא את ההפניה לשורת הפקודה של OpenThread: חומר עזר בנושא CLI של OpenThread. חשוב להוסיף ot
כתחילית לכל הפקודות.
דוגמאות:
> ot state disabled Done > ot channel 11 Done >
5. הגדרת Raspberry Pi כנתב גבול של OpenThread
נתב גבול OpenThread הוא מכשיר שמורכב משני חלקים עיקריים:
- Raspberry Pi כולל את כל השירותים והקושחה הנדרשים כדי לפעול כנתב גבול (BR).
- RCP אחראי לתקשורת בפרוטוקול Thread.
מעבד רדיו משותף (RCP)
כדי להבהב את הקושחה של ot-rcp
, פועלים לפי אותם שלבים כמו בתהליך ההבהוב של הקושחה של ot-cli-ftd
. מחברים את B91 Development Board (מועצת הפיתוח B91) ליציאת USB ב-Raspberry Pi, כפי שמתואר באיור שלמטה.
פאי פטל
- מוודאים שהתמונה של Raspbian Bullseye Lite OS או Raspbian Bullseye עם שולחן העבודה כתובות כמו שצריך בכרטיס ה-SD.
- אפשר להתחבר ל-SSH ל-Raspberry Pi או לעבוד ישירות עם Raspbian Desktop. ה-Codelab הזה ישתמש ב-SSH.
- לפני שממשיכים בהתקנת OTBR Docker בשלב הבא, חשוב קודם לעדכן את המאגר המקומי ואת מנהל החבילות.
$ sudo apt-get update $ sudp apt-get upgrade
התקנת Docker
אם בשלב הקודם מעדכנים את ה-APT של המאגר המקומי ואת מנהל החבילות, צריך להפעיל מחדש את Raspberry Pi ואז לפתוח חלון טרמינל SSH.
- מתקינים Docker:
$ curl -sSL https://get.docker.com | sh
- כדי לתת את ההרשאה, צריך להכניס את החשבון הנוכחי לקבוצה ב-Docker. כך לא יהיה צורך להוסיף את
sudo
לפני כל פקודה. צריך להפעיל מחדש את Raspberry Pi כדי להיכנס לתוקף.$ sudo usermod -aG docker $USER
- אם Docker לא מופעל, מפעילים אותו:
$ sudo dockerd
- הסקריפטים של חומת האש OTBR יוצרים כללים בתוך הקונטיינר של Docker. לפני כן, צריך להריץ את הפקודה
modprobe
כדי לטעון את מודול הליבה של מכשירי ה-iptable.$ sudo modprobe ip6table_filter
הגדרה והרצה של Docker
ה-Codelab הזה שולף את קובץ האימג' של OTBR באמצעות Docker מ-OpenThread Docker Hub. התמונה הזו נבדקה ואומתה על ידי צוות OpenThread.
- הורדת התמונה העדכנית ביותר:
$ docker pull openthread/otbr:latest
- בודקים את רשימת התמונות בקונטיינר של Docker:
$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE openthread/otbr latest db081f4de15f 6 days ago 766MB
- בודקים את שם היציאה הטורית של מכשיר ה-RCP באמצעות בדיקת
/dev
. המאפייןttyACM0
מציין שה-RCP מחובר כראוי.$ ls /dev/tty* ... /dev/ttyACM0 ...
- מריצים את Docker של OTBR בפעם הראשונה, ומכוונים את היציאה הטורית של RCP (
ttyACM0
). אם רוצים להמשיך להשתמש ב-Docker OTBR, משתמשים בפקודה docker start otbr.$ docker run --name "otbr" --sysctl "net.ipv6.conf.all.disable_ipv6=0 net.ipv4.conf.all.forwarding=1 net.ipv6.conf.all.forwarding=1" -p 8080:80 --dns=127.0.0.1 -it --volume /dev/ttyACM0:/dev/ttyACM0 --privileged openthread/otbr --radio-url spinel+hdlc+uart:///dev/ttyACM0
- פותחים חלון טרמינל חדש של SSH כדי לבדוק את הקישוריות בין Raspberry Pi ל-RCP.
$ docker exec -ti otbr sh -c "sudo ot-ctl" > state disabled Done
פקודות Docer אופציונליות:
- מקבלים מידע על הקונטיינר של Docker שפועל:
$ docker ps -aq
- הפסקת Docker של OTBR:
$ docker stop otbr
- הסרת OTBR Docker:
$ docker rm otbr
- טעינה מחדש של Docker OTBR:
$ docker restart otbr
בשלב הזה, מכשיר לצירוף FTD ו-OTBR מוכנים, ואפשר להמשיך לשלב הבא בבניית רשת פרוטוקול Thread.
6. יצירת רשת של פרוטוקול Thread
יצירת רשת של פרוטוקול Thread ב-RCP
אנחנו משתמשים במעטפת ot-ctl ב-OTBR כדי ליצור רשת של פרוטוקול Thread. אם יצאתם מהמעטפת בקטע האחרון, מזינים את הפקודה הבאה כדי להפעיל אותה שוב בטרמינל SSH:
$ docker exec -ti otbr sh -c "sudo ot-ctl"
לאחר מכן, מזינים את הפקודות לפי הסדר שנקבע בטבלה ומוודאים שכל שלב משיג את התוצאה הצפויה לפני שממשיכים לשלב הבא.
אינדקס | פקודה | מבוא | תגובה צפויה | ||
1 |
| יוצרים מערך נתונים אקראי חדש לרשת. | סיום | ||
2 |
| שמירת מערך נתונים חדש למערך הנתונים התפעולי הפעיל באחסון בלתי תנודתי. | סיום | ||
3 |
| מציגים את ממשק IPv6. | סיום | ||
4 |
| הפעלת הפעולה של פרוטוקול Thread וצירוף לרשת של פרוטוקול Thread. | סיום | ||
ממתינים 10 שניות עד שממשק ה-thread ייפתח. | |||||
5 |
| צריך לבדוק את מצב המכשיר.אפשר לקרוא לפקודה הזו כמה פעמים עד שהיא הופכת למובילה ועוברת לשלב הבא. | leader | ||
6 |
| יש לבדוק את מערך הנתונים המלא של תפעול פעיל ותיעוד של מפתח הרשת. |
מפתח הרשת שנוצר באופן אקראי על ידי OTBR במהלך יצירת הרשת יהיה בשימוש כש-ot-cli-ftd
מכשירים יצטרפו לרשת בפרוטוקול Thread הזה.
הוספה של חיבור FTD לשרשור באמצעות הזמנה מחוץ למסגרת
'הזמנה מחוץ למסגרת' מתייחסת להעברה של פרטי כניסה לרשת למכשירים שממתינים להצטרפות לרשת באמצעות שיטות לא אלחוטיות (לדוגמה, הזנה ידנית ב-OpenThread CLI). צריך להזין את הפקודות הבאות במסוף הטורי ל-FTD Joiner.
אינדקס | פקודה | מבוא | התגובות הצפויות | ||
1 |
| רק מפתח הרשת נדרש כדי שמכשיר יתחבר לרשת פרוטוקול Thread. | סיום | ||
2 |
| שמירת מערך נתונים חדש למערך הנתונים התפעולי הפעיל באחסון בלתי תנודתי. | סיום | ||
3 |
| מציגים את ממשק IPv6. | סיום | ||
4 |
| הפעלת הפעולה של פרוטוקול Thread וצירוף לרשת של פרוטוקול Thread. | סיום | ||
ממתינים 20 שניות עד שהמכשיר מתחבר ומגדיר את עצמו. | |||||
5 |
| צריך לבדוק את מצב המכשיר. | הילד או הנתב |
טופולוגיה
מזינים פקודות כמו ipaddr
, child table
, router table
בטרמינל SSH כדי לקבל תשובות כמו קטעי הקוד הבאים.
> ipaddr rloc fd8c:60bc:a98:c7ba:0:ff:fe00:b000 Done > child table | ID | RLOC16 | Timeout | Age | LQ In | C_VN |R|D|N|Ver|CSL|QMsgCnt|Suprvsn| Extended MAC | +-----+--------+------------+------------+-------+------+-+-+-+---+---+-------+-------+------------------+ | 1 | 0xb001 | 240 | 23 | 3 | 51 |1|1|1| 3| 0 | 0 | 129 | 82bc12fbe783468e | Done > router table | ID | RLOC16 | Next Hop | Path Cost | LQ In | LQ Out | Age | Extended MAC | Link | +----+--------+----------+-----------+-------+--------+-----+------------------+------+ | 44 | 0xb000 | 63 | 0 | 0 | 0 | 0 | 7ae354109d611f7e | 0 | Done ... > child table | ID | RLOC16 | Timeout | Age | LQ In | C_VN |R|D|N|Ver|CSL|QMsgCnt|Suprvsn| Extended MAC | +-----+--------+------------+------------+-------+------+-+-+-+---+---+-------+-------+------------------+ Done > router table | ID | RLOC16 | Next Hop | Path Cost | LQ In | LQ Out | Age | Extended MAC | Link | +----+--------+----------+-----------+-------+--------+-----+------------------+------+ | 33 | 0x8400 | 63 | 0 | 3 | 3 | 13 | e61487c1cda940a6 | 1 | | 44 | 0xb000 | 63 | 0 | 0 | 0 | 0 | 7ae354109d611f7e | 0 | Done
RLOC16
של OTBR הוא 0xb000
וה-RLOC16
של חיבור FTD הוא בהתחלה 0xb001
. ואז RLOC16
של חיבור ה-FTD הופך ל-0x8400
אחרי קבלת מזהה הנתב. ניתן לראות שה-FTD Joiner שודרג מילד לנתב.
רשת פרוטוקול Thread הנוכחית מכילה שני צמתים, והטופולוגיה מוצגת באיור שלמטה.
7. תקשורת בין מכשירי Thread
תקשורת ICMPv6
אנחנו משתמשים בפקודה ping
כדי לבדוק אם מכשירים בפרוטוקול Thread באותה רשת יכולים לתקשר זה עם זה. קודם כול, משתמשים בפקודה ipaddr
כדי לקבל את ה-RLOC של המכשיר.
> ipaddr fd8c:60bc:a98:c7ba:0:ff:fe00:fc11 fdbd:7274:649c:1:1d19:9613:f705:a5af fd8c:60bc:a98:c7ba:0:ff:fe00:fc10 fd8c:60bc:a98:c7ba:0:ff:fe00:fc38 fd8c:60bc:a98:c7ba:0:ff:fe00:fc00 fd8c:60bc:a98:c7ba:0:ff:fe00:b000 # Routing Locator (RLOC) fd8c:60bc:a98:c7ba:5249:34ab:26d1:aff6 fe80:0:0:0:78e3:5410:9d61:1f7e Done
כדי לבצע את פעולת הפינג, צריך להזין את הפקודה הבאה במסוף הטורי של FTD Joiner.
> ot ping fd8c:60bc:a98:c7ba:0:ff:fe00:b000 16 bytes from fd8c:60bc:a98:c7ba:0:ff:fe00:b000: icmp_seq=1 hlim=64 time=19ms 1 packets transmitted, 1 packets received. Packet loss = 0.0%. Round-trip min/avg/max = 19/19.0/19 ms. Done
תגובת הפלט של היציאה הטורית מציינת שהצד של ה-OTBR קיבל את בקשת הפינג, ו-FTD Joiner קיבל את התגובה לפינג שהוחזרה על ידי OTBR. התקשורת בין שני המכשירים מצליחה.
תקשורת UDP
שירותי האפליקציות שמסופקים על ידי OpenThread כוללים גם UDP. אתם יכולים להשתמש ב-UDP API כדי להעביר מידע בין צמתים ברשת של פרוטוקול Thread, או להעביר מידע לרשתות חיצוניות באמצעות נתב הגבולות. המבוא המפורט ל-UDP API של OpenThread מופיע בקטע OpenThread CLI – דוגמה ל-UDP. ה-Codelab הזה ישתמש בחלק מממשקי ה-API כדי להעביר מידע בין OTBR לבין FTD Joiner.
קודם כול, מקבלים את ה-EID מסוג Mesh-Local של OTBR. הכתובת הזו היא גם אחת מכתובות ה-IPv6 של מכשיר פרוטוקול Thread, וניתן להשתמש בה כדי לגשת למכשירי פרוטוקול Thread באותה מחיצה של רשת פרוטוקול Thread.
> ipaddr mleid fd8c:60bc:a98:c7ba:5249:34ab:26d1:aff6 Done
צריך להזין את הפקודות הבאות במסוף SSH כדי להפעיל OTBR UDP ולחבר את יציאת המכשיר ליציאת 1022.
> udp open Done > udp bind :: 1022 Done
צריך להזין את הפקודות הבאות במסוף הטורי ולהפעיל את ה-UDP של איחוד FTD. מכסים את יציאת המכשיר 1022 ולאחר מכן שולחים הודעת hello
בגודל 5 בייטים ל-OTBR.
> ot udp open Done > ot udp bind :: 1022 Done > ot udp send fd8c:60bc:a98:c7ba:5249:34ab:26d1:aff6 1022 hello Done
הטרמינל של SSH מפיק את הפלט הבא. OTBR מקבל את ההודעה hello
מהצטרפות ל-FTD, והמשמעות היא שהתקשורת בין ה-UDP בוצעה בהצלחה.
> 5 bytes from fd8c:60bc:a98:c7ba:9386:63cf:19d7:5a61 1022 hello
8. מזל טוב
יצרתם רשת Thread פשוטה ואימתם את התקשורת בתוך הרשת הזו.
עכשיו אתם יודעים:
- איך ליצור את סביבת הפיתוח Telink Zephyr ולהשתמש בה.
- איך בונים את הקבצים הבינאריים
ot-cli-ftd
ו-ot-rcp
, וכן את הקבצים הבינאריים בלוחות פיתוח B91 של Telink. - איך להגדיר Raspberry Pi 3B+ מגרסה 3B ואילך כנתב Border Border (OTBR) באמצעות Docker.
- איך יוצרים רשת בפרוטוקול Thread ב-OTBR
- איך להוסיף מכשירים לרשת בפרוטוקול Thread באמצעות הזמנה מחוץ למסגרת.
- איך לאמת את הקישוריות בין צמתים ברשת בפרוטוקול Thread.
קריאה נוספת
מומלץ להיכנס ל-openthread.io ול-GitHub כדי ללמוד על משאבים שונים של OpenThread, כולל:
- פלטפורמות נתמכות – כאן מופיעות כל הפלטפורמות שתומכות ב-OpenThread
- פיתוח OpenThread – פרטים נוספים על פיתוח והגדרה של OpenThread
- Thread Primer – כל מושגי ה-Thread שמופיעים ב-Codelab הזה
מסמכי עזר: