جدول المحتويات:

بوابة ESP32 المقيدة لتكوين إعدادات IP الثابتة و DHCP: 8 خطوات
بوابة ESP32 المقيدة لتكوين إعدادات IP الثابتة و DHCP: 8 خطوات

فيديو: بوابة ESP32 المقيدة لتكوين إعدادات IP الثابتة و DHCP: 8 خطوات

فيديو: بوابة ESP32 المقيدة لتكوين إعدادات IP الثابتة و DHCP: 8 خطوات
فيديو: ESP32-CAM - Guide to making YOUR first DIY Security Camera 2024, شهر نوفمبر
Anonim
بوابة ESP32 المقيدة لتكوين إعدادات IP الثابتة و DHCP
بوابة ESP32 المقيدة لتكوين إعدادات IP الثابتة و DHCP

ESP 32 عبارة عن جهاز مزود بشبكات WiFi و BLE مدمجة. إنه نوع من نعمة لمشاريع إنترنت الأشياء. فقط أعط SSID وكلمة المرور وتكوينات IP ودمج الأشياء في السحابة. ولكن ، يمكن أن تكون إدارة إعدادات IP وبيانات اعتماد المستخدم مصدر إزعاج للمستخدم.

ماذا لو أراد المستخدم تغيير بيانات اعتماد WiFi؟

ماذا لو أراد المستخدم تبديل إعدادات DHCP / IP الثابتة؟

وميض ESP32 في كل مرة لا يمكن الاعتماد عليه ولا حتى الحل لهذه المشاكل. هنا في هذا الدليل سوف نوضح.

  • كيفية إنشاء بوابة مقيدة.
  • استضافة نموذج ويب من ESP32.
  • القراءة والكتابة من SPIFFS ESP32.
  • إنشاء نقطة وصول لينة والاتصال بمحطة

الخطوة 1: مواصفات الأجهزة والبرامج

مواصفات الأجهزة

  • ESP32 WiFi / BLE
  • جهاز استشعار درجة الحرارة والرطوبة اللاسلكي

مواصفات البرنامج

اردوينو IDE

الخطوة 2: إنشاء بوابة مقيدة

إنشاء بوابة مقيدة
إنشاء بوابة مقيدة
إنشاء بوابة مقيدة
إنشاء بوابة مقيدة
إنشاء بوابة مقيدة
إنشاء بوابة مقيدة

البوابة المقيدة هي صفحة ويب يتم عرضها للمستخدمين المتصلين حديثًا قبل منحهم وصولاً أوسع إلى موارد الشبكة. نحن هنا نقدم ثلاث صفحات ويب للاختيار بين إعدادات DHCP و IP الثابتة. يمكننا تحديد عنوان IP لـ ESP بطريقتين.

  • عنوان IP لـ DHCP- هو وسيلة لتعيين عنوان IP ديناميكيًا للجهاز. عنوان IP الافتراضي الخاص بـ ESP هو 192.168.4.1
  • عنوان IP ثابت - تعيين عنوان IP دائم لجهاز الشبكة الخاص بنا. لتوفير عنوان IP الثابت للجهاز ، نحتاج إلى تحديد عنوان IP وعنوان البوابة وقناع الشبكة الفرعية.

في صفحة الويب الأولى ، يتم تزويد المستخدم بأزرار الاختيار للاختيار بين إعدادات DHCP و IP Static. في صفحة الويب التالية ، يتعين علينا تقديم المعلومات المتعلقة بـ IP للمضي قدمًا.

كود HTML

يمكن العثور على كود HTML لصفحات الويب في مستودع Github هذا.

يمكنك استخدام أي IDE أو محرر نصوص مثل Sublime أو notepad ++ لإنشاء صفحات ويب بتنسيق HTML.

  • قم أولاً بإنشاء صفحة ويب بتنسيق HTML تحتوي على زري اختيار للاختيار بين إعدادات DHCP و IP الثابتة.
  • الآن قم بإنشاء الزر لإرسال إجابتك
  • أعط اسما لأزرار الاختيار. ستأخذ فئة خادم الويب ESP هذه الأسماء كوسائط وستحصل على استجابة أزرار الاختيار باستخدام هذه الوسائط
  • أدخل الآن زر "إرسال" لإرسال الرد إلى الجهاز.
  • في صفحات الويب الأخرى ، لدينا مربعات نصية. أعط قيمة الاسم ونوع الإدخال في مربع النص وأضف زر إرسال إلى "إرسال" أرسل الرد.
  • قم بإنشاء زر "إعادة تعيين" لإعادة تعيين محتوى حقل النص.

// راديو إعداد DHCP

إعداد IP الثابت

// إدخال مربعات النص

//زر الإرسال

input [type = "submit"] {background-color: # 3498DB؛ / * أخضر * / الحدود: لا شيء ؛ اللون الابيض؛ الحشو: 15 بكسل 48 بكسل ؛ محاذاة النص: مركز ؛ زخرفة النص: لا شيء ؛ عرض: مضمنة كتلة ؛ حجم الخط: 16 بكسل ؛ }

//زر إعادة الضبط

input [type = "submit"] {background-color: # 3498DB؛ / * أخضر * / الحدود: لا شيء ؛ اللون الابيض؛ الحشو: 15 بكسل 48 بكسل ؛ محاذاة النص: مركز ؛ زخرفة النص: لا شيء ؛ عرض: مضمنة كتلة ؛ حجم الخط: 16 بكسل ؛ }

الخطوة 3: الحصول على استجابة الويب من صفحات الويب إلى ESP32

الحصول على استجابة الويب من صفحات الويب إلى ESP32
الحصول على استجابة الويب من صفحات الويب إلى ESP32

يعد تقديم صفحات الويب من جهاز ESP 32 متعة كبيرة. يمكن أن يكون أي شيء من عرض بيانات درجة الحرارة في صفحة الويب ، أو تحويل المصابيح من صفحة الويب المخصصة أو تخزين بيانات اعتماد WiFi للمستخدم من خلال صفحة ويب. لهذا الغرض ، يستخدم ESP 32 فئة WebServer لخادم صفحات الويب.

  • أولاً ، قم بإنشاء مثيل لفئة WebServer في المنفذ 80 (منفذ
  • قم الآن بإعداد جهاز ESP على أنه softAP. امنح SSID ومفتاح المرور وقم بتعيين IP ثابت للجهاز.
  • ابدأ الخادم.

// ********* SSID و Pass for AP ************** /

const char * ssidAP = "أعط SSID" ؛ const char * passAP = "مفتاح المرور" ؛

// ********* تكوين IP الثابت **************** / IPAddress ap_local_IP (192، 168، 1، 77) ؛ IPAddress ap_gateway (192 ، 168 ، 1 ، 254) ؛ IPAddress ap_subnet (255 ، 255 ، 255 ، 0) ؛

// ********* تكوين SoftAP ************** /

WiFi.mode (WIFI_AP) ؛

Serial.println (WiFi.softAP (ssidAP ، passAP)؟ "إعداد soft-AP": "فشل الاتصال") ؛

تأخير (100) ؛ Serial.println (WiFi.softAPConfig (ap_local_IP، ap_gateway، ap_subnet)؟ "تكوين Soft AP": "خطأ في التكوين")؛ Serial.println (WiFi.softAPIP ()) ؛

// ابدأ الخادم

server.begin () ،

  • إنشاء وخدمة عنوان URL باستخدام عمليات الاسترجاعات المختلفة.
  • والتعامل مع العميل بشكل غير متزامن باستخدام handleClient.

server.on ("/" ، handleRoot) ؛

server.on ("/ dhcp" ، handleDHCP) ؛ server.on ("/ ثابت" ، handleStatic) ؛ // التعامل مع خادم الاستجابات.

  • للوصول إلى صفحات الويب. اتصل بنقطة الوصول التي قمت بإنشائها للتو ، والمدرجة ضمن شبكات WiFi الخاصة بك. الآن ، انتقل إلى المتصفح ، أدخل عنوان IP الذي قمت بتكوينه في الخطوة الأخيرة وقم بالوصول إلى صفحة الويب.
  • تأخذ فئة خادم الويب الاسم المعطى للمدخلات ('text' ، 'button' ، 'radiobutton'etc.) كوسائط. يحفظ استجابات هذه المدخلات كوسائط ويمكننا الحصول على القيم أو التحقق منها باستخدام أساليب args و arg و hasArg.

إذا (server.args ()> 0) {for (int i = 0؛ i <= server.args ()؛ i ++) {

Serial.println (String (server.argName (i)) + '\ t' + String (server.arg (i))) ؛

}

if (server.hasArg ("ipv4static") && server.hasArg ("gateway") && server.hasArg ("الشبكة الفرعية")) {staticSet ()؛ } else if (server.arg ("ipv4")! = "") {dhcpSetManual ()؛ } else {dhcpSetDefault () ؛ }

الخطوة 4: تكوين IP الثابت

تكوين IP الثابت
تكوين IP الثابت

لقد فهمنا حتى الآن كيفية الاتصال بـ AP وكيفية الحصول على القيم من حقول الإدخال لصفحة الويب

في هذه الخطوة ، سنقوم بتكوين عنوان IP الثابت

  • حدد إعداد IP الثابت وانقر على زر إرسال. ستتم إعادة توجيهك إلى الصفحة التالية.
  • في الصفحة التالية ، أدخل عنوان IP الثابت وعنوان البوابة وقناع الشبكة الفرعية ، سيتم تقديم هذه الصفحة على "/ static" والتي يتم التعامل معها من خلال أسلوب رد الاتصال الثابت.
  • احصل على قيمة الحقول النصية باستخدام طريقة server.arg ().

String ipv4static = String (server.arg ("ipv4static")) ؛

String gateway = String (server.arg ("gateway")) ؛ السلسلة الفرعية = سلسلة (server.arg ("الشبكة الفرعية")) ؛

  • الآن ، هذه القيم متسلسلة في تنسيق JSON.
  • ثم سنكتب JSON إلى SPIFFS.

الجذر ["statickey"] = "staticSet" ؛

الجذر ["staticIP"] = ipv4static ؛

الجذر ["البوابة"] = البوابة ؛

الجذر ["الشبكة الفرعية"] = الشبكة الفرعية ؛

File fileToWrite = SPIFFS.open ("/ ip_set.txt" ، FILE_WRITE) ؛

إذا (root.printTo (fileToWrite)) {

Serial.println ("- ملف مكتوب") ؛ }

  • يتم حفظ هذا التكوين في SPIFFS. في وقت لاحق ، تتم قراءة هذه القيم من SPIFFS.
  • ثم يتم تحليل قيم IP الثابتة من JSON.

ملف الملف = SPIFFS.open ("/ ip_set.txt"، "r") ؛

بينما (file.available ()) {

debugLogData + = char (file.read ()) ؛ }

إذا (debugLogData.length ()> 5) {

JsonObject & readRoot = jsonBuffer.parseObject (debugLogData) ؛

إذا (readRoot.containsKey ("statickey")) {

String ipStaticValue = readRoot ["staticIP"] ؛

String gatewayValue = readRoot ["بوابة"] ؛

String subnetValue = readRoot ["الشبكة الفرعية"] ؛

الخطوة 5: إعدادات DHCP

إعدادات DHCP
إعدادات DHCP

في هذه الخطوة ، سنقوم بتكوين إعدادات DHCP

حدد إعدادات DHCP من صفحة الفهرس وانقر فوق "إرسال"

  • ستتم إعادة توجيهك إلى الصفحة التالية. في الصفحة التالية ، أدخل عنوان IP أو حدد اختيار الافتراضي وانقر على زر "إرسال" لإرسال الرد. سيتم تقديم هذه الصفحة على "/ dhcp" والتي يتم التعامل معها من خلال طريقة رد الاتصال handleDHCP. احصل على قيمة الحقول النصية باستخدام طريقة server.arg (). عند النقر في اختيار مربع الاختيار الافتراضي. 192.168.4.1 IP للجهاز.
  • الآن ، هذه القيم متسلسلة في تنسيق JSON.
  • ثم سنكتب JSON إلى SPIFFS.

JsonObject & root = jsonBuffer.createObject () ،

الجذر ["dhcpManual"] = "dhcpManual" ؛

الجذر ["dhcpIP"] = "192.168.4.1" ؛

File fileToWrite = SPIFFS.open ("/ ip_set.txt" ، FILE_WRITE) ؛

إذا (root.printTo (fileToWrite)) {

Serial.println ("- ملف مكتوب") ؛ }

  • يتم حفظ هذا التكوين في SPIFFS. في وقت لاحق ، تتم قراءة هذه القيم من SPIFFS.
  • ثم يتم تحليل قيم dhcp IP من JSON.

ملف الملف = SPIFFS.open ("/ ip_set.txt"، "r") ؛ while (file.available ()) {debugLogData + = char (file.read ()) ؛ } if (debugLogData.length ()> 5) {JsonObject & readRoot = jsonBuffer.parseObject (debugLogData)؛

إذا (readRoot.containsKey ("dhcpDefault")) {

String ipdhcpValue = readRoot ["dhcpIP"] ؛

Serial.println (ipdhcpValue) ؛

dhcpAPConfig () ؛}

الخطوة 6: حفظ بيانات اعتماد WiFi

حفظ بيانات اعتماد WiFi
حفظ بيانات اعتماد WiFi

في الوقت الحالي ، اخترنا تكوين IP. نحتاج الآن إلى حفظ بيانات اعتماد wifi للمستخدم. لحل هذا الوضع. لقد اتبعنا هذا الإجراء.

  • حتى الآن لدينا إعداد AP الخاص بجهازنا في DHCP أو تكوين IP الثابت الذي اخترناه من البوابة المقيدة المذكورة في الخطوات الأخيرة.
  • لنفترض أننا اخترنا تكوين IP الثابت.
  • سنقوم بتكوين softAP على عنوان IP هذا.
  • بعد قراءة القيم من SPIFFS وتحليل هذه القيم من JSON. سنقوم بتكوين softAP على هذا IP.
  • تحويل سلسلة IP إلى بايت.

بايت ip [4] ؛

parseBytes (ipv4Arr، '.'، ip، 4، 10) ؛

ip0 = (uint8_t) ip [0] ؛

ip1 = (uint8_t) ip [1] ؛

ip2 = (uint8_t) ip [2] ؛

ip3 = (uint8_t) ip [3] ؛

IPAddress ap_local (ip0 ، ip1 ، ip2 ، ip3) ؛

// *************** تحليل البايت من السلسلة ****************** //

parseBytes باطلة (const char * str ، char sep ، byte * bytes ، int maxBytes ، int base) {

لـ (int i = 0 ؛ i <maxBytes ؛ i ++) {

بايت = strtoul (str ، NULL ، قاعدة) ؛

str = strchr (str، sep) ؛

إذا (str == NULL || * str == '\ 0') {

استراحة؛

}

str ++ ؛

}}

الآن سنقوم بتكوين softAP على هذا IP

Serial.println (WiFi.softAPConfig (ap_localWeb_IP، ap_gate، ap_net)؟ "تكوين softAP": "غير متصل")؛ Serial.println (WiFi.softAPIP ()) ؛

  • ابدأ الآن خادم الويب وقم بخدمة صفحة ويب على عنوان IP هذا. لإدخال بيانات اعتماد WiFi للمستخدم.
  • تتكون صفحة الويب من حقلين نصيين لإدخال SSID وكلمة المرور.
  • handleStaticForm هي طريقة رد اتصال تخدم صفحة الويب.
  • يتولى server.handleClient () الاهتمام بالطلب والردود من صفحة الويب وإليها.

server.begin () ،

server.on ("/"، handleStaticForm) ؛

server.onNotFound (handleNotFound) ،

ستيمر = ميلي () ؛

while (millis () - STimer <= S Interval) {

server.handleClient () ، }

يتم حفظ نموذج HTML في SPIFFS. نتحقق من الحجج المناسبة باستخدام server.arg (). للحصول على قيمة SSID وكلمة المرور

ملف الملف = SPIFFS.open ("/ WiFi.html"، "r") ؛

server.streamFile (ملف ، "text / html") ؛

file.close () ؛

الخطوة 7: القراءة والكتابة من SPIFFS

نظام SPIFFS

نظام ملفات فلاش للواجهة الطرفية التسلسلية ، أو SPIFFS للاختصار. إنه نظام ملفات خفيف الوزن لوحدات التحكم الدقيقة مع شريحة فلاش SPI. تحتوي شريحة فلاش ESP32 المدمجة على مساحة كبيرة لصفحات الويب الخاصة بك. لقد قمنا أيضًا بتخزين صفحة الويب الخاصة بنا في نظام الفلاش. هناك بعض الخطوات التي نحتاج إلى اتباعها لتحميل البيانات إلى spiffs

قم بتنزيل أداة تحميل البيانات ESP 32 SPIFFS:

  • في دليل كراسة الرسم من Arduino ، أنشئ دليل الأدوات إذا لم يكن موجودًا بعد
  • قم بفك ضغط الأداة في دليل الأدوات (سيبدو المسار مثل /Arduino/tools/ESP32FS/tool/esp32fs.jar)
  • أعد تشغيل Arduino IDE
  • افتح رسمًا تخطيطيًا (أو أنشئ رسمًا جديدًا واحفظه)
  • انتقل إلى دليل الرسم (اختر Sketch> Show Sketch Folder)
  • قم بإنشاء دليل باسم البيانات وأي ملفات تريدها في نظام الملفات هناك. لقد قمنا بتحميل صفحة HTML الخاصة بنا بالاسم webform.html
  • تأكد من أنك حددت لوحة ومنفذًا وإغلاق Serial Monitor
  • حدد Tools> ESP8266 Sketch Data Upload. يجب أن يبدأ هذا بتحميل الملفات في نظام ملفات فلاش ESP8266. عند الانتهاء ، سيعرض شريط حالة IDE رسالة SPIFFS Image Uploaded.

مقبض باطل DHCP () {ملف ملف = SPIFFS.open ("/ page_dhcp.html"، "r") ؛ server.streamFile (ملف ، "text / html") ؛ file.close () ؛}

مقبض باطل ثابت () {

ملف الملف = SPIFFS.open ("/ page_static.html"، "r") ؛ server.streamFile (ملف ، "text / html") ؛ file.close () ؛}

الكتابة إلى SPIFFS

نحن هنا نكتب الإعداد المحفوظ إلى SPIFFS حتى لا يضطر المستخدمون إلى اتباع هذه الخطوات كلما تمت إعادة تعيين الجهاز.

  • تحويل الوسائط المتلقاة من صفحة الويب إلى كائنات JSON
  • اكتب JSON هذا في ملف.txt المحفوظ في SPIFFS.

String ipv4static = String (server.arg ("ipv4static")) ؛

String gateway = String (server.arg ("gateway")) ؛ السلسلة الفرعية = سلسلة (server.arg ("الشبكة الفرعية")) ؛ الجذر ["statickey"] = "staticSet" ؛ الجذر ["staticIP"] = ipv4static ؛ الجذر ["البوابة"] = البوابة ؛ الجذر ["الشبكة الفرعية"] = الشبكة الفرعية ؛ سلسلة JSONStatic ؛ شار جسون [120] ؛ root.printTo (المسلسل) ؛ root.prettyPrintTo (JSONStatic) ، JSONStatic.toCharArray (JSON، sizeof (JSONStatic) +2) ؛ File fileToWrite = SPIFFS.open ("/ ip_set.txt" ، FILE_WRITE) ؛ if (! fileToWrite) {Serial.println ("خطأ في فتح SPIFFS") ؛ } if (fileToWrite.print (JSON)) {Serial.println ("- File Written") ؛ } else {Serial.println ("- خطأ في كتابة الملف")؛ } fileToWrite.close () ؛

الخطوة 8: الكود العام

يمكن العثور على كود Over لـ HTML و ESP32 في مستودع Github هذا

موصى به: