Server – Documentation ESP8266 Arduino Core – Serveur d’impression
La configuration Web d'un serveur sur l'ESP8266 nécessite très peu de code et est étonnamment simple. C’est grâce aux fonctionnalités fournies par la bibliothèque polyvalente ESP8266WiFi.
Le but de cet exemple sera de préparer une page Web pouvant être ouverte dans un navigateur Web. Cette page doit indiquer la lecture brute actuelle de la broche d’entrée analogique de l’ESP.
Sommaire
L'object
Nous allons commencer par créer un objet serveur.
Le serveur répond aux clients (dans ce cas, les navigateurs Web) sur le port 80, qui est un port standard. Les navigateurs Web communiquent avec les serveurs Web.
La page
Puis écrivons une courte fonction prepareHtmlPage ()
, qui retournera un Chaîne
variable de classe contenant le contenu de la page Web. Nous allons ensuite transmettre cette variable au serveur pour la transmettre à un client.
Chaîne prepareHtmlPage()
Chaîne htmlPage =
Chaîne("HTTP / 1.1 200 OK r n") +
"Type de contenu: text / html r n" +
"Connexion: proche r n" + // la connexion sera fermée après l'achèvement de la réponse
"Actualiser: 5 r n" + // actualise la page automatiquement toutes les 5 secondes
" r n" +
"" +
"" +
"Entrée analogique:" + Chaîne(analogiqueRead(A0)) +
"" +
" r n";
revenir htmlPage;
La fonction ne fait rien d'extraordinaire mais rassemble simplement un en-tête de texte et le contenu HTML de la page.
La page est servie
La diffusion de cette page Web se fera dans le boucle()
où le serveur attend qu'un nouveau client se connecte et envoie des données contenant une requête:
vide boucle()
WiFiClient client = serveur.disponible();
si (client)
// nous avons un nouveau client qui envoie une requête
Une fois qu'un nouveau client est connecté, le serveur lira la demande du client et l’imprimera sur un moniteur série.
tandis que (client.lié())
si (client.disponible())
Chaîne ligne = client.readStringUntil(' r')
En série.impression(ligne)
La demande du client est marquée par une nouvelle ligne vide. Si nous trouvons cette marque, nous pouvons renvoyer la page Web et quitter. tandis que()
boucle en utilisant Pause
.
si (ligne.longueur() == 1 && ligne[[[[0] == ' n')
client.imprimer(prepareHtmlPage());
Pause;
L'ensemble du processus est terminé en arrêtant la connexion avec le client:
Mettre ensemble
Le croquis complet est présenté ci-dessous.
#comprendre
const carboniser* ssid = "********";
const carboniser* mot de passe = "********";
WiFiServer serveur(80)
vide installer()
En série.commencer(115200)
En série.imprimer();
En série.printf("Connexion à% s", ssid)
Wifi.commencer(ssid, mot de passe)
tandis que (Wifi.statut() ! = WL_CONNECTED)
retard(500)
En série.impression(".")
En série.imprimer(" lié")
serveur.commencer();
En série.printf("Le serveur Web a démarré, ouvrez% s dans un navigateur Web n", Wifi.localIP()toString()c_str());
// prépare une page Web à envoyer à un client (navigateur Web)
Chaîne prepareHtmlPage()
Chaîne htmlPage =
Chaîne("HTTP / 1.1 200 OK r n") +
"Type de contenu: text / html r n" +
"Connexion: proche r n" + // la connexion sera fermée après l'achèvement de la réponse
"Actualiser: 5 r n" + // actualise la page automatiquement toutes les 5 secondes
" r n" +
"" +
"" +
"Entrée analogique:" + Chaîne(analogiqueRead(A0)) +
"" +
" r n";
revenir htmlPage;
vide boucle()
{
WiFiClient client = serveur.disponible();
// attend qu'un client (navigateur Web) se connecte
si (client)
En série.imprimer(" n[Client connected]")
tandis que (client.lié())
// lit ligne par ligne ce que le client (navigateur Web) demande
si (client.disponible())
Chaîne ligne = client.readStringUntil(' r')
En série.impression(ligne)
// attend la fin de la demande du client, qui est marquée avec une ligne vide
si (ligne.longueur() == 1 && ligne[[[[0] == ' n')
client.imprimer(prepareHtmlPage());
Pause;
retard(1) // donne le temps au navigateur Web pour recevoir les données
// ferme la connexion:
client.Arrêtez();
En série.imprimer("[Client disonnected]")
}
Faites-le courir
Mise à jour ssid
et mot de passe
dans l'esquisse pour faire correspondre les informations d'identification de votre point d'accès. Chargez l'esquisse sur le module ESP et ouvrez un moniteur série. Tout d'abord, vous devriez voir la confirmation que le module connecté au point d'accès et au serveur Web a démarré.
De liaison à capteur-net ........ lié
la toile serveur commencé, ouvert 192.168.1.104 dans une la toile navigateur
Entrez l'adresse IP fournie dans un navigateur Web. Vous devriez voir la page servie par ESP8266:
La page serait actualisée toutes les 5 secondes. Chaque fois que cela se produit, une requête du client (votre navigateur Web) doit être imprimée sur le moniteur série:
[[[[Client lié]
OBTENIR / HTTP/1.1
Acceptez: texte/html, application/xhtml+xml, * / *
Acceptez-La langue: en-NOUS
Utilisateur-Agent: Mozilla/5.0 (les fenêtres NT 6.1; WOW64; Trident/7,0; VR:11.0) comme Gecko
Acceptez-Codage: gzip, dégonfler
Hôte: 192.168.1.104
DNT: 1
Lien: Garder-Vivant
[[[[client déconnecté]
Quoi d'autre?
Se penche sur exemples de clients vous découvrirez rapidement les similitudes de protocole avec le serveur. Le protocole commence par un en-tête contenant des informations sur la communication. Il contient quel type de contenu est communiqué ou accepté comme texte / html
. Il indique si la connexion sera maintenue ou fermée après la soumission de l'en-tête. Il contient l'identification de l'expéditeur comme Agent utilisateur: Mozilla / 5.0 (Les fenêtres NT 6.1)
, etc.
Conclusion
L'exemple ci-dessus montre qu'un serveur Web sur l'ESP8266 peut être configuré en un rien de temps. Un tel serveur peut facilement répondre aux demandes de matériel et de logiciels beaucoup plus puissants, tels qu'un PC doté d'un navigateur Web. Découvrez d'autres classes comme ESP8266WebServer qui vous permettent de programmer des applications plus avancées.
Si vous souhaitez essayer un autre exemple de serveur, consultez WiFiWebServer.ino, qui offre la fonctionnalité d'activation et de désactivation de la broche GPIO à partir d'un navigateur Web.
Pour la liste des fonctions fournies pour implémenter et gérer les serveurs, veuillez vous référer à la Classe de serveur Documentation.
Commentaires
Laisser un commentaire