INHOUDSOPGAWE:
- Stap 1: Spesifikasie van hardeware en sagteware
- Stap 2: Skep 'n Captive Portal
- Stap 3: Kry die webrespons van webbladsye na ESP32
- Stap 4: Statiese IP -konfigurasie
- Stap 5: DHCP -instellings
- Stap 6: Stoor WiFi -geloofsbriewe
- Stap 7: Lees en skryf vanuit SPIFFS
- Stap 8: Algemene kode
Video: ESP32 Captive Portal om statiese en DHCP IP -instellings op te stel: 8 stappe
2024 Outeur: John Day | [email protected]. Laas verander: 2024-01-30 07:25
ESP 32 is 'n toestel met geïntegreerde WiFi en BLE. Dit is 'n goeie voorsprong vir die IoT -projekte. Gee net u SSID, wagwoord en IP -konfigurasies en integreer die dinge in die wolk. Maar die bestuur van die IP -instellings en gebruikersbewyse kan vir die gebruiker 'n hoofpyn wees.
Wat as die gebruiker die WiFi -geloofsbriewe wil verander?
Wat as die gebruiker die DHCP/Statiese IP -instellings wil verander?
Elke keer dat die ESP32 flits, is nie betroubaar nie, en selfs nie die oplossing vir hierdie probleme nie. Hier in hierdie instruksies gaan ons demonstreer.
- Hoe om 'n gevange portaal te skep.
- Die aanbied van 'n webvorm vanaf die ESP32.
- Lees en skryf van SPIFFS ESP32.
- Skep 'n sagte toegangspunt en maak verbinding met 'n stasie
Stap 1: Spesifikasie van hardeware en sagteware
Hardeware spesifikasie
- ESP32 WiFi/BLE
- Draadlose temperatuur- en humiditeitsensor
Sagteware spesifikasie
Arduino IDE
Stap 2: Skep 'n Captive Portal
'N Gevange portaal is 'n webbladsy wat aan nuut gekoppelde gebruikers vertoon word voordat hulle breër toegang tot netwerkhulpbronne verleen word. Hier bedien ons drie webblaaie om tussen DHCP en statiese IP -instellings te kies. ons kan die IP -adres op twee maniere vir ESP definieer.
- DHCP IP-adres- dit is 'n manier om die IP-adres dinamies aan die toestel toe te ken. Die standaard IP -adres van die ESP is 192.168.4.1
- Statiese IP-adres- 'n permanente IP-adres toewys aan ons netwerkapparaat. Om die statiese IP aan die toestel te verskaf, moet ons die IP -adres, gateway -adres en subnetmasker definieer.
Op die eerste webbladsy word aan die gebruiker die radioknoppies voorsien om tussen DHCP- en statiese IP -instellings te kies. Op die volgende webblad moet ons die IP -verwante inligting verskaf om verder te gaan.
HTML -kode
Die HTML -kode vir webblaaie kan gevind word in hierdie Github -bewaarplek.
U kan enige IDE of teksredakteur soos Sublime of notepad ++ gebruik om HTML -webblaaie te maak.
- Maak eers 'n HTML -webblad met twee radioknoppies om tussen DHCP en Statiese IP -instellings te kies.
- Skep nou die knoppie om u antwoord in te dien
- Gee 'n naam aan die radioknoppies. Die ESP -webbedienerklas neem hierdie name as argumente en kry die reaksie van die radioknoppies deur hierdie argumente te gebruik
- Voeg nou 'SUBMIT' -knoppie in om die antwoord na die toestel te stuur.
- Op die ander webblaaie het ons tekskassies. Gee die naamwaarde en invoertipe in die tekskassie en voeg 'n stuurknoppie by om 'SEND' die antwoord in te dien.
- Skep 'n 'RESET' -knoppie om die inhoud van die teksveld terug te stel.
// Radioknoppie DHCP -instelling
Statiese IP -instelling
// Teksblokkies invoer
// Dien knoppie in
input [type = "submit"] {agtergrond-kleur: #3498DB; / * Groen */ grens: geen; kleur: wit; opvulling: 15px 48px; teksbelyn: middel; teksversiering: geen; vertoon: inline-blok; lettergrootte: 16 px; }
// Herstelknoppie
input [type = "submit"] {agtergrond-kleur: #3498DB; / * Groen */ grens: geen; kleur: wit; opvulling: 15px 48px; teksbelyn: middel; teksversiering: geen; vertoon: inline-blok; lettergrootte: 16 px; }
Stap 3: Kry die webrespons van webbladsye na ESP32
Dit is baie lekker om webblaaie vanaf die ESP 32 -toestel te bedien. Dit kan alles wees van die vertoon van die temperatuurdata op die webblad, die omskakeling van die LED's van die pasgemaakte webblad of die stoor van die gebruikers WiFi -geloofsbriewe op 'n webblad. Vir hierdie doel gebruik ESP 32 WebServer Class om webblaaie te bedien.
- Skep eers 'n instansie van WebServer -klas by poort 80 (HTTP -poort).
- Stel nou die ESP -toestel op as softAP. Gee die SSID en wagwoord en ken 'n statiese IP aan die toestel toe.
- Begin die bediener.
// ********* SSID en Pas vir AP **************/
const char *ssidAP = "gee SSID"; const char *passAP = "slaagsleutel";
// ********* Statiese IP -konfigurasie **************/IPAddress ap_local_IP (192, 168, 1, 77); IPAddress ap_gateway (192, 168, 1, 254); IPAddress ap_subnet (255, 255, 255, 0);
// ********* SoftAP Config ***************/
WiFi.mode (WIFI_AP);
Serial.println (WiFi.softAP (ssidAP, passAP)? "Sagte-AP opstelling": "Kon nie koppel nie");
vertraging (100); Serial.println (WiFi.softAPConfig (ap_local_IP, ap_gateway, ap_subnet)? "Configuring Soft AP": "Konfigurasiefout"); Serial.println (WiFi.softAPIP ());
// begin die bediener
bediener.begin ();
- Skep en bedien die URL met verskillende terugbelle.
- en hanteer die kliënt asynchroon met behulp van handleClient.
server.on ("/", handleRoot);
server.on ("/dhcp", handleDHCP); server.on ("/static", handleStatic); // hanteer die antwoorde server.handleClient ();
- Om toegang tot die webblaaie te verkry. Koppel aan die AP wat u pas geskep het, wat op u WiFi -netwerke verskyn. Gaan nou na die blaaier, voer die IP in wat u in die laaste stap gekonfigureer het en kry toegang tot die webblad.
- Webbedienerklas neem die naam wat aan insette gegee word ('teks', 'knoppie', 'radioknoppie' ens.) As argumente. Dit stoor die reaksies van hierdie insette as argumente, en ons kan die waardes kry of dit kontroleer met behulp van args, arg, hasArg -metodes.
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 ("gateway") && server.hasArg ("subnet")) {staticSet (); } anders as (server.arg ("ipv4")! = "") {dhcpSetManual (); } anders {dhcpSetDefault (); }
Stap 4: Statiese IP -konfigurasie
Tot dusver het ons verstaan hoe om aan te sluit by AP en hoe om die waardes uit die invoervelde van die webblad te kry
In hierdie stap stel ons die statiese IP op
- Kies die statiese IP -instelling en klik op die knoppie Submit. U sal na die volgende bladsy herlei word.
- Voer op die volgende bladsy die statiese IP -adres, gateway -adres en subnetmasker in; hierdie bladsy word op '/static' bedien, wat hanteer word deur 'n handmatige terugbelmetode.
- Kry die waarde van teksvelde met behulp van server.arg () metode.
String ipv4static = String (server.arg ("ipv4static"));
String gateway = String (server.arg ("gateway")); String subnet = String (server.arg ("subnet"));
- Hierdie waardes word nou in 'n JSON -formaat opgedeel.
- Dan skryf ons die JSON na SPIFFS.
root ["statickey"] = "staticSet";
root ["staticIP"] = ipv4static;
root ["gateway"] = gateway;
root ["subnet"] = subnet;
Lêer fileToWrite = SPIFFS.open ("/ip_set.txt", FILE_WRITE);
if (root.printTo (fileToWrite)) {
Serial.println ("-lêer geskryf"); }
- Hierdie opset word in SPIFFS gestoor. Hierdie waardes word later uit SPIFFS gelees.
- Die statiese IP -waardes word dan van JSON ontleed.
Lêer lêer = SPIFFS.open ("/ip_set.txt", "r");
terwyl (file.available ()) {
debugLogData += char (file.read ()); }
as (debugLogData.length ()> 5) {
JsonObject & readRoot = jsonBuffer.parseObject (debugLogData);
if (readRoot.containsKey ("statickey")) {
String ipStaticValue = readRoot ["staticIP"];
String gatewayValue = readRoot ["gateway"];
String subnetValue = readRoot ["subnet"];
Stap 5: DHCP -instellings
In hierdie stap stel ons die DHCP -instellings op
Kies die DHCP -instellings op die indeksbladsy en klik op "Submit"
- U sal na die volgende bladsy herlei word. Voer die IP -adres op die volgende bladsy in, of kies standaard, en klik op die "Submit" -knoppie om die antwoord in te dien. Hierdie bladsy word bedien by "/dhcp" wat hanteer word deur die handleDHCP -terugbelmetode. Kry die waarde van teksvelde met behulp van server.arg () metode. As u daarop klik, kies die standaard boks. die 192.168.4.1 IP sal aan die toestel gegee word.
- Hierdie waardes word nou in 'n JSON -formaat opgedeel.
- Dan skryf ons die JSON na SPIFFS.
JsonObject & root = jsonBuffer.createObject ();
root ["dhcpManual"] = "dhcpManual";
root ["dhcpIP"] = "192.168.4.1";
Lêer fileToWrite = SPIFFS.open ("/ip_set.txt", FILE_WRITE);
if (root.printTo (fileToWrite)) {
Serial.println ("-lêer geskryf"); }
- Hierdie opset word in SPIFFS gestoor. Hierdie waardes word later uit SPIFFS gelees.
- Die dhcp IP -waardes word dan van JSON ontleed.
Lêerlêer = SPIFFS.open ("/ip_set.txt", "r"); terwyl (file.available ()) {debugLogData += char (file.read ()); } if (debugLogData.length ()> 5) {JsonObject & readRoot = jsonBuffer.parseObject (debugLogData);
if (readRoot.containsKey ("dhcpDefault")) {
String ipdhcpValue = readRoot ["dhcpIP"];
Serial.println (ipdhcpValue);
dhcpAPConfig ();}
Stap 6: Stoor WiFi -geloofsbriewe
Vir eers het ons die IP -konfigurasie gekies. Nou moet ons die wifi -geloofsbriewe van die gebruiker stoor. Om hierdie situasie op te los. Ons het hierdie prosedure gevolg.
- Ons het dus ons AP -toestel opgestel in DHCP- of statiese IP -konfigurasie wat ons gekies het uit die gevange portaal wat in die laaste stappe genoem is.
- Gestel ons het 'n statiese IP -opset gekies.
- Ons sal 'n softAP op hierdie IP instel.
- Na die lees van die waardes van SPIFFS en die ontleding van hierdie waardes van JSON. Ons sal die softAP op hierdie IP instel.
- Skakel die IP -string om in bytes.
byte 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);
// **************** Ontleed grepe van string ****************** //
void parseBytes (const char* str, char sep, byte* bytes, int maxBytes, int base) {
vir (int i = 0; i <maxBytes; i ++) {
grepe = strtoul (str, NULL, basis);
str = strchr (str, sep);
as (str == NULL || *str == '\ 0') {
breek;
}
str ++;
}}
Nou sal ons die softAP op hierdie IP instel
Serial.println (WiFi.softAPConfig (ap_localWeb_IP, ap_gate, ap_net)? "Configuring softAP": "not connected"); Serial.println (WiFi.softAPIP ());
- Begin nou die webbediener en bedien 'n webblad op hierdie IP. Om die WiFi -geloofsbriewe van die gebruiker in te voer.
- Die webblad bestaan uit twee teksvelde om SSID en wagwoord in te voer.
- handleStaticForm is 'n terugbelmetode wat die webblad bedien.
- server.handleClient () sorg vir die versoek en antwoorde van en na die webblad.
bediener.begin ();
server.on ("/", handleStaticForm);
server.onNotFound (handleNotFound);
STimer = millis ();
terwyl (millis ()-STimer <= SInterval) {
server.handleClient (); }
Die HTML -vorm word in SPIFFS gestoor. ons kyk na die geskikte argumente met behulp van server.arg (). om die waarde van SSID en wagwoord te kry
Lêer lêer = SPIFFS.open ("/WiFi.html", "r");
server.streamFile (lêer, "text/html");
file.close ();
Stap 7: Lees en skryf vanuit SPIFFS
SPIFFS
Seriële perifere koppelvlak Flash -lêerstelsel, of kortweg SPIFFS. Dit is 'n ligte lêerstelsel vir mikrobeheerders met 'n SPI-flitsskyfie. Die ingeboude flitschip van die ESP32 het baie ruimte vir u webblaaie. Ons het ook ons webblad in Flash System gestoor. Daar is 'n paar stappe wat ons moet volg om data na spiffs op te laai
Laai die ESP 32 SPIFFS-data-oplaai-hulpmiddel af:
- Maak in u Arduino -sketsboekgids 'n gereedskapgids as dit nog nie bestaan nie
- Pak die gereedskap uit in die gids met gereedskap (die pad sal soos /Arduino/tools/ESP32FS/tool/esp32fs.jar lyk)
- Herbegin Arduino IDE
- Maak 'n skets oop (of skep 'n nuwe en stoor dit)
- Gaan na die sketsgids (kies Skets> Wys sketsgids)
- Skep 'n gids met die naam data en alle lêers wat u in die lêerstelsel wil hê. Ons het ons HTML -bladsy met die naam webform.html opgelaai
- Maak seker dat u 'n bord, poort en geslote seriële monitor gekies het
- Kies Tools> ESP8266 Sketsdata -oplaai. Dit moet begin om die lêers na die ESP8266 -lêerstelsel op te laai. As dit klaar is, sal die IDE -statusbalk die SPIFFS -prentopgelaaide boodskap vertoon.
void handleDHCP () {File file = SPIFFS.open ("/page_dhcp.html", "r"); server.streamFile (lêer, "text/html"); file.close ();}
leegte handleStatic () {
Lêer lêer = SPIFFS.open ("/page_static.html", "r"); server.streamFile (lêer, "text/html"); file.close ();}
Skryf aan SPIFFS
Hier skryf ons die gestoorde instelling aan die SPIFFS sodat gebruikers nie hierdie stappe hoef te ondergaan wanneer die toestel herstel word nie.
- Skakel die argumente wat van die webblad ontvang is om na JSON -voorwerpe
- Skryf hierdie JSON in die.txt -lêer wat in SPIFFS gestoor is.
String ipv4static = String (server.arg ("ipv4static"));
String gateway = String (server.arg ("gateway")); String subnet = String (server.arg ("subnet")); root ["statickey"] = "staticSet"; root ["staticIP"] = ipv4static; root ["gateway"] = gateway; root ["subnet"] = subnet; String JSONStatic; char JSON [120]; root.printTo (reeks); root.prettyPrintTo (JSONStatic); JSONStatic.toCharArray (JSON, sizeof (JSONStatic) +2); Lêer fileToWrite = SPIFFS.open ("/ip_set.txt", FILE_WRITE); if (! fileToWrite) {Serial.println ("Fout tydens opening van SPIFFS"); } if (fileToWrite.print (JSON)) {Serial.println ("-lêer geskryf"); } anders {Serial.println ("-Fout by die skryf van lêer"); } fileToWrite.close ();
Stap 8: Algemene kode
Die Over -kode vir HTML en ESP32 kan gevind word in hierdie Github -bewaarplek
Aanbeveel:
Hoe om 'n statiese LCD -bestuurder te maak met I²C -koppelvlak: 12 stappe
Hoe om 'n statiese LCD -bestuurder te maak met I²C -koppelvlak: Liquid Crystal -skerms (LCD) word wyd gebruik vir kommersiële en industriële toepassings vanweë hul goeie visuele eienskappe, lae koste en lae energieverbruik. Hierdie eienskappe maak die LCD die standaardoplossing vir toestelle wat op batterye werk
Eenvoudige, maar kragtige statiese elektrisiteitsdetektor wat ook 'spoke' kan opspoor: 10 stappe
Eenvoudige, maar kragtige statiese elektrisiteitsdetektor wat ook "spoke" kan opspoor: Hallo, dit is my eerste instruksie, laat my asseblief weet van die foute wat ek in hierdie instruksies begaan het. In hierdie instruksies maak ek 'n stroombaan wat statiese elektrisiteit kan opspoor. Een van sy skeppers het beweer dat hy ontdek het dat
ESP8266 Statiese IP (WIP): 3 stappe
ESP8266 Statiese IP (WIP): (As u Wi-Fi-netwerk reeds op een of ander manier gekonfigureer is, moet u moontlik met u netwerkadministrateur praat.) Deel van die doel van ons projek is om aan elke ESP8266 sy eie statiese IP-adres toe te ken maak dit makliker om die toestelle by te hou en aan te sluit
Tuisautomatisering met behulp van Captive Portal: 9 stappe
Tuisautomatisering met behulp van Captive Portal: Hier sal ons 'n baie interessante projek skep van tuisautomatisering op basis van Captive Portal, met behulp van nodeMCU
Statiese elektrisiteitsmetingsgebaseerde noodverligtingstelsel: 8 stappe
Statiese elektrisiteitsmeting op grond van noodverligtingstelsel: het u al ooit daaraan gedink om 'n noodbeligtingstelsel te maak as u hoofkrag afgaan. Aangesien u selfs 'n bietjie kennis in elektronika het, moet u weet dat u die beskikbaarheid van die netkrag maklik kan kontroleer deur eenvoudig die