{"version":"1.1","schema_version":"1.1.0","plugin_version":"1.1.2","url":"https://tutos-gameserver.fr/2020/05/01/comprendre-la-programmation-du-serveur-web-avec-le-code-arduino-bien-choisir-son-serveur-d-impression/","llm_html_url":"https://tutos-gameserver.fr/2020/05/01/comprendre-la-programmation-du-serveur-web-avec-le-code-arduino-bien-choisir-son-serveur-d-impression/llm","llm_json_url":"https://tutos-gameserver.fr/2020/05/01/comprendre-la-programmation-du-serveur-web-avec-le-code-arduino-bien-choisir-son-serveur-d-impression/llm.json","manifest_url":"https://tutos-gameserver.fr/llm-endpoints-manifest.json","language":"fr-FR","locale":"fr_FR","title":"comprendre la programmation du serveur Web avec le code Arduino\n\n &#8211; Bien choisir son serveur d impression","site":{"name":"Tutos GameServer","url":"https://tutos-gameserver.fr/"},"author":{"id":1,"name":"Titanfall","url":"https://tutos-gameserver.fr/author/titanfall/"},"published_at":"2020-05-01T11:16:34+00:00","modified_at":"2020-05-01T11:16:34+00:00","word_count":3143,"reading_time_seconds":943,"summary":"RecordEnregistréEffacé 4 L&#39;ESP8266 peut être programmé comme un Arduino classique mais son principal intérêt est sa connexion Wi-Fi qui lui permet de publier des données sur un serveur ou un tableau de bord en ligne (ThingSpeak, Freeboard.io), ou de créer facilement des objets connectés qui peuvent être contrôlés à partir d&#39;un serveur domotique ou application [&hellip;]","summary_points":["RecordEnregistréEffacé 4 \n\n\n\n\n\n\n\n\n\n\n\n\n\n\nL&#39;ESP8266 peut être programmé comme un Arduino classique mais son principal intérêt est sa connexion Wi-Fi qui lui permet de publier des données sur un serveur ou un tableau de bord en ligne (ThingSpeak, Freeboard.io), ou de créer facilement des objets connectés qui peuvent être contrôlés à partir d&#39;un serveur domotique ou application mobile (développé avec Blynk ou Cayenne par exemple).","Dans ce didacticiel, nous allons apprendre à programmer l&#39;ESP8266 pour qu&#39;il se comporte comme un serveur Web.","C&#39;est-à-dire que l&#39;on peut interagir avec le programme, le GPIO &#8230; à partir d&#39;une interface web accessible depuis un navigateur web.","Avant de commencer, il est nécessaire de vérifier que toutes les bibliothèques nécessaires sont installées."],"topics":["Serveur d'impression"],"entities":[],"entities_metadata":[{"id":10,"name":"Serveur d'impression","slug":"serveur-dimpression","taxonomy":"category","count":3907,"url":"https://tutos-gameserver.fr/category/serveur-dimpression/"}],"tags":["Serveur d'impression"],"content_hash":"ee5acda77f6072a4641e0aa0397920ee","plain_text":"RecordEnregistréEffacé 4 \n\n\n\n\n\n\n\n\n\n\n\n\n\n\nL&#39;ESP8266 peut être programmé comme un Arduino classique mais son principal intérêt est sa connexion Wi-Fi qui lui permet de publier des données sur un serveur ou un tableau de bord en ligne (ThingSpeak, Freeboard.io), ou de créer facilement des objets connectés qui peuvent être contrôlés à partir d&#39;un serveur domotique ou application mobile (développé avec Blynk ou Cayenne par exemple).\n\nDans ce didacticiel, nous allons apprendre à programmer l&#39;ESP8266 pour qu&#39;il se comporte comme un serveur Web. C&#39;est-à-dire que l&#39;on peut interagir avec le programme, le GPIO &#8230; à partir d&#39;une interface web accessible depuis un navigateur web.\nAvant de commencer, il est nécessaire de vérifier que toutes les bibliothèques nécessaires sont installées.\nhttps://arduino.esp8266.com/stable/package_esp8266com_index.json\nhttp://arduino.esp8266.com/stable/package_esp8266com_index.json\n\nVous pouvez regarder (par curiosité) les cartes gérées par la bibliothèque ESP8266 et coller l&#39;URL précédente dans un navigateur. En janvier 2017 (version 2.3.0), les cartes suivantes sont gérées:\n\nModule ESP8266 générique\nOlimex MOD-WIFI-ESP8266 (-DEV)\nNodeMCU 0.9 (module ESP-12)\nNodeMCU 1.0 (module ESP-12E)\nAdafruit HUZZAH ESP8266 (ESP-12)\nESPresso Lite 1.0\nESPresso Lite 2.0\nPhoenix 1.0\nPhoenix 2.0\nSparkFun Thing\nSweetPea ESP-210\nWeMos D1\nWeMos D1 mini\nESPino (module ESP-12)\nESPino (module WROOM-02)\nWifInfo\nESPDuino\n\nAllez au gestionnaire de cartes et regarde esp8266, puis cliquez sur installer.\n\nEn même temps que les cartes, toutes les bibliothèques nécessaires ainsi que de nombreux exemples sont installés. Si les exemples ne sont pas visibles dans le menu Fichier -&gt; Exemples -&gt; Exemples pour WeMos D1, quittez et relancez l&#39;IDE Arduino.\nNous allons aller étape par étape pour comprendre comment créer un serveur web sur un ESP8266. Ouvrez l&#39;exemple WiFiWebServer.\nNous avons besoin au moins de la bibliothèque ESP8266WiFi.h pour créer un serveur Web. Comme toutes les librairies, il faut creuser beaucoup pour découvrir les méthodes disponibles, voici un petit aperçu pour mieux comprendre ce que vous pouvez en faire. le code source de la bibliothèque est disponible ici. Cette bibliothèque est une adaptation de toutes les bibliothèques développées pour l&#39;Arduino. Vous pouvez également trouver beaucoup d&#39;informations ici\n\nWiFiClient\n\nuint8_t status ()\nint connect (IPAddress ip, port uint16_t)\nint connect (const char * host, uint16_t port)\ntaille_t écrire (uint8_t)\ntaille_t écrire (const uint8_t * buf, taille_t taille)\nsize_t write_P (PGM_P buf, size_t size)\ntaille_t écrire (Stream &amp; stream)\nint disponible ()\nlire (uint8_t * buf, size_t size)\nint peek ()\nsize_t peekBytes (tampon uint8_t *, taille size_t)\nsize_t peekBytes (char * buffer, size_t length)\nvoid flush ()\nvoid stop ()\nuint8_t connecté ()\nIPAddress remoteIP ()\nuint16_t remotePort ()\nIPAddress localIP ()\nuint16_t localPort ()\nbool getNoDelay ()\nvoid setNoDelay (bool nodelay)\nvoid setLocalPortStart (port uint16_t)\nstatique vide stopAll ();\nvide statique stopAllExcept (WiFiClient * c)\n\n\nWiFiServer\n\nWiFiServer (adresse IPAddress, port uint16_t)\nWiFiServer (port uint16_t)\nWiFiClient disponible (statut uint8_t * = NULL)\nbool hasClient ()\nvoid begin ()\nvoid setNoDelay (bool nodelay)\nbool getNoDelay ()\nécriture taille_t virtuelle (uint8_t)\nuint8_t status ()\nvoid close ()\nvoid stop ()\n\n\nWiFiUDP\nWiFiClientSecure\n\n#comprendre \nconst char * ssid = &quot;votre-ssid&quot;;\nconst char * password = &quot;votre-mot de passe&quot;;\nNous créons une instance, un objet qui contiendra le serveur Web. Nous communiquerons avec lui sur le port 80, le port classique pour les requêtes HTTP utilisées par les navigateurs Internet.\nServeur WiFiServer (80);\nLa boucle de configuration.\nvoid setup () \n// Ouverture du port série en 115200 bauds pour envoyer des messages de débogage à l&#39;IDE par exemple\nSerial.begin (115200);\nretard (10);\n\n// prépare GPIO2 (sortie)\npinMode (2, SORTIE);\ndigitalWrite (2, 0);\n\n// Se connecter au réseau WiFi\nSerial.println ();\nSerial.println ();\nSerial.print (&quot;Connexion à&quot;);\nSerial.println (ssid);\n\n// Nous nous connectons à un réseau WiFi avec le SSID et le mot de passe précédemment configurés\nWiFi.begin (ssid, mot de passe);\n\n// Nous ne quittons la boucle que lorsque la connexion a été établie.\n// Cette partie doit être améliorée pour le fonctionnement sur batterie car en l&#39;absence de réseau\n// on va vider la batterie!\nwhile (WiFi.status ()! = WL_CONNECTED) \nretard (500);\nSerial.print (&quot;.&quot;);\n\nSerial.println (&quot;&quot;);\nSerial.println (&quot;WiFi connecté&quot;);\n\n// connexion OK, on ​​démarre le serveur web // Démarrer le serveur\nserver.begin ();\nSerial.println (&quot;Serveur démarré&quot;);\n\n// On indique sur le port série l&#39;adresse IP de l&#39;ESP pour la retrouver facilement / Imprimer l&#39;adresse IP\nSerial.println (WiFi.localIP ());\n\nQue se passe-t-il dans la boucle de boucle?\nNous ne faisons quelque chose que si un client est connecté, c&#39;est-à-dire que nous faisons une requête HTTP sur l&#39;ESP8266 à partir d&#39;un navigateur Internet\nClient WiFiClient = server.available ();\nsi (! client) \nrevenir;\n\nLorsqu&#39;un client se connecte, il est indiqué sur le port série\nSerial.println (&quot;nouveau client&quot;);\nwhile (! client.available ()) \nretard (1);\n\nOn obtient la requête HTTP, ici l&#39;URL saisie simplement dans le navigateur. Le contenu de la requête HTTP est envoyé au port série. On vide le buffer avec la méthode affleurer.\nString req = client.readStringUntil (&amp; # 39;  r &amp; # 39;);\nSerial.println (req);\nclient.flush ();\nNous recherchons dans la requête HTTP ce qu&#39;il faut faire. La méthode la plus simple consiste à passer des commandes à l&#39;ESP8266 sous la forme d&#39;une commande du type / gpio / desire_state (0, 1 ou marche / arrêt). Nous allons juste faire un test sur une chaîne de caractères avec la commande indexOf sur la variable req. Ce type de stratégie convient aux petits projets mais il peut rapidement devenir une source d&#39;erreur avec l&#39;empilement de if, else if.\nint val;\nif (req.indexOf (&quot;/ gpio / 0&quot;)! = -1)\nval = 0;\nsinon if (req.indexOf (&quot;/ gpio / 1&quot;)! = -1)\nval = 1;\nautre \nSerial.println (&quot;demande non valide&quot;);\nclient.stop ();\nrevenir;\n\nNous mettons à jour l&#39;état GPIO et vider le tampon\ndigitalWrite (2, val);\nclient.flush ();\nNous créons maintenant une page HTML qui contient l&#39;état du GPIO. Il s&#39;agit d&#39;une chaîne de texte qui contient le code HTML de la page. On insère dans le code de la page, l&#39;état du GPIO\nChaîne s = &quot;HTTP / 1.1 200 OK  r  nContenu-Type: texte / html  r  n  r  n r  n r  nGPIO est maintenant &quot;;\ns + = (val)? &quot;haut&quot;: &quot;bas&quot;;\ns + = &quot;ne pas&quot;;\nNous publions cette page au client avec la commande d&#39;impression, très facile!\nclient.print (s);\nVoilà, vous pouvez désormais contrôler à distance tout matériel connecté au GPIO (un relais, une LED, un moteur, un servomoteur, etc.) à l&#39;aide d&#39;une simple requête HTTP. Vous pouvez par exemple exécuter très simplement une commande à partir d&#39;un logiciel domotique. Voici deux exemples, le premier pour Domoticz, le second pour Jeedom.\nMaintenant, vous aimeriez certainement pouvoir faire une petite interface pour vos projets ESP8266. Pour cela, nous devons connaître quelques notions de base du HTML. Nous n&#39;irons pas très loin dans l&#39;apprentissage du HTML, il suffit d&#39;apprendre les éléments importants pour débuter et avoir un projet fonctionnel. Si vous avez besoin de plus d&#39;éléments d&#39;interface, je recommande w3schools qui est une référence dans l&#39;apprentissage du HTML. Le site est en anglais mais il est très clair et très facile d&#39;accès.\nDans un projet ESP8266, nous pouvons créer des pages HTML dynamiques, c&#39;est-à-dire que nous construisons une chaîne de texte qui contient le code de la page que nous afficherons ensuite. C&#39;est ce que nous allons faire. Mais l&#39;ESP8266 est également capable de fonctionner comme un vrai site web, c&#39;est-à-dire qu&#39;on peut installer sur des pages HTML à mémoire flash, du code javascript, des feuilles de style CSS &#8230; On n&#39;ira pas aussi loin dans ce premier tutoriel.\nJe vous propose de créer une petite station météo pour avoir des données à mettre à jour régulièrement et de créer un bouton pour activer / désactiver une sortie GPIO (juste une LED par exemple). J&#39;ai utilisé le matériel suivant\nVoici un tableau de localisation et de correspondance des broches entre Arduino et ESP8266.\n\n\n\n\nComposant\nBroches\nÉquivalence ESP8266 (Wemos D1 mini)\n\n\nDHT22\nVCC\n5V\n\n\n\nGND\ng\n\n\n\nLes données\nG5\n\n\nBMP180\nVCC\n5V\n\n\n\nGND\ng\n\n\n\nSDA\nD2\n\n\n\n\n\n\n\nNous commençons par déclarer les bibliothèques nécessaires. N&#39;oubliez pas d&#39;installer les bibliothèques à partir du gestionnaire de bibliothèques (DHT et BMP085).\n\n\n\t\t\tRemarque. Vous pouvez rencontrer une erreur de compilation adafruit_Sensor.h: Aucun fichier ou répertoire de ce type. Dans ce cas, téléchargez et décompressez la bibliothèque manuellement depuis GitHub dans le dossier Arduino -&gt; Library, puis relancez l&#39;IDE pour qu&#39;il soit pris en compte.\n\t\t\t\n\n#comprendre \n#comprendre \n#comprendre \n#comprendre \n#comprendre \nNous définissons les variables du programme. Modifiez le réseau WiFi auquel vous allez vous connecter et le mot de passe correspondant.\n#define ssid &quot;ssid&quot; // WiFi SSID\n#define password &quot;password&quot; // mot de passe WiFi\n#define DHTTYPE DHT22 // type DHT (DHT11, DHT22)\n#define DHTPIN D4 // Broche DHT / Broche DHT\n#define LEDPIN D3 // Led\nflotteur t = 0;\nflotteur h = 0;\nflotteur p = 0;\nString etatLed = &quot;OFF&quot;;\nNous créons les objets dht, bmp et server\nDHT DHT (DHTPIN, DHTTYPE);\nAdafruit_BMP085 bmp;\nESP8266WebServer server (80);\nCette première fonction vous permet de construire le code HTML de la page principale du programme. C’est une simple chaîne de caractères. C’est un assemblage de chaînes. Vous pouvez facilement inclure la valeur ou l&#39;état d&#39;une variable (par exemple, l&#39;état d&#39;une sortie). En retour, la fonction renvoie une chaîne contenant le code HTML de la page.\nString getPage () \nPage de chaîne = &quot;&quot;;\npage + = &quot;Démo ESP8266 - www.projetsdiy.fr&quot;;\npage + = &quot;&quot;;\npage + = &quot;ESP8266 Demo&quot;;\npage + = &quot;DHT22&quot;;\npage + = &quot;Température : &quot;;\npage + = t;\npage + = &quot;° C&quot;;\npage + = &quot;Humidité : &quot;;\npage + = h;\npage + = &quot;%BMP180&quot;;\npage + = &quot;Pression atmosphérique : &quot;;\npage + = p;\npage + = &quot;mbar&quot;;\npage + = &quot;GPIO&quot;;\npage + = &quot;&quot;;\npage + = &quot;D3 (indiquer: &quot;;\npage + = etatLed;\npage + = &quot;)NOUS&quot;;\npage + = &quot;DE&quot;;\npage + = &quot;&quot;;\npage + = &quot;www.projetsdiy.fr&quot;;\npage + = &quot;&quot;;\npage de retour;\n\nVoyons un peu mieux comment le code est construit\n\n\n\n\nCode HTML\nExplication\n\n\n\n\n\nDémo ESP8266 &#8211; www.projetsdiy.fr\n\n\n\n\nlang : permet de définir la langue de la page\ntête : c&#39;est l&#39;en-tête de la page. Il contient différents méta (paramètres)\n\nhttp-equiv = ’refresh’: il s’agit d’une page que le navigateur devra actualiser. Pour plus de types, allez ici\ncontent = &quot;10&quot;: toutes les 10 secondes\n\nTitre : le titre de la page affiché dans la barre du navigateur\nstyle : un style pour la page (couleur de fond, police à utiliser, couleur du texte\n\n\n\n\nC&#39;est le contenu de la page affichée\n\n\n\nESP8266 Demo\n\nUn titre affiché en haut de la page\n\n\n\nDHT22\n\nUn titre (h3, plus petit) pour le capteur DHT22\n\n\n\n\nTempérature: xx ° C\nHumidité: xx%\n\n\nLe bloc ul permet d&#39;afficher comme liste information. La même chose pour le BMP180\n\n\n\n\n\nD3 (état: xx)\nNOUS\nDE\n\n\n\n\n\nPour mettre à jour le GPIO, nous utilisons un formulaire.\nIci, nous utilisons un bouton radio pour changer l&#39;état (On / Off) puis nous envoyons (soumettre) le contenu du formulaire avec un bouton.\nL&#39;option Nom vous permet de nommer la variable qui contiendra l&#39;état que vous souhaitez récupérer dans le code Arduino. Ici LED.\n\n\n\n\nToute balise ouverte doit être fermée (c&#39;est mieux!)\n\n\n\n\nLa fonction handleRoot vous permet de surveiller si vous recevez une demande d&#39;actualisation du GPIO en contrôlant si l&#39;argument LED est retourné par la page. Si c&#39;est le cas, nous exécutons la fonction handleSubmit. A nous de créer\nvoid handleRoot () \nif (server.hasArg (&quot;LED&quot;)) \nhandleSubmit ();\n autre \nserver.send (200, &quot;text / html&quot;, getPage ());\n\n\nLa fonction handleSubmit traite la mise à jour du GPIO. On obtient l&#39;état de la variable LED. Attention, c&#39;est une chaîne de caractères, il faut donc tester &quot;1&quot; et non 1. On en profite pour affecter l&#39;état du GPIO dans la variable etatLed sous forme de chaîne, c&#39;est plus amusant à lire . Enfin, nous mettons à jour l&#39;affichage de la page HTML avec server.send. Nous récupérons la page mise à jour en appelant la fonction getPage ().\nvoid handleSubmit () \n// Mettre à jour le GPIO / Mettre à jour le GPIO\nString LEDValue;\nLEDValue = server.arg (&quot;LED&quot;);\nSerial.println (&quot;Définir GPIO&quot;); Serial.print (LEDValue);\nif (LEDValue == &quot;1&quot;) \ndigitalWrite (LEDPIN, 1);\netatLed = &quot;On&quot;;\nserver.send (200, &quot;text / html&quot;, getPage ());\n else if (LEDValue == &quot;0&quot;) \ndigitalWrite (LEDPIN, 0);\netatLed = &quot;Off&quot;;\nserver.send (200, &quot;text / html&quot;, getPage ());\n autre \nSerial.println (&quot;Err Led Value&quot;);\n\n\nMaintenant que toutes les fonctions sont créées, nous pouvons appeler la fonction installer (). Il initialise le BMP180, la connexion WiFi, connecte la fonction qui s&#39;occupe de la page principale et enfin on lance le serveur web\nvoid setup () \nSerial.begin (115200);\n// Initialisation du BMP180 / Init BMP180\nif (! bmp.begin ()) \nSerial.println (&quot;BMP180 KO!&quot;);\ntandis que (1);\n autre \nSerial.println (&quot;BMP180 OK&quot;);\n\n\nWiFi.begin (ssid, mot de passe);\n// Attendre la connexion au réseau WiFi / Attendre la connexion\nwhile (WiFi.status ()! = WL_CONNECTED) \nretard (500); Serial.print (&quot;.&quot;);\n\n// Connexion WiFi établie / connexion WiFi OK\nSerial.println (&quot;&quot;);\nSerial.print (&quot;Connecté à&quot;); Serial.println (ssid);\nSerial.print (&quot;adresse IP:&quot;); Serial.println (WiFi.localIP ());\n\n// On branche la fonction qui gère la première page / lien vers la fonction qui gère la page de lancement\nserver.on (&quot;/&quot;, handleRoot);\n\nserver.begin ();\nSerial.println (&quot;Le serveur HTTP a démarré&quot;);\n\n\nIl ne reste plus qu&#39;à exécuter la fonction boucle () lire régulièrement les mesures sur les capteurs. Contrairement à l&#39;exemple précédent basé sur la bibliothèque ESP8266WiFi, voici la bibliothèque ESP8266WebServer nécessite de brancher la fonction de rappel server.handleClient () qui surveille la présence d&#39;un client et délivre la page HTML demandée.\nboucle vide () \nserver.handleClient ();\nt = dht.readTemperature ();\nh = dht.readHumidity ();\np = bmp.readPressure () / 100.0F;\nretard (1000);\n\nVoici le code source assemblé du projet que vous avez juste besoin de coller dans un nouveau projet, puis de le télécharger\n#comprendre \n#comprendre \n#comprendre \n#comprendre \n\n#define ssid &quot;xx&quot; // WiFi SSID\n#define password &quot;xxxxxx&quot; // Mot de passe WiFi\n#define DHTTYPE DHT22 // type DHT (DHT11, DHT22)\n#define DHTPIN D4 // Broche DHT / Broche DHT\n#define LEDPIN D3 // Led\nflotteur t = 0;\nflotteur h = 0;\nflotteur p = 0;\nString etatLed = &quot;OFF&quot;;\n\n// Créer des objets / créer des objets\nDHT DHT (DHTPIN, DHTTYPE);\nAdafruit_BMP085 bmp;\nESP8266WebServer server (80);\n\nString getPage () \nPage de chaîne = &quot;&quot;;\npage + = &quot;Démo ESP8266 - www.projetsdiy.fr&quot;;\npage + = &quot;&quot;;\npage + = &quot;ESP8266 Demo&quot;;\npage + = &quot;DHT22&quot;;\npage + = &quot;Température : &quot;;\npage + = t;\npage + = &quot;° C&quot;;\npage + = &quot;Humidité : &quot;;\npage + = h;\npage + = &quot;%BMP180&quot;;\npage + = &quot;Pression atmosphérique : &quot;;\npage + = p;\npage + = &quot;mbar&quot;;\npage + = &quot;GPIO&quot;;\npage + = &quot;&quot;;\npage + = &quot;D3 (indiquer: &quot;;\npage + = etatLed;\npage + = &quot;)&quot;;\npage + = &quot;NOUS&quot;;\npage + = &quot;DE&quot;;\npage + = &quot;&quot;;\npage + = &quot;www.projetsdiy.fr&quot;;\npage + = &quot;&quot;;\npage de retour;\n\nvoid handleRoot () \nif (server.hasArg (&quot;LED&quot;)) \nhandleSubmit ();\n autre \nserver.send (200, &quot;text / html&quot;, getPage ());\n\n\n\nvoid handleSubmit () \n// Mettre à jour le GPIO / Mettre à jour le GPIO\nString LEDValue;\nLEDValue = server.arg (&quot;LED&quot;);\nSerial.println (&quot;Définir GPIO&quot;); Serial.print (LEDValue);\nif (LEDValue == &quot;1&quot;) \ndigitalWrite (LEDPIN, 1);\netatLed = &quot;On&quot;;\nserver.send (200, &quot;text / html&quot;, getPage ());\n else if (LEDValue == &quot;0&quot;) \ndigitalWrite (LEDPIN, 0);\netatLed = &quot;Off&quot;;\nserver.send (200, &quot;text / html&quot;, getPage ());\n autre \nSerial.println (&quot;Err Led Value&quot;);\n\n\n\nvoid setup () \nSerial.begin (115200);\n// Initialisation du BMP180 / Init BMP180\nif (! bmp.begin ()) \nSerial.println (&quot;BMP180 KO!&quot;);\ntandis que (1);\n autre \nSerial.println (&quot;BMP180 OK&quot;);\n\n\nWiFi.begin (ssid, mot de passe);\n// Attendre la connexion au réseau WiFi / Attendre la connexion\nwhile (WiFi.status ()! = WL_CONNECTED) \nretard (500); Serial.print (&quot;.&quot;);\n\n// Connexion WiFi établie / connexion WiFi OK\nSerial.println (&quot;&quot;);\nSerial.print (&quot;Connecté à&quot;); Serial.println (ssid);\nSerial.print (&quot;adresse IP:&quot;); Serial.println (WiFi.localIP ());\n\n// On branche la fonction qui gère la première page / lien vers la fonction qui gère la page de lancement\nserver.on (&quot;/&quot;, handleRoot);\n\nserver.begin ();\nSerial.println (&quot;Le serveur HTTP a démarré&quot;);\n\n\n\nboucle vide () \nserver.handleClient ();\nt = dht.readTemperature ();\nh = dht.readHumidity ();\np = bmp.readPressure () / 100.0F;\nretard (1000);\n\nRécupérez l&#39;adresse IP de Wemos en ouvrant le moniteur série puis connectez-vous à partir d&#39;un navigateur Internet pour accéder à l&#39;interface de la mini station météo.\n\nVoilà, nous savons maintenant comment créer un serveur Web à l&#39;aide d&#39;un ESP8266, contrôler le GPIO et afficher les mesures des capteurs. Nous n&#39;avons vu ici que les principaux rudiments pour commencer, mais ils couvrent déjà une grande partie de ce dont vous avez besoin pour développer de petits objets connectés. Dans le prochain tutoriel, nous verrons comment avoir une plus belle interface graphique en utilisant Bootstrap, un framework développé par un développeur travaillant chez Tweeter qui vous permet de créer de plus belles interfaces graphiques en HTML.\n\n\n\t\t\tRemarque. L&#39;ensemble du tutoriel a été développé sur l&#39;IDE Arduino 1.8.1 installé sur un Orange Pi Plus 2e (présenté ici) exécutant Armbian (Ubuntu 16.04 LTS). Suivez ce tutoriel pour savoir comment installer l&#39;IDE Arduino sur Linux (ARM ou x86).\n\t\t\t\n\n\nNouveaux boucliers compatibles LoLin W600-PICO et WeMos d1 mini  \nCommencez avec des objets connectés DIY (2). Communiquer, programmer, stocker, visualiser, fabriquer des circuits  \n# Découvertes de la semaine 5: WeMos disparaît, nouvelle gamme LoLin 2019  \n# Test IAQ CCS811, capteur de qualité de l&#39;air TVOC, bus eCO2 i2C (Arduino, ESP8266)  \nBibliothèque Arduino Telegram Bot universelle compatible avec les mises à niveau Arduino, ESP32 et ESP8266 vers la version 1.1.0  \nCartes de développement et boucliers Wemos, nouvelles fonctionnalités pour 2018 et mises à jour  \n\n\n\n\n                                            As-tu aimé cet article ?\n                                        \n[Total:[Total:[Total:[Total:  Moyenne: ]\n\n\n\nClick to rate this post!\r\n                                   \r\n                               [Total: 0  Average: 0]","paragraphs":["RecordEnregistréEffacé 4","L&#39;ESP8266 peut être programmé comme un Arduino classique mais son principal intérêt est sa connexion Wi-Fi qui lui permet de publier des données sur un serveur ou un tableau de bord en ligne (ThingSpeak, Freeboard.io), ou de créer facilement des objets connectés qui peuvent être contrôlés à partir d&#39;un serveur domotique ou application mobile (développé avec Blynk ou Cayenne par exemple).","Dans ce didacticiel, nous allons apprendre à programmer l&#39;ESP8266 pour qu&#39;il se comporte comme un serveur Web. C&#39;est-à-dire que l&#39;on peut interagir avec le programme, le GPIO &#8230; à partir d&#39;une interface web accessible depuis un navigateur web.\nAvant de commencer, il est nécessaire de vérifier que toutes les bibliothèques nécessaires sont installées.\nhttps://arduino.esp8266.com/stable/package_esp8266com_index.json\nhttp://arduino.esp8266.com/stable/package_esp8266com_index.json","Vous pouvez regarder (par curiosité) les cartes gérées par la bibliothèque ESP8266 et coller l&#39;URL précédente dans un navigateur. En janvier 2017 (version 2.3.0), les cartes suivantes sont gérées:","Module ESP8266 générique\nOlimex MOD-WIFI-ESP8266 (-DEV)\nNodeMCU 0.9 (module ESP-12)\nNodeMCU 1.0 (module ESP-12E)\nAdafruit HUZZAH ESP8266 (ESP-12)\nESPresso Lite 1.0\nESPresso Lite 2.0\nPhoenix 1.0\nPhoenix 2.0\nSparkFun Thing\nSweetPea ESP-210\nWeMos D1\nWeMos D1 mini\nESPino (module ESP-12)\nESPino (module WROOM-02)\nWifInfo\nESPDuino","Allez au gestionnaire de cartes et regarde esp8266, puis cliquez sur installer.","En même temps que les cartes, toutes les bibliothèques nécessaires ainsi que de nombreux exemples sont installés. Si les exemples ne sont pas visibles dans le menu Fichier -&gt; Exemples -&gt; Exemples pour WeMos D1, quittez et relancez l&#39;IDE Arduino.\nNous allons aller étape par étape pour comprendre comment créer un serveur web sur un ESP8266. Ouvrez l&#39;exemple WiFiWebServer.\nNous avons besoin au moins de la bibliothèque ESP8266WiFi.h pour créer un serveur Web. Comme toutes les librairies, il faut creuser beaucoup pour découvrir les méthodes disponibles, voici un petit aperçu pour mieux comprendre ce que vous pouvez en faire. le code source de la bibliothèque est disponible ici. Cette bibliothèque est une adaptation de toutes les bibliothèques développées pour l&#39;Arduino. Vous pouvez également trouver beaucoup d&#39;informations ici","WiFiClient","uint8_t status ()\nint connect (IPAddress ip, port uint16_t)\nint connect (const char * host, uint16_t port)\ntaille_t écrire (uint8_t)\ntaille_t écrire (const uint8_t * buf, taille_t taille)\nsize_t write_P (PGM_P buf, size_t size)\ntaille_t écrire (Stream &amp; stream)\nint disponible ()\nlire (uint8_t * buf, size_t size)\nint peek ()\nsize_t peekBytes (tampon uint8_t *, taille size_t)\nsize_t peekBytes (char * buffer, size_t length)\nvoid flush ()\nvoid stop ()\nuint8_t connecté ()\nIPAddress remoteIP ()\nuint16_t remotePort ()\nIPAddress localIP ()\nuint16_t localPort ()\nbool getNoDelay ()\nvoid setNoDelay (bool nodelay)\nvoid setLocalPortStart (port uint16_t)\nstatique vide stopAll ();\nvide statique stopAllExcept (WiFiClient * c)","WiFiServer","WiFiServer (adresse IPAddress, port uint16_t)\nWiFiServer (port uint16_t)\nWiFiClient disponible (statut uint8_t * = NULL)\nbool hasClient ()\nvoid begin ()\nvoid setNoDelay (bool nodelay)\nbool getNoDelay ()\nécriture taille_t virtuelle (uint8_t)\nuint8_t status ()\nvoid close ()\nvoid stop ()","WiFiUDP\nWiFiClientSecure","#comprendre \nconst char * ssid = &quot;votre-ssid&quot;;\nconst char * password = &quot;votre-mot de passe&quot;;\nNous créons une instance, un objet qui contiendra le serveur Web. Nous communiquerons avec lui sur le port 80, le port classique pour les requêtes HTTP utilisées par les navigateurs Internet.\nServeur WiFiServer (80);\nLa boucle de configuration.\nvoid setup () \n// Ouverture du port série en 115200 bauds pour envoyer des messages de débogage à l&#39;IDE par exemple\nSerial.begin (115200);\nretard (10);","// prépare GPIO2 (sortie)\npinMode (2, SORTIE);\ndigitalWrite (2, 0);","// Se connecter au réseau WiFi\nSerial.println ();\nSerial.println ();\nSerial.print (&quot;Connexion à&quot;);\nSerial.println (ssid);","// Nous nous connectons à un réseau WiFi avec le SSID et le mot de passe précédemment configurés\nWiFi.begin (ssid, mot de passe);","// Nous ne quittons la boucle que lorsque la connexion a été établie.\n// Cette partie doit être améliorée pour le fonctionnement sur batterie car en l&#39;absence de réseau\n// on va vider la batterie!\nwhile (WiFi.status ()! = WL_CONNECTED) \nretard (500);\nSerial.print (&quot;.&quot;);","Serial.println (&quot;&quot;);\nSerial.println (&quot;WiFi connecté&quot;);","// connexion OK, on ​​démarre le serveur web // Démarrer le serveur\nserver.begin ();\nSerial.println (&quot;Serveur démarré&quot;);","// On indique sur le port série l&#39;adresse IP de l&#39;ESP pour la retrouver facilement / Imprimer l&#39;adresse IP\nSerial.println (WiFi.localIP ());","Que se passe-t-il dans la boucle de boucle?\nNous ne faisons quelque chose que si un client est connecté, c&#39;est-à-dire que nous faisons une requête HTTP sur l&#39;ESP8266 à partir d&#39;un navigateur Internet\nClient WiFiClient = server.available ();\nsi (! client) \nrevenir;","Lorsqu&#39;un client se connecte, il est indiqué sur le port série\nSerial.println (&quot;nouveau client&quot;);\nwhile (! client.available ()) \nretard (1);","On obtient la requête HTTP, ici l&#39;URL saisie simplement dans le navigateur. Le contenu de la requête HTTP est envoyé au port série. On vide le buffer avec la méthode affleurer.\nString req = client.readStringUntil (&amp; # 39;  r &amp; # 39;);\nSerial.println (req);\nclient.flush ();\nNous recherchons dans la requête HTTP ce qu&#39;il faut faire. La méthode la plus simple consiste à passer des commandes à l&#39;ESP8266 sous la forme d&#39;une commande du type / gpio / desire_state (0, 1 ou marche / arrêt). Nous allons juste faire un test sur une chaîne de caractères avec la commande indexOf sur la variable req. Ce type de stratégie convient aux petits projets mais il peut rapidement devenir une source d&#39;erreur avec l&#39;empilement de if, else if.\nint val;\nif (req.indexOf (&quot;/ gpio / 0&quot;)! = -1)\nval = 0;\nsinon if (req.indexOf (&quot;/ gpio / 1&quot;)! = -1)\nval = 1;\nautre \nSerial.println (&quot;demande non valide&quot;);\nclient.stop ();\nrevenir;","Nous mettons à jour l&#39;état GPIO et vider le tampon\ndigitalWrite (2, val);\nclient.flush ();\nNous créons maintenant une page HTML qui contient l&#39;état du GPIO. Il s&#39;agit d&#39;une chaîne de texte qui contient le code HTML de la page. On insère dans le code de la page, l&#39;état du GPIO\nChaîne s = &quot;HTTP / 1.1 200 OK  r  nContenu-Type: texte / html  r  n  r  n r  n r  nGPIO est maintenant &quot;;\ns + = (val)? &quot;haut&quot;: &quot;bas&quot;;\ns + = &quot;ne pas&quot;;\nNous publions cette page au client avec la commande d&#39;impression, très facile!\nclient.print (s);\nVoilà, vous pouvez désormais contrôler à distance tout matériel connecté au GPIO (un relais, une LED, un moteur, un servomoteur, etc.) à l&#39;aide d&#39;une simple requête HTTP. Vous pouvez par exemple exécuter très simplement une commande à partir d&#39;un logiciel domotique. Voici deux exemples, le premier pour Domoticz, le second pour Jeedom.\nMaintenant, vous aimeriez certainement pouvoir faire une petite interface pour vos projets ESP8266. Pour cela, nous devons connaître quelques notions de base du HTML. Nous n&#39;irons pas très loin dans l&#39;apprentissage du HTML, il suffit d&#39;apprendre les éléments importants pour débuter et avoir un projet fonctionnel. Si vous avez besoin de plus d&#39;éléments d&#39;interface, je recommande w3schools qui est une référence dans l&#39;apprentissage du HTML. Le site est en anglais mais il est très clair et très facile d&#39;accès.\nDans un projet ESP8266, nous pouvons créer des pages HTML dynamiques, c&#39;est-à-dire que nous construisons une chaîne de texte qui contient le code de la page que nous afficherons ensuite. C&#39;est ce que nous allons faire. Mais l&#39;ESP8266 est également capable de fonctionner comme un vrai site web, c&#39;est-à-dire qu&#39;on peut installer sur des pages HTML à mémoire flash, du code javascript, des feuilles de style CSS &#8230; On n&#39;ira pas aussi loin dans ce premier tutoriel.\nJe vous propose de créer une petite station météo pour avoir des données à mettre à jour régulièrement et de créer un bouton pour activer / désactiver une sortie GPIO (juste une LED par exemple). J&#39;ai utilisé le matériel suivant\nVoici un tableau de localisation et de correspondance des broches entre Arduino et ESP8266.","Composant\nBroches\nÉquivalence ESP8266 (Wemos D1 mini)","DHT22\nVCC\n5V","GND\ng","Les données\nG5","BMP180\nVCC\n5V","GND\ng","SDA\nD2","Nous commençons par déclarer les bibliothèques nécessaires. N&#39;oubliez pas d&#39;installer les bibliothèques à partir du gestionnaire de bibliothèques (DHT et BMP085).","Remarque. Vous pouvez rencontrer une erreur de compilation adafruit_Sensor.h: Aucun fichier ou répertoire de ce type. Dans ce cas, téléchargez et décompressez la bibliothèque manuellement depuis GitHub dans le dossier Arduino -&gt; Library, puis relancez l&#39;IDE pour qu&#39;il soit pris en compte.","#comprendre \n#comprendre \n#comprendre \n#comprendre \n#comprendre \nNous définissons les variables du programme. Modifiez le réseau WiFi auquel vous allez vous connecter et le mot de passe correspondant.\n#define ssid &quot;ssid&quot; // WiFi SSID\n#define password &quot;password&quot; // mot de passe WiFi\n#define DHTTYPE DHT22 // type DHT (DHT11, DHT22)\n#define DHTPIN D4 // Broche DHT / Broche DHT\n#define LEDPIN D3 // Led\nflotteur t = 0;\nflotteur h = 0;\nflotteur p = 0;\nString etatLed = &quot;OFF&quot;;\nNous créons les objets dht, bmp et server\nDHT DHT (DHTPIN, DHTTYPE);\nAdafruit_BMP085 bmp;\nESP8266WebServer server (80);\nCette première fonction vous permet de construire le code HTML de la page principale du programme. C’est une simple chaîne de caractères. C’est un assemblage de chaînes. Vous pouvez facilement inclure la valeur ou l&#39;état d&#39;une variable (par exemple, l&#39;état d&#39;une sortie). En retour, la fonction renvoie une chaîne contenant le code HTML de la page.\nString getPage () \nPage de chaîne = &quot;&quot;;\npage + = &quot;Démo ESP8266 - www.projetsdiy.fr&quot;;\npage + = &quot;&quot;;\npage + = &quot;ESP8266 Demo&quot;;\npage + = &quot;DHT22&quot;;\npage + = &quot;Température : &quot;;\npage + = t;\npage + = &quot;° C&quot;;\npage + = &quot;Humidité : &quot;;\npage + = h;\npage + = &quot;%BMP180&quot;;\npage + = &quot;Pression atmosphérique : &quot;;\npage + = p;\npage + = &quot;mbar&quot;;\npage + = &quot;GPIO&quot;;\npage + = &quot;&quot;;\npage + = &quot;D3 (indiquer: &quot;;\npage + = etatLed;\npage + = &quot;)NOUS&quot;;\npage + = &quot;DE&quot;;\npage + = &quot;&quot;;\npage + = &quot;www.projetsdiy.fr&quot;;\npage + = &quot;&quot;;\npage de retour;","Voyons un peu mieux comment le code est construit","Code HTML\nExplication","Démo ESP8266 &#8211; www.projetsdiy.fr","lang : permet de définir la langue de la page\ntête : c&#39;est l&#39;en-tête de la page. Il contient différents méta (paramètres)","http-equiv = ’refresh’: il s’agit d’une page que le navigateur devra actualiser. Pour plus de types, allez ici\ncontent = &quot;10&quot;: toutes les 10 secondes","Titre : le titre de la page affiché dans la barre du navigateur\nstyle : un style pour la page (couleur de fond, police à utiliser, couleur du texte","C&#39;est le contenu de la page affichée","ESP8266 Demo","Un titre affiché en haut de la page","DHT22","Un titre (h3, plus petit) pour le capteur DHT22","Température: xx ° C\nHumidité: xx%","Le bloc ul permet d&#39;afficher comme liste information. La même chose pour le BMP180","D3 (état: xx)\nNOUS\nDE","Pour mettre à jour le GPIO, nous utilisons un formulaire.\nIci, nous utilisons un bouton radio pour changer l&#39;état (On / Off) puis nous envoyons (soumettre) le contenu du formulaire avec un bouton.\nL&#39;option Nom vous permet de nommer la variable qui contiendra l&#39;état que vous souhaitez récupérer dans le code Arduino. Ici LED.","Toute balise ouverte doit être fermée (c&#39;est mieux!)","La fonction handleRoot vous permet de surveiller si vous recevez une demande d&#39;actualisation du GPIO en contrôlant si l&#39;argument LED est retourné par la page. Si c&#39;est le cas, nous exécutons la fonction handleSubmit. A nous de créer\nvoid handleRoot () \nif (server.hasArg (&quot;LED&quot;)) \nhandleSubmit ();\n autre \nserver.send (200, &quot;text / html&quot;, getPage ());","La fonction handleSubmit traite la mise à jour du GPIO. On obtient l&#39;état de la variable LED. Attention, c&#39;est une chaîne de caractères, il faut donc tester &quot;1&quot; et non 1. On en profite pour affecter l&#39;état du GPIO dans la variable etatLed sous forme de chaîne, c&#39;est plus amusant à lire . Enfin, nous mettons à jour l&#39;affichage de la page HTML avec server.send. Nous récupérons la page mise à jour en appelant la fonction getPage ().\nvoid handleSubmit () \n// Mettre à jour le GPIO / Mettre à jour le GPIO\nString LEDValue;\nLEDValue = server.arg (&quot;LED&quot;);\nSerial.println (&quot;Définir GPIO&quot;); Serial.print (LEDValue);\nif (LEDValue == &quot;1&quot;) \ndigitalWrite (LEDPIN, 1);\netatLed = &quot;On&quot;;\nserver.send (200, &quot;text / html&quot;, getPage ());\n else if (LEDValue == &quot;0&quot;) \ndigitalWrite (LEDPIN, 0);\netatLed = &quot;Off&quot;;\nserver.send (200, &quot;text / html&quot;, getPage ());\n autre \nSerial.println (&quot;Err Led Value&quot;);","Maintenant que toutes les fonctions sont créées, nous pouvons appeler la fonction installer (). Il initialise le BMP180, la connexion WiFi, connecte la fonction qui s&#39;occupe de la page principale et enfin on lance le serveur web\nvoid setup () \nSerial.begin (115200);\n// Initialisation du BMP180 / Init BMP180\nif (! bmp.begin ()) \nSerial.println (&quot;BMP180 KO!&quot;);\ntandis que (1);\n autre \nSerial.println (&quot;BMP180 OK&quot;);","WiFi.begin (ssid, mot de passe);\n// Attendre la connexion au réseau WiFi / Attendre la connexion\nwhile (WiFi.status ()! = WL_CONNECTED) \nretard (500); Serial.print (&quot;.&quot;);","// Connexion WiFi établie / connexion WiFi OK\nSerial.println (&quot;&quot;);\nSerial.print (&quot;Connecté à&quot;); Serial.println (ssid);\nSerial.print (&quot;adresse IP:&quot;); Serial.println (WiFi.localIP ());","// On branche la fonction qui gère la première page / lien vers la fonction qui gère la page de lancement\nserver.on (&quot;/&quot;, handleRoot);","server.begin ();\nSerial.println (&quot;Le serveur HTTP a démarré&quot;);","Il ne reste plus qu&#39;à exécuter la fonction boucle () lire régulièrement les mesures sur les capteurs. Contrairement à l&#39;exemple précédent basé sur la bibliothèque ESP8266WiFi, voici la bibliothèque ESP8266WebServer nécessite de brancher la fonction de rappel server.handleClient () qui surveille la présence d&#39;un client et délivre la page HTML demandée.\nboucle vide () \nserver.handleClient ();\nt = dht.readTemperature ();\nh = dht.readHumidity ();\np = bmp.readPressure () / 100.0F;\nretard (1000);","Voici le code source assemblé du projet que vous avez juste besoin de coller dans un nouveau projet, puis de le télécharger\n#comprendre \n#comprendre \n#comprendre \n#comprendre","#define ssid &quot;xx&quot; // WiFi SSID\n#define password &quot;xxxxxx&quot; // Mot de passe WiFi\n#define DHTTYPE DHT22 // type DHT (DHT11, DHT22)\n#define DHTPIN D4 // Broche DHT / Broche DHT\n#define LEDPIN D3 // Led\nflotteur t = 0;\nflotteur h = 0;\nflotteur p = 0;\nString etatLed = &quot;OFF&quot;;","// Créer des objets / créer des objets\nDHT DHT (DHTPIN, DHTTYPE);\nAdafruit_BMP085 bmp;\nESP8266WebServer server (80);","String getPage () \nPage de chaîne = &quot;&quot;;\npage + = &quot;Démo ESP8266 - www.projetsdiy.fr&quot;;\npage + = &quot;&quot;;\npage + = &quot;ESP8266 Demo&quot;;\npage + = &quot;DHT22&quot;;\npage + = &quot;Température : &quot;;\npage + = t;\npage + = &quot;° C&quot;;\npage + = &quot;Humidité : &quot;;\npage + = h;\npage + = &quot;%BMP180&quot;;\npage + = &quot;Pression atmosphérique : &quot;;\npage + = p;\npage + = &quot;mbar&quot;;\npage + = &quot;GPIO&quot;;\npage + = &quot;&quot;;\npage + = &quot;D3 (indiquer: &quot;;\npage + = etatLed;\npage + = &quot;)&quot;;\npage + = &quot;NOUS&quot;;\npage + = &quot;DE&quot;;\npage + = &quot;&quot;;\npage + = &quot;www.projetsdiy.fr&quot;;\npage + = &quot;&quot;;\npage de retour;","void handleRoot () \nif (server.hasArg (&quot;LED&quot;)) \nhandleSubmit ();\n autre \nserver.send (200, &quot;text / html&quot;, getPage ());","void handleSubmit () \n// Mettre à jour le GPIO / Mettre à jour le GPIO\nString LEDValue;\nLEDValue = server.arg (&quot;LED&quot;);\nSerial.println (&quot;Définir GPIO&quot;); Serial.print (LEDValue);\nif (LEDValue == &quot;1&quot;) \ndigitalWrite (LEDPIN, 1);\netatLed = &quot;On&quot;;\nserver.send (200, &quot;text / html&quot;, getPage ());\n else if (LEDValue == &quot;0&quot;) \ndigitalWrite (LEDPIN, 0);\netatLed = &quot;Off&quot;;\nserver.send (200, &quot;text / html&quot;, getPage ());\n autre \nSerial.println (&quot;Err Led Value&quot;);","void setup () \nSerial.begin (115200);\n// Initialisation du BMP180 / Init BMP180\nif (! bmp.begin ()) \nSerial.println (&quot;BMP180 KO!&quot;);\ntandis que (1);\n autre \nSerial.println (&quot;BMP180 OK&quot;);","WiFi.begin (ssid, mot de passe);\n// Attendre la connexion au réseau WiFi / Attendre la connexion\nwhile (WiFi.status ()! = WL_CONNECTED) \nretard (500); Serial.print (&quot;.&quot;);","// Connexion WiFi établie / connexion WiFi OK\nSerial.println (&quot;&quot;);\nSerial.print (&quot;Connecté à&quot;); Serial.println (ssid);\nSerial.print (&quot;adresse IP:&quot;); Serial.println (WiFi.localIP ());","// On branche la fonction qui gère la première page / lien vers la fonction qui gère la page de lancement\nserver.on (&quot;/&quot;, handleRoot);","server.begin ();\nSerial.println (&quot;Le serveur HTTP a démarré&quot;);","boucle vide () \nserver.handleClient ();\nt = dht.readTemperature ();\nh = dht.readHumidity ();\np = bmp.readPressure () / 100.0F;\nretard (1000);","Récupérez l&#39;adresse IP de Wemos en ouvrant le moniteur série puis connectez-vous à partir d&#39;un navigateur Internet pour accéder à l&#39;interface de la mini station météo.","Voilà, nous savons maintenant comment créer un serveur Web à l&#39;aide d&#39;un ESP8266, contrôler le GPIO et afficher les mesures des capteurs. Nous n&#39;avons vu ici que les principaux rudiments pour commencer, mais ils couvrent déjà une grande partie de ce dont vous avez besoin pour développer de petits objets connectés. Dans le prochain tutoriel, nous verrons comment avoir une plus belle interface graphique en utilisant Bootstrap, un framework développé par un développeur travaillant chez Tweeter qui vous permet de créer de plus belles interfaces graphiques en HTML.","Remarque. L&#39;ensemble du tutoriel a été développé sur l&#39;IDE Arduino 1.8.1 installé sur un Orange Pi Plus 2e (présenté ici) exécutant Armbian (Ubuntu 16.04 LTS). Suivez ce tutoriel pour savoir comment installer l&#39;IDE Arduino sur Linux (ARM ou x86).","Nouveaux boucliers compatibles LoLin W600-PICO et WeMos d1 mini  \nCommencez avec des objets connectés DIY (2). Communiquer, programmer, stocker, visualiser, fabriquer des circuits  \n# Découvertes de la semaine 5: WeMos disparaît, nouvelle gamme LoLin 2019  \n# Test IAQ CCS811, capteur de qualité de l&#39;air TVOC, bus eCO2 i2C (Arduino, ESP8266)  \nBibliothèque Arduino Telegram Bot universelle compatible avec les mises à niveau Arduino, ESP32 et ESP8266 vers la version 1.1.0  \nCartes de développement et boucliers Wemos, nouvelles fonctionnalités pour 2018 et mises à jour","As-tu aimé cet article ?\n                                        \n[Total:[Total:[Total:[Total:  Moyenne: ]","Click to rate this post!\n                                   \n                               [Total: 0  Average: 0]"],"content_blocks":[{"id":"text-1","type":"text","heading":"","plain_text":"RecordEnregistréEffacé 4","html":"<p>RecordEnregistréEffacé 4</p>"},{"id":"text-2","type":"text","heading":"","plain_text":"L&#39;ESP8266 peut être programmé comme un Arduino classique mais son principal intérêt est sa connexion Wi-Fi qui lui permet de publier des données sur un serveur ou un tableau de bord en ligne (ThingSpeak, Freeboard.io), ou de créer facilement des objets connectés qui peuvent être contrôlés à partir d&#39;un serveur domotique ou application mobile (développé avec Blynk ou Cayenne par exemple).","html":"<p>L&#039;ESP8266 peut être programmé comme un Arduino classique mais son principal intérêt est sa connexion Wi-Fi qui lui permet de publier des données sur un serveur ou un tableau de bord en ligne (ThingSpeak, Freeboard.io), ou de créer facilement des objets connectés qui peuvent être contrôlés à partir d&#039;un serveur domotique ou application mobile (développé avec Blynk ou Cayenne par exemple).</p>"},{"id":"text-3","type":"text","heading":"","plain_text":"Dans ce didacticiel, nous allons apprendre à programmer l&#39;ESP8266 pour qu&#39;il se comporte comme un serveur Web. C&#39;est-à-dire que l&#39;on peut interagir avec le programme, le GPIO &#8230; à partir d&#39;une interface web accessible depuis un navigateur web.\nAvant de commencer, il est nécessaire de vérifier que toutes les bibliothèques nécessaires sont installées.\nhttps://arduino.esp8266.com/stable/package_esp8266com_index.json\nhttp://arduino.esp8266.com/stable/package_esp8266com_index.json","html":"<p>Dans ce didacticiel, nous allons apprendre à programmer l&#039;ESP8266 pour qu&#039;il se comporte comme un serveur Web. C&#039;est-à-dire que l&#039;on peut interagir avec le programme, le GPIO &#8230; à partir d&#039;une interface web accessible depuis un navigateur web.\nAvant de commencer, il est nécessaire de vérifier que toutes les bibliothèques nécessaires sont installées.\nhttps://arduino.esp8266.com/stable/package_esp8266com_index.json\nhttp://arduino.esp8266.com/stable/package_esp8266com_index.json</p>"},{"id":"text-4","type":"text","heading":"","plain_text":"Vous pouvez regarder (par curiosité) les cartes gérées par la bibliothèque ESP8266 et coller l&#39;URL précédente dans un navigateur. En janvier 2017 (version 2.3.0), les cartes suivantes sont gérées:","html":"<p>Vous pouvez regarder (par curiosité) les cartes gérées par la bibliothèque ESP8266 et coller l&#039;URL précédente dans un navigateur. En janvier 2017 (version 2.3.0), les cartes suivantes sont gérées:</p>"},{"id":"text-5","type":"text","heading":"","plain_text":"Module ESP8266 générique\nOlimex MOD-WIFI-ESP8266 (-DEV)\nNodeMCU 0.9 (module ESP-12)\nNodeMCU 1.0 (module ESP-12E)\nAdafruit HUZZAH ESP8266 (ESP-12)\nESPresso Lite 1.0\nESPresso Lite 2.0\nPhoenix 1.0\nPhoenix 2.0\nSparkFun Thing\nSweetPea ESP-210\nWeMos D1\nWeMos D1 mini\nESPino (module ESP-12)\nESPino (module WROOM-02)\nWifInfo\nESPDuino","html":"<p>Module ESP8266 générique\nOlimex MOD-WIFI-ESP8266 (-DEV)\nNodeMCU 0.9 (module ESP-12)\nNodeMCU 1.0 (module ESP-12E)\nAdafruit HUZZAH ESP8266 (ESP-12)\nESPresso Lite 1.0\nESPresso Lite 2.0\nPhoenix 1.0\nPhoenix 2.0\nSparkFun Thing\nSweetPea ESP-210\nWeMos D1\nWeMos D1 mini\nESPino (module ESP-12)\nESPino (module WROOM-02)\nWifInfo\nESPDuino</p>"},{"id":"text-6","type":"text","heading":"","plain_text":"Allez au gestionnaire de cartes et regarde esp8266, puis cliquez sur installer.","html":"<p>Allez au gestionnaire de cartes et regarde esp8266, puis cliquez sur installer.</p>"},{"id":"text-7","type":"text","heading":"","plain_text":"En même temps que les cartes, toutes les bibliothèques nécessaires ainsi que de nombreux exemples sont installés. Si les exemples ne sont pas visibles dans le menu Fichier -&gt; Exemples -&gt; Exemples pour WeMos D1, quittez et relancez l&#39;IDE Arduino.\nNous allons aller étape par étape pour comprendre comment créer un serveur web sur un ESP8266. Ouvrez l&#39;exemple WiFiWebServer.\nNous avons besoin au moins de la bibliothèque ESP8266WiFi.h pour créer un serveur Web. Comme toutes les librairies, il faut creuser beaucoup pour découvrir les méthodes disponibles, voici un petit aperçu pour mieux comprendre ce que vous pouvez en faire. le code source de la bibliothèque est disponible ici. Cette bibliothèque est une adaptation de toutes les bibliothèques développées pour l&#39;Arduino. Vous pouvez également trouver beaucoup d&#39;informations ici","html":"<p>En même temps que les cartes, toutes les bibliothèques nécessaires ainsi que de nombreux exemples sont installés. Si les exemples ne sont pas visibles dans le menu Fichier -&gt; Exemples -&gt; Exemples pour WeMos D1, quittez et relancez l&#039;IDE Arduino.\nNous allons aller étape par étape pour comprendre comment créer un serveur web sur un ESP8266. Ouvrez l&#039;exemple WiFiWebServer.\nNous avons besoin au moins de la bibliothèque ESP8266WiFi.h pour créer un serveur Web. Comme toutes les librairies, il faut creuser beaucoup pour découvrir les méthodes disponibles, voici un petit aperçu pour mieux comprendre ce que vous pouvez en faire. le code source de la bibliothèque est disponible ici. Cette bibliothèque est une adaptation de toutes les bibliothèques développées pour l&#039;Arduino. Vous pouvez également trouver beaucoup d&#039;informations ici</p>"},{"id":"text-8","type":"text","heading":"","plain_text":"WiFiClient","html":"<p>WiFiClient</p>"},{"id":"text-9","type":"text","heading":"","plain_text":"uint8_t status ()\nint connect (IPAddress ip, port uint16_t)\nint connect (const char * host, uint16_t port)\ntaille_t écrire (uint8_t)\ntaille_t écrire (const uint8_t * buf, taille_t taille)\nsize_t write_P (PGM_P buf, size_t size)\ntaille_t écrire (Stream &amp; stream)\nint disponible ()\nlire (uint8_t * buf, size_t size)\nint peek ()\nsize_t peekBytes (tampon uint8_t *, taille size_t)\nsize_t peekBytes (char * buffer, size_t length)\nvoid flush ()\nvoid stop ()\nuint8_t connecté ()\nIPAddress remoteIP ()\nuint16_t remotePort ()\nIPAddress localIP ()\nuint16_t localPort ()\nbool getNoDelay ()\nvoid setNoDelay (bool nodelay)\nvoid setLocalPortStart (port uint16_t)\nstatique vide stopAll ();\nvide statique stopAllExcept (WiFiClient * c)","html":"<p>uint8_t status ()\nint connect (IPAddress ip, port uint16_t)\nint connect (const char * host, uint16_t port)\ntaille_t écrire (uint8_t)\ntaille_t écrire (const uint8_t * buf, taille_t taille)\nsize_t write_P (PGM_P buf, size_t size)\ntaille_t écrire (Stream &amp; stream)\nint disponible ()\nlire (uint8_t * buf, size_t size)\nint peek ()\nsize_t peekBytes (tampon uint8_t *, taille size_t)\nsize_t peekBytes (char * buffer, size_t length)\nvoid flush ()\nvoid stop ()\nuint8_t connecté ()\nIPAddress remoteIP ()\nuint16_t remotePort ()\nIPAddress localIP ()\nuint16_t localPort ()\nbool getNoDelay ()\nvoid setNoDelay (bool nodelay)\nvoid setLocalPortStart (port uint16_t)\nstatique vide stopAll ();\nvide statique stopAllExcept (WiFiClient * c)</p>"},{"id":"text-10","type":"text","heading":"","plain_text":"WiFiServer","html":"<p>WiFiServer</p>"},{"id":"text-11","type":"text","heading":"","plain_text":"WiFiServer (adresse IPAddress, port uint16_t)\nWiFiServer (port uint16_t)\nWiFiClient disponible (statut uint8_t * = NULL)\nbool hasClient ()\nvoid begin ()\nvoid setNoDelay (bool nodelay)\nbool getNoDelay ()\nécriture taille_t virtuelle (uint8_t)\nuint8_t status ()\nvoid close ()\nvoid stop ()","html":"<p>WiFiServer (adresse IPAddress, port uint16_t)\nWiFiServer (port uint16_t)\nWiFiClient disponible (statut uint8_t * = NULL)\nbool hasClient ()\nvoid begin ()\nvoid setNoDelay (bool nodelay)\nbool getNoDelay ()\nécriture taille_t virtuelle (uint8_t)\nuint8_t status ()\nvoid close ()\nvoid stop ()</p>"},{"id":"text-12","type":"text","heading":"","plain_text":"WiFiUDP\nWiFiClientSecure","html":"<p>WiFiUDP\nWiFiClientSecure</p>"},{"id":"text-13","type":"text","heading":"","plain_text":"#comprendre \nconst char * ssid = &quot;votre-ssid&quot;;\nconst char * password = &quot;votre-mot de passe&quot;;\nNous créons une instance, un objet qui contiendra le serveur Web. Nous communiquerons avec lui sur le port 80, le port classique pour les requêtes HTTP utilisées par les navigateurs Internet.\nServeur WiFiServer (80);\nLa boucle de configuration.\nvoid setup () \n// Ouverture du port série en 115200 bauds pour envoyer des messages de débogage à l&#39;IDE par exemple\nSerial.begin (115200);\nretard (10);","html":"<p>#comprendre \nconst char * ssid = &quot;votre-ssid&quot;;\nconst char * password = &quot;votre-mot de passe&quot;;\nNous créons une instance, un objet qui contiendra le serveur Web. Nous communiquerons avec lui sur le port 80, le port classique pour les requêtes HTTP utilisées par les navigateurs Internet.\nServeur WiFiServer (80);\nLa boucle de configuration.\nvoid setup () \n// Ouverture du port série en 115200 bauds pour envoyer des messages de débogage à l&#039;IDE par exemple\nSerial.begin (115200);\nretard (10);</p>"},{"id":"text-14","type":"text","heading":"","plain_text":"// prépare GPIO2 (sortie)\npinMode (2, SORTIE);\ndigitalWrite (2, 0);","html":"<p>// prépare GPIO2 (sortie)\npinMode (2, SORTIE);\ndigitalWrite (2, 0);</p>"},{"id":"text-15","type":"text","heading":"","plain_text":"// Se connecter au réseau WiFi\nSerial.println ();\nSerial.println ();\nSerial.print (&quot;Connexion à&quot;);\nSerial.println (ssid);","html":"<p>// Se connecter au réseau WiFi\nSerial.println ();\nSerial.println ();\nSerial.print (&quot;Connexion à&quot;);\nSerial.println (ssid);</p>"},{"id":"text-16","type":"text","heading":"","plain_text":"// Nous nous connectons à un réseau WiFi avec le SSID et le mot de passe précédemment configurés\nWiFi.begin (ssid, mot de passe);","html":"<p>// Nous nous connectons à un réseau WiFi avec le SSID et le mot de passe précédemment configurés\nWiFi.begin (ssid, mot de passe);</p>"},{"id":"text-17","type":"text","heading":"","plain_text":"// Nous ne quittons la boucle que lorsque la connexion a été établie.\n// Cette partie doit être améliorée pour le fonctionnement sur batterie car en l&#39;absence de réseau\n// on va vider la batterie!\nwhile (WiFi.status ()! = WL_CONNECTED) \nretard (500);\nSerial.print (&quot;.&quot;);","html":"<p>// Nous ne quittons la boucle que lorsque la connexion a été établie.\n// Cette partie doit être améliorée pour le fonctionnement sur batterie car en l&#039;absence de réseau\n// on va vider la batterie!\nwhile (WiFi.status ()! = WL_CONNECTED) \nretard (500);\nSerial.print (&quot;.&quot;);</p>"},{"id":"text-18","type":"text","heading":"","plain_text":"Serial.println (&quot;&quot;);\nSerial.println (&quot;WiFi connecté&quot;);","html":"<p>Serial.println (&quot;&quot;);\nSerial.println (&quot;WiFi connecté&quot;);</p>"},{"id":"text-19","type":"text","heading":"","plain_text":"// connexion OK, on ​​démarre le serveur web // Démarrer le serveur\nserver.begin ();\nSerial.println (&quot;Serveur démarré&quot;);","html":"<p>// connexion OK, on ​​démarre le serveur web // Démarrer le serveur\nserver.begin ();\nSerial.println (&quot;Serveur démarré&quot;);</p>"},{"id":"text-20","type":"text","heading":"","plain_text":"// On indique sur le port série l&#39;adresse IP de l&#39;ESP pour la retrouver facilement / Imprimer l&#39;adresse IP\nSerial.println (WiFi.localIP ());","html":"<p>// On indique sur le port série l&#039;adresse IP de l&#039;ESP pour la retrouver facilement / Imprimer l&#039;adresse IP\nSerial.println (WiFi.localIP ());</p>"},{"id":"text-21","type":"text","heading":"","plain_text":"Que se passe-t-il dans la boucle de boucle?\nNous ne faisons quelque chose que si un client est connecté, c&#39;est-à-dire que nous faisons une requête HTTP sur l&#39;ESP8266 à partir d&#39;un navigateur Internet\nClient WiFiClient = server.available ();\nsi (! client) \nrevenir;","html":"<p>Que se passe-t-il dans la boucle de boucle?\nNous ne faisons quelque chose que si un client est connecté, c&#039;est-à-dire que nous faisons une requête HTTP sur l&#039;ESP8266 à partir d&#039;un navigateur Internet\nClient WiFiClient = server.available ();\nsi (! client) \nrevenir;</p>"},{"id":"text-22","type":"text","heading":"","plain_text":"Lorsqu&#39;un client se connecte, il est indiqué sur le port série\nSerial.println (&quot;nouveau client&quot;);\nwhile (! client.available ()) \nretard (1);","html":"<p>Lorsqu&#039;un client se connecte, il est indiqué sur le port série\nSerial.println (&quot;nouveau client&quot;);\nwhile (! client.available ()) \nretard (1);</p>"},{"id":"text-23","type":"text","heading":"","plain_text":"On obtient la requête HTTP, ici l&#39;URL saisie simplement dans le navigateur. Le contenu de la requête HTTP est envoyé au port série. On vide le buffer avec la méthode affleurer.\nString req = client.readStringUntil (&amp; # 39;  r &amp; # 39;);\nSerial.println (req);\nclient.flush ();\nNous recherchons dans la requête HTTP ce qu&#39;il faut faire. La méthode la plus simple consiste à passer des commandes à l&#39;ESP8266 sous la forme d&#39;une commande du type / gpio / desire_state (0, 1 ou marche / arrêt). Nous allons juste faire un test sur une chaîne de caractères avec la commande indexOf sur la variable req. Ce type de stratégie convient aux petits projets mais il peut rapidement devenir une source d&#39;erreur avec l&#39;empilement de if, else if.\nint val;\nif (req.indexOf (&quot;/ gpio / 0&quot;)! = -1)\nval = 0;\nsinon if (req.indexOf (&quot;/ gpio / 1&quot;)! = -1)\nval = 1;\nautre \nSerial.println (&quot;demande non valide&quot;);\nclient.stop ();\nrevenir;","html":"<p>On obtient la requête HTTP, ici l&#039;URL saisie simplement dans le navigateur. Le contenu de la requête HTTP est envoyé au port série. On vide le buffer avec la méthode affleurer.\nString req = client.readStringUntil (&amp; # 39;  r &amp; # 39;);\nSerial.println (req);\nclient.flush ();\nNous recherchons dans la requête HTTP ce qu&#039;il faut faire. La méthode la plus simple consiste à passer des commandes à l&#039;ESP8266 sous la forme d&#039;une commande du type / gpio / desire_state (0, 1 ou marche / arrêt). Nous allons juste faire un test sur une chaîne de caractères avec la commande indexOf sur la variable req. Ce type de stratégie convient aux petits projets mais il peut rapidement devenir une source d&#039;erreur avec l&#039;empilement de if, else if.\nint val;\nif (req.indexOf (&quot;/ gpio / 0&quot;)! = -1)\nval = 0;\nsinon if (req.indexOf (&quot;/ gpio / 1&quot;)! = -1)\nval = 1;\nautre \nSerial.println (&quot;demande non valide&quot;);\nclient.stop ();\nrevenir;</p>"},{"id":"text-24","type":"text","heading":"","plain_text":"Nous mettons à jour l&#39;état GPIO et vider le tampon\ndigitalWrite (2, val);\nclient.flush ();\nNous créons maintenant une page HTML qui contient l&#39;état du GPIO. Il s&#39;agit d&#39;une chaîne de texte qui contient le code HTML de la page. On insère dans le code de la page, l&#39;état du GPIO\nChaîne s = &quot;HTTP / 1.1 200 OK  r  nContenu-Type: texte / html  r  n  r  n r  n r  nGPIO est maintenant &quot;;\ns + = (val)? &quot;haut&quot;: &quot;bas&quot;;\ns + = &quot;ne pas&quot;;\nNous publions cette page au client avec la commande d&#39;impression, très facile!\nclient.print (s);\nVoilà, vous pouvez désormais contrôler à distance tout matériel connecté au GPIO (un relais, une LED, un moteur, un servomoteur, etc.) à l&#39;aide d&#39;une simple requête HTTP. Vous pouvez par exemple exécuter très simplement une commande à partir d&#39;un logiciel domotique. Voici deux exemples, le premier pour Domoticz, le second pour Jeedom.\nMaintenant, vous aimeriez certainement pouvoir faire une petite interface pour vos projets ESP8266. Pour cela, nous devons connaître quelques notions de base du HTML. Nous n&#39;irons pas très loin dans l&#39;apprentissage du HTML, il suffit d&#39;apprendre les éléments importants pour débuter et avoir un projet fonctionnel. Si vous avez besoin de plus d&#39;éléments d&#39;interface, je recommande w3schools qui est une référence dans l&#39;apprentissage du HTML. Le site est en anglais mais il est très clair et très facile d&#39;accès.\nDans un projet ESP8266, nous pouvons créer des pages HTML dynamiques, c&#39;est-à-dire que nous construisons une chaîne de texte qui contient le code de la page que nous afficherons ensuite. C&#39;est ce que nous allons faire. Mais l&#39;ESP8266 est également capable de fonctionner comme un vrai site web, c&#39;est-à-dire qu&#39;on peut installer sur des pages HTML à mémoire flash, du code javascript, des feuilles de style CSS &#8230; On n&#39;ira pas aussi loin dans ce premier tutoriel.\nJe vous propose de créer une petite station météo pour avoir des données à mettre à jour régulièrement et de créer un bouton pour activer / désactiver une sortie GPIO (juste une LED par exemple). J&#39;ai utilisé le matériel suivant\nVoici un tableau de localisation et de correspondance des broches entre Arduino et ESP8266.","html":"<p>Nous mettons à jour l&#039;état GPIO et vider le tampon\ndigitalWrite (2, val);\nclient.flush ();\nNous créons maintenant une page HTML qui contient l&#039;état du GPIO. Il s&#039;agit d&#039;une chaîne de texte qui contient le code HTML de la page. On insère dans le code de la page, l&#039;état du GPIO\nChaîne s = &quot;HTTP / 1.1 200 OK  r  nContenu-Type: texte / html  r  n  r  n r  n r  nGPIO est maintenant &quot;;\ns + = (val)? &quot;haut&quot;: &quot;bas&quot;;\ns + = &quot;ne pas&quot;;\nNous publions cette page au client avec la commande d&#039;impression, très facile!\nclient.print (s);\nVoilà, vous pouvez désormais contrôler à distance tout matériel connecté au GPIO (un relais, une LED, un moteur, un servomoteur, etc.) à l&#039;aide d&#039;une simple requête HTTP. Vous pouvez par exemple exécuter très simplement une commande à partir d&#039;un logiciel domotique. Voici deux exemples, le premier pour Domoticz, le second pour Jeedom.\nMaintenant, vous aimeriez certainement pouvoir faire une petite interface pour vos projets ESP8266. Pour cela, nous devons connaître quelques notions de base du HTML. Nous n&#039;irons pas très loin dans l&#039;apprentissage du HTML, il suffit d&#039;apprendre les éléments importants pour débuter et avoir un projet fonctionnel. Si vous avez besoin de plus d&#039;éléments d&#039;interface, je recommande w3schools qui est une référence dans l&#039;apprentissage du HTML. Le site est en anglais mais il est très clair et très facile d&#039;accès.\nDans un projet ESP8266, nous pouvons créer des pages HTML dynamiques, c&#039;est-à-dire que nous construisons une chaîne de texte qui contient le code de la page que nous afficherons ensuite. C&#039;est ce que nous allons faire. Mais l&#039;ESP8266 est également capable de fonctionner comme un vrai site web, c&#039;est-à-dire qu&#039;on peut installer sur des pages HTML à mémoire flash, du code javascript, des feuilles de style CSS &#8230; On n&#039;ira pas aussi loin dans ce premier tutoriel.\nJe vous propose de créer une petite station météo pour avoir des données à mettre à jour régulièrement et de créer un bouton pour activer / désactiver une sortie GPIO (juste une LED par exemple). J&#039;ai utilisé le matériel suivant\nVoici un tableau de localisation et de correspondance des broches entre Arduino et ESP8266.</p>"},{"id":"text-25","type":"text","heading":"","plain_text":"Composant\nBroches\nÉquivalence ESP8266 (Wemos D1 mini)","html":"<p>Composant\nBroches\nÉquivalence ESP8266 (Wemos D1 mini)</p>"},{"id":"text-26","type":"text","heading":"","plain_text":"DHT22\nVCC\n5V","html":"<p>DHT22\nVCC\n5V</p>"},{"id":"text-27","type":"text","heading":"","plain_text":"GND\ng","html":"<p>GND\ng</p>"},{"id":"text-28","type":"text","heading":"","plain_text":"Les données\nG5","html":"<p>Les données\nG5</p>"},{"id":"text-29","type":"text","heading":"","plain_text":"BMP180\nVCC\n5V","html":"<p>BMP180\nVCC\n5V</p>"},{"id":"text-30","type":"text","heading":"","plain_text":"GND\ng","html":"<p>GND\ng</p>"},{"id":"text-31","type":"text","heading":"","plain_text":"SDA\nD2","html":"<p>SDA\nD2</p>"},{"id":"text-32","type":"text","heading":"","plain_text":"Nous commençons par déclarer les bibliothèques nécessaires. N&#39;oubliez pas d&#39;installer les bibliothèques à partir du gestionnaire de bibliothèques (DHT et BMP085).","html":"<p>Nous commençons par déclarer les bibliothèques nécessaires. N&#039;oubliez pas d&#039;installer les bibliothèques à partir du gestionnaire de bibliothèques (DHT et BMP085).</p>"},{"id":"text-33","type":"text","heading":"","plain_text":"Remarque. Vous pouvez rencontrer une erreur de compilation adafruit_Sensor.h: Aucun fichier ou répertoire de ce type. Dans ce cas, téléchargez et décompressez la bibliothèque manuellement depuis GitHub dans le dossier Arduino -&gt; Library, puis relancez l&#39;IDE pour qu&#39;il soit pris en compte.","html":"<p>Remarque. Vous pouvez rencontrer une erreur de compilation adafruit_Sensor.h: Aucun fichier ou répertoire de ce type. Dans ce cas, téléchargez et décompressez la bibliothèque manuellement depuis GitHub dans le dossier Arduino -&gt; Library, puis relancez l&#039;IDE pour qu&#039;il soit pris en compte.</p>"},{"id":"text-34","type":"text","heading":"","plain_text":"#comprendre \n#comprendre \n#comprendre \n#comprendre \n#comprendre \nNous définissons les variables du programme. Modifiez le réseau WiFi auquel vous allez vous connecter et le mot de passe correspondant.\n#define ssid &quot;ssid&quot; // WiFi SSID\n#define password &quot;password&quot; // mot de passe WiFi\n#define DHTTYPE DHT22 // type DHT (DHT11, DHT22)\n#define DHTPIN D4 // Broche DHT / Broche DHT\n#define LEDPIN D3 // Led\nflotteur t = 0;\nflotteur h = 0;\nflotteur p = 0;\nString etatLed = &quot;OFF&quot;;\nNous créons les objets dht, bmp et server\nDHT DHT (DHTPIN, DHTTYPE);\nAdafruit_BMP085 bmp;\nESP8266WebServer server (80);\nCette première fonction vous permet de construire le code HTML de la page principale du programme. C’est une simple chaîne de caractères. C’est un assemblage de chaînes. Vous pouvez facilement inclure la valeur ou l&#39;état d&#39;une variable (par exemple, l&#39;état d&#39;une sortie). En retour, la fonction renvoie une chaîne contenant le code HTML de la page.\nString getPage () \nPage de chaîne = &quot;&quot;;\npage + = &quot;Démo ESP8266 - www.projetsdiy.fr&quot;;\npage + = &quot;&quot;;\npage + = &quot;ESP8266 Demo&quot;;\npage + = &quot;DHT22&quot;;\npage + = &quot;Température : &quot;;\npage + = t;\npage + = &quot;° C&quot;;\npage + = &quot;Humidité : &quot;;\npage + = h;\npage + = &quot;%BMP180&quot;;\npage + = &quot;Pression atmosphérique : &quot;;\npage + = p;\npage + = &quot;mbar&quot;;\npage + = &quot;GPIO&quot;;\npage + = &quot;&quot;;\npage + = &quot;D3 (indiquer: &quot;;\npage + = etatLed;\npage + = &quot;)NOUS&quot;;\npage + = &quot;DE&quot;;\npage + = &quot;&quot;;\npage + = &quot;www.projetsdiy.fr&quot;;\npage + = &quot;&quot;;\npage de retour;","html":"<p>#comprendre \n#comprendre \n#comprendre \n#comprendre \n#comprendre \nNous définissons les variables du programme. Modifiez le réseau WiFi auquel vous allez vous connecter et le mot de passe correspondant.\n#define ssid &quot;ssid&quot; // WiFi SSID\n#define password &quot;password&quot; // mot de passe WiFi\n#define DHTTYPE DHT22 // type DHT (DHT11, DHT22)\n#define DHTPIN D4 // Broche DHT / Broche DHT\n#define LEDPIN D3 // Led\nflotteur t = 0;\nflotteur h = 0;\nflotteur p = 0;\nString etatLed = &quot;OFF&quot;;\nNous créons les objets dht, bmp et server\nDHT DHT (DHTPIN, DHTTYPE);\nAdafruit_BMP085 bmp;\nESP8266WebServer server (80);\nCette première fonction vous permet de construire le code HTML de la page principale du programme. C’est une simple chaîne de caractères. C’est un assemblage de chaînes. Vous pouvez facilement inclure la valeur ou l&#039;état d&#039;une variable (par exemple, l&#039;état d&#039;une sortie). En retour, la fonction renvoie une chaîne contenant le code HTML de la page.\nString getPage () \nPage de chaîne = &quot;&quot;;\npage + = &quot;Démo ESP8266 - www.projetsdiy.fr&quot;;\npage + = &quot;&quot;;\npage + = &quot;ESP8266 Demo&quot;;\npage + = &quot;DHT22&quot;;\npage + = &quot;Température : &quot;;\npage + = t;\npage + = &quot;° C&quot;;\npage + = &quot;Humidité : &quot;;\npage + = h;\npage + = &quot;%BMP180&quot;;\npage + = &quot;Pression atmosphérique : &quot;;\npage + = p;\npage + = &quot;mbar&quot;;\npage + = &quot;GPIO&quot;;\npage + = &quot;&quot;;\npage + = &quot;D3 (indiquer: &quot;;\npage + = etatLed;\npage + = &quot;)NOUS&quot;;\npage + = &quot;DE&quot;;\npage + = &quot;&quot;;\npage + = &quot;www.projetsdiy.fr&quot;;\npage + = &quot;&quot;;\npage de retour;</p>"},{"id":"text-35","type":"text","heading":"","plain_text":"Voyons un peu mieux comment le code est construit","html":"<p>Voyons un peu mieux comment le code est construit</p>"},{"id":"text-36","type":"text","heading":"","plain_text":"Code HTML\nExplication","html":"<p>Code HTML\nExplication</p>"},{"id":"text-37","type":"text","heading":"","plain_text":"Démo ESP8266 &#8211; www.projetsdiy.fr","html":"<p>Démo ESP8266 &#8211; www.projetsdiy.fr</p>"},{"id":"text-38","type":"text","heading":"","plain_text":"lang : permet de définir la langue de la page\ntête : c&#39;est l&#39;en-tête de la page. Il contient différents méta (paramètres)","html":"<p>lang : permet de définir la langue de la page\ntête : c&#039;est l&#039;en-tête de la page. Il contient différents méta (paramètres)</p>"},{"id":"text-39","type":"text","heading":"","plain_text":"http-equiv = ’refresh’: il s’agit d’une page que le navigateur devra actualiser. Pour plus de types, allez ici\ncontent = &quot;10&quot;: toutes les 10 secondes","html":"<p>http-equiv = ’refresh’: il s’agit d’une page que le navigateur devra actualiser. Pour plus de types, allez ici\ncontent = &quot;10&quot;: toutes les 10 secondes</p>"},{"id":"text-40","type":"text","heading":"","plain_text":"Titre : le titre de la page affiché dans la barre du navigateur\nstyle : un style pour la page (couleur de fond, police à utiliser, couleur du texte","html":"<p>Titre : le titre de la page affiché dans la barre du navigateur\nstyle : un style pour la page (couleur de fond, police à utiliser, couleur du texte</p>"},{"id":"text-41","type":"text","heading":"","plain_text":"C&#39;est le contenu de la page affichée","html":"<p>C&#039;est le contenu de la page affichée</p>"},{"id":"text-42","type":"text","heading":"","plain_text":"ESP8266 Demo","html":"<p>ESP8266 Demo</p>"},{"id":"text-43","type":"text","heading":"","plain_text":"Un titre affiché en haut de la page","html":"<p>Un titre affiché en haut de la page</p>"},{"id":"text-44","type":"text","heading":"","plain_text":"DHT22","html":"<p>DHT22</p>"},{"id":"text-45","type":"text","heading":"","plain_text":"Un titre (h3, plus petit) pour le capteur DHT22","html":"<p>Un titre (h3, plus petit) pour le capteur DHT22</p>"},{"id":"text-46","type":"text","heading":"","plain_text":"Température: xx ° C\nHumidité: xx%","html":"<p>Température: xx ° C\nHumidité: xx%</p>"},{"id":"text-47","type":"text","heading":"","plain_text":"Le bloc ul permet d&#39;afficher comme liste information. La même chose pour le BMP180","html":"<p>Le bloc ul permet d&#039;afficher comme liste information. La même chose pour le BMP180</p>"},{"id":"text-48","type":"text","heading":"","plain_text":"D3 (état: xx)\nNOUS\nDE","html":"<p>D3 (état: xx)\nNOUS\nDE</p>"},{"id":"text-49","type":"text","heading":"","plain_text":"Pour mettre à jour le GPIO, nous utilisons un formulaire.\nIci, nous utilisons un bouton radio pour changer l&#39;état (On / Off) puis nous envoyons (soumettre) le contenu du formulaire avec un bouton.\nL&#39;option Nom vous permet de nommer la variable qui contiendra l&#39;état que vous souhaitez récupérer dans le code Arduino. Ici LED.","html":"<p>Pour mettre à jour le GPIO, nous utilisons un formulaire.\nIci, nous utilisons un bouton radio pour changer l&#039;état (On / Off) puis nous envoyons (soumettre) le contenu du formulaire avec un bouton.\nL&#039;option Nom vous permet de nommer la variable qui contiendra l&#039;état que vous souhaitez récupérer dans le code Arduino. Ici LED.</p>"},{"id":"text-50","type":"text","heading":"","plain_text":"Toute balise ouverte doit être fermée (c&#39;est mieux!)","html":"<p>Toute balise ouverte doit être fermée (c&#039;est mieux!)</p>"},{"id":"text-51","type":"text","heading":"","plain_text":"La fonction handleRoot vous permet de surveiller si vous recevez une demande d&#39;actualisation du GPIO en contrôlant si l&#39;argument LED est retourné par la page. Si c&#39;est le cas, nous exécutons la fonction handleSubmit. A nous de créer\nvoid handleRoot () \nif (server.hasArg (&quot;LED&quot;)) \nhandleSubmit ();\n autre \nserver.send (200, &quot;text / html&quot;, getPage ());","html":"<p>La fonction handleRoot vous permet de surveiller si vous recevez une demande d&#039;actualisation du GPIO en contrôlant si l&#039;argument LED est retourné par la page. Si c&#039;est le cas, nous exécutons la fonction handleSubmit. A nous de créer\nvoid handleRoot () \nif (server.hasArg (&quot;LED&quot;)) \nhandleSubmit ();\n autre \nserver.send (200, &quot;text / html&quot;, getPage ());</p>"},{"id":"text-52","type":"text","heading":"","plain_text":"La fonction handleSubmit traite la mise à jour du GPIO. On obtient l&#39;état de la variable LED. Attention, c&#39;est une chaîne de caractères, il faut donc tester &quot;1&quot; et non 1. On en profite pour affecter l&#39;état du GPIO dans la variable etatLed sous forme de chaîne, c&#39;est plus amusant à lire . Enfin, nous mettons à jour l&#39;affichage de la page HTML avec server.send. Nous récupérons la page mise à jour en appelant la fonction getPage ().\nvoid handleSubmit () \n// Mettre à jour le GPIO / Mettre à jour le GPIO\nString LEDValue;\nLEDValue = server.arg (&quot;LED&quot;);\nSerial.println (&quot;Définir GPIO&quot;); Serial.print (LEDValue);\nif (LEDValue == &quot;1&quot;) \ndigitalWrite (LEDPIN, 1);\netatLed = &quot;On&quot;;\nserver.send (200, &quot;text / html&quot;, getPage ());\n else if (LEDValue == &quot;0&quot;) \ndigitalWrite (LEDPIN, 0);\netatLed = &quot;Off&quot;;\nserver.send (200, &quot;text / html&quot;, getPage ());\n autre \nSerial.println (&quot;Err Led Value&quot;);","html":"<p>La fonction handleSubmit traite la mise à jour du GPIO. On obtient l&#039;état de la variable LED. Attention, c&#039;est une chaîne de caractères, il faut donc tester &quot;1&quot; et non 1. On en profite pour affecter l&#039;état du GPIO dans la variable etatLed sous forme de chaîne, c&#039;est plus amusant à lire . Enfin, nous mettons à jour l&#039;affichage de la page HTML avec server.send. Nous récupérons la page mise à jour en appelant la fonction getPage ().\nvoid handleSubmit () \n// Mettre à jour le GPIO / Mettre à jour le GPIO\nString LEDValue;\nLEDValue = server.arg (&quot;LED&quot;);\nSerial.println (&quot;Définir GPIO&quot;); Serial.print (LEDValue);\nif (LEDValue == &quot;1&quot;) \ndigitalWrite (LEDPIN, 1);\netatLed = &quot;On&quot;;\nserver.send (200, &quot;text / html&quot;, getPage ());\n else if (LEDValue == &quot;0&quot;) \ndigitalWrite (LEDPIN, 0);\netatLed = &quot;Off&quot;;\nserver.send (200, &quot;text / html&quot;, getPage ());\n autre \nSerial.println (&quot;Err Led Value&quot;);</p>"},{"id":"text-53","type":"text","heading":"","plain_text":"Maintenant que toutes les fonctions sont créées, nous pouvons appeler la fonction installer (). Il initialise le BMP180, la connexion WiFi, connecte la fonction qui s&#39;occupe de la page principale et enfin on lance le serveur web\nvoid setup () \nSerial.begin (115200);\n// Initialisation du BMP180 / Init BMP180\nif (! bmp.begin ()) \nSerial.println (&quot;BMP180 KO!&quot;);\ntandis que (1);\n autre \nSerial.println (&quot;BMP180 OK&quot;);","html":"<p>Maintenant que toutes les fonctions sont créées, nous pouvons appeler la fonction installer (). Il initialise le BMP180, la connexion WiFi, connecte la fonction qui s&#039;occupe de la page principale et enfin on lance le serveur web\nvoid setup () \nSerial.begin (115200);\n// Initialisation du BMP180 / Init BMP180\nif (! bmp.begin ()) \nSerial.println (&quot;BMP180 KO!&quot;);\ntandis que (1);\n autre \nSerial.println (&quot;BMP180 OK&quot;);</p>"},{"id":"text-54","type":"text","heading":"","plain_text":"WiFi.begin (ssid, mot de passe);\n// Attendre la connexion au réseau WiFi / Attendre la connexion\nwhile (WiFi.status ()! = WL_CONNECTED) \nretard (500); Serial.print (&quot;.&quot;);","html":"<p>WiFi.begin (ssid, mot de passe);\n// Attendre la connexion au réseau WiFi / Attendre la connexion\nwhile (WiFi.status ()! = WL_CONNECTED) \nretard (500); Serial.print (&quot;.&quot;);</p>"},{"id":"text-55","type":"text","heading":"","plain_text":"// Connexion WiFi établie / connexion WiFi OK\nSerial.println (&quot;&quot;);\nSerial.print (&quot;Connecté à&quot;); Serial.println (ssid);\nSerial.print (&quot;adresse IP:&quot;); Serial.println (WiFi.localIP ());","html":"<p>// Connexion WiFi établie / connexion WiFi OK\nSerial.println (&quot;&quot;);\nSerial.print (&quot;Connecté à&quot;); Serial.println (ssid);\nSerial.print (&quot;adresse IP:&quot;); Serial.println (WiFi.localIP ());</p>"},{"id":"text-56","type":"text","heading":"","plain_text":"// On branche la fonction qui gère la première page / lien vers la fonction qui gère la page de lancement\nserver.on (&quot;/&quot;, handleRoot);","html":"<p>// On branche la fonction qui gère la première page / lien vers la fonction qui gère la page de lancement\nserver.on (&quot;/&quot;, handleRoot);</p>"},{"id":"text-57","type":"text","heading":"","plain_text":"server.begin ();\nSerial.println (&quot;Le serveur HTTP a démarré&quot;);","html":"<p>server.begin ();\nSerial.println (&quot;Le serveur HTTP a démarré&quot;);</p>"},{"id":"text-58","type":"text","heading":"","plain_text":"Il ne reste plus qu&#39;à exécuter la fonction boucle () lire régulièrement les mesures sur les capteurs. Contrairement à l&#39;exemple précédent basé sur la bibliothèque ESP8266WiFi, voici la bibliothèque ESP8266WebServer nécessite de brancher la fonction de rappel server.handleClient () qui surveille la présence d&#39;un client et délivre la page HTML demandée.\nboucle vide () \nserver.handleClient ();\nt = dht.readTemperature ();\nh = dht.readHumidity ();\np = bmp.readPressure () / 100.0F;\nretard (1000);","html":"<p>Il ne reste plus qu&#039;à exécuter la fonction boucle () lire régulièrement les mesures sur les capteurs. Contrairement à l&#039;exemple précédent basé sur la bibliothèque ESP8266WiFi, voici la bibliothèque ESP8266WebServer nécessite de brancher la fonction de rappel server.handleClient () qui surveille la présence d&#039;un client et délivre la page HTML demandée.\nboucle vide () \nserver.handleClient ();\nt = dht.readTemperature ();\nh = dht.readHumidity ();\np = bmp.readPressure () / 100.0F;\nretard (1000);</p>"},{"id":"text-59","type":"text","heading":"","plain_text":"Voici le code source assemblé du projet que vous avez juste besoin de coller dans un nouveau projet, puis de le télécharger\n#comprendre \n#comprendre \n#comprendre \n#comprendre","html":"<p>Voici le code source assemblé du projet que vous avez juste besoin de coller dans un nouveau projet, puis de le télécharger\n#comprendre \n#comprendre \n#comprendre \n#comprendre</p>"},{"id":"text-60","type":"text","heading":"","plain_text":"#define ssid &quot;xx&quot; // WiFi SSID\n#define password &quot;xxxxxx&quot; // Mot de passe WiFi\n#define DHTTYPE DHT22 // type DHT (DHT11, DHT22)\n#define DHTPIN D4 // Broche DHT / Broche DHT\n#define LEDPIN D3 // Led\nflotteur t = 0;\nflotteur h = 0;\nflotteur p = 0;\nString etatLed = &quot;OFF&quot;;","html":"<p>#define ssid &quot;xx&quot; // WiFi SSID\n#define password &quot;xxxxxx&quot; // Mot de passe WiFi\n#define DHTTYPE DHT22 // type DHT (DHT11, DHT22)\n#define DHTPIN D4 // Broche DHT / Broche DHT\n#define LEDPIN D3 // Led\nflotteur t = 0;\nflotteur h = 0;\nflotteur p = 0;\nString etatLed = &quot;OFF&quot;;</p>"},{"id":"text-61","type":"text","heading":"","plain_text":"// Créer des objets / créer des objets\nDHT DHT (DHTPIN, DHTTYPE);\nAdafruit_BMP085 bmp;\nESP8266WebServer server (80);","html":"<p>// Créer des objets / créer des objets\nDHT DHT (DHTPIN, DHTTYPE);\nAdafruit_BMP085 bmp;\nESP8266WebServer server (80);</p>"},{"id":"text-62","type":"text","heading":"","plain_text":"String getPage () \nPage de chaîne = &quot;&quot;;\npage + = &quot;Démo ESP8266 - www.projetsdiy.fr&quot;;\npage + = &quot;&quot;;\npage + = &quot;ESP8266 Demo&quot;;\npage + = &quot;DHT22&quot;;\npage + = &quot;Température : &quot;;\npage + = t;\npage + = &quot;° C&quot;;\npage + = &quot;Humidité : &quot;;\npage + = h;\npage + = &quot;%BMP180&quot;;\npage + = &quot;Pression atmosphérique : &quot;;\npage + = p;\npage + = &quot;mbar&quot;;\npage + = &quot;GPIO&quot;;\npage + = &quot;&quot;;\npage + = &quot;D3 (indiquer: &quot;;\npage + = etatLed;\npage + = &quot;)&quot;;\npage + = &quot;NOUS&quot;;\npage + = &quot;DE&quot;;\npage + = &quot;&quot;;\npage + = &quot;www.projetsdiy.fr&quot;;\npage + = &quot;&quot;;\npage de retour;","html":"<p>String getPage () \nPage de chaîne = &quot;&quot;;\npage + = &quot;Démo ESP8266 - www.projetsdiy.fr&quot;;\npage + = &quot;&quot;;\npage + = &quot;ESP8266 Demo&quot;;\npage + = &quot;DHT22&quot;;\npage + = &quot;Température : &quot;;\npage + = t;\npage + = &quot;° C&quot;;\npage + = &quot;Humidité : &quot;;\npage + = h;\npage + = &quot;%BMP180&quot;;\npage + = &quot;Pression atmosphérique : &quot;;\npage + = p;\npage + = &quot;mbar&quot;;\npage + = &quot;GPIO&quot;;\npage + = &quot;&quot;;\npage + = &quot;D3 (indiquer: &quot;;\npage + = etatLed;\npage + = &quot;)&quot;;\npage + = &quot;NOUS&quot;;\npage + = &quot;DE&quot;;\npage + = &quot;&quot;;\npage + = &quot;www.projetsdiy.fr&quot;;\npage + = &quot;&quot;;\npage de retour;</p>"},{"id":"text-63","type":"text","heading":"","plain_text":"void handleRoot () \nif (server.hasArg (&quot;LED&quot;)) \nhandleSubmit ();\n autre \nserver.send (200, &quot;text / html&quot;, getPage ());","html":"<p>void handleRoot () \nif (server.hasArg (&quot;LED&quot;)) \nhandleSubmit ();\n autre \nserver.send (200, &quot;text / html&quot;, getPage ());</p>"},{"id":"text-64","type":"text","heading":"","plain_text":"void handleSubmit () \n// Mettre à jour le GPIO / Mettre à jour le GPIO\nString LEDValue;\nLEDValue = server.arg (&quot;LED&quot;);\nSerial.println (&quot;Définir GPIO&quot;); Serial.print (LEDValue);\nif (LEDValue == &quot;1&quot;) \ndigitalWrite (LEDPIN, 1);\netatLed = &quot;On&quot;;\nserver.send (200, &quot;text / html&quot;, getPage ());\n else if (LEDValue == &quot;0&quot;) \ndigitalWrite (LEDPIN, 0);\netatLed = &quot;Off&quot;;\nserver.send (200, &quot;text / html&quot;, getPage ());\n autre \nSerial.println (&quot;Err Led Value&quot;);","html":"<p>void handleSubmit () \n// Mettre à jour le GPIO / Mettre à jour le GPIO\nString LEDValue;\nLEDValue = server.arg (&quot;LED&quot;);\nSerial.println (&quot;Définir GPIO&quot;); Serial.print (LEDValue);\nif (LEDValue == &quot;1&quot;) \ndigitalWrite (LEDPIN, 1);\netatLed = &quot;On&quot;;\nserver.send (200, &quot;text / html&quot;, getPage ());\n else if (LEDValue == &quot;0&quot;) \ndigitalWrite (LEDPIN, 0);\netatLed = &quot;Off&quot;;\nserver.send (200, &quot;text / html&quot;, getPage ());\n autre \nSerial.println (&quot;Err Led Value&quot;);</p>"},{"id":"text-65","type":"text","heading":"","plain_text":"void setup () \nSerial.begin (115200);\n// Initialisation du BMP180 / Init BMP180\nif (! bmp.begin ()) \nSerial.println (&quot;BMP180 KO!&quot;);\ntandis que (1);\n autre \nSerial.println (&quot;BMP180 OK&quot;);","html":"<p>void setup () \nSerial.begin (115200);\n// Initialisation du BMP180 / Init BMP180\nif (! bmp.begin ()) \nSerial.println (&quot;BMP180 KO!&quot;);\ntandis que (1);\n autre \nSerial.println (&quot;BMP180 OK&quot;);</p>"},{"id":"text-66","type":"text","heading":"","plain_text":"WiFi.begin (ssid, mot de passe);\n// Attendre la connexion au réseau WiFi / Attendre la connexion\nwhile (WiFi.status ()! = WL_CONNECTED) \nretard (500); Serial.print (&quot;.&quot;);","html":"<p>WiFi.begin (ssid, mot de passe);\n// Attendre la connexion au réseau WiFi / Attendre la connexion\nwhile (WiFi.status ()! = WL_CONNECTED) \nretard (500); Serial.print (&quot;.&quot;);</p>"},{"id":"text-67","type":"text","heading":"","plain_text":"// Connexion WiFi établie / connexion WiFi OK\nSerial.println (&quot;&quot;);\nSerial.print (&quot;Connecté à&quot;); Serial.println (ssid);\nSerial.print (&quot;adresse IP:&quot;); Serial.println (WiFi.localIP ());","html":"<p>// Connexion WiFi établie / connexion WiFi OK\nSerial.println (&quot;&quot;);\nSerial.print (&quot;Connecté à&quot;); Serial.println (ssid);\nSerial.print (&quot;adresse IP:&quot;); Serial.println (WiFi.localIP ());</p>"},{"id":"text-68","type":"text","heading":"","plain_text":"// On branche la fonction qui gère la première page / lien vers la fonction qui gère la page de lancement\nserver.on (&quot;/&quot;, handleRoot);","html":"<p>// On branche la fonction qui gère la première page / lien vers la fonction qui gère la page de lancement\nserver.on (&quot;/&quot;, handleRoot);</p>"},{"id":"text-69","type":"text","heading":"","plain_text":"server.begin ();\nSerial.println (&quot;Le serveur HTTP a démarré&quot;);","html":"<p>server.begin ();\nSerial.println (&quot;Le serveur HTTP a démarré&quot;);</p>"},{"id":"text-70","type":"text","heading":"","plain_text":"boucle vide () \nserver.handleClient ();\nt = dht.readTemperature ();\nh = dht.readHumidity ();\np = bmp.readPressure () / 100.0F;\nretard (1000);","html":"<p>boucle vide () \nserver.handleClient ();\nt = dht.readTemperature ();\nh = dht.readHumidity ();\np = bmp.readPressure () / 100.0F;\nretard (1000);</p>"},{"id":"text-71","type":"text","heading":"","plain_text":"Récupérez l&#39;adresse IP de Wemos en ouvrant le moniteur série puis connectez-vous à partir d&#39;un navigateur Internet pour accéder à l&#39;interface de la mini station météo.","html":"<p>Récupérez l&#039;adresse IP de Wemos en ouvrant le moniteur série puis connectez-vous à partir d&#039;un navigateur Internet pour accéder à l&#039;interface de la mini station météo.</p>"},{"id":"text-72","type":"text","heading":"","plain_text":"Voilà, nous savons maintenant comment créer un serveur Web à l&#39;aide d&#39;un ESP8266, contrôler le GPIO et afficher les mesures des capteurs. Nous n&#39;avons vu ici que les principaux rudiments pour commencer, mais ils couvrent déjà une grande partie de ce dont vous avez besoin pour développer de petits objets connectés. Dans le prochain tutoriel, nous verrons comment avoir une plus belle interface graphique en utilisant Bootstrap, un framework développé par un développeur travaillant chez Tweeter qui vous permet de créer de plus belles interfaces graphiques en HTML.","html":"<p>Voilà, nous savons maintenant comment créer un serveur Web à l&#039;aide d&#039;un ESP8266, contrôler le GPIO et afficher les mesures des capteurs. Nous n&#039;avons vu ici que les principaux rudiments pour commencer, mais ils couvrent déjà une grande partie de ce dont vous avez besoin pour développer de petits objets connectés. Dans le prochain tutoriel, nous verrons comment avoir une plus belle interface graphique en utilisant Bootstrap, un framework développé par un développeur travaillant chez Tweeter qui vous permet de créer de plus belles interfaces graphiques en HTML.</p>"},{"id":"text-73","type":"text","heading":"","plain_text":"Remarque. L&#39;ensemble du tutoriel a été développé sur l&#39;IDE Arduino 1.8.1 installé sur un Orange Pi Plus 2e (présenté ici) exécutant Armbian (Ubuntu 16.04 LTS). Suivez ce tutoriel pour savoir comment installer l&#39;IDE Arduino sur Linux (ARM ou x86).","html":"<p>Remarque. L&#039;ensemble du tutoriel a été développé sur l&#039;IDE Arduino 1.8.1 installé sur un Orange Pi Plus 2e (présenté ici) exécutant Armbian (Ubuntu 16.04 LTS). Suivez ce tutoriel pour savoir comment installer l&#039;IDE Arduino sur Linux (ARM ou x86).</p>"},{"id":"text-74","type":"text","heading":"","plain_text":"Nouveaux boucliers compatibles LoLin W600-PICO et WeMos d1 mini  \nCommencez avec des objets connectés DIY (2). Communiquer, programmer, stocker, visualiser, fabriquer des circuits  \n# Découvertes de la semaine 5: WeMos disparaît, nouvelle gamme LoLin 2019  \n# Test IAQ CCS811, capteur de qualité de l&#39;air TVOC, bus eCO2 i2C (Arduino, ESP8266)  \nBibliothèque Arduino Telegram Bot universelle compatible avec les mises à niveau Arduino, ESP32 et ESP8266 vers la version 1.1.0  \nCartes de développement et boucliers Wemos, nouvelles fonctionnalités pour 2018 et mises à jour","html":"<p>Nouveaux boucliers compatibles LoLin W600-PICO et WeMos d1 mini  \nCommencez avec des objets connectés DIY (2). Communiquer, programmer, stocker, visualiser, fabriquer des circuits  \n# Découvertes de la semaine 5: WeMos disparaît, nouvelle gamme LoLin 2019  \n# Test IAQ CCS811, capteur de qualité de l&#039;air TVOC, bus eCO2 i2C (Arduino, ESP8266)  \nBibliothèque Arduino Telegram Bot universelle compatible avec les mises à niveau Arduino, ESP32 et ESP8266 vers la version 1.1.0  \nCartes de développement et boucliers Wemos, nouvelles fonctionnalités pour 2018 et mises à jour</p>"},{"id":"text-75","type":"text","heading":"","plain_text":"As-tu aimé cet article ?\n                                        \n[Total:[Total:[Total:[Total:  Moyenne: ]","html":"<p>As-tu aimé cet article ?\n                                        \n[Total:[Total:[Total:[Total:  Moyenne: ]</p>"},{"id":"text-76","type":"text","heading":"","plain_text":"Click to rate this post!\n                                   \n                               [Total: 0  Average: 0]","html":"<p>Click to rate this post!\n                                   \n                               [Total: 0  Average: 0]</p>"}],"sections":[{"id":"text-1","heading":"Text","content":"RecordEnregistréEffacé 4"},{"id":"text-2","heading":"Text","content":"L&#39;ESP8266 peut être programmé comme un Arduino classique mais son principal intérêt est sa connexion Wi-Fi qui lui permet de publier des données sur un serveur ou un tableau de bord en ligne (ThingSpeak, Freeboard.io), ou de créer facilement des objets connectés qui peuvent être contrôlés à partir d&#39;un serveur domotique ou application mobile (développé avec Blynk ou Cayenne par exemple)."},{"id":"text-3","heading":"Text","content":"Dans ce didacticiel, nous allons apprendre à programmer l&#39;ESP8266 pour qu&#39;il se comporte comme un serveur Web. C&#39;est-à-dire que l&#39;on peut interagir avec le programme, le GPIO &#8230; à partir d&#39;une interface web accessible depuis un navigateur web.\nAvant de commencer, il est nécessaire de vérifier que toutes les bibliothèques nécessaires sont installées.\nhttps://arduino.esp8266.com/stable/package_esp8266com_index.json\nhttp://arduino.esp8266.com/stable/package_esp8266com_index.json"},{"id":"text-4","heading":"Text","content":"Vous pouvez regarder (par curiosité) les cartes gérées par la bibliothèque ESP8266 et coller l&#39;URL précédente dans un navigateur. En janvier 2017 (version 2.3.0), les cartes suivantes sont gérées:"},{"id":"text-5","heading":"Text","content":"Module ESP8266 générique\nOlimex MOD-WIFI-ESP8266 (-DEV)\nNodeMCU 0.9 (module ESP-12)\nNodeMCU 1.0 (module ESP-12E)\nAdafruit HUZZAH ESP8266 (ESP-12)\nESPresso Lite 1.0\nESPresso Lite 2.0\nPhoenix 1.0\nPhoenix 2.0\nSparkFun Thing\nSweetPea ESP-210\nWeMos D1\nWeMos D1 mini\nESPino (module ESP-12)\nESPino (module WROOM-02)\nWifInfo\nESPDuino"},{"id":"text-6","heading":"Text","content":"Allez au gestionnaire de cartes et regarde esp8266, puis cliquez sur installer."},{"id":"text-7","heading":"Text","content":"En même temps que les cartes, toutes les bibliothèques nécessaires ainsi que de nombreux exemples sont installés. Si les exemples ne sont pas visibles dans le menu Fichier -&gt; Exemples -&gt; Exemples pour WeMos D1, quittez et relancez l&#39;IDE Arduino.\nNous allons aller étape par étape pour comprendre comment créer un serveur web sur un ESP8266. Ouvrez l&#39;exemple WiFiWebServer.\nNous avons besoin au moins de la bibliothèque ESP8266WiFi.h pour créer un serveur Web. Comme toutes les librairies, il faut creuser beaucoup pour découvrir les méthodes disponibles, voici un petit aperçu pour mieux comprendre ce que vous pouvez en faire. le code source de la bibliothèque est disponible ici. Cette bibliothèque est une adaptation de toutes les bibliothèques développées pour l&#39;Arduino. Vous pouvez également trouver beaucoup d&#39;informations ici"},{"id":"text-8","heading":"Text","content":"WiFiClient"},{"id":"text-9","heading":"Text","content":"uint8_t status ()\nint connect (IPAddress ip, port uint16_t)\nint connect (const char * host, uint16_t port)\ntaille_t écrire (uint8_t)\ntaille_t écrire (const uint8_t * buf, taille_t taille)\nsize_t write_P (PGM_P buf, size_t size)\ntaille_t écrire (Stream &amp; stream)\nint disponible ()\nlire (uint8_t * buf, size_t size)\nint peek ()\nsize_t peekBytes (tampon uint8_t *, taille size_t)\nsize_t peekBytes (char * buffer, size_t length)\nvoid flush ()\nvoid stop ()\nuint8_t connecté ()\nIPAddress remoteIP ()\nuint16_t remotePort ()\nIPAddress localIP ()\nuint16_t localPort ()\nbool getNoDelay ()\nvoid setNoDelay (bool nodelay)\nvoid setLocalPortStart (port uint16_t)\nstatique vide stopAll ();\nvide statique stopAllExcept (WiFiClient * c)"},{"id":"text-10","heading":"Text","content":"WiFiServer"},{"id":"text-11","heading":"Text","content":"WiFiServer (adresse IPAddress, port uint16_t)\nWiFiServer (port uint16_t)\nWiFiClient disponible (statut uint8_t * = NULL)\nbool hasClient ()\nvoid begin ()\nvoid setNoDelay (bool nodelay)\nbool getNoDelay ()\nécriture taille_t virtuelle (uint8_t)\nuint8_t status ()\nvoid close ()\nvoid stop ()"},{"id":"text-12","heading":"Text","content":"WiFiUDP\nWiFiClientSecure"},{"id":"text-13","heading":"Text","content":"#comprendre \nconst char * ssid = &quot;votre-ssid&quot;;\nconst char * password = &quot;votre-mot de passe&quot;;\nNous créons une instance, un objet qui contiendra le serveur Web. Nous communiquerons avec lui sur le port 80, le port classique pour les requêtes HTTP utilisées par les navigateurs Internet.\nServeur WiFiServer (80);\nLa boucle de configuration.\nvoid setup () \n// Ouverture du port série en 115200 bauds pour envoyer des messages de débogage à l&#39;IDE par exemple\nSerial.begin (115200);\nretard (10);"},{"id":"text-14","heading":"Text","content":"// prépare GPIO2 (sortie)\npinMode (2, SORTIE);\ndigitalWrite (2, 0);"},{"id":"text-15","heading":"Text","content":"// Se connecter au réseau WiFi\nSerial.println ();\nSerial.println ();\nSerial.print (&quot;Connexion à&quot;);\nSerial.println (ssid);"},{"id":"text-16","heading":"Text","content":"// Nous nous connectons à un réseau WiFi avec le SSID et le mot de passe précédemment configurés\nWiFi.begin (ssid, mot de passe);"},{"id":"text-17","heading":"Text","content":"// Nous ne quittons la boucle que lorsque la connexion a été établie.\n// Cette partie doit être améliorée pour le fonctionnement sur batterie car en l&#39;absence de réseau\n// on va vider la batterie!\nwhile (WiFi.status ()! = WL_CONNECTED) \nretard (500);\nSerial.print (&quot;.&quot;);"},{"id":"text-18","heading":"Text","content":"Serial.println (&quot;&quot;);\nSerial.println (&quot;WiFi connecté&quot;);"},{"id":"text-19","heading":"Text","content":"// connexion OK, on ​​démarre le serveur web // Démarrer le serveur\nserver.begin ();\nSerial.println (&quot;Serveur démarré&quot;);"},{"id":"text-20","heading":"Text","content":"// On indique sur le port série l&#39;adresse IP de l&#39;ESP pour la retrouver facilement / Imprimer l&#39;adresse IP\nSerial.println (WiFi.localIP ());"},{"id":"text-21","heading":"Text","content":"Que se passe-t-il dans la boucle de boucle?\nNous ne faisons quelque chose que si un client est connecté, c&#39;est-à-dire que nous faisons une requête HTTP sur l&#39;ESP8266 à partir d&#39;un navigateur Internet\nClient WiFiClient = server.available ();\nsi (! client) \nrevenir;"},{"id":"text-22","heading":"Text","content":"Lorsqu&#39;un client se connecte, il est indiqué sur le port série\nSerial.println (&quot;nouveau client&quot;);\nwhile (! client.available ()) \nretard (1);"},{"id":"text-23","heading":"Text","content":"On obtient la requête HTTP, ici l&#39;URL saisie simplement dans le navigateur. Le contenu de la requête HTTP est envoyé au port série. On vide le buffer avec la méthode affleurer.\nString req = client.readStringUntil (&amp; # 39;  r &amp; # 39;);\nSerial.println (req);\nclient.flush ();\nNous recherchons dans la requête HTTP ce qu&#39;il faut faire. La méthode la plus simple consiste à passer des commandes à l&#39;ESP8266 sous la forme d&#39;une commande du type / gpio / desire_state (0, 1 ou marche / arrêt). Nous allons juste faire un test sur une chaîne de caractères avec la commande indexOf sur la variable req. Ce type de stratégie convient aux petits projets mais il peut rapidement devenir une source d&#39;erreur avec l&#39;empilement de if, else if.\nint val;\nif (req.indexOf (&quot;/ gpio / 0&quot;)! = -1)\nval = 0;\nsinon if (req.indexOf (&quot;/ gpio / 1&quot;)! = -1)\nval = 1;\nautre \nSerial.println (&quot;demande non valide&quot;);\nclient.stop ();\nrevenir;"},{"id":"text-24","heading":"Text","content":"Nous mettons à jour l&#39;état GPIO et vider le tampon\ndigitalWrite (2, val);\nclient.flush ();\nNous créons maintenant une page HTML qui contient l&#39;état du GPIO. Il s&#39;agit d&#39;une chaîne de texte qui contient le code HTML de la page. On insère dans le code de la page, l&#39;état du GPIO\nChaîne s = &quot;HTTP / 1.1 200 OK  r  nContenu-Type: texte / html  r  n  r  n r  n r  nGPIO est maintenant &quot;;\ns + = (val)? &quot;haut&quot;: &quot;bas&quot;;\ns + = &quot;ne pas&quot;;\nNous publions cette page au client avec la commande d&#39;impression, très facile!\nclient.print (s);\nVoilà, vous pouvez désormais contrôler à distance tout matériel connecté au GPIO (un relais, une LED, un moteur, un servomoteur, etc.) à l&#39;aide d&#39;une simple requête HTTP. Vous pouvez par exemple exécuter très simplement une commande à partir d&#39;un logiciel domotique. Voici deux exemples, le premier pour Domoticz, le second pour Jeedom.\nMaintenant, vous aimeriez certainement pouvoir faire une petite interface pour vos projets ESP8266. Pour cela, nous devons connaître quelques notions de base du HTML. Nous n&#39;irons pas très loin dans l&#39;apprentissage du HTML, il suffit d&#39;apprendre les éléments importants pour débuter et avoir un projet fonctionnel. Si vous avez besoin de plus d&#39;éléments d&#39;interface, je recommande w3schools qui est une référence dans l&#39;apprentissage du HTML. Le site est en anglais mais il est très clair et très facile d&#39;accès.\nDans un projet ESP8266, nous pouvons créer des pages HTML dynamiques, c&#39;est-à-dire que nous construisons une chaîne de texte qui contient le code de la page que nous afficherons ensuite. C&#39;est ce que nous allons faire. Mais l&#39;ESP8266 est également capable de fonctionner comme un vrai site web, c&#39;est-à-dire qu&#39;on peut installer sur des pages HTML à mémoire flash, du code javascript, des feuilles de style CSS &#8230; On n&#39;ira pas aussi loin dans ce premier tutoriel.\nJe vous propose de créer une petite station météo pour avoir des données à mettre à jour régulièrement et de créer un bouton pour activer / désactiver une sortie GPIO (juste une LED par exemple). J&#39;ai utilisé le matériel suivant\nVoici un tableau de localisation et de correspondance des broches entre Arduino et ESP8266."},{"id":"text-25","heading":"Text","content":"Composant\nBroches\nÉquivalence ESP8266 (Wemos D1 mini)"},{"id":"text-26","heading":"Text","content":"DHT22\nVCC\n5V"},{"id":"text-27","heading":"Text","content":"GND\ng"},{"id":"text-28","heading":"Text","content":"Les données\nG5"},{"id":"text-29","heading":"Text","content":"BMP180\nVCC\n5V"},{"id":"text-30","heading":"Text","content":"GND\ng"},{"id":"text-31","heading":"Text","content":"SDA\nD2"},{"id":"text-32","heading":"Text","content":"Nous commençons par déclarer les bibliothèques nécessaires. N&#39;oubliez pas d&#39;installer les bibliothèques à partir du gestionnaire de bibliothèques (DHT et BMP085)."},{"id":"text-33","heading":"Text","content":"Remarque. Vous pouvez rencontrer une erreur de compilation adafruit_Sensor.h: Aucun fichier ou répertoire de ce type. Dans ce cas, téléchargez et décompressez la bibliothèque manuellement depuis GitHub dans le dossier Arduino -&gt; Library, puis relancez l&#39;IDE pour qu&#39;il soit pris en compte."},{"id":"text-34","heading":"Text","content":"#comprendre \n#comprendre \n#comprendre \n#comprendre \n#comprendre \nNous définissons les variables du programme. Modifiez le réseau WiFi auquel vous allez vous connecter et le mot de passe correspondant.\n#define ssid &quot;ssid&quot; // WiFi SSID\n#define password &quot;password&quot; // mot de passe WiFi\n#define DHTTYPE DHT22 // type DHT (DHT11, DHT22)\n#define DHTPIN D4 // Broche DHT / Broche DHT\n#define LEDPIN D3 // Led\nflotteur t = 0;\nflotteur h = 0;\nflotteur p = 0;\nString etatLed = &quot;OFF&quot;;\nNous créons les objets dht, bmp et server\nDHT DHT (DHTPIN, DHTTYPE);\nAdafruit_BMP085 bmp;\nESP8266WebServer server (80);\nCette première fonction vous permet de construire le code HTML de la page principale du programme. C’est une simple chaîne de caractères. C’est un assemblage de chaînes. Vous pouvez facilement inclure la valeur ou l&#39;état d&#39;une variable (par exemple, l&#39;état d&#39;une sortie). En retour, la fonction renvoie une chaîne contenant le code HTML de la page.\nString getPage () \nPage de chaîne = &quot;&quot;;\npage + = &quot;Démo ESP8266 - www.projetsdiy.fr&quot;;\npage + = &quot;&quot;;\npage + = &quot;ESP8266 Demo&quot;;\npage + = &quot;DHT22&quot;;\npage + = &quot;Température : &quot;;\npage + = t;\npage + = &quot;° C&quot;;\npage + = &quot;Humidité : &quot;;\npage + = h;\npage + = &quot;%BMP180&quot;;\npage + = &quot;Pression atmosphérique : &quot;;\npage + = p;\npage + = &quot;mbar&quot;;\npage + = &quot;GPIO&quot;;\npage + = &quot;&quot;;\npage + = &quot;D3 (indiquer: &quot;;\npage + = etatLed;\npage + = &quot;)NOUS&quot;;\npage + = &quot;DE&quot;;\npage + = &quot;&quot;;\npage + = &quot;www.projetsdiy.fr&quot;;\npage + = &quot;&quot;;\npage de retour;"},{"id":"text-35","heading":"Text","content":"Voyons un peu mieux comment le code est construit"},{"id":"text-36","heading":"Text","content":"Code HTML\nExplication"},{"id":"text-37","heading":"Text","content":"Démo ESP8266 &#8211; www.projetsdiy.fr"},{"id":"text-38","heading":"Text","content":"lang : permet de définir la langue de la page\ntête : c&#39;est l&#39;en-tête de la page. Il contient différents méta (paramètres)"},{"id":"text-39","heading":"Text","content":"http-equiv = ’refresh’: il s’agit d’une page que le navigateur devra actualiser. Pour plus de types, allez ici\ncontent = &quot;10&quot;: toutes les 10 secondes"},{"id":"text-40","heading":"Text","content":"Titre : le titre de la page affiché dans la barre du navigateur\nstyle : un style pour la page (couleur de fond, police à utiliser, couleur du texte"},{"id":"text-41","heading":"Text","content":"C&#39;est le contenu de la page affichée"},{"id":"text-42","heading":"Text","content":"ESP8266 Demo"},{"id":"text-43","heading":"Text","content":"Un titre affiché en haut de la page"},{"id":"text-44","heading":"Text","content":"DHT22"},{"id":"text-45","heading":"Text","content":"Un titre (h3, plus petit) pour le capteur DHT22"},{"id":"text-46","heading":"Text","content":"Température: xx ° C\nHumidité: xx%"},{"id":"text-47","heading":"Text","content":"Le bloc ul permet d&#39;afficher comme liste information. La même chose pour le BMP180"},{"id":"text-48","heading":"Text","content":"D3 (état: xx)\nNOUS\nDE"},{"id":"text-49","heading":"Text","content":"Pour mettre à jour le GPIO, nous utilisons un formulaire.\nIci, nous utilisons un bouton radio pour changer l&#39;état (On / Off) puis nous envoyons (soumettre) le contenu du formulaire avec un bouton.\nL&#39;option Nom vous permet de nommer la variable qui contiendra l&#39;état que vous souhaitez récupérer dans le code Arduino. Ici LED."},{"id":"text-50","heading":"Text","content":"Toute balise ouverte doit être fermée (c&#39;est mieux!)"},{"id":"text-51","heading":"Text","content":"La fonction handleRoot vous permet de surveiller si vous recevez une demande d&#39;actualisation du GPIO en contrôlant si l&#39;argument LED est retourné par la page. Si c&#39;est le cas, nous exécutons la fonction handleSubmit. A nous de créer\nvoid handleRoot () \nif (server.hasArg (&quot;LED&quot;)) \nhandleSubmit ();\n autre \nserver.send (200, &quot;text / html&quot;, getPage ());"},{"id":"text-52","heading":"Text","content":"La fonction handleSubmit traite la mise à jour du GPIO. On obtient l&#39;état de la variable LED. Attention, c&#39;est une chaîne de caractères, il faut donc tester &quot;1&quot; et non 1. On en profite pour affecter l&#39;état du GPIO dans la variable etatLed sous forme de chaîne, c&#39;est plus amusant à lire . Enfin, nous mettons à jour l&#39;affichage de la page HTML avec server.send. Nous récupérons la page mise à jour en appelant la fonction getPage ().\nvoid handleSubmit () \n// Mettre à jour le GPIO / Mettre à jour le GPIO\nString LEDValue;\nLEDValue = server.arg (&quot;LED&quot;);\nSerial.println (&quot;Définir GPIO&quot;); Serial.print (LEDValue);\nif (LEDValue == &quot;1&quot;) \ndigitalWrite (LEDPIN, 1);\netatLed = &quot;On&quot;;\nserver.send (200, &quot;text / html&quot;, getPage ());\n else if (LEDValue == &quot;0&quot;) \ndigitalWrite (LEDPIN, 0);\netatLed = &quot;Off&quot;;\nserver.send (200, &quot;text / html&quot;, getPage ());\n autre \nSerial.println (&quot;Err Led Value&quot;);"},{"id":"text-53","heading":"Text","content":"Maintenant que toutes les fonctions sont créées, nous pouvons appeler la fonction installer (). Il initialise le BMP180, la connexion WiFi, connecte la fonction qui s&#39;occupe de la page principale et enfin on lance le serveur web\nvoid setup () \nSerial.begin (115200);\n// Initialisation du BMP180 / Init BMP180\nif (! bmp.begin ()) \nSerial.println (&quot;BMP180 KO!&quot;);\ntandis que (1);\n autre \nSerial.println (&quot;BMP180 OK&quot;);"},{"id":"text-54","heading":"Text","content":"WiFi.begin (ssid, mot de passe);\n// Attendre la connexion au réseau WiFi / Attendre la connexion\nwhile (WiFi.status ()! = WL_CONNECTED) \nretard (500); Serial.print (&quot;.&quot;);"},{"id":"text-55","heading":"Text","content":"// Connexion WiFi établie / connexion WiFi OK\nSerial.println (&quot;&quot;);\nSerial.print (&quot;Connecté à&quot;); Serial.println (ssid);\nSerial.print (&quot;adresse IP:&quot;); Serial.println (WiFi.localIP ());"},{"id":"text-56","heading":"Text","content":"// On branche la fonction qui gère la première page / lien vers la fonction qui gère la page de lancement\nserver.on (&quot;/&quot;, handleRoot);"},{"id":"text-57","heading":"Text","content":"server.begin ();\nSerial.println (&quot;Le serveur HTTP a démarré&quot;);"},{"id":"text-58","heading":"Text","content":"Il ne reste plus qu&#39;à exécuter la fonction boucle () lire régulièrement les mesures sur les capteurs. Contrairement à l&#39;exemple précédent basé sur la bibliothèque ESP8266WiFi, voici la bibliothèque ESP8266WebServer nécessite de brancher la fonction de rappel server.handleClient () qui surveille la présence d&#39;un client et délivre la page HTML demandée.\nboucle vide () \nserver.handleClient ();\nt = dht.readTemperature ();\nh = dht.readHumidity ();\np = bmp.readPressure () / 100.0F;\nretard (1000);"},{"id":"text-59","heading":"Text","content":"Voici le code source assemblé du projet que vous avez juste besoin de coller dans un nouveau projet, puis de le télécharger\n#comprendre \n#comprendre \n#comprendre \n#comprendre"},{"id":"text-60","heading":"Text","content":"#define ssid &quot;xx&quot; // WiFi SSID\n#define password &quot;xxxxxx&quot; // Mot de passe WiFi\n#define DHTTYPE DHT22 // type DHT (DHT11, DHT22)\n#define DHTPIN D4 // Broche DHT / Broche DHT\n#define LEDPIN D3 // Led\nflotteur t = 0;\nflotteur h = 0;\nflotteur p = 0;\nString etatLed = &quot;OFF&quot;;"},{"id":"text-61","heading":"Text","content":"// Créer des objets / créer des objets\nDHT DHT (DHTPIN, DHTTYPE);\nAdafruit_BMP085 bmp;\nESP8266WebServer server (80);"},{"id":"text-62","heading":"Text","content":"String getPage () \nPage de chaîne = &quot;&quot;;\npage + = &quot;Démo ESP8266 - www.projetsdiy.fr&quot;;\npage + = &quot;&quot;;\npage + = &quot;ESP8266 Demo&quot;;\npage + = &quot;DHT22&quot;;\npage + = &quot;Température : &quot;;\npage + = t;\npage + = &quot;° C&quot;;\npage + = &quot;Humidité : &quot;;\npage + = h;\npage + = &quot;%BMP180&quot;;\npage + = &quot;Pression atmosphérique : &quot;;\npage + = p;\npage + = &quot;mbar&quot;;\npage + = &quot;GPIO&quot;;\npage + = &quot;&quot;;\npage + = &quot;D3 (indiquer: &quot;;\npage + = etatLed;\npage + = &quot;)&quot;;\npage + = &quot;NOUS&quot;;\npage + = &quot;DE&quot;;\npage + = &quot;&quot;;\npage + = &quot;www.projetsdiy.fr&quot;;\npage + = &quot;&quot;;\npage de retour;"},{"id":"text-63","heading":"Text","content":"void handleRoot () \nif (server.hasArg (&quot;LED&quot;)) \nhandleSubmit ();\n autre \nserver.send (200, &quot;text / html&quot;, getPage ());"},{"id":"text-64","heading":"Text","content":"void handleSubmit () \n// Mettre à jour le GPIO / Mettre à jour le GPIO\nString LEDValue;\nLEDValue = server.arg (&quot;LED&quot;);\nSerial.println (&quot;Définir GPIO&quot;); Serial.print (LEDValue);\nif (LEDValue == &quot;1&quot;) \ndigitalWrite (LEDPIN, 1);\netatLed = &quot;On&quot;;\nserver.send (200, &quot;text / html&quot;, getPage ());\n else if (LEDValue == &quot;0&quot;) \ndigitalWrite (LEDPIN, 0);\netatLed = &quot;Off&quot;;\nserver.send (200, &quot;text / html&quot;, getPage ());\n autre \nSerial.println (&quot;Err Led Value&quot;);"},{"id":"text-65","heading":"Text","content":"void setup () \nSerial.begin (115200);\n// Initialisation du BMP180 / Init BMP180\nif (! bmp.begin ()) \nSerial.println (&quot;BMP180 KO!&quot;);\ntandis que (1);\n autre \nSerial.println (&quot;BMP180 OK&quot;);"},{"id":"text-66","heading":"Text","content":"WiFi.begin (ssid, mot de passe);\n// Attendre la connexion au réseau WiFi / Attendre la connexion\nwhile (WiFi.status ()! = WL_CONNECTED) \nretard (500); Serial.print (&quot;.&quot;);"},{"id":"text-67","heading":"Text","content":"// Connexion WiFi établie / connexion WiFi OK\nSerial.println (&quot;&quot;);\nSerial.print (&quot;Connecté à&quot;); Serial.println (ssid);\nSerial.print (&quot;adresse IP:&quot;); Serial.println (WiFi.localIP ());"},{"id":"text-68","heading":"Text","content":"// On branche la fonction qui gère la première page / lien vers la fonction qui gère la page de lancement\nserver.on (&quot;/&quot;, handleRoot);"},{"id":"text-69","heading":"Text","content":"server.begin ();\nSerial.println (&quot;Le serveur HTTP a démarré&quot;);"},{"id":"text-70","heading":"Text","content":"boucle vide () \nserver.handleClient ();\nt = dht.readTemperature ();\nh = dht.readHumidity ();\np = bmp.readPressure () / 100.0F;\nretard (1000);"},{"id":"text-71","heading":"Text","content":"Récupérez l&#39;adresse IP de Wemos en ouvrant le moniteur série puis connectez-vous à partir d&#39;un navigateur Internet pour accéder à l&#39;interface de la mini station météo."},{"id":"text-72","heading":"Text","content":"Voilà, nous savons maintenant comment créer un serveur Web à l&#39;aide d&#39;un ESP8266, contrôler le GPIO et afficher les mesures des capteurs. Nous n&#39;avons vu ici que les principaux rudiments pour commencer, mais ils couvrent déjà une grande partie de ce dont vous avez besoin pour développer de petits objets connectés. Dans le prochain tutoriel, nous verrons comment avoir une plus belle interface graphique en utilisant Bootstrap, un framework développé par un développeur travaillant chez Tweeter qui vous permet de créer de plus belles interfaces graphiques en HTML."},{"id":"text-73","heading":"Text","content":"Remarque. L&#39;ensemble du tutoriel a été développé sur l&#39;IDE Arduino 1.8.1 installé sur un Orange Pi Plus 2e (présenté ici) exécutant Armbian (Ubuntu 16.04 LTS). Suivez ce tutoriel pour savoir comment installer l&#39;IDE Arduino sur Linux (ARM ou x86)."},{"id":"text-74","heading":"Text","content":"Nouveaux boucliers compatibles LoLin W600-PICO et WeMos d1 mini  \nCommencez avec des objets connectés DIY (2). Communiquer, programmer, stocker, visualiser, fabriquer des circuits  \n# Découvertes de la semaine 5: WeMos disparaît, nouvelle gamme LoLin 2019  \n# Test IAQ CCS811, capteur de qualité de l&#39;air TVOC, bus eCO2 i2C (Arduino, ESP8266)  \nBibliothèque Arduino Telegram Bot universelle compatible avec les mises à niveau Arduino, ESP32 et ESP8266 vers la version 1.1.0  \nCartes de développement et boucliers Wemos, nouvelles fonctionnalités pour 2018 et mises à jour"},{"id":"text-75","heading":"Text","content":"As-tu aimé cet article ?\n                                        \n[Total:[Total:[Total:[Total:  Moyenne: ]"},{"id":"text-76","heading":"Text","content":"Click to rate this post!\n                                   \n                               [Total: 0  Average: 0]"}],"media":{"primary_image":"https://tutos-gameserver.fr/wp-content/uploads/2020/05/esp8266-wemos-d1-mini-serveur-server-web-dht22-bmp180-gpio-.png"},"relations":[{"rel":"canonical","href":"https://tutos-gameserver.fr/2020/05/01/comprendre-la-programmation-du-serveur-web-avec-le-code-arduino-bien-choisir-son-serveur-d-impression/"},{"rel":"alternate","href":"https://tutos-gameserver.fr/2020/05/01/comprendre-la-programmation-du-serveur-web-avec-le-code-arduino-bien-choisir-son-serveur-d-impression/llm","type":"text/html"},{"rel":"alternate","href":"https://tutos-gameserver.fr/2020/05/01/comprendre-la-programmation-du-serveur-web-avec-le-code-arduino-bien-choisir-son-serveur-d-impression/llm.json","type":"application/json"},{"rel":"llm-manifest","href":"https://tutos-gameserver.fr/llm-endpoints-manifest.json","type":"application/json"}],"http_headers":{"X-LLM-Friendly":"1","X-LLM-Schema":"1.1.0","Content-Security-Policy":"default-src 'none'; img-src * data:; style-src 'unsafe-inline'"},"license":"CC BY-ND 4.0","attribution_required":true,"allow_cors":false}