
جهاز توجيه WiFi NAT كامل الوظائف (والآن أيضًا مكرر WiFi)
موجه NAT WiFi كامل الوظائف (وأيضًا مكرر WiFi المعروف بـ L2 bridge)
جديد 2026: بعد 10 سنوات من الإصدار الأول، أصبح أخيرًا ما كان يدّعي دائمًا أنه: مكرر WiFi حقيقي. من أجل عدم كسر أي مستندات أو روابط موجودة، لا تزال النسخة القياسية هي النسخة المعروفة لموجه NAT بجميع الميزات المتقدمة. ولكن إذا كنت مهتمًا بـ L2 bridge حقيقي مبسط، فانظر أدناه في القسم ESP8266 WiFi Repeater - L2 bridge.
هذا تنفيذ لموجه NAT WiFi على esp8266 و esp8285. يتضمن أيضًا دعمًا لجدار حماية لتصفية الحزم مع قوائم التحكم في الوصول (ACLs)، وتوجيه المنافذ، وتشكيل حركة المرور، وخطافات للمراقبة عن بُعد (أو التقاط الحزم)، وواجهة إدارة MQTT، وتفاعل GPIO بسيط، وإدارة الطاقة. للإعداد مع أجهزة توجيه متعددة في شبكة لتغطية منطقة أكبر، تم تضمين وضع جديد "أوتوميش".
إذا كنت تبحث عن طريقة لدمج ميزة NAT في مشروع Arduino الخاص بك - انظر هنا.
موجه NAT EPS32 هو المشروع المتقدم لـ ESP32.
تتضمن سيناريوهات الاستخدام النموذجية:
بشكل افتراضي، يعمل ESP كمحطة (STA) وكنقطة وصول ناعمة (soft-AP) ويقوم بإعادة توجيه أي حركة مرور IP من خلاله بشفافية. نظرًا لاستخدام NAT، لا يلزم وجود إدخالات توجيه لا على جانب الشبكة ولا على المحطات المتصلة. يتم تكوين المحطات عبر DHCP بشكل افتراضي في شبكة 192.168.4.0/24 ويتلقون عنوان خادم DNS من شبكة WiFi الموجودة.
تظهر القياسات أنه يمكنه تحقيق حوالي 5 ميجابت في الثانية في كلا الاتجاهين، لذا حتى البث ممكن.
يتم شرح بعض التفاصيل في هذا الفيديو.
للوميض مباشرة على الجهاز، استخدم مثبّت الويب.
يبدأ esp_wifi_repeater بالتكوين الافتراضي التالي:
بعد التشغيل الأول (أو إعادة ضبط المصنع)، سيوفر شبكة WiFi بنقطة وصول مفتوحة واسم SSID "MyAP". لا يحاول بعد إعادة الاتصال تلقائيًا بنقطة وصول الصاعدة (لأنه لا يعرف اسم SSID أو كلمة مرور صالحة).
اتصل بشبكة WiFi هذه وقم بالتكوين الأساسي إما عبر واجهة ويب بسيطة أو التكوين الكامل مع جميع الخيارات عبر وحدة التحكم.
تسمح واجهة الويب بتكوين جميع المعلمات المطلوبة لوظيفة إعادة التوجيه الأساسية. شكرًا لـ rubfi على العمل الكبير في ذلك: https://github.com/rubfi/esp_wifi_repeater/ . وجّه متصفحك إلى "http://192.168.4.1". يجب أن تظهر هذه الصفحة:
أولاً، أدخل القيم المناسبة لشبكة WiFi الصاعدة، "إعدادات STA". استخدم كلمة المرور "none" للشبكات المفتوحة. حدد مربع "Automesh" فقط إذا كنت تريد حقًا استخدام وضع الأوتوميش. انقر على "Connect". يعاد تشغيل ESP ويتصل بموجه WiFi الخاص بك. يجب أن يومض مؤشر LED الخاص بالحالة بعد بضع ثوانٍ.
إذا قمت بتحديد الأوتوميش، فقد انتهيت من التكوين. تكوين "إعدادات نقطة الوصول الناعمة" غير مطلوب لأنه في وضع الأوتوميش تكون هذه الإعدادات مطابقة لـ "إعدادات STA". سيتم تقديم نفس SSID من قبل جميع مكررات ESP المتصلة.
إذا كنت لا تستخدم الأوتوميش، يمكنك الآن إعادة تحميل الصفحة وتغيير "إعدادات نقطة الوصول الناعمة". انقر على "Set" وسيعاد تشغيل ESP مرة أخرى. الآن أصبح جاهزًا لإعادة توجيه حركة المرور عبر نقطة الوصول الناعمة المكونة حديثًا. كن على علم أن هذه التغييرات تؤثر أيضًا على واجهة التكوين، أي للقيام بمزيد من التكوين، اتصل بـ ESP عبر إحدى شبكات WiFi المكونة حديثًا. للوصول عبر نقطة الوصول الناعمة، تذكر عنوان شبكة نقاط الوصول الناعمة إذا قمت بتغييره (ESP دائمًا لديه العنوان x.x.x.1 في هذه الشبكة).
إذا أردت، يمكنك تحديد مربع "lock" والنقر على "Lock". الآن لا يمكن تغيير التكوين دون إلغاء قفله أولاً بكلمة مرور شبكة WiFi الصاعدة (حدد واحدة حتى لو كانت الشبكة مفتوحة).
إذا كنت تريد إدخال أحرف غير ASCII أو أحرف خاصة في واجهة الويب، يجب عليك استخدام ترميز سداسي عشري بنمط HTTP مثل "My%20AccessPoint". سيؤدي هذا إلى سلسلة "My AccessPoint". باستخدام هذا الترميز السداسي العشري يمكنك إدخال أي قيمة بايت تريدها، باستثناء 0 (لأسباب داخلية في C).
إذا أخطأت وفقدت كل اتصال بـ ESP، فلا يزال بإمكانك استخدام وحدة التحكم التسلسلية لاستعادته ("إعادة ضبط المصنع"، انظر أدناه).
يجب إجراء التكوين المتقدم عبر سطر الأوامر في واجهة وحدة التحكم. هذه الوحدة متاحة إما عبر المنفذ التسلسلي بسرعة 115200 باود أو عبر منفذ TCP 7777 (مثل "telnet 192.168.4.1 7777" من محطة متصلة).
استخدم الأوامر التالية للإعداد الأولي:
مرة أخرى، إذا كنت تريد إدخال أحرف غير ASCII أو أحرف خاصة، يمكنك استخدام ترميز سداسي عشري بنمط HTTP (مثل "My%20AccessPoint") أو، فقط في CLI، كاختصار استخدام علامات الاقتباس بنمط C مع شرطة مائلة للخلف (مثل "My\ AccessPoint"). كلتا الطريقتين ستؤديان إلى سلسلة "My AccessPoint".
يفهم سطر الأوامر أوامر أكثر بكثير:
كافية لجعلها تعمل في جميع البيئات تقريبًا.
معظم أوامر set تكون فعالة فقط بعد الحفظ وإعادة التعيين.
أي جزء من إدخال سطر الأوامر بعد "#" واحد حتى نهاية السطر سيتم التعامل معه كتعليق وسيتم تجاهله.
في التكوين الافتراضي، يتم تكوين GPIO2 لتشغيل مؤشر LED للحالة (موصل بـ GND) مع المؤشرات التالية:
باستخدام "set status_led GPIOno" يمكن تغيير دبوس GPIO (أي قيمة أكبر من 16، مثل "set status_led 255" سيعطل مؤشر LED للحالة تمامًا). عند تكوينه على GPIO1، يعمل مع LED الأزرق المدمج على لوحات ESP-01. ومع ذلك، نظرًا لأن GPIO1 هو أيضًا دبوس UART-TX، فهذا يعني أن وحدة التحكم التسلسلية لا تعمل. يقتصر التكوين بعد ذلك على الوصول عبر الشبكة.
إذا قمت بسحب GPIO محدد إلى مستوى منخفض لأكثر من 3 ثوانٍ، سيقوم المكرر بإعادة ضبط المصنع وإعادة التشغيل بالتكوين الافتراضي. باستخدام "set hw_reset GPIOno" يمكن تغيير دبوس GPIO (أي قيمة أكبر من 16، مثل "set hw_reset 255" سيعطل ميزة إعادة ضبط المصنع عبر الأجهزة).
بالنسبة للعديد من الوحدات، بما في ذلك ESP-01s و NodeMCUs، ربما تكون فكرة جيدة استخدام GPIO 0 لذلك، حيث يتم استخدامه بالفعل. ومع ذلك، فهو ليس الدبوس الافتراضي، لأنه قد يتداخل مع سحبه لأسفل أثناء الوميض. لذلك، إذا كنت ترغب في استخدام زر ضغط موجود على GPIO 0 لإعادة ضبط المصنع عبر الأجهزة، فقم بتكوينه باستخدام "set hw_reset 0" و "save" بعد الوميض. إعادة ضبط المصنع التي يتم تشغيلها بواسطة دبوس الأجهزة لن تعيد تعيين رقم GPIO المكون لإعادة ضبط المصنع ("reset factory" من وحدة التحكم سيفعل ذلك).
من أجل السماح للعملاء من الشبكة الخارجية بالاتصال بمنفذ الخادم على الشبكة الداخلية، يجب تعيين المنافذ. يتم تعيين منفذ خارجي إلى منفذ داخلي لعنوان IP داخلي محدد. استخدم أمر "portmap add" لذلك. يمكن سرد تعيينات المنافذ باستخدام أمر "show" ويتم حفظها مع التكوين الحالي.
ومع ذلك، للتأكد من أن الجهاز المتوقع يستمع على عنوان IP معين، يجب ضمان أن هذا الجهاز لديه نفس عنوان IP بمجرد إعادة تشغيله أو إعادة تشغيل ESP. لتحقيق ذلك، يمكن تكوين عناوين IP ثابتة في الأجهزة أو يجب أن يتذكر ESP إيجارات DHCP الخاصة به. يمكن تحقيق ذلك باستخدام أمر "save dhcp". يقوم بحفظ الحالة الحالية وجميع إيجارات DHCP، بحيث يتم استعادتها بعد إعادة التشغيل. يمكن سرد إيجارات DHCP باستخدام أمر "show stats".
تم الآن تضمين دعم WPA2 Enterprise (PEAP) في المشروع. يسمح بـ "محول" يترجم شبكة WPA2 enterprise مع مصادقة PEAP إلى شبكة WPA2-PSK. هذا يحل مشكلة شائعة خاصة في بيئات الجامعة: شبكة WiFi المحلية هي شبكة WPA2 Enterprise مع مصادقة PEAP-MSCHAPv2. مثال بارز هو شبكة "eduroam" المتوفرة في العديد من الجامعات حول العالم. المشكلة هي أن العديد من أجهزة إنترنت الأشياء لا تستطيع التعامل مع مصادقة WPA2 Enterprise. لذا فإن التطوير والعروض التوضيحية صعبة. ما هو مفيد جدًا هو "محول" يقوم بتسجيل الدخول إلى شبكة WPA2 Enterprise ويقدم شبكة WPA-PSK أبسط لعملائه.
لاستخدامه، قم بتعيين معلمات التكوين التالية: ssid، use_peap، peap_identity، peap_username، و peap_password (لا تحتاج إلى معلمة password المعتادة). يجب إجراء هذا التكوين (وحفظه) عبر CLI وهو غير متوفر في واجهة الويب.
الكود حاليًا لا يتحقق من شهادة خادم RADIUS. إنه عرضة لهجمات MITM، عندما يقوم شخص ما بإعداد نقطة وصول وخادم RADIUS مزيفين. بينما لا يتم إرسال كلمة المرور بنص عادي، فإن MSCHAPv2 المستخدم معروف بأنه مكسور. أيضًا، كن على علم بحقيقة أن ESP8266 يحتوي الآن على كلمة مرور شبكة المؤسسة الخاصة بك. يمكن لمسؤول الشبكة الآن ربط كل حركة المرور التي يتم إعادة توجيهها بحسابك. لا تسيء استخدامه وتعرضه للآخرين غير الموثوقين، على سبيل المثال عن طريق تكوين شبكة مفتوحة. وحتى عندما يكون الجهاز مقفلاً، يمكن استخراج كلمة مرور شبكة المؤسسة الخاصة بك عبر المنفذ التسلسلي من فلاش ESP بنص عادي.
في بعض الأحيان قد ترغب في استخدام عدة esp_wifi_repeaters متتالية أو شبكة لتغطية مسافة أو منطقة أكبر. بشكل عام، يمكن القيام بذلك دون أي مشاكل مع موجهات NAT، في الواقع سيكون لديك عدة طبقات من NAT. ومع ذلك، هذا يعني أن الاتصال محدود: يمكن لجميع العقد التحدث إلى الإنترنت، ولكن بشكل عام لا يوجد اتصال IP مباشر بين العقد. وبالطبع، ينخفض النطاق الترددي المتاح كلما زادت القفزات التي تحتاجها. لكن المستخدمين أبلغوا أنه حتى 5 esp_wifi_repeaters متتالية تعمل بشكل جيد.
في مثل هذا الإعداد، يكون التكوين نشاطًا مستهلكًا للوقت وعرضة للأخطاء. لتبسيط ذلك، يحتوي esp_wifi_repeater الآن على وضع جديد: "أوتوميش". فقط قم بتكوين SSID وكلمة المرور وقم بتشغيل "automesh". (إما على CLI باستخدام "set automesh 1" أو على واجهة الويب بمجرد تحديد خانة الاختيار). سيقوم هذا بما يلي:كل جهاز esp_wifi_repeater تم تكوينه بهذه الطريقة سيوفر تلقائيًا شبكة WiFi على نقطة الوصول (AP) بنفس SSID/كلمة المرور التي يتصل بها. يمكن للعملاء استخدام إعدادات WiFi نفسها للشبكة الأصلية أو الشبكات المكررة. كل جهاز esp_wifi_repeater تم تكوينه باستخدام "automesh" سيبحث أولاً عن أفضل نقطة وصول أخرى للاتصال بها. هذه هي الأقرب إلى شبكة WiFi الأصلية ولديها أفضل قوة إشارة (RSSI).
من السهل قياس قوة الإشارة باستخدام المسح، ولكن أيها الأقرب إلى شبكة WiFi الأصلية عندما ترى عدة نقاط وصول بنفس SSID؟ لذلك يستخدم البروتوكول خدعة قذرة إلى حد ما: أجهزة esp_wifi_repeater في وضع "automesh" تتلاعب بـ BSSID الخاص بها (في الواقع، وفقًا لمعيار IEEE 802.11 يسمى هذا "ESSID" لأنها نقطة وصول، لكن SDK يسميها "BSSID")، أي عنوان MAC لواجهة نقطة الوصول الخاصة بها، والذي يتم إرساله مع كل إطار منارة (beacon) حوالي 10 مرات في الثانية. يستخدم التنسيق: 24:24:mm:rr:rr:rr. "24:24" هو مجرد المعرف الفريد للمكرر (هناك احتمال ضئيل أن يتصادم مع MAC الخاص بنقاط الوصول الحقيقية، ولكن يمكننا تجاهل ذلك، حيث يمكننا تغيير تلك البادئة إذا لزم الأمر حقًا). يعني "mm" "مستوى الشبكة (mesh level)"، وهي المسافة بالقفزات إلى شبكة WiFi الأصلية. الثلاثة الأخيرة "rr:rr:rr" هي مجرد أرقام عشوائية للتمييز بين أجهزة ESP المختلفة. تحتفظ نقطة الوصول الأصلية بـ BSSID الخاص بها، أي التي بدون البادئة "24:24" يتم التعرف عليها كجذر، ويسمى مستوى شبكة 0.
الآن يمكن لكل esp_wifi_repeater معرفة أي مكرر آخر هو الأقرب إلى شبكة WiFi الأصلية، والاتصال به، واختيار BSSID الخاص به وفقًا لذلك. كما يتم تعديل عنوان IP للشبكة الداخلية إلى مستوى الشبكة: 10.24.m.0. هذا ينشئ شجرة (شبكة خاصة جدًا) مع نقطة الوصول WiFi الأصلية كجذر وعقد مكررة على عدة مستويات شبكة (في الواقع، يعمل بشكل مشابه إلى حد ما لبروتوكول الشجرة الممتدة (STP) على طبقة الارتباط أو التوجيه على طبقة الشبكة باستخدام بروتوكول ناقل المسافة (Distance Vector)). بمجرد اكتشاف فقدان الاتصال الصاعد (uplink) ، يتم إعادة تشغيل التهيئة. يجب أن يتجنب هذا الحلقات، حيث أثناء (إعادة) التهيئة لا يتم إرسال أي إشارات منارة مع BSSID.
للتيسير، يحاول جهاز esp_wifi_repeater بعد تكوين "automesh" أولاً التحقق مما إذا كان بإمكانه الاتصال بنقطة وصول صاعدة. إذا فشل ذلك، حتى عندما يتم العثور على نقطة وصول بمعرف SSID الصحيح، يفترض أن المستخدم قد أخطأ في كلمة المرور ويعيد ضبط الإعدادات الافتراضية للمصنع. بعد أن يتصل بنجاح مرة واحدة، سيفترض أن التكوين صحيح وسيستمر في المحاولة بعد فقدان الاتصال أو إعادة الضبط للمدة التي تستغرقها (لتجنب هجوم رفض الخدمة (DOS) بنقطة وصول تم تكوينها بشكل خاطئ).
إذا كان هناك أكثر من ESP واحد في النطاق، فقد تكون هناك مقايضة بين مسار "سيء" أقصر ومسار "جيد" أطول (جيد وسيء من حيث جودة الارتباط). تحدد المعلمة am_threshold ما هو الاتصال السيء: إذا كانت قيمة RSSI في المسح أقل من هذه العتبة، يكون الاتصال سيئًا ويفضل المسار الذي يحتوي على قفزة إضافية واحدة. على سبيل المثال، إذا كانت am_threshold تساوي 85 وتم اكتشاف عقدتين من automesh في المسح: A بمستوى 1 و RSSI -88 dB و B بمستوى 2 و RSSI -60 dB، فإن الرابط إلى A يعتبر سيئًا جدًا (-88 dB < -am_threshold) ويتم تفضيل B. ستصبح العقدة الجديدة عقدة من المستوى 3 مع رابط صاعد عبر B. يتم إعطاء am_threshold كقيمة موجبة ولكنها تعني dB سالب. قيمة أصغر أفضل.
إذا كنت ترغب في الحصول على مزيد من التبصر في طوبولوجيا شبكة automesh، فقد تفكر في توصيل جميع العقد بوسيط MQTT والسماح لها بنشر موضوع "Topology" (انظر أدناه). إذا اشتركت الآن في "/WiFi/+/system/Topology" ستحصل على جميع معلومات العقد والروابط بما في ذلك RSSI (لأجهزة ESP المتصلة) التي تحتاجها لإعادة بناء الرسم البياني الكامل واكتشاف الروابط الضعيفة في الشبكة. يحتوي موضوع TopologyInfo على بنية JSON التالية، والتي يمكن استخدامها لإعادة بناء رسم بياني كامل لشبكة automesh:``` { "nodeinfo" { "id":"ESP_07e37e", "ap_mac":"24:24:01:72:c7:f9", "sta_mac":"60:01:bc:07:e3:7e", "uplink_bssid":"00:1a:54:93:23:0a", "ap_ip":"10.24.1.1", "sta_ip":"192.168.178.33", "rssi":"-66", "mesh_level":"1", "no_stas":"2" }, "stas":[ {"mac":"5c:cf:45:11:7f:13","ip":"10.24.1.2"}, {"mac":"00:14:22:76:99:c5","ip":"10.24.1.3"} ] }
استخدام المعلمتين _am_scan_time_ و _am_sleep_time_ يتيح إدارة الطاقة في وضع الشبكة الآلية (automesh)، إذا قمت بتوصيل GPIO16 بـ RST. بعد التمهيد، يقوم esp_wifi_repeater بمسح نقاط الوصول المتاحة للاتصال الصاعد لمدة _am_scan_time_ ثانية. إذا لم يتم العثور على أي منها، يدخل في وضع السكون العميق لمدة _am_sleep_time_ ثانية ويحاول مرة أخرى بعد إعادة التشغيل (القيمة الافتراضية هي 0 = معطل لكلا المعلمتين).
# المراقبة
من وحدة التحكم يمكن بدء خدمة مراقبة ("monitor on [رقم_المنفذ]"). تعكس هذه الخدمة حركة المرور للشبكة الداخلية بتنسيق pcap إلى تدفق TCP. على سبيل المثال، باستخدام "netcat [عنوان_IP_الخارجي_للمكرر] [رقم_المنفذ] | sudo wireshark -k -S -i -" من جهاز كمبيوتر في الشبكة الخارجية، يمكنك الآن مراقبة حركة المرور في الشبكة الداخلية في الوقت الفعلي. استخدم هذا مثلاً لمراقبة المواقع الإلكترونية التي تتواصل معها الأجهزة الداخلية. كن على علم أن هذا يضاعف على الأقل تحميل الـ ESP وشبكة WiFi. تحت التحميل الثقيل قد يؤدي ذلك إلى تقصير بعض الحزم أو حتى إسقاطها في جلسة المراقبة. تنبيه: ترك هذا المنفذ مفتوحاً يمثل مشكلة أمنية محتملة. يمكن لأي شخص من الشبكات المحلية الاتصال ومراقبة حركة المرور الخاصة بك.
# جدار الحماية
يحتوي موجه ESP على جدار حماية أساسي مدمج. يمكن تطبيق قوائم التحكم في الوصول (ACLs) على واجهة SoftAP. هذا حجر الزاوية في أمن إنترنت الأشياء، عندما يُستخدم الموجه لجلب أجهزة إنترنت الأشياء الأخرى إلى الإنترنت. يمكن استخدامه لمنع أجهزة إنترنت الأشياء التابعة لجهات خارجية مثلاً من "الاتصال بالمنزل"، أو إساءة استخدامها كبرامج ضارة (بوتات)، ولحماية شبكتك المنزلية المزودة بأجهزة الكمبيوتر والأجهزة اللوحية والهواتف من أن تكون مرئية لأجهزة التشغيل الآلي للمنزل.
قوائم ACL الأربعة تُسمى "from_sta" و "to_sta" و "from_ap" و "to_ap" للحزم الواردة والصادرة على كلتا الواجهتين (تعني "sta" الواجهة نحو الأجهزة المتصلة، و"ap" الواجهة نحو نقطة الوصول الصاعدة). يتم تعريف قوائم ACL "بأسلوب CISCO IOS".
المثال التالي مفيد لشبكة فرعية للضيوف. يسمح بالوصول إلى الإنترنت ولكن ليس إلى أي عناوين محلية أخرى (استخدم نطاق شبكتك المحلية لعنوان xx.xx.xx.xx). تسمح مجموعة القواعد هذه بالبث المحلي الصادر (لـ DHCP) و UDP 53 (DNS)، وسيتم حظر أي حزمة أخرى إلى الشبكة الفرعية للموجه الصاعد، بينما يمكن لجميع الحزم الأخرى المرور إلى الإنترنت:```
acl from_sta clear
acl from_sta IP any 255.255.255.255 allow
acl from_sta UDP any any any 53 allow
acl from_sta IP any xx.xx.xx.xx/24 deny
acl from_sta IP any any allow
المثال التالي أكثر تقييدًا وهو مفيد عندما تخطط لشبكة فرعية للإنترنت الأشياء (IoT) مع وصول مقيد جدًا عند نقطة الوصول (AP) الخاصة بـ ESP. سيسمح أيضًا بالبث المحلي الصادر (لـ DHCP)، و UDP 53 (DNS)، و TCP 1883 (MQTT) إلى وسيط محلي، ولكن سيتم حظر أي حزم أخرى، بما في ذلك الوصول العشوائي إلى الإنترنت (يمكنك تعديل العبارة الرابعة وفقًا لاحتياجاتك لتمكين المضيفين الآخرين):``` acl from_sta clear acl from_sta IP any 255.255.255.255 allow acl from_sta UDP any any any 53 allow acl from_sta TCP any any 192.168.0.0/16 1883 allow acl from_sta IP any any deny
ACLs لاتجاه "to_sta" يمكن تعريفها أيضًا، لكن هذا ليس مطلوبًا عادةً، لأن الاتجاه العكسي محمي جيدًا من حركة المرور غير المرغوب فيها بواسطة ترجمة NAT.
تتكون ACLs من قواعد تصفية يتم معالجتها لكل حزمة. تتكون كل قاعدة من بروتوكول (IP، TCP، أو UDP)، عنوان/منفذ مصدر، عنوان/منفذ وجهة، بالإضافة إلى إجراء "سماح" أو "رفض". في حالة IP العادي، لا توجد منافذ، فقط عناوين. تغطي قواعد IP حزم TCP وUDP. يمكن إعطاء العناوين كعناوين شبكة فرعية بترميز "/"، مثل 192.168.178.0/24. كما يمكن استخدام "any" كحرف بدل، حيث يطابق أي عنوان أو رقم منفذ. يتم تعريف القاعدة بواسطة الأمر "acl":
- acl [from_sta|to_sta|from_ap|to_ap] [TCP|UDP|IP] _src-ip_ [_src_port_] _desr-ip_ [_dest_port_] [allow|deny|allow_monitor|deny_monitor]
تتم معالجة القواعد من الأعلى إلى الأسفل حسب ترتيب ظهورها في القائمة. أول قاعدة تطابق حزمة يتم تطبيقها، وتحدد ما إذا كانت الحزمة مسموحًا بها (وتُمرر) أو مرفوضة (وتُسقط). هذا يعني حالات خاصة أولاً، ثم قواعد عامة في النهاية. إذا كانت هناك قواعد في ACL، فجميع الحزم التي لا تطابق أي قاعدة يتم رفضها افتراضيًا. وبالتالي، القاعدة الأخيرة "from_sta IP any any deny" في المثال أعلاه ليست ضرورية حقًا، لأنها القاعدة الافتراضية بالفعل. إذا كانت ACL فارغة، فجميع الحزم مسموح بها.
عمل تعريف قواعد ACL يتم أيضًا من الأعلى إلى الأسفل: تُضاف قاعدة جديدة دائمًا في نهاية القائمة. لتغيير ACL، يجب أولاً مسحها بالكامل (acl from_sta clear) ثم إعادة بنائها. يتم حفظ ACLs مع الإعدادات. الأمر "show acl" سيطبع ACLs بالإضافة إلى إحصائيات بعدد مرات التطابق لكل قاعدة والعدد الإجمالي للحزم المسموح بها والمرفوضة.
باستخدام الأمر "set acl_debug 1" تتم طباعة ملخص لجميع الحزم المرفوضة على وحدة التحكم. كما يمكن لموضوع MQTT نشر هذا الملخص. يمكن استخدام هذا لتكوين جدار الحماية لتحديد القواعد المطلوبة لتشغيل الأجهزة المتصلة. كما يعطي تلميحًا إذا حدثت حركة مرور غير متوقعة (ويتم رفضها).
للتحليل الأعمق، يمكن استخدام خدمة المراقبة (حتى الحزم المرفوضة تُبلغ إلى المراقب قبل إسقاطها). عند بدء تشغيل المراقب باستخدام الأمر "monitor acl _port_"، يمكن استخدام ACLs كمرشحات على الإنترنت. جميع القواعد المعرفة على أنها
"allow_monitor" بدلاً من "allow" و "deny_monitor" بدلاً من "deny" تُعالج كالمعتاد، مما يسمح بتمرير حزمة، لكنها أيضًا ترسل الحزمة إلى المراقب. وبالتالي، لا تزال قائمة القواعد التي بشكل أساسي "allow" أو "allow_monitor" جميع الحزم منطقية، حيث يمكن استخدامها لتحديد أي حزمة يجب تسجيلها أثناء وقت الالتقاط. مثلًا، قوائم:```
acl from_sta clear
acl from_sta IP 192.168.0.0/16 any allow_monitor
acl from_sta IP any any allow
acl to_sta clear
acl to_sta IP any 192.168.0.0/16 allow_monitor
cl to_sta IP any any allow
سيسمح بكل الحزم وسيختار أيضًا كل الحزم للمراقبة التي تنتقل من محطة إلى الشبكة الفرعية 192.168.0.0/16 (محلية) ومن الشبكة الفرعية 192.168.0.0/16 إلى محطة. بالطبع يمكن تطبيق مثل هذا الفلتر أيضًا بعد الالتقاط على تتبع مراقبة كامل، ولكن إذا كنت تعرف بالفعل ما تبحث عنه، فإن هذه الفلاتر المباشرة ستساعد في تقليل عبء المراقبة بشكل كبير. يمكن استخدامه أيضًا لتصحيح أخطاء جميع قواعد جدار الحماية المرفوضة (deny) ببساطة باستخدام "deny_monitor" بدلاً من deny.
افتراضيًا، تكون واجهة نقطة الوصول (AP) مُترجمة بعناوين الشبكة (NATed)، بحيث يمكن لأي عقدة متصلة بنقطة الوصول الوصول إلى العالم الخارجي بشفافية عبر واجهة المحطة (STA) في ESP. لذا لا يلزم أي إجراء إضافي إذا لم تكن خبيرًا حقيقيًا في الشبكات.
بالنسبة لأولئك المهتمين حقًا بتكوين الشبكة بشكل أعمق: تم تحسين مكدس IPv4 الخاص بـ lwip في ESP لهذا المشروع لدعم المسارات الثابتة: يعرض الأمر "show route" جدول التوجيه مع جميع المسارات المعروفة، بما في ذلك الروابط إلى واجهات الشبكة المتصلة (واجهة AP وواجهة STA). يعمل التوجيه بين هاتين الواجهتين دون أي تكوين إضافي. يمكن تعيين مسارات إضافية لشبكات أخرى عبر الأمر "route add network gateway" المعروف من أجهزة Linux أو أجهزة التوجيه. ويقوم الأمر "save" بكتابة الحالة الحالية لجدول التوجيه إلى ذاكرة التكوين الوامضة (flash).
إليك مثال بسيط لما يمكن فعله باستخدام المسارات الثابتة. بالنظر إلى إعداد الشبكة التالي مع اثنين من أجهزة ESP متصلة بواجهات STA عبر جهاز توجيه منزلي مركزي:``` | 10.0.1.1 AP-ESP1-STA 192.168.1.10 | <-> |Home Router| <-> | 192.168.1.20 STA-ESP2-AP 10.0.2.1|
كل ESP لديه شبكة ثانية خلف نقطة الوصول الخاصة به بعناوين شبكة مختلفة: 10.0.1.0/24 و 10.0.2.0/24. يمكن لـ ESP1 إرسال ping إلى ESP2 إلى العنوان 192.168.1.20 ولكن ليس إلى العنوان 10.0.2.1، لأنه لا يعلم أنه يمكن الوصول إليه عبر 192.168.1.20. يتغير هذا إذا أضفت مسارين ثابتين. على ESP1:```
route add 10.0.2.0/24 192.168.1.20
وعلى ESP2:``` route add 10.0.1.0/24 192.168.1.10
الآن سيكون "ping 10.0.2.1" على ESP1 ناجحًا. يتم إرساله إلى 192.168.1.20 ثم يتم الرد عليه بواسطة ESP2.
الآن في كل شبكة، يتصل عميل إضافي (بعناوين 10.0.1.2 و 10.0.2.2):```
| STA1 10.0.1.2 | <-> | 10.0.1.1 ESP1 192.168.1.10 | <-> |Home Router| <-> | 192.168.1.20 ESP2 10.0.2.1| <-> | STA2 10.0.2.2 |
الآن حتى العميل STA1 مع العنوان المحلي 10.0.1.2 يمكنه إجراء ping إلى STA2 مع 10.0.2.2 حيث يرسل طلبه أولاً إلى جهاز التوجيه الافتراضي ESP1 وهذا يعرف أن جميع الحزم الموجهة إلى عنوان 10.0.2.0/24 يجب إعادة توجيهها إلى 192.168.1.20. هناك يعرف ESP2 كيفية إرسالها إلى STA2. وينطبق نفس الشيء على الرد في الاتجاه الآخر.
يتيح لك ذلك تكوين طوبولوجيا متعددة النجوم من ESPs، حيث يمكن لكل ESP وعملائه STA الوصول إلى بعضهم البعض مباشرة (دون الحاجة إلى أي portmaps). قد يكون تكوين المسارات المطلوبة مؤلماً بعض الشيء - لكنه تمرين جيد في الشبكات. ستكون الخطوة التالية هي نقل بروتوكول توجيه ديناميكي مثل RIP على ESP...
من خلال ضبط upstream_kbps و downstream_kbps على قيمة غير 0 (0 هي القيمة الافتراضية)، يمكنك الحد من أقصى معدل بت لنقطة الوصول الخاصة بـ ESP. هذه القيمة هي حد ينطبق على حركة مرور جميع العملاء المتصلين. يتم إسقاط الحزم التي تتجاوز معدل البت المحدد. يستخدم مشكل حركة المرور خوارزمية "Token Bucket" بحجم دلو يبلغ حاليًا أربعة أضعاف معدل البت في الثانية، مما يسمح باندفاعات عندما لا تكون هناك حركة مرور من قبل.
منذ الإصدار 1.3، يحتوي جهاز التوجيه على عميل MQTT مدمج (بفضل Tuan PM لمكتبته https://github.com/tuanpmt/esp_mqtt). يمكن أن يساعد ذلك في دمج جهاز التوجيه/المكرر في إنترنت الأشياء. يمكن لنظام المنزل الذكي مثلاً اتخاذ قرارات بناءً على معلومات حول المحطات المرتبطة حالياً، ويمكنه تشغيل وإيقاف تشغيل المكررات (على سبيل المثال بناءً على جدول زمني)، أو يمكن ببساطة استخدامه لمراقبة الحمل. يمكن توصيل جهاز التوجيه إما بوسيط MQTT محلي أو بوسيط متاح للجمهور في السحابة. ومع ذلك، فهو لا يدعم تشفير TLS حالياً.
بشكل افتراضي، يكون عميل MQTT معطلاً. يمكن تمكينه عن طريق تعيين معلمة التكوين "mqtt_host" إلى اسم مضيف مختلف عن "none". لتكوين MQTT يمكنك تعيين المعلمات التالية:
يمكن عرض معلمات MQTT باستخدام الأمر "show mqtt".
يمكن لجهاز التوجيه نشر مواضيع الحالة التالية بشكل دوري (كل mqtt_interval):
بالإضافة إلى ذلك، يمكن للمكرر النشر عند حدوث حدث:
كـ LWT وتقرير حالة، ينشر المكرر:
يمكن تكوين جهاز التوجيه باستخدام المواضيع التالية:
إذا كنت تريد الآن أن ينشر جهاز التوجيه مثلاً فقط Vdd و IP الخاص به ومخرجات سطر الأوامر، قم بتعيين mqtt_mask إلى 0x0001 | 0x0002 | 0x0040 (= "set mqtt_mask 0043").
يدعم esp_wifi_repeater الآن بطاقة شبكة ENC28J60 للإيثرنت متصلة عبر SPI (بفضل Andrew Kroll https://github.com/xxxajk لعمله الرائع في جعلها تعمل بشكل صحيح)، إذا قمت بتشغيل خيار الترجمة HAVE_ENC28J60 في "user_config.h". ستوفر واجهة الإيثرنت حوالي 1 ميغابت/ثانية عندما يعمل ESP بتردد 160 ميغاهرتز. سيؤدي تشغيل واجهة نقطة الوصول واستخدام الإيثرنت كرابط صاعد إلى تحويل esp_wifi_repeater إلى نقطة وصول رخيصة لأجهزة WiFi (على سبيل المثال، ESPs الأخرى).
يجب أن يكون الاتصال عبر SPI كالتالي:``` NodeMCU/Wemos ESP8266 ENC28J60
D6 GPIO12 <---> MISO
D7 GPIO13 <---> MOSI
D5 GPIO14 <---> SCLK
D8 GPIO15 <---> CS
D1 GPIO5 <---> INT
D2 GPIO4 <---> RESET
Q3/V33 <---> 3.3V
GND <---> GND
الأسلاك القصيرة والملحومة تعمل بشكل أفضل. بالإضافة إلى ذلك، ستحتاج إلى ترانزستور لفصل GPIO15، وإلا لن يتم تشغيل ESP بعد الآن، انظر: https://esp8266hints.wordpress.com/category/ethernet/ . أيضًا، من المهم الحصول على مصدر طاقة جيد: يحتاج ENC28j60 إلى حوالي 160 مللي أمبير عند النشاط. بالنسبة لي، يفشل إذا حاولت استخدام 3.3V من لوحة ESP.
الآن يمكنك تكوين واجهة الإيثرنت الجديدة:
- set eth_enable [0|1]: تمكين/تعطيل بطاقة شبكة ENC28J60 على ناقل SPI (الافتراضي: 0 - معطل)
- set eth_ip _ip-addr_: تعيين عنوان IP ثابت لواجهة ETH
- set eth_netmask _netmask_: تعيين قناع شبكة ثابت لواجهة ETH
- set eth_gw _gw-addr_: تعيين عنوان بوابة ثابت لواجهة ETH
- set eth_dhcpd [0|1]: بدء خادم DHCP لعناوين IP ديناميكية على واجهة ETH (الافتراضي: 0 - معطل)
# إدارة الطاقة
يراقب المكرر جهد الإمداد الحالي (يظهر في أمر "show stats"). يعمل هذا فقط إذا تم تعيين البايت 107 في ملف esp_init_data_default.bin، المسمى vdd33_const، إلى 255 (0xFF). أسهل طريقة لتحقيق ذلك هي كتابة esp_init_data_default_v08_vdd33.bin إلى الفلاش (انظر أدناه).
إذا تم تعيين _vmin_ (بوحدة mV، الافتراضي 0) إلى قيمة > 0 وانخفض جهد الإمداد عن هذه القيمة، فسيدخل في وضع السكون العميق لمدة _vmin_sleep_ ثانية. إذا قمت بتوصيل GPIO16 بـ RST (وهو أمر صعب اللحام على ESP-01)، فسيتم إعادة التشغيل بعد هذه الفترة، وسيحاول إعادة الاتصال، وسيستمر في قياساته. إذا تم حفظ _vmin_ مع التكوين، فسينام مرارًا وتكرارًا حتى يرتفع جهد الإمداد فوق العتبة. هذه الإعدادات مفيدة بشكل خاص (فقط؟) إذا قمت بتزويد ESP ببطارية (ليثيوم) بدون حماية من التفريغ الزائد. عندها تكون قيمة 2900mV-3000mV مفيدة على الأرجح، لأنها تقلل استهلاك الطاقة لـ ESP إلى الحد الأدنى ويكون لديك وقت أطول لإعادة الشحن أو استبدال البطارية قبل التلف. هذا منطقي فقط إذا كان ESP متصلاً مباشرة بالبطارية. إذا كان لديك منطق إضافي، فسيظل هذا يستنزف البطارية.
يمكنك إرسال ESP إلى النوم يدويًا مرة واحدة باستخدام الأمر "sleep".
تحذير: إذا قمت بحفظ قيمة _vmin_ أعلى من أقصى جهد إمداد إلى الفلاش، فسيتم إيقاف تشغيل المكرر فورًا في كل مرة بعد إعادة التشغيل. بعد ذلك سيتعين عليك مسح التكوين بالكامل عن طريق كتابة blank.bin (أو أي ملف آخر) إلى 0x0c000.
# WiFi Repeater - L2 Bridge
يقدم المشروع الآن وضعين تشغيليين متميزين: **موجه NAT** و **جسر الطبقة الثانية** (يشار إليهما بـ "وضع المكرر"). بينما يعمل كلا الوضعين على توسيع نطاق الشبكة، إلا أنهما يختلفان جوهريًا في كيفية التعامل مع حركة المرور وهويات الأجهزة.
### وضع موجه NAT (القياسي)
في هذا الوضع، كما هو موضح أعلاه، يعمل الجهاز كبوابة قياسية. يقوم بإنشاء شبكة فرعية جديدة ويقوم بترجمة عنوان الشبكة (NAT) لجميع الأجهزة المتصلة بنقطة الوصول الخاصة به (AP).
* **عزل الشبكة الفرعية**: العملاء المتصلون موجودون على شبكة فرعية خاصة (مثل 192.168.4.x) وهم محميون من الشبكة الأساسية.
* **هوية حركة المرور**: تظهر جميع حركة المرور من العملاء إلى الموجه الرئيسي كما لو كانت تنشأ من عنوان IP/MAC الخاص بـ ESP8266.
* **البساطة**: لا يتطلب أي تكوين خاص على الموجه العلوي ومتوافق مع جميع شبكات Wi-Fi القياسية تقريبًا.
* **القيود**: لا يمكن للأجهزة على الشبكة الأساسية بدء اتصالات بسهولة مع الأجهزة خلف المكرر بسبب حاجز NAT، ما لم تستخدم تعيين المنفذ.
### وضع جسر الطبقة الثانية (متغير "المكرر")
يطبق هذا الوضع جسرًا شفافًا للطبقة الثانية (طبقة ربط البيانات). يقوم ESP8266 بتمديد الشبكة الأساسية الحالية بدلاً من إنشاء شبكة فرعية ثانوية.
* **الجسر الشفاف**: يقوم ESP8266 بجسر حركة المرور على مستوى إطار الإيثرنت. يتلقى العملاء المتصلون عناوين IP مباشرة من خادم DHCP للشبكة الأساسية (عبر التنصت/ترحيل DHCP).
* **شبكة موحدة**: جميع الأجهزة (سواء على المكرر أو الموجه الرئيسي) موجودة في نفس نطاق البث L2.
* **رؤية الجهاز**: تحتفظ الأجهزة خلف المكرر بهويات MAC و IP الأصلية على الشبكة الرئيسية. هذا يسمح لبروتوكولات الاكتشاف المحلية (مثل mDNS/Bonjour و UPnP أو اكتشاف الشبكة) بالعمل بسلاسة عبر الشبكة بأكملها.
* **التعقيد**: يتطلب معالجة متقدمة، مثل ARP الوكيل والتنصت على DHCP، لضمان قيام الشبكة العلوية بتوجيه حركة المرور بشكل صحيح إلى العملاء "المخفيين" المتصلين عبر المكرر.
* **حالة الاستخدام**: مثالي عندما يكون اكتشاف الجهاز (مثل التحكم في طابعة أو جهاز منزل ذكي عبر تطبيق هاتف) مطلوبًا عبر الشبكة بأكملها.
يحتوي وضع المكرر على ميزات أقل: التوجيه وتعيين المنفذ و DHCP ليست مطلوبة، كما أن ACLs و Automesh ليس لهما معنى حقيقي وكذلك مراقبة الشبكة عبر pcap. لذا فإن كل هذه الميزات غير متوفرة في وضع المكرر. كما تمت إزالة MQTT. الميزات المتبقية لا تزال متاحة عبر وحدة التحكم أو وحدة التحكم عن بعد.
يمكنك العثور على الثنائيات المجمعة مسبقًا في المجلد "firmware-repeater".
التكوين الأول لإصدار وضع المكرر أساسي بنفس بساطة موجه NAT. عبر وحدة التحكم التسلسلية، قم ببساطة بتعيين ssid و password و ap_ssid و ap_password، ثم احفظ وأعد التشغيل. إذا كنت تريد القيام بذلك عبر واجهة الويب، فهي أيضًا بسيطة، لكن يجب عليك اتباع الترتيب الصحيح:
- اتصل بشبكة WiFi "MyAP" من جهاز العميل الخاص بك
- وجه المتصفح إلى "http://192.168.4.1"
- أدخل **أولاً** إعدادات AP ssid وكلمة المرور أولاً، ثم قم بتعيين وإعادة التشغيل
- ثم اتصل بـ AP ssid الذي حددته حديثًا، ووجه المتصفح مرة أخرى إلى "http://192.168.4.1"
- الآن أدخل إعدادات STA ssid وكلمة المرور واتصل
بمجرد تعريف STA ssid، لن يقوم المكرر بتشغيل خادم DHCP الخاص به بعد الآن، بل سيتلقى IP الخاص به من DHCP العلوي (لم يعد 192.168.4.1). للاتصال بصفحة الويب الخاصة به أو وحدة التحكم عن بعد، يمكنك استخدام الاسم "esp-wifi-repeater.local" إذا كان جهاز العميل يدعم mDNS، أو عليك البحث عن العنوان المعين في الموجه العلوي الخاص بك (أو وحدة التحكم التسلسلية باستخدام "show stats"). يمكنك دائمًا إعادة تعيين ESP عبر وحدة التحكم باستخدام "reset factory".
### ملخص الفروقات الرئيسية
| الميزة | موجه NAT | جسر الطبقة الثانية |
| :--- | :--- | :--- |
| **هندسة الشبكة** | إنشاء شبكة فرعية جديدة معزولة | تمديد نطاق البث الحالي |
| **عنونة IP** | العملاء يستخدمون مجموعة ثانوية | العملاء يستخدمون خادم DHCP العلوي |
| **الاكتشاف (mDNS/UPnP)** | غالبًا ما يكون محظورًا/صعبًا | مدعوم بالكامل (شفاف) |
| **الرؤية العلوية** | هوية العميل مخفية (NAT) | هوية العميل محفوظة |
| **التنفيذ** | شبكات قياسية | وكالة متقدمة (ARP وكيل/تنصت) |
# البناء والوميض
للوميض المباشر للثنائيات المجمعة مسبقًا على الجهاز، استخدم [المثبت عبر الويب](https://martin-ger.github.io/esp_wifi_repeater/).
إذا كان لديك Docker مثبتًا، فإن أسهل طريقة للوصول إلى بيئة البناء الكاملة هي توصيل ESP8266 الخاص بك بـ /dev/ttyUSB0 وتشغيل الصورة باستخدام:```
git clone https://github.com/martin-ger/esp_wifi_repeater.git
docker run -it --rm --device=/dev/ttyUSB0 -v $(pwd)/esp_wifi_repeater:/home/esp/esp_wifi_repeater martinfger/iot_devel:1.0
cd esp_wifi_repeater
make
make flash
لبناء إصدار L2 WiFi Repeater، استخدم خيار VARIANT=bridge لأمر make:``` git clone https://github.com/martin-ger/esp_wifi_repeater.git docker run -it --rm --device=/dev/ttyUSB0 -v $(pwd)/esp_wifi_repeater:/home/esp/esp_wifi_repeater martinfger/iot_devel:1.0 cd esp_wifi_repeater make VARIANT=bridge make flash
لإعداد بيئة البناء من الصفر وبناء هذا الثنائي، قم بتنزيل وتثبيت esp-open-sdk (أقترح هذه الإصدارة مع قاعدة NONOS SDK 2.2: https://github.com/xxxajk/esp-open-sdk). تأكد من أنك تستطيع تجميع وتنزيل مثال "blinky" المرفق.
ثم قم بتنزيل شجرة المصدر هذه في دليل منفصل وضبط المتغير BUILD_AREA في ملف Makefile وأي خيارات مرغوبة في user/user_config.h. يمكن إجراء تغييرات على التكوين الافتراضي في user/config_flash.c. قم ببناء برنامج esp_wifi_repeater الثابت باستخدام "make". "make flash" يحرقه على esp8266.
تحتوي شجرة المصدر على إصدارة ثنائية من liblwip_open بالإضافة إلى الـ includes الإضافية المطلوبة من فرعي الخاص بـ esp-open-lwip وثنائي لأداة rboot. *لا حاجة لإجراء تثبيت إضافي لذلك.* فقط إذا كنت لا ترغب في استخدام المكتبة المجمعة مسبقًا، قم بسحب المصادر من https://github.com/martin-ger/esp-open-lwip . استخدمها لاستبدال الدليل "esp-open-lwip" في شجرة esp-open-sdk. "make clean" في دليل esp_open_lwip ثم مرة أخرى "make" في دليل esp_open_sdk الأعلى. سيقوم هذا بتجميع liblwip_open.a التي تحتوي على ميزات NAT. استبدل liblwip_open_napt.a بهذا الثنائي. أيضًا يمكنك بناء ثنائي "rboot.bin" من https://github.com/raburton/rboot واستبداله في الدليل الجذر للمشروع.
*تحديث*: إذا قرأت في مكان ما على الويب تعليمات تثبيت تستخدم "0x10000.bin" - بسبب OTA تم تغيير هذا إلى "0x02000.bin" الآن.
إذا كنت ترغب في استخدام الثنائيات الكاملة المجمعة مسبقًا، يمكنك حرقها باستخدام "esptool.py --port /dev/ttyUSB0 write_flash -fs 4MB -ff 80m -fm dio 0x00000 firmware/0x00000.bin 0x02000 firmware/0x02000.bin" (استخدم -fs 1MB لـ ESP-01). بالنسبة لـ esp8285 يجب استخدام -fs 1MB و -fm dout.
على ويندوز يمكنك حرقها باستخدام "ESP8266 Download Tool" المتاح على https://espressif.com/en/support/download/other-tools. قم بتنزيل الملفين 0x00000.bin و 0x02000.bin من دليل firmware. لـ ESP12 عام، NodeMCU أو Wemos D1 استخدم الإعدادات التالية (لـ ESP-01 قم بتغيير FLASH SIZE إلى "8Mbit"):
<img src="https://raw.githubusercontent.com/martin-ger/esp_wifi_repeater/master/FlashRepeaterWindows.jpg">
إذا فشل وضع "QIO" على جهازك، جرب "DIO" بدلاً من ذلك. ألقِ نظرة أيضًا على "Detected Info" للتحقق من حجم ووضع شريحة الفلاش. إذا كان برنامجك الثابت الذي تم تنزيله لا يزال لا يعمل بشكل صحيح، يرجى التحقق من المجاميع الاختبارية المرفقة لمعرفة ما إذا كانت الملفات الثنائية تالفة. إذا كنت تشك في تلف الثنائيات، قم بتنزيل المستودع الكامل كـ zip واستخراج الثنائيات من هذا الـ zip - هذا يتجنب مشاكل تنزيل HTTP (مثل تحويلات CR-LF).
# دعم تحديث OTA (عبر الأثير)
استنادًا إلى استخدام مكتبة rboot: https://github.com/raburton/rboot وبفضل مساهمة christianchristensen.
تقوم عملية البناء بإنشاء نسختين من ثنائي esp_wifi_repeater في دليل firmware: 0x02000.bin و 0x82000.bin. للتثبيت الأولي، يكفي حرق 0x00000.bin (محمل الإقلاع rboot) و 0x02000.bin (نسخة واحدة من البرنامج). سيعمل esp_wifi_repeater.
إذا كان لديك على الأقل 1 ميجابايت من الفلاش، يمكنك إجراء تحديث OTA (عبر الأثير) بإصدارة أخرى. أي يمكنك تحميل ثنائي جديد بشكل تفاعلي من واجهة الأوامر والتبديل إليه. يتم تحميل الثنائي الآخر إلى موقع الذاكرة غير النشط حاليًا (إما 0x02000 (rom0) أو 0x82000 (rom1)) ويبدأ عند النجاح. يمكنك أيضًا التبديل بشكل تفاعلي بين ثنائيين مثبتين. سيتم استخدام التكوين الحالي لكلا الثنائيين (طالما لم يتغير تنسيقه).
يمكنك التحكم في ميزات OTA باستخدام الأوامر التالية:
- show ota: يعرض الثنائي النشط حاليًا وعنوان URL للتحديث التالي
- set ota_host _hostname_: يحدد اسم المضيف أو عنوان IP لخادم OTA (الافتراضي: "none")
- set ota_port _portno_: يحدد رقم المنفذ لخادم OTA (الافتراضي: 80)
- ota update: يحاول تنزيل ثنائي جديد (0x02000.bin أو 0x82000.bin) عبر HTTP من ota_host:ota_port ويبدأ تشغيله
- ota switch: يتحول إلى الثنائي الآخر (إذا كان مثبتًا)
لاختبار ميزة OTA، قم بتكوين ESP الخاص بك (كـ STA أو AP) ليكون متصلاً بالشبكة التي يوجد بها خادم التحديث. هناك ابدأ خادم ويب بسيط في دليل firmware، على سبيل المثال:```
cd firmware
python -m SimpleHTTPServer 8080
اضبط المعامل hostname إلى اسم المضيف أو عنوان IP الخاص بجهاز الكمبيوتر الخاص بك، واضبط portno إلى 8080، و"احفظ". ثم اكتب في الـ CLI:``` ota update
إذا تم التهيئة بشكل صحيح، سيبدأ التحديث وسيتم إعادة تشغيل ESP مع الثنائي الجديد.
# المشكلات المعروفة
- نظرًا لقيود تطبيق SoftAP الخاص بـ ESP، يوجد حد أقصى يبلغ 8 محطات متصلة في وقت واحد.
- يتطلب ESP8266 مصدر طاقة جيدًا لأنه ينتج نبضات تيار تصل إلى 170 مللي أمبير أثناء الإرسال (متوسط الاستهلاك النموذجي حوالي 70 مللي أمبير عند تشغيل WiFi). افحص مصدر الطاقة أولاً إذا كان جهاز ESP الخاص بك يعمل بشكل غير مستقر ويعيد التشغيل من وقت لآخر. يمكن أن يساعد مكثف كبير بين Vdd و Gnd إذا كنت تواجه مشكلات هنا.
# التراخيص
البرنامج مفتوح المصدر. ملفات المصدر من طرف ثالث لها رأس ترخيص خاص بها. بالنسبة لجميع الملفات الأخرى، تنطبق رخصة MIT.