1. مقدمة
منصة OpenThread، التي أطلقها فريق Google Nest، هي خدمة مفتوحة المصدر لبروتوكول شبكة Thread® المصمَّم لتسريع عملية تطوير المنتجات للشبكات المنزلية المتصلة. تحدّد مواصفات Thread بروتوكول الاتصال بين الأجهزة اللاسلكية الموثوق به والآمن ومنخفض الطاقة، المستند إلى بروتوكول IPv6، وهو يُستخدم في تطبيقات المنازل والتطبيقات التجارية.
نقلت منصّة Espressif حزمة OpenThread استنادًا إلى FreeRTOS وLwIP، ما يتيح للمطوّرين إنشاء شبكات Thread بسرعة. يمكن الحصول على رمز المصدر ذي الصلة من GitHub. في الوقت نفسه، نفَّذت Espressif أيضًا جهاز توجيه حدود سلسلة المحادثات استنادًا إلى RTOS.
في هذا الدرس التطبيقي حول الترميز، ستقوم ببرمجة OpenThread على أجهزة حقيقية وإنشاء شبكة Thread وإدارتها وتمرير الرسائل بين العُقد.
ما ستتعرَّف عليه
- إنشاء برامج ثنائية من OpenThread CLI ومضيها في لوحات ESP.
- إنشاء موجِّه الحدود ووميض إلى لوحة جهاز توجيه الحدود المتصلة بمعيار ESP
- إدارة عُقد Thread يدويًا باستخدام ESP Monitor وOpenThread CLI.
- جارٍ إنشاء شبكة Thread على جهاز توجيه حدود Thread.
- تأمين تشغيل الأجهزة على شبكة Thread
- فحص عنوان IPv6 بين عُقد سلسلة المحادثات
- تمرير الرسائل بين عُقد سلسلة المحادثات باستخدام بروتوكول UDP
المتطلبات
الأجهزة:
البرامج:
2. الخطوات الأولى
- تثبيت ESP-IDF.
يُرجى اتّباع دليل برمجة ESP-IDF لتثبيت بيئة تطوير البرامج.
- استنسِخ حزمة تطوير البرامج (SDK) الخاصة بجهاز توجيه حدود سلسلة محادثات ESP.
إنّ ESP-THREAD-BR هي حزمة تطوير البرامج الرسمية لموجِّه شبكة سلسلة المحادثات ESP. يتوافق التطبيق مع جميع ميزات الشبكة الأساسية لإنشاء جهاز توجيه الحدود، كما يدمج ميزات غنية على مستوى المنتجات للمساعدة في عملية الإنتاج بسرعة.
$ cd <your-local-workspace> $ git clone --recursive https://github.com/espressif/esp-thread-br.git
3- إنشاء واسترجاع محتوى
لإنشاء ملف ثنائي يتم تشغيله كواجهة تخزين في السحابة الإلكترونية وتضخيمه على لوحات 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، عليك إنشاء الملف الثنائي RCP أولاً. ليس من الضروري أن يتم تشغيل هذا الملف الثنائي لخوارزمية RCP بشكل صريح على الجهاز على لوحة توجيه حدود خيوط ESP. سيتم تضمينه في الملف الثنائي "جهاز توجيه الحدود" وسيتم تحديثه في شريحة ESP32-H2 عند التشغيل لأول مرة (أو تغيير البرامج الثابتة لـ RCP). يمكنك الاطّلاع على مستندات Thread BR التابعة لـ ESP لمزيد من التفاصيل:
$ 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
تفعيل ميزة "المفوَّض" من خلال menuconfig:
$ idf.py menuconfig
تكوين المكوّن > OpenThread > تمكين المفوض، ثم إنشاء أداة Flash.
$ idf.py -p <your-local-port> build flash monitor
4. إنشاء شبكة Thread على جهاز توجيه حدود Thread
يمكنك الآن إنشاء شبكة Thread باستخدام سطر أوامر OpenThread على لوحة توجيه ESP Thread Border Board Board (BR Commissioner):
## 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:
> 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:
> 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. يمكنك بدء دور الانضمام باستخدام "بيانات اعتماد الانضمام" التي أعددتها للتو في مُفوّض البرازيل:
## Board2 Joiner ## ---------------------- > ifconfig up Done > joiner start J01NME Done
في غضون دقيقة أو نحو ذلك، ستتلقى رسالة تأكيد بنجاح على المصادقة:
## Board2 Joiner ## ---------------------- > Join success
بعد ذلك، يمكنك بدء شبكة Thread والانضمام إليها التي شكّلها المفوَّض البرازيلي.
بدء عملية بروتوكول 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:
## BR Commissioner ## ---------------------- 3 bytes from fd6a:b54b:d6a3:b05a:e461:db08:c833:1248 49154 ESP
9. تهانينا!
لقد أنشأت شبكة Thread ما باستخدام ألواح ESP
أنت تعرف الآن:
- إنشاء برامج ثنائية من OpenThread CLI ومضيها في لوحات ESP.
- إنشاء جهاز توجيه حدود وامض إلى لوحة جهاز توجيه ESP ذات حدود خيطية.
- إدارة عُقد Thread يدويًا باستخدام ESP Monitor وOpenThread CLI.
- جارٍ إنشاء شبكة Thread على جهاز توجيه حدود Thread.
- تأمين تشغيل الأجهزة على شبكة Thread
- فحص عنوان IPv6 بين عُقد سلسلة المحادثات
- تمرير الرسائل بين عُقد سلسلة المحادثات باستخدام بروتوكول UDP
محتوى إضافي للقراءة
راجع openthread.io وGitHub للحصول على مجموعة متنوعة من موارد OpenThread، بما في ذلك:
- الأنظمة الأساسية المتوافقة: اكتشاف جميع الأنظمة الأساسية التي تتيح استخدام OpenThread
- إنشاء OpenThread: مزيد من التفاصيل حول إنشاء أداة OpenThread وضبطها
- سلسلة المحادثات التمهيدية: تتناول جميع مفاهيم سلاسل المحادثات الواردة في هذا الدرس التطبيقي حول الترميز.
مرجع: