{"id":2972,"date":"2025-02-20T16:43:55","date_gmt":"2025-02-20T21:43:55","guid":{"rendered":"https:\/\/ve2cuy.com\/420-1c4\/?page_id=2972"},"modified":"2025-05-01T09:57:37","modified_gmt":"2025-05-01T14:57:37","slug":"grove-uart-wifi-v2","status":"publish","type":"page","link":"https:\/\/ve2cuy.com\/420-1c4\/index.php\/grove-uart-wifi-v2\/","title":{"rendered":"Grove &#8211; UART Wifi V2"},"content":{"rendered":"\n<h2 class=\"wp-block-heading has-vivid-cyan-blue-color has-text-color has-link-color wp-elements-1bba6796274f90bd12f3e4a4a1d43566\">1 &#8211; Grove &#8211; UART Wifi V2<\/h2>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"768\" src=\"https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/02\/grove-wifi-1024x768.jpg\" alt=\"\" class=\"wp-image-2973\" style=\"width:465px;height:auto\" srcset=\"https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/02\/grove-wifi-1024x768.jpg 1024w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/02\/grove-wifi-300x225.jpg 300w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/02\/grove-wifi-768x576.jpg 768w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/02\/grove-wifi.jpg 1400w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n<\/div>\n\n\n<p>Le module Grove &#8211; UART WiFi est un dispositif qui utilise le SoC ESP8285, tr\u00e8s populaire dans l&rsquo;IoT. Il dispose d&rsquo;une pile de protocoles TCP\/IP int\u00e9gr\u00e9e, ce qui permet \u00e0 votre microcontr\u00f4leur de se connecter facilement aux r\u00e9seaux WiFi avec peu de code. <br><br>Chaque module ESP8285 est d\u00e9j\u00e0 programm\u00e9 avec un firmware utilisant des commandes AT, ce qui permet de le contr\u00f4ler en envoyant des commandes simples. Ce SoC inclut des s\u00e9curit\u00e9s comme WEP, WPA\/WPA2, TKIP, AES et WAPI, et peut agir comme un point d&rsquo;acc\u00e8s WiFi avec DHCP. Il peut aussi rejoindre un r\u00e9seau WiFi existant et a des adresses MAC et IP r\u00e9glables.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading has-vivid-cyan-blue-color has-text-color has-link-color wp-elements-4d1ff55b523f0dd50dcaaeb5be09cb3a\">2 &#8211; ESP8285<\/h2>\n\n\n\n<p>L&rsquo;ESP8285 est un syst\u00e8me sur puce (SoC) bas\u00e9 sur un microcontr\u00f4leur \u00e0 faible consommation, d\u00e9velopp\u00e9 par Espressif Systems. Il est principalement utilis\u00e9 dans des applications IoT (Internet des Objets) gr\u00e2ce \u00e0 ses capacit\u00e9s Wi-Fi int\u00e9gr\u00e9es. Voici ses principales caract\u00e9ristiques :<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Wi-Fi int\u00e9gr\u00e9<\/strong> : L&rsquo;ESP8285 dispose d&rsquo;une connectivit\u00e9 Wi-Fi int\u00e9gr\u00e9e, ce qui permet de se connecter facilement aux r\u00e9seaux sans fil sans avoir besoin de modules externes.<\/li>\n\n\n\n<li><strong>Processeur puissant<\/strong> : Il utilise un processeur Tensilica Xtensa LX3, avec une fr\u00e9quence d&rsquo;horloge pouvant atteindre 160 MHz, ce qui le rend capable de g\u00e9rer des applications exigeantes.<\/li>\n\n\n\n<li><strong>M\u00e9moire<\/strong> : L&rsquo;ESP8285 dispose de 1 Mo de m\u00e9moire flash int\u00e9gr\u00e9e pour stocker le firmware et les donn\u00e9es, ce qui permet de r\u00e9duire la taille du mat\u00e9riel et les co\u00fbts.<\/li>\n\n\n\n<li><strong>Protocoles de s\u00e9curit\u00e9<\/strong> : Il prend en charge plusieurs protocoles de s\u00e9curit\u00e9 Wi-Fi, tels que WEP, WPA\/WPA2, AES et TKIP, ce qui le rend adapt\u00e9 pour des applications n\u00e9cessitant des connexions s\u00e9curis\u00e9es.<\/li>\n\n\n\n<li><strong>Mode point d&rsquo;acc\u00e8s (AP) et station (STA)<\/strong> : Il peut fonctionner en tant que point d&rsquo;acc\u00e8s pour cr\u00e9er un r\u00e9seau Wi-Fi ou se connecter \u00e0 un r\u00e9seau Wi-Fi existant en tant que station.<\/li>\n\n\n\n<li><strong>Bas co\u00fbt et faible consommation d&rsquo;\u00e9nergie<\/strong> : Le ESP8285 est tr\u00e8s abordable et consomme peu d&rsquo;\u00e9nergie, ce qui le rend id\u00e9al pour des applications portables ou autonomes qui n\u00e9cessitent une longue dur\u00e9e de vie sur batterie.<\/li>\n\n\n\n<li><strong>Facilit\u00e9 de programmation<\/strong> : L&rsquo;ESP8285 est souvent utilis\u00e9 avec des environnements de d\u00e9veloppement comme Arduino ou ESP-IDF (Espressif IoT Development Framework), ce qui facilite sa programmation et son int\u00e9gration dans divers projets IoT.<\/li>\n<\/ol>\n\n\n\n<p>En r\u00e9sum\u00e9, l&rsquo;ESP8285 est un SoC puissant et \u00e9conomique, parfait pour des projets connect\u00e9s n\u00e9cessitant Wi-Fi et faible consommation d&rsquo;\u00e9nergie.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading has-vivid-cyan-blue-color has-text-color has-link-color wp-elements-d6cd11222acae20d0f689a46c59738c1\">3 &#8211; Connexion &#8211; Port s\u00e9rie (UART)<\/h2>\n\n\n\n<p>Le module Grove Wifi doit-\u00eatre connect\u00e9 \u00e0 un des ports s\u00e9ries du microcontr\u00f4leur \u00e0 une vitesse de 115200 bauds.<\/p>\n\n\n\n<p>Si nous utilisons un Arduino Uno, nous sommes limit\u00e9 \u00e0 un seul port s\u00e9rie (via D0 et D1).  S&rsquo;il est utilis\u00e9 pour afficher des messages au terminal alors il n&rsquo;y aura pas de connexion possible pour le module Grove Wifi.<\/p>\n\n\n\n<p>Au contraire, si nous utilisons le port s\u00e9rie pour y connecter le module Wifi alors celui-ci ne pourra pas \u00eatre utilis\u00e9 pour de l&rsquo;affichage au terminal.<\/p>\n\n\n\n<p>Il est possible d&rsquo;utiliser la librairie SoftwareSerial pour simuler un port s\u00e9rie \u00e0 partir de deux broches digitals mais sur un Arduino Uno, la communication sera instable \u00e0 la vitesse de 115200 baud.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading has-luminous-vivid-orange-color has-text-color has-link-color wp-elements-64083597efddb200cd100f93c54bf709\">3.1 &#8211; Solution: Arduino Mega<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Arduino Mega &#8211; 4 ports UART<\/h3>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1000\" height=\"750\" src=\"https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/02\/A000067_00.front_1200x900.jpg.webp\" alt=\"\" class=\"wp-image-2974\" style=\"width:654px;height:auto\" srcset=\"https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/02\/A000067_00.front_1200x900.jpg.webp 1000w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/02\/A000067_00.front_1200x900.jpg-300x225.webp 300w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/02\/A000067_00.front_1200x900.jpg-768x576.webp 768w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><\/figure>\n<\/div>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading has-vivid-cyan-blue-color has-text-color has-link-color wp-elements-8b0ca738dc7cd217b97ffde129f3bf2e\">4 &#8211; Exp\u00e9rimentation<\/h2>\n\n\n\n<p>Nous utiliserons la librairie &lsquo;WiFiEsp&nbsp;<small>de&nbsp;bportaluri&rsquo;<\/small> pour piloter le module Grove Wifi V2 <\/p>\n\n\n\n<p class=\"has-vivid-cyan-blue-color has-text-color has-link-color wp-elements-959cbaf80992aceb7bcbaeb055b102e1\">4.1 &#8211; D\u00e9pendance PlatformIO:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">lib_deps = bportaluri\/WiFiEsp@^2.2.2\n\nmonitor_filters = send_on_enter\nmonitor_echo = yes<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading has-vivid-cyan-blue-color has-text-color has-link-color wp-elements-df27c11a2649deb89b9cc2606aff30bb\">4.1 &#8211; Les commandes &lt;AT&gt;<\/h2>\n\n\n\n<p><strong>Contr\u00f4le du module WifiESP directement en envoyant des commandes &lt;AT&gt;.<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/*\n  ESP8266 AT Command Tester\n  \n  Ce programme permet de tester les commandes AT de l'ESP8266\n  en utilisant un module ESP8266 connect\u00e9 au port Serial1.\n\n  Voici les commandes AT les plus courantes:\n  - AT        : test de communication\n  - AT+GMR    : affiche la version du firmware\n  - AT+CWLAP  : scan des r\u00e9seaux wifi\n  - AT+CWJAP=\"SSID\",\"password\" : connexion \u00e0 un r\u00e9seau wifi\n  - AT+CIFSR  : affiche l'adresse IP de l'ESP8266 et l'adresse MAC\n  \n  NOTE: AJOUTER LES LIGNES SUIVANTES DANS LE FICHIER platformio.ini\n  \n    monitor_filters = send_on_enter\n    monitor_echo = yes\n*\/\n\n#include &lt;Arduino.h>\n#define VITESSE_MONITEUR  9600\n#define VITESSE_ESP8266   115200\n#define DELAI_BUFFER      500\n\nvoid setup()\n{\n  Serial.begin(VITESSE_MONITEUR);     \/\/ Pour afficher les messages dans le moniteur s\u00e9rie\n  Serial1.begin(VITESSE_ESP8266);     \/\/ Pour communiquer avec l'ESP8266\n  Serial.println(\"\\nTester des commandes AT avec un ESP8266\");\n  Serial.println(\"\\nEntrez une commande AT ou un message \u00e0 envoyer \u00e0 l'ESP8266\");\n  Serial.println(\"\\nExemple: AT, AT+GMR, AT+CWLAP, AT+CWJAP=\\\"SSID\\\",\\\"password\\\", AT+CIFSR\\n\\n: \");\n} \/\/ Fin de la fonction setup\n\nvoid loop()\n{\n  if(Serial1.available())  \/\/ V\u00e9rifie si l'ESP8266 a envoy\u00e9 des donn\u00e9es\n  {\n    while(Serial1.available())\n    {\n      char c = Serial1.read();  \/\/ lit les donn\u00e9es de l'ESP8266\n      Serial.write(c);          \/\/ affiche les donn\u00e9es dans le moniteur s\u00e9rie\n    }\n  }\n\n  if(Serial.available())\n  {\n    delay(DELAI_BUFFER);  \/\/ Attendre DELAI_BUFFER pour recevoir toutes les donn\u00e9es\n    \/\/ Lire les donn\u00e9es du moniteur s\u00e9rie et les stocker dans une cha\u00eene de caract\u00e8res\n    String cmd = \"\";\n    while(Serial.available())\n    {\n      cmd += (char)Serial.read();\n    }\n    \/\/ Envoyer la commande AT \u00e0 l'ESP8266\n    Serial1.println(cmd); \n  }\n} \/\/ Fin de la fonction loop<\/pre>\n\n\n\n<p>&#8211;&gt; <a href=\"https:\/\/wiki.seeedstudio.com\/Grove-UART_Wifi_V2\/#wifi-at-commands\">Documentation Grove<\/a><\/p>\n\n\n\n<p><strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">NOTE<\/mark><\/strong>: Programmer une application Web compl\u00e8te \u00e0 partir de s\u00e9quences AT est un processus lourd et complexe.  Heureusement, il existe des librairies facilitant la t\u00e2che.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading has-vivid-cyan-blue-color has-text-color has-link-color wp-elements-8aa639198003bbb5e9ab687ad6a5de7a\">4.2 &#8211; LIB WifiEsp &#8211; Afficher les r\u00e9seaux disponibles<\/h2>\n\n\n\n<p><strong>Contr\u00f4le du module WifiESP en utilisant la librairie &lsquo;WiFiEsp&rsquo;.<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/*\n WiFiEsp exemple: Recherche des r\u00e9seaux Wifi disponibles\n\n Auteur: Alain Boudreault\n Date:   2025.02.20\n ----------------------------\n Description:\n\n Ce programme recherche et affiche, aux DELAI_RECHERCHE_RESEAUX millisecondes,\n l'adresse MAC du module Wifi et recherche les r\u00e9seaux Wifi disponibles.\n\n  Le module ESP8266 est connect\u00e9 \u00e0 un Arduino Mega 2560 sur Serial1\n\n  platformio.ini:\n  [env:megaatmega2560]\n  platform = atmelavr\n  board = megaatmega2560\n  framework = arduino\n  monitor_speed = 115200\n  lib_deps = \n    bportaluri\/WiFiEsp@^2.2.2  \n*\/\n\n#include &lt;Arduino.h>\n#include \"WiFiEsp.h\"\n\n\/\/ D\u00e9claration des constantes\n#define VITESSE_SERIE           115200\n#define DELAI_RECHERCHE_RESEAUX 10000\n#define SECONDE                 1000\n\n\/\/ D\u00e9claration des fonctions\nvoid afficherAdresseMAC();\nvoid listerReseaux();\nvoid afficherTydeDeCryptage(int thisType);\n\nvoid setup() {\n  Serial.begin(VITESSE_SERIE);   \/\/ Pour les messages de debug\n  Serial1.begin(VITESSE_SERIE);  \/\/ Pour les commandes AT du module ESP8266\n  Serial.println(F(\"\\n\\nExemple WiFiEsp: Recherche des r\u00e9seaux Wifi disponibles\\nAuteur: Alain Boudreault\\nDate:   2025.02.20\\n----------------------------\\nDescription:\\n\\nCe programme recherche et affiche, aux DELAI_RECHERCHE_RESEAUX millisecondes,\\nl'adresse MAC du module Wifi et recherche les r\u00e9seaux Wifi disponibles.\\n\\nLe module ESP8266 est connect\u00e9 \u00e0 un Arduino Mega 2560 sur Serial1\\n\\n\"));\n\n  delay(SECONDE);\n  WiFi.init(&amp;Serial1);    \/\/ initialisation de la communication avec le module ESP8266\n\n\n  Serial.println(F(\"\\nInitialisation du module ESP8266...\"));\n\n  \/\/ V\u00e9rification de la pr\u00e9sence du module ESP8266\n  if (WiFi.status() == WL_NO_SHIELD) {\n    Serial.println(F(\"Module ESP8266 non d\u00e9tect\u00e9.\"));\n    while (true);  \/\/ Ne pas continuer\n  }\n\n  afficherAdresseMAC();      \/\/ Affichage de l'adresse MAC du module ESP8266\n} \/\/ Fin de la fonction setup()\n\nvoid loop()\n{\n  \/\/ Recherche des r\u00e9seaux disponibles\n  Serial.println(\"\\n----------------------------------\");\n  Serial.println(\"Recherche des r\u00e9seaux disponibles:\");\n  Serial.println(\"----------------------------------\\n\");\n  listerReseaux();\n  delay(DELAI_RECHERCHE_RESEAUX);\n} \/\/ Fin de la fonction loop()\n\nvoid afficherAdresseMAC()\n{\n  \/\/ Obtenir l'adresse MAC du module ESP8266\n  byte mac[6];\n  WiFi.macAddress(mac);\n  \n  \/\/ print MAC address\n  char buf[20];\n  snprintf(buf, sizeof(buf) ,\"%02X:%02X:%02X:%02X:%02X:%02X\", mac[5], mac[4], mac[3], mac[2], mac[1], mac[0]);\n  Serial.print(\"\\nMAC adresse: \");\n  Serial.println(buf);\n} \/\/ Fin de la fonction afficherAdresseMAC()\n\nvoid listerReseaux()\n{\n  \/\/ Recherche des r\u00e9seaux disponibles\n  int numSsid = WiFi.scanNetworks();\n  if (numSsid == -1) {\n    Serial.println(\"Impossible de scanner les r\u00e9seaux disponibles\");\n    while (true);\n  }\n\n  \/\/ Affichage du nombre de r\u00e9seaux disponibles\n  Serial.print(\"Nombre de r\u00e9seaux disponibles: \");\n  Serial.print(numSsid);\n  Serial.println(\"\\n\");\n\n  \/\/ Affichage des r\u00e9seaux disponibles et de leur force de signal\n  for (int reseauCourant = 0; reseauCourant &lt; numSsid; reseauCourant++) {\n    Serial.print(reseauCourant);\n    Serial.print(\") \");\n    Serial.print(WiFi.SSID(reseauCourant));\n    Serial.print(\"\\tSignal: \");\n    Serial.print(WiFi.RSSI(reseauCourant));\n    Serial.print(\" dBm\");\n    Serial.print(\"\\tCryptage: \");\n    afficherTydeDeCryptage(WiFi.encryptionType(reseauCourant));\n  }\n} \/\/ Fin de la fonction listerReseaux()\n\nvoid afficherTydeDeCryptage(int thisType) {\n  \/\/ Tester le cryptage et afficher son type\n  switch (thisType) {\n    case ENC_TYPE_WEP:\n      Serial.print(\"WEP\");\n      break;\n    case ENC_TYPE_WPA_PSK:\n      Serial.print(\"WPA_PSK\");\n      break;\n    case ENC_TYPE_WPA2_PSK:\n      Serial.print(\"WPA2_PSK\");\n      break;\n    case ENC_TYPE_WPA_WPA2_PSK:\n      Serial.print(\"WPA_WPA2_PSK\");\n      break;\n    case ENC_TYPE_NONE:\n      Serial.print(\"None\");\n      break;\n  }\n  Serial.println();\n} \/\/ Fin de la fonction afficherTydeDeCryptage()\n\n\/\/ Fin du programme<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">5 &#8211; Utilisation d&rsquo;une API Web<\/h2>\n\n\n\n<p><strong>API = interface de programmation d&rsquo;application<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ Utilisation de l'API\n\nhttp:\/\/esh25.ve2cuy.com\/apijesuis.php?jesuis=yo_the_man<\/pre>\n\n\n\n<p><strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">NOTE<\/mark><\/strong>: \u00c0 tester avec Postman<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"976\" height=\"547\" src=\"https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/02\/Capture-decran-le-2025-02-21-a-18.54.28.png\" alt=\"\" class=\"wp-image-2991\" srcset=\"https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/02\/Capture-decran-le-2025-02-21-a-18.54.28.png 976w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/02\/Capture-decran-le-2025-02-21-a-18.54.28-300x168.png 300w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/02\/Capture-decran-le-2025-02-21-a-18.54.28-768x430.png 768w\" sizes=\"auto, (max-width: 976px) 100vw, 976px\" \/><\/figure>\n<\/div>\n\n\n<p>Le r\u00e9sultat est disponible <a href=\"http:\/\/esh25.ve2cuy.com\/jesuisv2.php\">ici<\/a><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"923\" src=\"https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/02\/Capture-decran-le-2025-02-27-a-16.46.42.png\" alt=\"\" class=\"wp-image-3055\" style=\"width:697px;height:auto\" srcset=\"https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/02\/Capture-decran-le-2025-02-27-a-16.46.42.png 800w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/02\/Capture-decran-le-2025-02-27-a-16.46.42-260x300.png 260w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/02\/Capture-decran-le-2025-02-27-a-16.46.42-768x886.png 768w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><\/figure>\n<\/div>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">6.1 &#8211; Voici un exemple d&rsquo;une requ\u00eate vers l&rsquo;API<\/h2>\n\n\n\n<p>R\u00e9sum\u00e9 des \u00e9tapes pour l&rsquo;envoi d&rsquo;une requ\u00eate Web de type GET \u00e0 partir de la classe WiFiEspClient:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Cr\u00e9er un objet de type <strong>WiFiEspClient<\/strong><\/li>\n\n\n\n<li>Initialiser la connexion vers le module Wifi\n<ul class=\"wp-block-list\">\n<li><strong>WiFi.init<\/strong>(&amp;Serial1)<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>\u00c9tablir la connexion Wifi\n<ul class=\"wp-block-list\">\n<li><strong>WiFi.begin<\/strong>(ssid, pass)<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>\u00c9tablir la connexion au serveur Web\n<ul class=\"wp-block-list\">\n<li><strong>client.connect<\/strong>(server, 80)<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Pr\u00e9parer la requ\u00eate Web\n<ul class=\"wp-block-list\">\n<li>snprintf(buffer, sizeof(buffer), \u00ab\u00a0GET \/apijesuis.php?jesuis=%s&amp;param2=.%s HTTP\/1.1\u00a0\u00bb &#8230;<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Soumettre la requ\u00eate Web\n<ul class=\"wp-block-list\">\n<li><strong>client.println<\/strong>(buffer); <strong>client.println<\/strong>(\u00ab\u00a0Host: esh25.ve2cuy.com\u00a0\u00bb);<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p><strong>Le fichier main.cpp<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/*\nURLEncode: https:\/\/github.com\/plageoj\/urlencode\nWiFiEsp by bportaluri\nlib_deps = \n\tbportaluri\/WiFiEsp@^2.2.2\n\tplageoj\/UrlEncode@^1.0.1\n*\/\n\n#include \"main.h\"\n\nchar ssid[] = \"Le nom du routeur WIFI\";      \nchar pass[] = \"Le mot de passe\";     \nint status = WL_IDLE_STATUS;     \/\/ the Wifi radio's status\nchar buffer[200];\nchar server[] = \"esh25.ve2cuy.com\";\n\nconst char* messages[] = {  \"Je suis celui qui est...\", \/\/ 0\n                            \"Rien \u00e0 ajouter\"        \/\/ 1\n                      };          \n\n\/\/ Initialize the Ethernet client object\nWiFiEspClient client;\n\nvoid setup()\n{\n \n  Serial.begin(SERIAL_BAUD_RATE);        \/\/ initialize serial for debugging\n  Serial1.begin(WIFI_BAUD_RATE);         \/\/ initialize serial for ESP module\n  WiFi.init(&amp;Serial1);                   \/\/ initialize ESP module  \/\/ initialize ESP module\n\n  if (WiFi.status() == WL_NO_SHIELD) {\n    Serial.println(\"Module WiFi non d\u00e9tect\u00e9!\");\n    \/\/ Ne pas continuer\n    while (true);\n  } \n\n  while ( status != WL_CONNECTED) {\n    Serial.print(\"Tentative de connexion au WPA SSID: \");\n    Serial.println(ssid);\n    \/\/ Connect to WPA\/WPA2 network\n    status = WiFi.begin(ssid, pass);\n  }\n\n  Serial.println(\"Syst\u00e8me connect\u00e9 au r\u00e9seau!\");\n  printWifiStatus();\n  Serial.println();\n  Serial.println(\"Connexion au serveur...\");\n \n} \/\/ setup()\n\nvoid loop()\n{\n  \/\/ Au besoin, afficher la r\u00e9ponse \u00e0 la requ\u00eate GET:\n  while (client.available()) {\n    char c = client.read();\n    Serial.write(c);\n  }\n\n  if (!client.connected()) {\n    Serial.println();\n    Serial.println(\"D\u00e9connexion du serveur...\");\n    client.stop();\n\n  }\n\n  sendInfoTOWebAPI();\n  delay(DELAI_ENTRE_REQUETES);\n\n  while(true);  \/\/ Ne plus rien faire ...\n\n} \/\/ loop()\n\nvoid sendInfoTOWebAPI(){\n  \/\/ Si la connexion au serveur est \u00e9tablie, envoyer la requ\u00eate GET\n  \/\/ avec les param\u00e8tres nomSys, ipAdr, note et statut\n  \/\/ La requ\u00eate GET doit avoir la forme suivante:\n  \/\/ http:\/\/esh25.ve2cuy.com\/apijesuis.php?jesuis=UN_TEXTE\n\n  if (client.connect(server, 80)) { \/\/ Ouvrir un socket de connexion\n    Serial.println(\"Connect\u00e9 au serveur, envoi de la requ\u00eate GET...\");\n  \n\n    snprintf(buffer, sizeof(buffer), \n      \"GET \/apijesuis.php?jesuis=%s HTTP\/1.1\", \n      urlEncode(messages[0]).c_str());\n\n    Serial.println(buffer);                         \/\/ Afficher la requ\u00eate sur le terminal\n    client.println(buffer);                         \/\/ Transmettre la requ\u00eate,\n    client.println(\"Host: esh25.ve2cuy.com\");       \/\/ vers le serveur web\n    client.println();\n    client.stop();                                 \/\/ Fermer le socket de connexion\n  }\n\n} \/\/ sendInfoTOWebAPI()\n\nvoid printWifiStatus()\n{\n  Serial.print(\"SSID: \");\n  Serial.println(WiFi.SSID());\n\n  IPAddress ip = WiFi.localIP();\n  Serial.print(\"Adresse IP:\");\n  Serial.println(ip);\n\n  long rssi = WiFi.RSSI();\n  Serial.print(\"Force du signal Wifi (RSSI):\");\n  Serial.print(rssi);\n  Serial.println(\" dBm\");\n}<\/pre>\n\n\n\n<p><strong>Le fichier main.h<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#include &lt;Arduino.h>\n#include \"WiFiEsp.h\"\n#include &lt;UrlEncode.h>\n#include \"secrets.h\"\n\n#define SERIAL_BAUD_RATE        115200\n#define WIFI_BAUD_RATE          115200\n#define DELAI_ENTRE_REQUETES    5000\n\nvoid sendInfoTOWebAPI();\nvoid printWifiStatus();\n<\/pre>\n\n\n\n<p><strong>Le fichier secrets.h<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># Placer ici le nom du r\u00e9seau et le mot de passe ...\nSID = CSTJ-UBI-D136\nPWS = ##12345678 \/\/ ## + 1<\/pre>\n\n\n\n<p><strong>Le r\u00e9sultat<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">[WiFiEsp] Initializing ESP module\n[WiFiEsp] Initilization successful - 2.2.1\n\nTentative de connexion au WPA SSID: Routeur15\n[WiFiEsp] Connected to Routeur15\nSyst\u00e8me connect\u00e9 au r\u00e9seau!\nSSID: Routeur15\nAdresse IP: 192.168.1.103\nForce du signal Wifi (RSSI): -382 dBm\n\n--> Le serveur Web n'est plus connect\u00e9.\n[WiFiEsp] Connecting to esh25.ve2cuy.com\n\nConnect\u00e9 au serveur, envoi de la requ\u00eate GET...\nGET \/apijesuis.php?jesuis=Je%20suis%20celui%20qui%20est... HTTP\/1.1\n\nVoici la r\u00e9ponse du serveur: \n\nHTTP\/1.1 200 OK\nDate: Mon, 31 [WiFiEsp] TIMEOUT: 224\n\n# NOTE:  Le code de statut de r\u00e9ponse HTTP 200 OK indique la r\u00e9ussite d'une requ\u00eate.\n<\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"791\" height=\"201\" src=\"https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/Capture-decran-le-2025-03-31-a-11.01.40.png\" alt=\"\" class=\"wp-image-3447\" srcset=\"https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/Capture-decran-le-2025-03-31-a-11.01.40.png 791w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/Capture-decran-le-2025-03-31-a-11.01.40-300x76.png 300w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/Capture-decran-le-2025-03-31-a-11.01.40-768x195.png 768w\" sizes=\"auto, (max-width: 791px) 100vw, 791px\" \/><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading has-vivid-red-color has-text-color has-link-color wp-elements-349589d487ce495d99269bb21954c5b6\">LABORATOIRE (30 minutes)<\/h2>\n\n\n\n<p>\u00c0 partir de l&rsquo;exemple pr\u00e9c\u00e9dent, modifier le code source pour que l&rsquo;application, en utilisant l&rsquo;adresse API:<\/p>\n\n\n\n<p class=\"has-vivid-cyan-blue-color has-text-color has-link-color wp-elements-ab7233d57d164f5f5dcbc1e66a4a1bbf\"><strong>http:\/\/esh25.ve2cuy.com\/apijesuislabo.php?..&amp;..&amp;<\/strong><\/p>\n\n\n\n<p>envoie les param\u00e8tres suivants:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"498\" height=\"163\" src=\"https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/Capture-decran-le-2025-03-31-a-11.23.53.png\" alt=\"\" class=\"wp-image-3448\" style=\"width:604px;height:auto\" srcset=\"https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/Capture-decran-le-2025-03-31-a-11.23.53.png 498w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/Capture-decran-le-2025-03-31-a-11.23.53-300x98.png 300w\" sizes=\"auto, (max-width: 498px) 100vw, 498px\" \/><\/figure>\n<\/div>\n\n\n<p><strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">NOTE<\/mark><\/strong>: Il faut renseigner une chaine de caract\u00e8res \u00e0 partir des informations num\u00e9riques de l&rsquo;adresse IP retourn\u00e9es par la m\u00e9thode<strong> WiFi.localIP()<\/strong>.<\/p>\n\n\n\n<p>Les informations correctement envoy\u00e9es sont affich\u00e9es via ce lien <\/p>\n\n\n\n<p><a href=\"http:\/\/esh25.ve2cuy.com\/jesuisv2labo.php\">http:\/\/esh25.ve2cuy.com\/jesuisv2labo.php<\/a><\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"765\" height=\"189\" src=\"https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/Capture-decran-le-2025-03-31-a-11.29.41.png\" alt=\"\" class=\"wp-image-3450\" style=\"width:616px;height:auto\" srcset=\"https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/Capture-decran-le-2025-03-31-a-11.29.41.png 765w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/Capture-decran-le-2025-03-31-a-11.29.41-300x74.png 300w\" sizes=\"auto, (max-width: 765px) 100vw, 765px\" \/><\/figure>\n<\/div>\n\n\n<p>Dans le cas d&rsquo;une <strong>URL<\/strong> mal form\u00e9e, le serveur web retourne le message suivant:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">Les champs jesuis, systeme et IP doivent \u00eatre fournis.<\/pre>\n\n\n\n<p><strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">Recommandation<\/mark><\/strong>: Tester votre URL dans Postman.<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>1 &#8211; Grove &#8211; UART Wifi V2 Le module Grove &#8211; UART WiFi est un dispositif qui utilise le SoC ESP8285, tr\u00e8s populaire dans l&rsquo;IoT. Il dispose d&rsquo;une pile de protocoles TCP\/IP int\u00e9gr\u00e9e, ce qui permet \u00e0 votre microcontr\u00f4leur de se connecter facilement aux r\u00e9seaux WiFi avec peu de code. Chaque module ESP8285 est d\u00e9j\u00e0 [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"ub_ctt_via":"","footnotes":""},"class_list":["post-2972","page","type-page","status-publish","hentry"],"featured_image_src":null,"_links":{"self":[{"href":"https:\/\/ve2cuy.com\/420-1c4\/index.php\/wp-json\/wp\/v2\/pages\/2972","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ve2cuy.com\/420-1c4\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/ve2cuy.com\/420-1c4\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/ve2cuy.com\/420-1c4\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/ve2cuy.com\/420-1c4\/index.php\/wp-json\/wp\/v2\/comments?post=2972"}],"version-history":[{"count":28,"href":"https:\/\/ve2cuy.com\/420-1c4\/index.php\/wp-json\/wp\/v2\/pages\/2972\/revisions"}],"predecessor-version":[{"id":3549,"href":"https:\/\/ve2cuy.com\/420-1c4\/index.php\/wp-json\/wp\/v2\/pages\/2972\/revisions\/3549"}],"wp:attachment":[{"href":"https:\/\/ve2cuy.com\/420-1c4\/index.php\/wp-json\/wp\/v2\/media?parent=2972"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}