1- المقدّمة
خدمة OpenThread التي أصدرها فريق Google Nest هي خدمة مفتوحة المصدر لبروتوكول الشبكات Thread® مصمّمة لتسريع تطوير المنتجات للأجهزة المنزلية المتصلة. تحدد Thread Specification بروتوكول اتصال لاسلكي موثوق به وآمن ومنخفض الطاقة من جهاز إلى جهاز يستند إلى IPv6 لتطبيقات المباني المنزلية والمباني التجارية.
نقلت Espressif حزمة OpenThread استنادًا إلى FreeRTOS وLwIP، ما أتاح للمطوّرين إنشاء شبكات Thread بسرعة. يمكن الحصول على رمز المصدر ذي الصلة من GitHub. في الوقت نفسه، نفّذت Espressif أيضًا جهاز توجيه حدود سلسلة المحادثات استنادًا إلى نظام RTOS.
في هذا الدرس التطبيقي حول الترميز، ستُجري برمجة OpenThread على أجهزة حقيقية، وإنشاء شبكة Thread وإدارتها وتمرير الرسائل بين النقاط.
ما ستتعرَّف عليه
- إنشاء برامج ثنائية لـ OpenThread CLI وإبرازها على لوحات ESP
- جارٍ إنشاء جهاز توجيه الحدود ووميضه إلى لوحة جهاز توجيه الحدود ESP Thread.
- إدارة عُقد Thread يدويًا باستخدام أداة ESP Monitor وOpenThread CLI
- إنشاء شبكة Thread على جهاز توجيه حدود سلسلة المحادثات
- تأمين تشغيل الأجهزة على شبكة Thread.
- فحص اتصال عنوان IPv6 بين عُقد سلسلة المحادثات
- تمرير الرسائل بين عُقد سلسلة المحادثات باستخدام بروتوكول UDP
المتطلبات
الأجهزة:
البرامج:
2. البدء
- تثبيت ESP-IDF
يُرجى اتّباع دليل برمجة ESP-IDF لتثبيت بيئة تطوير البرامج.
- إنشاء نسخة طبق الأصل من حزمة تطوير البرامج (SDK) لجهاز توجيه الحدود المرتبطة بميزة ESP Thread
إنّ ESP-thread-BR هي حزمة تطوير البرامج (SDK) الرسمية لجهاز التوجيه الحدودي لـ ESP Thread. وتتوافق هذه الخدمة مع جميع ميزات الشبكة الأساسية لإنشاء "جهاز توجيه حدودي Thread" وتدمج الميزات المنسّقة على مستوى المنتج لتسريع عملية الإنتاج.
$ cd <your-local-workspace> $ git clone --recursive https://github.com/espressif/esp-thread-br.git
3. الإصدار والفلاش
لإنشاء وتحميل الملف الثنائي ot-cli-ftd على لوحات ESP مع وحدات IEEE 802.15.4، يمكنك الاطّلاع على مثال ESP-IDF ot_cli لمزيد من التفاصيل:
$ cd <your-idf-path>/examples/openthread/ot_cli $ idf.py set-target <your-board-type>
تفعيل ميزة الانضمام من خلال menuconfig:
$ idf.py menuconfig
تكوين المكونات > OpenThread > تمكين Joiner، ثم الإصدار والفلاش.
$ idf.py -p <your-local-port> build flash monitor
لإنشاء وإظهار الملف الثنائي ot-br على لوح توجيه الحدود الخاص بـ ESP Thread، عليك أولاً إنشاء الملف الثنائي لـ RCP. وليس من الضروري تضمين ملف RCP الثنائي لهذا الملف الثنائي بشكل واضح على الجهاز الموجود على "لوحة جهاز التوجيه الحدودي لمعيار ESP" (ESP). وسيتم تضمينه في الملف الثنائي لجهاز توجيه الحدود وسيتم ترميزه لشريحة ESP32-H2 عند تشغيله لأول مرة (أو عند تغيير البرامج الثابتة لبروتوكول RCP). يمكنك الرجوع إلى مستندات ESP Thread BR لمعرفة المزيد من التفاصيل:
$ cd <your-idf-path>/examples/openthread/ot_rcp $ idf.py set-target esp32h2 $ idf.py build $ cd <your-esp-thread-br-path>/examples/basic_thread_border_router $ idf.py set-target esp32s3
تفعيل ميزة "المفوَّض" من خلال ضبط القائمة:
$ idf.py menuconfig
ضبط المكوّنات > OpenThread > تفعيل المفوَّض، ثم إصدار التطبيق وإطلاقه
$ idf.py -p <your-local-port> build flash monitor
4. إنشاء شبكة Thread على جهاز توجيه حدود سلسلة المحادثات
أصبح بإمكانك الآن إنشاء شبكة Thread باستخدام سطر أوامر OpenThread على لوحة توجيه الحدود الخارجية لـ ESP Thread (المفوض البرازيلي البرازيلي):
## BR Commissioner ## ---------------------- > dataset init new Done > dataset Active Timestamp: 1 Channel: 21 Channel Mask: 0x07fff800 Ext PAN ID: 151975d11bea97b5 Mesh Local Prefix: fd6a:b54b:d6a3:b05a::/64 Network Key: 731ab6a60a64a0a0b14b259b86b2be01 Network Name: OpenThread-1444 PAN ID: 0x1444 PSKc: 54e7f18d2575014da94db09df29c5df0 Security Policy: 672 onrc 0 Done
قم بإتمام مجموعة البيانات هذه باعتبارها المجموعة النشطة:
> dataset commit active Done
عرض واجهة IPv6:
> ifconfig up I (59329) OPENTHREAD: Platform UDP bound to port 49153 Done I (59329) OT_STATE: netif up
بدء عملية بروتوكول سلسلة المحادثات:
> thread start I(61709) OPENTHREAD:[N] Mle-----------: Role disabled -> detached Done > I(62469) OPENTHREAD:[N] Mle-----------: Attach attempt 1, AnyPartition reattaching with Active Dataset I(69079) OPENTHREAD:[N] RouterTable---: Allocate router id 11 I(69079) OPENTHREAD:[N] Mle-----------: RLOC16 fffe -> 2c00 I(69089) OPENTHREAD:[N] Mle-----------: Role detached -> leader I(69089) OPENTHREAD:[N] Mle-----------: Partition ID 0x28b518c6 I (69099) OPENTHREAD: Platform UDP bound to port 49154
بعد لحظات، تحقَّق من حالة الجهاز. يجب أن يكون القائد.
> state leader Done >
5. الانضمام إلى شبكة Thread من خلال مفتاح الشبكة
في هذا الدرس التطبيقي حول الترميز، يتم تجهيز لوحتَي ESP باستخدام وحدات IEEE 802.15.4 للانضمام إلى الشبكة التي تم تكوينها في البرازيل. في هذه الجلسة، سنضيف Board1 إلى الشبكة.
الحصول على مفتاح الشبكة من البرازيل:
## BR Commissioner ## ---------------------- > networkkey 731ab6a60a64a0a0b14b259b86b2be01 Done >
اضبط مفتاح الشبكة هذا على لوحة ESP واحدة (Board1 Joiner) مع وحدات IEEE 802.15.4:
## Board1 Joiner ## ---------------------- > dataset networkkey 731ab6a60a64a0a0b14b259b86b2be01 Done
قم بإتمام مجموعة البيانات هذه باعتبارها المجموعة النشطة:
> dataset commit active Done
عرض واجهة IPv6:
> ifconfig up Done I (20308) OT_STATE: netif up
بدء عملية بروتوكول سلسلة المحادثات:
> thread start I(23058) OPENTHREAD:[N] Mle-----------: Role disabled -> detached Done > I(23408) OPENTHREAD:[N] Mle-----------: Attach attempt 1, AnyPartition reattaching with Active Dataset I(30028) OPENTHREAD:[N] Mle-----------: Attach attempt 1 unsuccessful, will try again in 0.288 seconds I(30328) OPENTHREAD:[N] Mle-----------: Attach attempt 2, AnyPartition I(33498) OPENTHREAD:[N] Mle-----------: Delay processing Announce - channel 21, panid 0x1444 I(33758) OPENTHREAD:[N] Mle-----------: Processing Announce - channel 21, panid 0x1444 I(33758) OPENTHREAD:[N] Mle-----------: Role detached -> disabled I(33758) OPENTHREAD:[N] Mle-----------: Role disabled -> detached I(34178) OPENTHREAD:[N] Mle-----------: Attach attempt 1, AnyPartition I(35068) OPENTHREAD:[N] Mle-----------: RLOC16 fffe -> 2c01 I(35068) OPENTHREAD:[N] Mle-----------: Role detached -> child
بعد لحظات، تحقَّق من حالة الجهاز. يجب أن يكون الطفل.
> state child Done
اضبط الدور على جهاز التوجيه.
> state router Done I(51028) OPENTHREAD:[N] Mle-----------: RLOC16 2c01 -> 2800 I(51028) OPENTHREAD:[N] Mle-----------: Role child -> router I(51028) OPENTHREAD:[N] Mle-----------: Partition ID 0x28b518c6 >
6. الانضمام إلى شبكة Thread من خلال عملية إعداد نظام التشغيل الآمن
في هذه الجلسة، سنضيف Board2 إلى الشبكة من خلال التفويض الأمني:
احصل على PSKc وpanid من المفوّض البرازيلي:
## BR Commissioner ## ---------------------- > pskc 54e7f18d2575014da94db09df29c5df0 Done > panid 0x1444 Done
اضبط معلومات الشبكة على Board2:
## Board2 Joiner ## ---------------------- > dataset pskc 54e7f18d2575014da94db09df29c5df0 Done > dataset panid 0x1444 Done
قم بإتمام مجموعة البيانات هذه باعتبارها المجموعة النشطة:
## Board2 Joiner ## ---------------------- > dataset commit active Done
عرض واجهة IPv6:
## Board2 Joiner ## ---------------------- > ifconfig up Done I (29146) OT_STATE: netif up
احصل على eui64 من Board2:
## Board2 Joiner ## ---------------------- > eui64 4831b7fffec02be1 Done
في المفوَّض في البرازيل، ابدأ المفوّض وحدِّد eui64
للجهاز الذي يمكن ضمه، بالإضافة إلى "بيانات اعتماد الانضمام"، على سبيل المثال J01NME
. "بيانات اعتماد الانضمام" هي سلسلة خاصة بالجهاز تتألف من جميع الأحرف الأبجدية الرقمية الكبيرة (من 0 إلى 9 وA-Y، باستثناء I وO وQ وZ لتسهيل القراءة)، ويتراوح طولها بين 6 و32 حرفًا.
## BR Commissioner ## ---------------------- > commissioner start Commissioner: petitioning Done Commissioner: active > commissioner joiner add 4831b7fffec02be1 J01NME Done
بدِّل إلى Board2 Joiner. ابدأ دور الانضمام باستخدام "بيانات اعتماد الانضمام" التي أعددتها للتو في المفوَّض البرازيلي:
## Board2 Joiner ## ---------------------- > ifconfig up Done > joiner start J01NME Done
في غضون دقيقة أو نحو ذلك، ستتلقى تأكيدًا على نجاح المصادقة:
## Board2 Joiner ## ---------------------- > Join success
بعد ذلك، يمكنك بدء شبكة Thread التي شكلها المفوَّض البرازيلي والانضمام إليها.
بدء عملية بروتوكول سلسلة المحادثات:
> thread start I(35727) OPENTHREAD:[N] Mle-----------: Role disabled -> detached Done > I(36197) OPENTHREAD:[N] Mle-----------: Attach attempt 1, AnyPartition reattaching with Active Dataset I(37007) OPENTHREAD:[N] Mle-----------: RLOC16 fffe -> 2801 I(37007) OPENTHREAD:[N] Mle-----------: Role detached -> child
اضبط الدور على جهاز التوجيه.
> state router Done I(46057) OPENTHREAD:[N] Mle-----------: RLOC16 2801 -> 4400 I(46057) OPENTHREAD:[N] Mle-----------: Role child -> router I(46057) OPENTHREAD:[N] Mle-----------: Partition ID 0x28b518c6 >
تحصل الآن على شبكة Thread بالمخطط الموضح أدناه:
7. فحص اتصال عنوان IPv6 بين عُقد سلسلة المحادثات
يمكنك استخدام الأمر ping للتواصل بين أي لوحتين. استخدِم الأمر ipaddr
لطباعة عنوان IPv6 لكل لوحة:
## BR Commissioner ## ---------------------- > ipaddr fd6a:b54b:d6a3:b05a:0:ff:fe00:fc00 # Leader Anycast Locator (ALOC) fd6a:b54b:d6a3:b05a:0:ff:fe00:2c00 # Routing Locator (RLOC) fd6a:b54b:d6a3:b05a:a8df:eb43:63d8:bda0 # Mesh-Local EID (ML-EID) fe80:0:0:0:687c:7248:cc14:9c4d # Link-Local Address (LLA) Done >
## Board1 Joiner ## ---------------------- > ipaddr fd6a:b54b:d6a3:b05a:0:ff:fe00:2800 # Routing Locator (RLOC) fd6a:b54b:d6a3:b05a:e461:db08:c833:1248 # Mesh-Local EID (ML-EID) fe80:0:0:0:18ac:df04:4671:6a45 # Link-Local Address (LLA) Done
## Board2 Joiner ## ---------------------- > ipaddr fd6a:b54b:d6a3:b05a:0:ff:fe00:4400 # Routing Locator (RLOC) fd6a:b54b:d6a3:b05a:d7dc:8e90:9bc9:ecbc # Mesh-Local EID (ML-EID) fe80:0:0:0:a8cc:1483:f696:91a2 # Link-Local Address (LLA) Done
على سبيل المثال، لإجراء اختبار ping Board2 MLE-ID من مفوض البرازيل، يمكنك تشغيل هذا الأمر على مفوض البرازيل:
## BR Commissioner ## ---------------------- > ping fd6a:b54b:d6a3:b05a:d7dc:8e90:9bc9:ecbc 16 bytes from fd6a:b54b:d6a3:b05a:d7dc:8e90:9bc9:ecbc: icmp_seq=1 hlim=255 time=123ms 1 packets transmitted, 1 packets received. Packet loss = 0.0%. Round-trip min/avg/max = 123/123.0/123 ms. Done
8. تمرير الرسائل بين عُقد سلسلة المحادثات باستخدام بروتوكول UDP
في هذه الجلسة، ستتعلم كيفية إرسال رسالة بين جهازين من أجهزة Thread. على سبيل المثال، افتح udp واربطه في المنفذ 20617
واستمِع إلى جميع العناوين على BR:
## BR Commissioner ## ---------------------- > udp open Done > udp bind :: 20617 I (1298739) OPENTHREAD: Platform UDP bound to port 20617 Done
بعد ذلك، أرسِل رسالة من Board1 إلى عنوان BR MLE-ID والمنفذ 20617
:
## Board1 Joiner ## ---------------------- > udp open Done > udp send fd6a:b54b:d6a3:b05a:a8df:eb43:63d8:bda0 20617 ESP
يمكنك رؤية الرسالة التي تم استلامها في البرازيل:
## BR Commissioner ## ---------------------- 3 bytes from fd6a:b54b:d6a3:b05a:e461:db08:c833:1248 49154 ESP
9. تهانينا!
لقد أنشأت شبكة Thread باستخدام لوحات ESP
أنت تعرف الآن:
- إنشاء برامج ثنائية لـ OpenThread CLI وإبرازها على لوحات ESP
- جارٍ إنشاء جهاز توجيه الحدود الوامض إلى لوحة ESP Thread Border Router.
- إدارة عُقد Thread يدويًا باستخدام أداة ESP Monitor وOpenThread CLI
- إنشاء شبكة Thread على جهاز توجيه حدود سلسلة المحادثات
- تأمين تشغيل الأجهزة على شبكة Thread.
- فحص اتصال عنوان IPv6 بين عُقد سلسلة المحادثات
- تمرير الرسائل بين عُقد سلسلة المحادثات باستخدام بروتوكول UDP
قراءات إضافية
يمكنك مراجعة openthread.io وGitHub للتعرّف على مجموعة متنوعة من موارد OpenThread، بما في ذلك:
- الأنظمة الأساسية المتوافقة - يمكنك اكتشاف جميع الأنظمة الأساسية التي تتيح استخدام OpenThread
- إنشاء OpenThread: مزيد من التفاصيل حول إنشاء OpenThread وإعداده
- Thread Primer: يشمل جميع مفاهيم Thread الواردة في هذا الدرس التطبيقي حول الترميز.
مرجع: