Zugangsbeschränkung zu Geräten per RFID-Card Teil 2 - AZ-Delivery

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

Esp-8266Projekte für fortgeschrittene

1 Reactie

Martin

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⸮⸮

Laat een reactie achter

Alle opmerkingen worden voor publicatie gecontroleerd door een moderator

Aanbevolen blogberichten

  1. ESP32 jetzt über den Boardverwalter installieren - AZ-Delivery
  2. Internet-Radio mit dem ESP32 - UPDATE - AZ-Delivery
  3. Arduino IDE - Programmieren für Einsteiger - Teil 1 - AZ-Delivery
  4. ESP32 - das Multitalent - AZ-Delivery