Mundarija:

Statik va DHCP IP sozlamalarini sozlash uchun ESP32 qo'lga olish portali: 8 qadam
Statik va DHCP IP sozlamalarini sozlash uchun ESP32 qo'lga olish portali: 8 qadam

Video: Statik va DHCP IP sozlamalarini sozlash uchun ESP32 qo'lga olish portali: 8 qadam

Video: Statik va DHCP IP sozlamalarini sozlash uchun ESP32 qo'lga olish portali: 8 qadam
Video: cisco packet tracer dasturidan dhcp sozlash 2024, Noyabr
Anonim
Statik va DHCP IP sozlamalarini sozlash uchun ESP32 qo'lga olish portali
Statik va DHCP IP sozlamalarini sozlash uchun ESP32 qo'lga olish portali

ESP 32 - bu o'rnatilgan WiFi va BLE. Bu IoT loyihalari uchun o'ziga xos sovg'adir. Faqat SSID, parol va IP konfiguratsiyasini bering va narsalarni bulutga birlashtiring. Ammo IP sozlamalari va foydalanuvchi ma'lumotlarini boshqarish foydalanuvchi uchun bosh og'rig'i bo'lishi mumkin.

Agar foydalanuvchi WiFi hisob ma'lumotlarini o'zgartirmoqchi bo'lsa nima bo'ladi?

Agar foydalanuvchi DHCP/Statik IP sozlamalarini o'zgartirishni xohlasa nima bo'ladi?

ESP32 -ning har doim yonib -o'chishi ishonchli emas va hatto bu muammolarni hal qilmaydi. Bu erda biz ko'rsatma beramiz.

  • Qanday qilib portativ portal yaratish kerak.
  • ESP32 veb -shaklini joylashtirish.
  • SPIFFS ESP32 dan o'qish va yozish.
  • Yumshoq kirish nuqtasini yaratish va stansiyaga ulanish

1 -qadam: Uskuna va dasturiy ta'minot spetsifikatsiyasi

Uskuna texnik xususiyatlari

  • ESP32 WiFi/BLE
  • Simsiz harorat va namlik sensori

Dastur xususiyatlari

Arduino IDE

2 -qadam: asirlik portalini yaratish

Qo'lga tushadigan portal yaratish
Qo'lga tushadigan portal yaratish
Qo'lga tushadigan portal yaratish
Qo'lga tushadigan portal yaratish
Qo'lga tushadigan portal yaratish
Qo'lga tushadigan portal yaratish

Qo'lga olinadigan portal - bu yangi ulangan foydalanuvchilarga tarmoq resurslariga kengroq kirishdan oldin ko'rsatiladigan veb -sahifadir. Bu erda biz DHCP va Statik IP sozlamalarini tanlash uchun uchta veb -sahifaga xizmat ko'rsatamiz. biz ESP uchun IP -manzilni ikki xil aniqlashimiz mumkin.

  • DHCP IP-manzili- bu qurilmaga IP-manzilni dinamik tarzda belgilash usuli. ESP standart IP -manzili 192.168.4.1
  • Statik IP-manzil- bizning tarmoq qurilmamizga doimiy IP manzilini tayinlash. Statik IP -ni qurilmaga etkazib berish uchun biz IP -manzil, shlyuz manzili va pastki tarmoq niqobini aniqlashimiz kerak.

Birinchi veb -sahifada DHCP va Statik IP sozlamalarini tanlash uchun foydalanuvchiga radio tugmalari beriladi. Keyingi veb -sahifada biz IP -ga tegishli ma'lumotlarni taqdim etishimiz kerak.

HTML kodi

Veb -sahifalar uchun HTML kodni ushbu Github omboridan topishingiz mumkin.

HTML veb -sahifalarini yaratish uchun siz Sublime yoki notepad ++ kabi har qanday IDE yoki matn muharriridan foydalanishingiz mumkin.

  • Birinchidan, DHCP va Statik IP sozlamalarini tanlash uchun ikkita radio tugmachali HTML veb -sahifasini yarating.
  • Endi javobni yuborish tugmachasini yarating
  • Radio tugmalariga nom bering. ESP veb -server sinfi bu nomlarni argument sifatida qabul qiladi va shu argumentlar yordamida radio tugmalarining javobini oladi
  • Endi javobni qurilmaga yuborish uchun "YUBORISH" tugmasini bosing.
  • Boshqa veb -sahifalarda bizda matnli qutilar mavjud. Matn maydoniga ismning qiymati va kiritish turini bering va javobni "YUBORISH" ga yuborish tugmasini qo'shing.
  • Matn maydonining mazmunini tiklash uchun "RESET" tugmasini yarating.

// DHCP sozlamalari radio tugmasi

Statik IP -ni sozlash

// matn kiritish qutilari

// Yuborish tugmasi

kiritish [type = "submit"] {fon-rang: #3498DB; / * Yashil */ chegara: yo'q; rangi: oq; to'ldirish: 15 piksel 48 piksel; matnni tekislash: markaz; matnni bezatish: yo'q; displey: ichki blok; shrift o'lchami: 16 piksel; }

// Qayta tiklash tugmasi

kiritish [type = "submit"] {fon-rang: #3498DB; / * Yashil */ chegara: yo'q; rangi: oq; to'ldirish: 15 piksel 48 piksel; matnni tekislash: markaz; matnni bezatish: yo'q; displey: ichki blok; shrift o'lchami: 16 piksel; }

3 -qadam: Veb -sahifalardan ESP32 -ga veb -javobni olish

Veb -sahifalardan ESP32 -ga veb -javobni olish
Veb -sahifalardan ESP32 -ga veb -javobni olish

ESP 32 qurilmasidan veb -sahifalarga xizmat ko'rsatish juda qiziqarli. Bu veb -sahifadagi harorat ma'lumotlarini ko'rsatish, maxsus veb -sahifadan svetoforni burish yoki foydalanuvchi WiFi ma'lumotlarini veb -sahifa orqali saqlash kabi har qanday narsa bo'lishi mumkin. Shu maqsadda, ESP 32 veb -sahifalarini serverga o'tkazish uchun WebServer Class -dan foydalanadi.

  • Birinchidan, 80 -portda (HTTP porti) WebServer sinfining namunasini yarating.
  • Endi ESP qurilmasini softAP sifatida o'rnating. SSID va parolni kiriting va qurilmaga statik IP tayinlang.
  • Serverni ishga tushiring.

// ********* SSID va AP uchun Pass **************/

const char *ssidAP = "SSID bering"; const char *passAP = "o'tish kaliti";

// ********* Statik IP konfiguratsiyasi **************/IPAddress ap_local_IP (192, 168, 1, 77); IPAddress ap_gateway (192, 168, 1, 254); IPAddress ap_subnet (255, 255, 255, 0);

// ********* SoftAP konfiguratsiyasi **************/

WiFi rejimi (WIFI_AP);

Serial.println (WiFi.softAP (ssidAP, passAP)? "Soft-AP ni sozlash": "Ulanmadi");

kechikish (100); Serial.println (WiFi.softAPConfig (ap_local_IP, ap_gateway, ap_subnet)? "Soft APni sozlash": "Konfiguratsiyadagi xato"); Serial.println (WiFi.softAPIP ());

// serverni ishga tushiring

server.begin ();

  • Turli xil qayta qo'ng'iroqlar yordamida URL yarating va unga xizmat qiling.
  • va handleClient yordamida mijozni asinxron tarzda boshqaring.

server.on ("/", handleRoot);

server.on ("/dhcp", handleDHCP); server.on ("/statik", handleStatic); // server.handleClient () javoblarini boshqaring;

  • Veb -sahifalarga kirish uchun. Siz hozirgina Wi -Fi tarmog'ida ro'yxatga olingan APga ulaning. Endi brauzerga o'ting, oxirgi bosqichda siz sozlagan IP -ni kiriting va veb -sahifaga kiring.
  • Veb -server sinfi argument sifatida kirishga berilgan nomni oladi ('matn', 'tugma', 'radiobutton' va boshqalar). Bu kirishlar javoblarini argument sifatida saqlaydi va biz qiymatlarni olishimiz yoki ularni arg, arg, hasArg usullari yordamida tekshirishimiz mumkin.

if (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 ("shlyuz") && server.hasArg ("pastki tarmoq")) {staticSet (); } boshqa if (server.arg ("ipv4")! = "") {dhcpSetManual (); } boshqa {dhcpSetDefault (); }

4 -qadam: IP -ning statik konfiguratsiyasi

Statik IP konfiguratsiyasi
Statik IP konfiguratsiyasi

Hozircha biz AP -ga qanday ulanish va veb -sahifaning kirish maydonlaridan qiymatlarni qanday olish kerakligini tushundik

Ushbu bosqichda biz statik IP -ni sozlaymiz

  • Statik IP -ni tanlang va "Yuborish" tugmasini bosing. Siz keyingi sahifaga yo'naltirilasiz.
  • Keyingi sahifaga statik IP -manzil, shlyuz manzili va pastki tarmoq niqobini kiriting, bu sahifa "/statik" da xizmat ko'rsatiladi, u statik qayta qo'ng'iroq qilish usuli bilan boshqariladi.
  • Server.arg () usuli yordamida matn maydonlarining qiymatini oling.

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

String shlyuzi = String (server.arg ("shlyuz"))); String subnet = String (server.arg ("pastki tarmoq")));

  • Endi bu qiymatlar JSON formatida ketma -ket joylashtirilgan.
  • Keyin biz JSONni SPIFFS -ga yozamiz.

ildiz ["statickey"] = "staticSet";

ildiz ["staticIP"] = ipv4static;

ildiz ["shlyuz"] = shlyuz;

ildiz ["pastki tarmoq"] = pastki tarmoq;

Fayl fileToWrite = SPIFFS.open ("/ip_set.txt", FILE_WRITE);

agar (root.printTo (fileToWrite)) {

Serial.println ("-Fayl yozilgan"); }

  • Ushbu konfiguratsiya SPIFFS -da saqlanadi. Keyinchalik, bu qiymatlar SPIFFS -dan o'qiladi.
  • Keyin statik IP qiymatlari JSON -dan tahlil qilinadi.

Fayl fayli = SPIFFS.open ("/ip_set.txt", "r");

while (file.available ()) {

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

if (debugLogData.length ()> 5) {

JsonObject & readRoot = jsonBuffer.parseObject (debugLogData);

agar (readRoot.containsKey ("statickey"))) {

String ipStaticValue = readRoot ["staticIP"];

String gatewayValue = readRoot ["shlyuz"];

String subnetValue = readRoot ["pastki tarmoq"];

5 -qadam: DHCP sozlamalari

DHCP sozlamalari
DHCP sozlamalari

Ushbu bosqichda biz DHCP sozlamalarini o'rnatamiz

Indeks sahifasidan DHCP sozlamalarini tanlang va "Yuborish" ni bosing

  • Siz keyingi sahifaga yo'naltirilasiz. Keyingi sahifada IP manzilini kiriting yoki standartni tanlang va javobni yuborish uchun "Yuborish" tugmasini bosing. Bu sahifaga "/dhcp" xizmat ko'rsatiladi, u handleDHCP qayta qo'ng'iroq qilish usuli bilan ishlanadi. Server.arg () usuli yordamida matn maydonlarining qiymatini oling. Tugmani bosganingizda standart belgini belgilang. 192.168.4.1 IP qurilmaga beriladi.
  • Endi bu qiymatlar JSON formatida ketma -ket joylashtirilgan.
  • Keyin biz JSONni SPIFFS -ga yozamiz.

JsonObject & root = jsonBuffer.createObject ();

ildiz ["dhcpManual"] = "dhcpManual";

ildiz ["dhcpIP"] = "192.168.4.1";

Fayl fileToWrite = SPIFFS.open ("/ip_set.txt", FILE_WRITE);

agar (root.printTo (fileToWrite)) {

Serial.println ("-Fayl yozilgan"); }

  • Ushbu konfiguratsiya SPIFFS -da saqlanadi. Keyinchalik, bu qiymatlar SPIFFS -dan o'qiladi.
  • Keyin dhcp IP qiymatlari JSONdan tahlil qilinadi.

Fayl fayli = SPIFFS.open ("/ip_set.txt", "r"); while (file.available ()) {debugLogData += char (file.read ()); } agar (debugLogData.length ()> 5) {JsonObject & readRoot = jsonBuffer.parseObject (debugLogData);

agar (readRoot.containsKey ("dhcpDefault")))

Satr ipdhcpValue = readRoot ["dhcpIP"];

Serial.println (ipdhcpValue);

dhcpAPConfig ();}

6 -qadam: WiFi hisob ma'lumotlarini saqlash

WiFi hisob ma'lumotlarini saqlash
WiFi hisob ma'lumotlarini saqlash

Hozircha biz IP konfiguratsiyasini tanladik. Endi biz foydalanuvchining wifi ma'lumotlarini saqlashimiz kerak. Bu vaziyatni hal qilish uchun. Biz ushbu protseduraga amal qildik.

  • Shunday qilib, bizda DHCP yoki statik IP konfiguratsiyasida oxirgi qadamlarda aytib o'tilgan asir portalidan tanlagan AP qurilmamiz bor.
  • Aytaylik, biz Statik IP konfiguratsiyasini tanladik.
  • Biz ushbu IP -da softAP -ni sozlaymiz.
  • SPIFFS qiymatlarini o'qib chiqqandan so'ng va JSON dan bu qiymatlarni ajratib oling. Biz ushbu IP -da softAP -ni sozlaymiz.
  • IP satrini baytga aylantiring.

bayt 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);

// *************** satrdan baytlarni tahlil qilish ****************** //

bo'sh parseBytes (const char* str, char sep, bayt* bayt, int maxBytes, int base) {

uchun (int i = 0; i <maxBytes; i ++) {

bayt = strtoul (str, NULL, tayanch);

str = strchr (str, sep);

agar (str == NULL || *str == '\ 0') {

tanaffus;

}

str ++;

}}

Endi biz ushbu IP -da softAP -ni sozlaymiz

Serial.println (WiFi.softAPConfig (ap_localWeb_IP, ap_gate, ap_net)? "SoftAPni sozlash": "ulanmagan"); Serial.println (WiFi.softAPIP ());

  • Endi veb -serverni ishga tushiring va ushbu IP -da veb -sahifaga xizmat qiling. Foydalanuvchining WiFi hisob ma'lumotlarini kiritish uchun.
  • Veb -sahifa SSID va parolni kiritish uchun ikkita matn maydonidan iborat.
  • handleStaticForm - bu veb -sahifaga xizmat ko'rsatuvchi qayta qo'ng'iroq qilish usuli.
  • server.handleClient () so'rov va javoblarni veb -sahifaga va undan oladi.

server.begin ();

server.on ("/", handleStaticForm);

server.onNotFound (handleNotFound);

STimer = millis ();

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

server.handleClient (); }

HTML shakli SPIFFS -da saqlanadi. server.arg () yordamida mos argumentlarni tekshiramiz. SSID va parolni olish uchun

Fayl fayli = SPIFFS.open ("/WiFi.html", "r");

server.streamFile (fayl, "matn/html");

file.close ();

7 -qadam: SPIFFS -dan o'qish va yozish

SPIFFS

Seriyali periferik interfeysli Flash fayl tizimi yoki qisqacha SPIFFS. Bu SPI flesh-chipli mikrokontrollerlar uchun engil vaznli fayl tizimi. ESP32 flesh -chipida veb -sahifalaringiz uchun etarli joy mavjud. Shuningdek, biz veb -sahifamizni Flash tizimida saqladik. Ma'lumotlarni spifflarga yuklash uchun biz bir necha qadamlarni bajarishimiz kerak

ESP 32 SPIFFS ma'lumotlarni yuklash vositasini yuklab oling:

  • Arduino eskizlar katalogida, agar u hali mavjud bo'lmasa, asboblar katalogini yarating
  • Asbobni asboblar katalogiga joylashtiring (yo'l /Arduino/tools/ESP32FS/tool/esp32fs.jar kabi ko'rinadi)
  • Arduino IDE -ni qayta ishga tushiring
  • Eskizni oching (yoki yangisini yarating va saqlang)
  • Eskiz katalogiga o'ting (eskiz> eskiz papkasini ko'rsatish -ni tanlang)
  • Ma'lumotlar katalogini va u erdagi fayl tizimida kerakli fayllarni yarating. Biz webform.html nomi bilan HTML sahifamizni yukladik
  • Kengash, port va yopiq ketma -ket monitorni tanlaganingizga ishonch hosil qiling
  • Asboblar> ESP8266 Sketch ma'lumot yuklashni tanlang. Bu fayllarni ESP8266 flesh -fayl tizimiga yuklashni boshlashi kerak. Tugatgandan so'ng, IDE holat satrida SPIFFS rasm yuklangan xabari ko'rsatiladi.

void handleDHCP () {Fayl fayli = SPIFFS.open ("/page_dhcp.html", "r"); server.streamFile (fayl, "matn/html"); file.close ();}

void handleStatic () {

Fayl fayli = SPIFFS.open ("/page_static.html", "r"); server.streamFile (fayl, "matn/html"); file.close ();}

SPIFFSga yozish

Bu erda biz saqlangan sozlamani SPIFFS -ga yozyapmiz, shuning uchun har safar qurilma qayta o'rnatilganda foydalanuvchilar bu bosqichlardan o'tmasligi kerak.

  • Veb -sahifadan olingan argumentlarni JSON ob'ektlariga aylantiring
  • Ushbu JSONni SPIFFS -da saqlangan.txt faylga yozing.

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

String shlyuzi = String (server.arg ("shlyuz"))); String subnet = String (server.arg ("pastki tarmoq"))); ildiz ["statickey"] = "staticSet"; ildiz ["staticIP"] = ipv4static; ildiz ["shlyuz"] = shlyuz; ildiz ["pastki tarmoq"] = pastki tarmoq; JSONStatic qatori; char JSON [120]; root.printTo (ketma -ket); root.prettyPrintTo (JSONStatic); JSONStatic.toCharArray (JSON, sizeof (JSONStatic) +2); Fayl fileToWrite = SPIFFS.open ("/ip_set.txt", FILE_WRITE); if (! fileToWrite) {Serial.println ("SPIFFS -ni ochishda xato"); } if (fileToWrite.print (JSON)) {Serial.println ("-Fayl yozilgan"); } else {Serial.println ("-Fayl yozishda xato"); } fileToWrite.close ();

8 -qadam: Umumiy kod

HTML va ESP32 uchun Over kodini ushbu Github omboridan topishingiz mumkin

Tavsiya: