Une fois que nous avons défini le matériel dans la première partie et que nous avons la possibilité d 'utiliser une carte pour Commuter fermement le relais, nous avons fait don à notre ESP, dans la deuxième partie de la série, de la première interface d' opérateur pour exécuter les tâches de configuration autour du lecteur de carte.Le site Web a été élargi d'une partie à l'autre et doté de fonctions supplémentaires.
Informations fournies Première partie.
Al, tout d'abord, nous devons adapter le WLAN local à nos besoins dans les lignes suivantes du Code:
Réseau sans fil.Allez.(Votre guide,Votre mot de passe);
Nous avons téléchargé le code suivant à nodemcu:
"35; y compris <Protéine de séparation de soja.Heure> "35; y compris <Mfrc522..Heure> "35; y compris <Esp8266wifi.Heure> / '35; y compris & lt; wificlient.h & gt; "35; y compris <Serveur Web esp8266.Heure> "35; y compris <Esp8266mdn.Heure> "35; y compris <Mémoire morte programmable à effacement électrique.Heure> \ 35; définitions Rst 5 / / SPI Reset Lead (D1 output) \ 35; définitions Relais 16 / / relais (d0 output) [faible activation] - led interne à proximité du port USB \ 35; définitions Poignée SS - U 15 / / SPI sélectionne le pied de tuyau d 'un machine \ 35; définitions Mélangeur 2 / / Rouge (sortie D4) \ 35; définitions Mix G 0 / / vert (D3 output), il y a également des del internes sur le module ESP \ 35; définitions Mix B 4 / / bleu (sortie D2) \ 35; définitions Vivip Dren 25 / / longueur maximale du mot de passe WiFi \ 35; définitions Pays 20 / / longueur maximale de service WiFi \ 35; définitions Esphost 20 / / nombre maximum de caractères esphost \ 35; définitions Del intégrée 16 \ 35; définitions SDA 4 \ 35; définitions Câblage 5 Mfrc522. Mfrc 522(Poignée SS - U, Rst); / / créer l 'exemple mfrc522 Mfrc522.::Clé mifare La clé.; Serveur Web esp8266 Serveur Web(80); / / créer un exemple de serveur Web Strict Réseau sans fil { Brûler Esphost[Esphost]; Brûler Flying Sky[Pays]; / / nom de station à connecter (si défini) Brûler Wifipwd[Vivip Dren]; / / wifipassword, si tel est le cas Brûler Configuration[3]; / / si la configuration est disponible, il faut marquer "Tk" }; Strict Picardip { Brûler Kadwidod[4]; Brûler Réserves[4]; }; Réseau sans fil Bâtard; Picardip Myéliome; Bourg Résultats = Faux; Bourg Leernaward = Faux; Nullité Set() { Mode pinmode(Rst,Output); écriture numérique(Rst,Haut); Mode pinmode(Relais,Output); Mode pinmode(Mélangeur,Output); Mode pinmode(Mix G,Output); Mode pinmode(Mix B,Output); écriture numérique(Relais,Haut); Relais inactif écriture numérique(Mélangeur,Bas); / / membre australien écriture numérique(Mix G,Bas); écriture numérique(Mix B,Bas); Télécharger.Allez.(9600); / / initialisation de communications en série avec pc Production(); Télécharger.Imprimer(Dépoussiéreur électrostatique.Gechipid()); Protéine de séparation de soja.Allez.(); / / initialisation de communications spi écriture numérique(Rst,Bas); Résultats = Startwificlite(); Production(); Mémoire morte programmable à effacement électrique.Allez.(512); Mémoire morte programmable à effacement électrique.Caprin(100,Myéliome); / / la carte valide sera enregistrée à partir de l 'adresse 100 Mémoire morte programmable à effacement électrique.Fin(); Initialisation de httpserver(); écriture numérique(Rst,Haut); Mfrc 522.PCD Reset(); Mfrc 522.Initialisation de CD(); / / module de lecture mfrc522 initialisé Mfrc 522.Antenne PCD - U(); Production(); écriture numérique(Mélangeur,Haut); Purple initiation complete écriture numérique(Mix G,Bas); écriture numérique(Mix B,Haut); } Serveur Web de fonction de démarrage Nullité Hand() { } Nullité Pied() Page d 'accueil { Chaîne de caractères Personnel temporaire =""; Si (Serveur Web.Khasarg(Carte d 'identité) ) / / redémarrer le système { Personnel temporaire = "Montrez la carte au lecteur, s' il vous plaît."; Serveur Web.Envoyer ( 200, « texte / html », Personnel temporaire ); écriture numérique(Mélangeur,Haut); Mode de programmation jaune écriture numérique(Mix G,Haut); écriture numérique(Mix B,Bas); Leernaward = Vraiment?; Serveur Web.Client().Arrêter(); } Serveur Web.Tête de transmission(« commande de cache », Pas de cache, pas de mémoire, il faut vérifier); Serveur Web.Tête de transmission(Prague, Pas de cache); Serveur Web.Tête de transmission("Expirez.", "-1"); Serveur Web.Définir la longueur du contenu(Contenu inconnu); / / html Serveur Web.Envoyer ( 200, « texte / html », Personnel temporaire ); / enregistrer - Envoyer à cleint Personnel temporaire = ""; Personnel temporaire += "& lt?DocType = html & gt; & lt; HTML; HTML = lang = de 'de' & gt; & lt; Head & gt; & lt; meta = charset = 'UTF - 8' & gt; & lt; & LTA; meta = name = viewport = content = with = dwith = device with, initial = Scale = 1,0, & gtt; & lt; meta = charset = 'UTF - 8' & gt; & & lt; meta; meta = viewport = content = content = content = content = with = DD = Device = with, inial = Scale = 1,0 '& & gtgt c'est vrai.; Serveur Web.Envoi de contenu(Personnel temporaire); Personnel temporaire = ""; Personnel temporaire += "& lt; type =" text / CSS "& gt; & lt;!- -div.container {hauteur minimale: 10 em; affichage: cellules de tableau; alignement vertical: intermédiaire} bouton {hauteur: 35 Px; largeur: 90 Px; taille de la police: 16 Px}; Serveur Web.Envoi de contenu(Personnel temporaire); Personnel temporaire = ""; Personnel temporaire += "Texte {couleur de fond: bleu rose;} & lt; / styles & gt;;"; Personnel temporaire += "& lt; titres & gt; & lt; titres & gt; lecteurs de cartes rc522 & lt; / title & gt; & lt; / Head & gt;;"; Personnel temporaire += "& lt; h2 & gt; configuration rc522 & lt des lecteurs de cartes; / H2 & gt;"; Personnel temporaire += "& lt; texte & gt;"; Serveur Web.Envoi de contenu(Personnel temporaire); Personnel temporaire = ""; Personnel temporaire += "& lt; opération de formulaire =" / "= Méthode =" Post "& gt;"; Personnel temporaire += "& lt; Button = TYPE =" submit "name =" authcard "value =" 1 "style =" Altitude: 50px; largeur: 200px "& gt; autorisation de la prochaine mappage à leser & lt; / button & gt;;"; Personnel temporaire += "& lt; / formulaires & gt;"; Serveur Web.Envoi de contenu(Personnel temporaire); Personnel temporaire = ""; Serveur Web.Client().Arrêter(); } Nullité Initialisation de httpserver() { Bourg Initial = Faux; Serveur Web.Oui.("/", Pied); Serveur Web.Introuvable ( Hand ); Serveur Web.Allez.(); Démarrage du serveur / / web } * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Bourg Startwificlite() { Bourg Wificlientstarted = Faux; Dimension A0 valeur ADC = 0; échanger Moi. = 0; échanger Connors = 0; Http: / / serial.setdebugoutput (vrai); et / enable pour la mise en page. Réseau sans fil.Nom d 'hôte("Crrdr 41667."); Réseau sans fil.Déconnexion(Vraiment?); Réseau sans fil.Déconnecter(); Réseau sans fil.Mode(Site WiFi); Si(Document de chargement()) { Réseau sans fil.Allez.(Bâtard.Flying Sky, Bâtard.Wifipwd); Bien que (( Connors != 3 ) Et( Connors != 4 ) Et (Moi. != 30)) / / si connres = 0 "libre" U - Modifier Statius { Moi.++; / / serial.print ("); / surveillance des processus de connexion sur les interfaces en série Retarder(500); Production(); Connors = Réseau sans fil.Attendre le résultat de la connexion(); } Si (Connors == 4 ) { / / si le mot de passe est incorrect Télécharger.Imprimer("Atwifi: pwder"); Réseau sans fil.Déconnecter(); } Si (Connors == 6 ) { / / aucun module de configuration en mode Station Télécharger.Imprimer(Les étoiles.); Réseau sans fil.Déconnecter(); } } Si(Réseau sans fil.Statut() == Connexion WL) { Télécharger.Imprimer(ATIP:); Télécharger.Imprimer(Réseau sans fil.Localisation()); Réseau sans fil.Paramétrer la connexion automatique(Vraiment?); Le module de réglage / Réponse mdns installée Si (!MDN.Allez.("Crrdr 41667.")) { Télécharger.Imprimer("Atmdns: non qualifié"); } Heure de départ prévue { MDN.Service d 'adresses("Http: / / www., "Protocole TCP", 80); } Wificlientstarted = Vraiment?; } Heure de départ prévue { Réseau sans fil.Déconnecter(); Réseau sans fil.Mode(Site WiFi); Réseau sans fil.Allez.(Votre guide,Votre mot de passe); / / modifier ouAdaptation! Conservation des documents(); Bien que (( Connors != 3 ) Et( Connors != 4 ) Et (Moi. != 30)) / / si connres = 0 "libre" U - Modifier Statius { Moi.++; / / serial.print ("); / surveillance des processus de connexion sur les interfaces en série Retarder(500); Production(); Connors = Réseau sans fil.Attendre le résultat de la connexion(); } } / wifi.prinndiag (Serial); activation de la mise en service. Retour Wificlientstarted; } * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Démarrage d 'une fonction permettant de stocker des fichiers wifi dans EEPROM Bourg Document de chargement() { Bourg Réévaluation; Mémoire morte programmable à effacement électrique.Allez.(512); Mémoire morte programmable à effacement électrique.Caprin(0,Bâtard); Mémoire morte programmable à effacement électrique.Fin(); Si (Chaîne de caractères(Bâtard.Configuration) == Connaissances traditionnelles) { Réévaluation = Vraiment?; } Heure de départ prévue { Réévaluation = Faux; / / aucun paramètre WLAN n 'est trouvé. } Retour Réévaluation; } Nullité Conservation des documents() / / stockage de documents WLAN sur EEPROM { Chaîne de caractères Un.; Dimension Moi.; Pour (Moi. = 0 ; Moi. < Taille(Bâtard) ; Moi.++) / / déconnecter l 'ancienne configuration { Mémoire morte programmable à effacement électrique.Ecrire(Moi., 0); } Pour (Moi. = 0 ; Moi. < Pays ; Moi.++) / / déconnecter l 'ancienne configuration { Bâtard.Wifipwd[Moi.] = 0; } Pour (Moi. = 0 ; Moi. < Vivip Dren ; Moi.++) / / déconnecter l 'ancienne configuration { Bâtard.Flying Sky[Moi.] = 0; } Un. = Réseau sans fil.SSID.().C) Structure U(); Moi. = Un..Longueur(); Un..Tochalare(Bâtard.Flying Sky,Moi.+1); Un. = Réseau sans fil.PSK().C) Structure U(); Moi. = Un..Longueur(); Un..Tochalare(Bâtard.Wifipwd,Moi.+1); Rayure(Bâtard.Configuration , Connaissances traditionnelles, Taille(Bâtard.Configuration) ); Mémoire morte programmable à effacement électrique.Allez.(512); Mémoire morte programmable à effacement électrique.D'accord.(0, Bâtard); Mémoire morte programmable à effacement électrique.Crime(); Mémoire morte programmable à effacement électrique.Fin(); } Fonctions de clôture: storecredentials à EPROM Nullité Run() Circuit principal { / / l 'exécution du contenu de l' if n 'est effectuée que si l' image est trouvée et lue Si (Mfrc 522.Com.NET.CN zhongguorenminbaoxiangufenyouxiangongsi.com.NET.CN zgrmybxgfyxgs.com.NET.CN() && Mfrc 522.PICC série de cartes() ) / / PIC = carte à circuit intégré de proximité = carte à puce sans contact { Télécharger.Imprimer("China People 's Insurance Company unid:); Pour (échanger Moi. = 0; Moi. < Mfrc 522.Guide.Taille; Moi.++) { / / distance entre le nombre de bits et le nombre de bits avant zéro & lt; Télécharger.Imprimer(Mfrc 522.Guide.Byte unitaire[Moi.] < 0x10. ? " 0" : " "); Télécharger.Imprimer(Mfrc 522.Guide.Byte unitaire[Moi.], XVI); } Bourg Ça marche. = Vraiment?; Si (Leernaward) { Pour (échanger Moi. = 0; Moi. < Taille(Myéliome.Kadwidod); Moi.++) { Myéliome.Kadwidod[Moi.] = Mfrc 522.Guide.Byte unitaire[Moi.]; Mémoire morte programmable à effacement électrique.Allez.(512); Mémoire morte programmable à effacement électrique.D'accord.(100,Myéliome); Mémoire morte programmable à effacement électrique.Crime(); Mémoire morte programmable à effacement électrique.Fin(); Leernaward = Faux; } Ça marche. = Vraiment?; } Heure de départ prévue { Pour (échanger Moi. = 0; Moi. < Taille(Myéliome.Kadwidod); Moi.++) { Si (Mfrc 522.Guide.Byte unitaire[Moi.] != Myéliome.Kadwidod[Moi.]) { Ça marche. = Faux; } } } Si (Ça marche.) { Bourg Aiguille= Lecture numérique(Relais); Aiguille = !Aiguille; écriture numérique(Relais, Aiguille); écriture numérique(Mélangeur,Bas); / / LED vert écriture numérique(Mix G,Haut); écriture numérique(Mix B,Bas); Télécharger.Imprimer("Valide."); Retarder(2000); écriture numérique(Mélangeur,Bas); Les lecteurs de cartes bleues / LED sont presque normaux. écriture numérique(Mix G,Bas); écriture numérique(Mix B,Haut); } Heure de départ prévue { écriture numérique(Mélangeur,Haut); / / LED rouge - la dernière carte n 'est pas valable écriture numérique(Mix G,Bas); écriture numérique(Mix B,Bas); Télécharger.Imprimer("Nul".); Retarder(2000); } Télécharger.Imprimer(); / / déplace la carte lue en mode statique pour rechercher d 'autres cartes. Mfrc 522.Arrêt PICC.(); Retarder(1000); } Serveur Web.Secouer(); / / Éditer la requête du serveur Web Production(); / / appel interne esp8266, fonction Retarder(20); }
Nous compilons le Code et le Téléchargeons à nodemcu.Pendant le téléchargement, nos lampes RGB LED ont allumé "rouge".Lorsque le téléchargement réussit, la couleur de la del devient violette après un certain temps.Modifier la couleur affiche le succès du processus de téléchargement.
Téléchargez à nodemcu. Fiable Dans la compilation de nodemcu, il faut appuyer et appuyer!
Une fois le processus de téléchargement achevé, nous lançons le terminal série dans l 'IDE et réglons la vitesse de transmission à une configuration de 9600.Nous avons une sortie, une adresse IP dans un réseau local:
Nous allons faire la liste des adresses pour voir si tout va bien.Lorsque nous aurons la réponse de Ping, nous pourrons accéder au site Web ESP en saisissant l 'adresse IP ci - dessus dans le navigateur:
Comme notre ESP n 'a pas encore enregistré la carte d' autorisation dans l 'EEPROM interne, nous cliqueons maintenant sur ce bouton.Nous avons reçu les informations suivantes:
La lampe d 'affichage à del est jaune, ce qui signifie qu' il y a une carte devant le lecteur de carte.La carte suivante enregistrée selon ce mode devant le lecteur de carte est acceptée et enregistrée en tant que carte d 'autorisation.La carte d 'autorisation précédente sera supprimée.Une seule carte ne peut être autorisée qu'une seule fois.
Dans la prochaine partie, nous allons connecter un bouton à notre nodemcu avec lequel nous pouvons échanger automatiquement les clés WPS avec le routeur et inscrire les données d 'accès WLAN dans notre EEPROM de façon permanente.Ainsi, la dernière partie de la configuration fixe est également dynamisée à partir de notre Code.Ainsi, une fois compilé, le Code peut être utilisé avec n 'importe quel routeur ou mappage.Nous continuerons d'utiliser le système de fichiers internes de l'esp pour gérer plusieurs cartes au moyen de l'interface Web.
Jusqu'à la prochaine partie.
1 commentaire
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⸮⸮