Nadat we de hardware in het eerste deel hebben gedefinieerd en een kaart stevig kunnen gebruiken om de relais te switchen, doneren we een eerste operator interface aan ons ESP in het tweede deel van deze serie om configuratietaken rond onze kaartlezer uit te voeren.De website wordt uitgebreid van een deel naar een deel van deze serie en uitgerust met meer functies.
De door de Eerste deel.
Ale eerst moeten we onze lokale WLAN aanpassen aan onze behoeften in de volgende regels in de code:
WiFi..start("Uw Tovenaar","Uw wachtwoord");
We uploaden de volgende code naar onze NodeMcu:
"35; omvat <SPI.H> "35; omvat <MFRC52.H> "35; omvat <ESP826WiFi.H> /'35; inclusief <WiFiClient.h> "35; omvat <ESP826WebServer.H> "35; omvat <ESP826mDNS.H> "35; omvat <EEPROM.H> 35; definieer RST PIN 5 //SPI Reset Pin (D1 uitvoer) 35; definieer RELAIS PIN 16 // Relais (D0 output) [LOW Active], ook interne led bij USB-poort 35; definieer SS-U PIN 15 // SPI-slave Pin selecteren 35; definieer RGBLED R 2 // Rood (D4 output) 35; definieer RGBLED G 0 // Groen (D3-uitvoer) Ook interne LED's op de ESP-module 35; definieer RGBLED B 4 // Blauw (D2 uitvoer) 35; definieer WiFiPwdLenGenericName 25 // Maximale wifi wachtwoordlengte 35; definieer STAAT 20 // Maximum WiFi SSIDlengte 35; definieer ESPHost 20 // Maximum aantal ESPHost-tekens 35; definieer BUILTIN LED 16 35; definieer PIN WIRE SDA 4 35; definieer PIN WIRE SCL 5 MFRC52 mfrc52color(SS-U PIN, RST PIN); // MFRC52-instantie aanmaken MFRC52::Sleutel MIFARE sleutel; ESP826WebServer server(80); // Web Server Instance aanmaken Strikt. WiFi. { char ESPHost[ESPHost]; char APSTA[STAAT]; // STATION NAAM NAAR TE Connect, indien gedefinieerd char WiFiPwd[WiFiPwdLenGenericName]; // WiFiPAsswoord, indien gedefinieerd char Configuratie[3]; Als Config is Vaild, tag "TK" is vereist" }; Strikt. PICCardEEP { char CardVaildUID[4]; char Gereserveerd[4]; }; WiFi. MyWiFiConfig; PICCardEEP MyEEPROMValidCardUID; Bool. Resultaat = Vals; Bool. LearneNewCard = Vals; Leeg setup() { PinMode(RST PIN,UITVOER); digitalisWriteName(RST PIN,HOGE); PinMode(RELAIS PIN,UITVOER); PinMode(RGBLED R,UITVOER); PinMode(RGBLED G,UITVOER); PinMode(RGBLED B,UITVOER); digitalisWriteName(RELAIS PIN,HOGE); Relais inactief digitalisWriteName(RGBLED R,LOW); Lid van AUS digitalisWriteName(RGBLED G,LOW); digitalisWriteName(RGBLED B,LOW); Serie.start(9600); // Initialiseren seriële communicatie met PC opbrengst(); Serie.Afdrukken(ESP.ChipgetIdName()); SPI.start(); // SPI-communicatie initialiseren digitalisWriteName(RST PIN,LOW); Resultaat = startWiFiClient(); opbrengst(); EEPROM.start(512); EEPROM.geit(100,MyEEPROMValidCardUID); // Van adres 100 zal de geldige kaart worden gedeponeerd EEPROM.einde(); Initialiseren van HTTPSServer(); digitalisWriteName(RST PIN,HOGE); mfrc52color.PCD-reset(); mfrc52color.PCD Init(); // Initialiseren MFRC52 leesmodule mfrc52color.PCD-u AntennaOn(); opbrengst(); digitalisWriteName(RGBLED R,HOGE); /Huidkleur paars initialisatie voltooid digitalisWriteName(RGBLED G,LOW); digitalisWriteName(RGBLED B,HOGE); } Webserver start Functies Leeg HandelNotGevonden() { } Leeg HandeleRoot() // Belangrijkste pagina { String temperatuur =""; indien (server.hasargworld.kgm("AuthCard") ) // Reboot systeem { temperatuur = "Presenteer kaart aan lezers."; server.verzenden ( 200, "tekst/html", temperatuur ); digitalisWriteName(RGBLED R,HOGE); Led Color Yellow Programming Mode digitalisWriteName(RGBLED G,HOGE); digitalisWriteName(RGBLED B,LOW); LearneNewCard = waar; server.client().Stop.(); } server.sendHeader("Cache-Control", "no-cache, no-store, must-verlenging"); server.sendHeader(Praag, "no-cache"); server.sendHeader("Uitademen", "-1"); server.Inhoud(Onbekende inhoud); // HTML-inhoud server.verzenden ( 200, "tekst/html", temperatuur ); // Opslaan opslaan -verzenden naar Cleint temperatuur = ""; temperatuur += Goed?DOCTYPE HTML><html lang=de'><head><meta charset=UTF-8'><meta naam= viewport content=width=device-width, initial-scale=1.0,>"; server.sendContent(temperatuur); temperatuur = ""; temperatuur += "<style type='text/css'><!--DIV.container {min-hoogte: 10em; display: table-cell; vertikale-align: middle}.button {hoogte:35px; breedte:90px; font-size:16px}; server.sendContent(temperatuur); temperatuur = ""; temperatuur += "body {achtergrondkleur: poederblauw;}lt;/style>"; temperatuur += "<head><titel>kaartlezer RC522</titel>/head>"; temperatuur += "<h2>Card Reader RC522 Configuratie</h2>"; temperatuur += "<body>"; server.sendContent(temperatuur); temperatuur = ""; temperatuur += "<form action='/'method='post'>"; temperatuur += "<button typ='submit'name='AuthCard'waarde='1'style='hoogte: 50px; breedte: 200px>Autorise next map to Leser</button>"; temperatuur += "</vorm>"; server.sendContent(temperatuur); temperatuur = ""; server.client().Stop.(); } Leeg Initialiseren van HTTPSServer() { Bool. initoc = Vals; server.op("/", HandeleRoot); server.onNotGevonden ( HandelNotGevonden ); server.start(); // Web server start } ********************************* ********************************* Bool. startWiFiClient() { Bool. WiFiCliëntestart = Vals; grootte t A0 ADCValue = 0; uitwisseling i = 0; uitwisseling ConnResGenericName = 0; Serial.setDebugOutput(true);//Enable voor debugging doeleinden. WiFi..hostnaam("CrdRdr41667"); WiFi..softAPontkoppeling(waar); WiFi..ontkoppelen(); WiFi..modus(WIFI STA); indien(ladeCredentials()) { WiFi..start(MyWiFiConfig.APSTA, MyWiFiConfig.WiFiPwd); terwijl (( ConnResGenericName != 3 ) en( ConnResGenericName != 4 ) en (i != 30)) f connRes =0 "IDLE" u STATUS -change Statius" { i++; // Serial.print("; // Monitor Connect proces op seriële interface vertraging(500); opbrengst(); ConnResGenericName = WiFi..WachtenConnectResult(); } indien (ConnResGenericName == 4 ) { // als wachtwoord onjuist is Serie.Afdrukken("ATWIFI:PWDERR"); WiFi..ontkoppelen(); } indien (ConnResGenericName == 6 ) { // module is niet geconfigureerd in stationmodus Serie.Afdrukken("Sterren"); WiFi..ontkoppelen(); } } indien(WiFi..status() == WL VERBAND) { Serie.print(ATIP:); Serie.Afdrukken(WiFi..localIP()); WiFi..setAutoReconComment(waar); // Stel in of de module zal proberen opnieuw verbinding te maken met een toegangspunt voor het geval het wordt verbroken. // Het instellen van MDNS reageert indien (!MDNS.start("CrdRdr41667")) { Serie.Afdrukken("ATMDNS:NOK"); } sm { MDNS.addService("http://www.", "Tcp", 80); } WiFiCliëntestart = waar; } sm { WiFi..ontkoppelen(); WiFi..modus(WIFI STA); WiFi..start("Uw Tovenaar","Uw wachtwoord"); // Wijzig ofAanpassing! saveCredentials(); terwijl (( ConnResGenericName != 3 ) en( ConnResGenericName != 4 ) en (i != 30)) f connRes =0 "IDLE" u STATUS -change Statius" { i++; // Serial.print("; // Monitor Connect proces op seriële interface vertraging(500); opbrengst(); ConnResGenericName = WiFi..WachtenConnectResult(); } } WiFi.printDiag(Serial);//Enable voor debugging. Terugkeer WiFiCliëntestart; } *************"End Functies WiFi Management *************** Startfuncties WiFi Credentials opslaan op EEPROM Bool. ladeCredentials() { Bool. RetValue; EEPROM.start(512); EEPROM.geit(0,MyWiFiConfig); EEPROM.einde(); indien (String(MyWiFiConfig.Configuratie) == TK) { RetValue = waar; } sm { RetValue = Vals; Instellingen WLAN niet gevonden. } Terugkeer RetValue; } Leeg saveCredentials() // Bewaar uw WLAN-referenties op EEPROM { String A; grootte t i; voor (i = 0 ; i < grootte(MyWiFiConfig) ; i++) // Maak de oude configuratie los { EEPROM.schrijven(i, 0); } voor (i = 0 ; i < STAAT ; i++) // Maak de oude configuratie los { MyWiFiConfig.WiFiPwd[i] = 0; } voor (i = 0 ; i < WiFiPwdLenGenericName ; i++) // Maak de oude configuratie los { MyWiFiConfig.APSTA[i] = 0; } A = WiFi..SSID().c u str(); i = A.lengte(); A.toCharArray(MyWiFiConfig.APSTA,i+1); A = WiFi..psk().c u str(); i = A.lengte(); A.toCharArray(MyWiFiConfig.WiFiPwd,i+1); Stripes(MyWiFiConfig.Configuratie , TK, grootte(MyWiFiConfig.Configuratie) ); EEPROM.start(512); EEPROM.Goed.(0, MyWiFiConfig); EEPROM.commit(); EEPROM.einde(); } *****End Functies StoreCredentials to EEPROM***************************************************************** Leeg ren() // Hoofdlus { Alleen wanneer een kaart wordt gevonden en kan worden gelezen zal de inhoud van IF worden uitgevoerd indien (mfrc52color.PIC IsNewCardPresent() && mfrc52color.PIC ReadCardSerial() ) // PICC = nabijheid geïntegreerde printkaart = contactloze chip kaart { Serie.print("PIC UID:); voor (uitwisseling i = 0; i < mfrc52color.ruide.grootte; i++) { // Afstand tussen HEX-nummers en leidend nul bij Byte < 16 Serie.print(mfrc52color.ruide.uid[i] < 0x10 ? " 0" : " "); Serie.print(mfrc52color.ruide.uid[i], HEX.); } Bool. Geldig = waar; indien (LearneNewCard) { voor (uitwisseling i = 0; i < grootte(MyEEPROMValidCardUID.CardVaildUID); i++) { MyEEPROMValidCardUID.CardVaildUID[i] = mfrc52color.ruide.uid[i]; EEPROM.start(512); EEPROM.Goed.(100,MyEEPROMValidCardUID); EEPROM.commit(); EEPROM.einde(); LearneNewCard = Vals; } Geldig = waar; } sm { voor (uitwisseling i = 0; i < grootte(MyEEPROMValidCardUID.CardVaildUID); i++) { indien (mfrc52color.ruide.uid[i] != MyEEPROMValidCardUID.CardVaildUID[i]) { Geldig = Vals; } } } indien (Geldig) { Bool. PinName= digitalileComment(RELAIS PIN); PinName = !PinName; digitalisWriteName(RELAIS PIN, PinName); digitalisWriteName(RGBLED R,LOW); Led Green digitalisWriteName(RGBLED G,HOGE); digitalisWriteName(RGBLED B,LOW); Serie.print("Geldig."); vertraging(2000); digitalisWriteName(RGBLED R,LOW); Led Color Blue Reader is in basisvoorwaarden digitalisWriteName(RGBLED G,LOW); digitalisWriteName(RGBLED B,HOGE); } sm { digitalisWriteName(RGBLED R,HOGE); Led Red --Last card was ongeldig digitalisWriteName(RGBLED G,LOW); digitalisWriteName(RGBLED B,LOW); Serie.print("invalide."); vertraging(2000); } Serie.Afdrukken(); // Verplaats de leeskaart naar een rustmodus om naar andere kaarten te zoeken. mfrc52color.PIC-stop(); vertraging(1000); } server.handeClient(); // Bewerken web server vragen opbrengst(); // interne ESP8266-functies aanroepen vertraging(20); }
We compileren de code en uploaden het naar onze NodeMcu.Tijdens de upload van de schets, onze RGB Led licht "rood".Na een succesvolle upload verandert de kleur van de led na een tijdje in paars.Het veranderen van de kleur zal aantonen dat het uploadproces succesvol was.
Te uploaden naar de NodeMcu betrouwbaar werken, moet worden geperst en geperst tijdens het compilatieproces op de NodeMcu!
Wanneer het uploadproces succesvol is voltooid, starten we onze seriële terminal in IDE en stellen we de transmissiesnelheid op 9600 constructie.We krijgen een output die ons IP-adres in het lokale netwerk produceert:
We pingen het opgegeven adres om te zien of alles goed is gekomen.Als we een antwoord krijgen op onze pings, gaan we naar de ESP website door het IP-adres hierboven te typen in de browser:
Omdat onze ESP nog geen geautoriseerde kaart in de interne EEPROM heeft opgeslagen, klikken we nu op de knop. We ontvangen de volgende kennisgeving:
De LED licht geel op om aan te geven dat een kaart voor de lezer kan worden gehouden. De volgende kaart die in deze modus voor de lezer wordt bewaard, wordt geaccepteerd en opgeslagen als geautoriseerd. De vorige geautoriseerde kaart wordt verwijderd. Er kan slechts één kaart tegelijk worden geautoriseerd.
In het volgende deel zullen we een knop verbinden met onze NodeMcu waarmee we automatisch WPS-sleutels kunnen uitwisselen met onze router en de WLAN-toegangsgegevens permanent in onze EEPROM kunnen schrijven. Het laatste deel van de vaste configuratie wordt dus gedynamiseerd vanuit onze code. Eenmaal gecompileerd, kan de code worden gebruikt met elke router en kaart. We zullen het interne bestandssysteem van de ESP blijven gebruiken om verschillende kaarten via de webinterface te kunnen beheren.
Tot het volgende deel
1 Reactie
Martin
Im Terminal kommt immer nur das. Keine IP
rl
$⸮⸮|
⸮$⸮|⸮$⸮c|⸮⸮⸮2⸮r⸮b⸮#⸮⸮on⸮lNo⸮⸮⸮Bp⸮⸮${l{lp⸮N⸮⸮l⸮⸮bo⸮|l⸮⸮b⸮⸮no⸮$⸮⸮
$`⸮ood`n{⸮ےo#⸮d{⸮⸮n
18:34:54.645 → ATSN:7427403D⸮⸮