{"version":"1.1","schema_version":"1.1.0","plugin_version":"1.1.2","url":"https://tutos-gameserver.fr/2019/07/04/zone-de-texte-html-pour-envoyer-du-texte-au-serveur-web-arduino-bien-choisir-son-serveur-d-impression/","llm_html_url":"https://tutos-gameserver.fr/2019/07/04/zone-de-texte-html-pour-envoyer-du-texte-au-serveur-web-arduino-bien-choisir-son-serveur-d-impression/llm","llm_json_url":"https://tutos-gameserver.fr/2019/07/04/zone-de-texte-html-pour-envoyer-du-texte-au-serveur-web-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":"Zone de texte HTML pour envoyer du texte au serveur Web 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":"2019-07-04T19:57:28+00:00","modified_at":"2019-07-04T19:57:28+00:00","word_count":2084,"reading_time_seconds":626,"summary":"Un bouclier Arduino et Ethernet sont utilisés en tant que serveur Web pour héberger une page Web contenant une zone de texte. Le texte peut être saisi dans la zone de texte de la page Web à l&#39;aide d&#39;un navigateur Web et envoyé à l&#39;Arduino en cliquant sur un bouton de la page Web. Un [&hellip;]","summary_points":["Un bouclier Arduino et Ethernet sont utilisés en tant que serveur Web pour héberger une page Web contenant une zone de texte.","Le texte peut être saisi dans la zone de texte de la page Web à l&#39;aide d&#39;un navigateur Web et envoyé à l&#39;Arduino en cliquant sur un bouton de la page Web.","Un HTML textarea est utilisé dans un HTML forme pour créer la zone de texte.","JavaScript est utilisé pour envoyer le texte à l&#39;Arduino à l&#39;aide d&#39;une requête HTTP GET lorsque l&#39;utilisateur clique sur le bouton de la page Web."],"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":"cd80e9b0068b6f62acc65627d9c2199a","plain_text":"Un bouclier Arduino et Ethernet sont utilisés en tant que serveur Web pour héberger une page Web contenant une zone de texte. Le texte peut être saisi dans la zone de texte de la page Web à l&#39;aide d&#39;un navigateur Web et envoyé à l&#39;Arduino en cliquant sur un bouton de la page Web.\n\n\nUn HTML textarea est utilisé dans un HTML forme pour créer la zone de texte. JavaScript est utilisé pour envoyer le texte à l&#39;Arduino à l&#39;aide d&#39;une requête HTTP GET lorsque l&#39;utilisateur clique sur le bouton de la page Web. Ceci est utile pour tout projet Arduino ayant besoin de recevoir du texte d&#39;une page Web à l&#39;aide d&#39;une zone de texte.\nLe code Arduino de ce projet suit le format du serveur Web Ajax I / O du didacticiel relatif au serveur Web du bouclier Arduino Ethernet, sauf qu&#39;il appelle la fonction JavaScript qui envoie la demande GET lorsque le bouton de la page Web est cliqué plutôt que périodiquement. l&#39;envoi de la requête GET au serveur Web Arduino.\nLa vidéo ci-dessous montre la page Web Arduino accessible par un navigateur Web et le texte envoyé à l&#39;Arduino.\n\nConfiguration matérielle, logicielle et de page HTML pour Arduino\nMatériel\nLe bouclier Ethernet Arduino Uno et Arduino avec une carte micro SD de 2 Go a été utilisé pour tester le projet. La plupart des cartes Arduino compatibles avec le bouclier Ethernet devraient fonctionner.\nInstaller\nCopiez le code HTML ci-dessous dans un fichier nommé index.htm sur la carte micro SD et insérez-la dans le connecteur de carte micro SD pour bouclier Ethernet. Chargez l&#39;esquisse Arduino d&#39;en bas sur l&#39;Arduino. Commencez par modifier l&#39;adresse MAC et IP de l&#39;esquisse en fonction de votre propre réseau. Dans la fenêtre Arduino IDE Serial Monitor, définissez le débit en bauds au bas de la fenêtre sur 115200.\nLancer le projet\nUne fois l’Arduino connecté au réseau Ethernet, ouvrez d’abord la fenêtre Serial Monitor, puis ouvrez un navigateur Web et naviguez jusqu’à l’adresse IP définie dans l’esquisse. Le texte peut être saisi dans la zone de texte de la page Web et envoyé à Arduino. Arduino affichera le texte dans la fenêtre Serial Monitor si la ligne de texte n’est pas trop longue (la longueur est définie par des matrices de mémoire tampon dans le code Arduino).\nCroquis de zone de texte Arduino\nLa liste des croquis de la zone de texte Arduino appelée text_area est montré ci-dessous. Copiez-le et collez-le dans l&#39;IDE Arduino.\n/ * ---------------------------------------------------- --------------\r\n    Programme: text_area\r\n\r\n    Description: serveur Web Arduino qui récupère le texte d&#39;un fichier HTML\r\n                                zone de texte textarea sur la page Web hébergée.\r\n                                La page Web est stockée sur la carte micro SD.\r\n  \r\n    Date: 23 juin 2015\r\n \r\n    Auteur: W.A. Smith, http://startingelectronics.org\r\n-------------------------------------------------- ------------ * /\r\n\r\n#include &lt;SPI.h&gt;\r\n#include &lt;Ethernet.h&gt;\r\n#include &lt;Dakota du Sud.h&gt;\r\n// taille de la mémoire tampon utilisée pour capturer les requêtes HTTP\r\n#define REQ_BUF_SZ 90\r\n// taille du tampon qui stocke la chaîne entrante\r\n#define TXT_BUF_SZ 50\r\n\r\n// adresse MAC de l&#39;autocollant du bouclier Ethernet sous la carte\r\noctet Mac[] = 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED;\r\nAdresse IP    ip (192, 168, 0, 20);   // adresse IP, il peut être nécessaire de changer en fonction du réseau\r\nEthernetServer    serveur (80);       // crée un serveur sur le port 80\r\nFichier webFile;                    // le fichier de page Web sur la carte SD\r\ncarboniser HTTP_req[REQ_BUF_SZ] = 0; // requête HTTP en mémoire tampon stockée sous forme de chaîne terminée par un caractère null\r\ncarboniser req_index = 0;              // index dans le tampon HTTP_req\r\ncarboniser txt_buf[TXT_BUF_SZ] = 0;  // tampon pour sauvegarder le texte\r\n\r\nvide installer()\r\n\r\n    // désactiver la puce Ethernet\r\n    pinMode(dix, SORTIE)\r\n    digitalWrite(dix, HAUTE)\r\n    \r\n    En série.commencer(115200);       // pour le débogage\r\n    \r\n    // initialise la carte SD\r\n    En série.imprimer(&quot;Initialisation de la carte SD ...&quot;)\r\n    si (!Dakota du Sud.commencer(4)) \r\n        En série.imprimer(&quot;ERREUR - L&#39;initialisation de la carte SD a échoué!&quot;)\r\n        revenir;    // l&#39;initialisation a échoué\r\n    \r\n    En série.imprimer(&quot;SUCCESS - Carte SD initialisée.&quot;)\r\n    // vérifier le fichier index.htm\r\n    si (!Dakota du Sud.existe(&quot;index.htm&quot;)) \r\n        En série.imprimer(&quot;ERREUR - Impossible de trouver le fichier index.htm!&quot;)\r\n        revenir;  // impossible de trouver le fichier d&#39;index\r\n    \r\n    En série.imprimer(&quot;SUCCESS - Fichier index.htm trouvé.&quot;)\r\n    \r\n    Ethernet.commencer(mac, ip);  // initialise le périphérique Ethernet\r\n    serveur.commencer();           // commence à écouter les clients\r\n\r\n\r\nvide boucle()\r\n{\r\n    EthernetClient    client = serveur.disponible();  // essaie d&#39;obtenir un client\r\n\r\n    si (client) {  // client obtenu?\r\n        booléen currentLineIsBlank = vrai;\r\n        tandis que (client.connecté()) {\r\n            si (client.disponible()) {   // données client disponibles à lire\r\n                carboniser c = client.lis(); // lit 1 octet (caractère) du client\r\n                // limite la taille de la requête HTTP reçue stockée\r\n                // tampon la première partie de la requête HTTP dans un tableau HTTP_req (chaîne)\r\n                // laisse le dernier élément du tableau sous la forme 0 à une chaîne de terminaison nulle (REQ_BUF_SZ - 1)\r\n                si (req_index &lt;(REQ_BUF_SZ - 1)) \r\nHTTP_req[req_index] = C;          // sauvegarde le caractère de requête HTTP\r\n                    req_index ++;\r\n\r\n                // la dernière ligne de la demande du client est vide et se termine par  n\r\n                // répond au client seulement après la dernière ligne reçue\r\n                si (c == &#39; n&#39; &amp;&amp; currentLineIsBlank) \r\n                    // envoie un en-tête de réponse http standard\r\n                    client.imprimer(&quot;HTTP / 1.1 200 OK&quot;)\r\n                    // le reste de l&#39;en-tête suit ci-dessous, selon si\r\n                    // une page Web ou une page XML est demandée\r\n                    // demande Ajax - envoi d&#39;un fichier XML\r\n                    si (StrContains (HTTP_req, &quot;ajax_inputs&quot;)) \r\n                        // envoie le reste de l&#39;en-tête HTTP\r\n                        client.imprimer(&quot;Content-Type: text / xml&quot;)\r\nclient.imprimer(&quot;Connexion: garder en vie&quot;)\r\nclient.imprimer();\r\n\r\n                        // affiche le texte reçu dans la fenêtre Serial Monitor\r\n                        // si reçu avec la chaîne HTTP GET entrante\r\n                        si (GetText (txt_buf, TXT_BUF_SZ)) \r\n                          En série.imprimer(&quot; r  nTexte reçu:&quot;)\r\n                          En série.imprimer(txt_buf);\r\n\r\n\r\n                    autre   // demande de page Web\r\n                        // envoie le reste de l&#39;en-tête HTTP\r\n                        client.imprimer(&quot;Content-Type: text / html&quot;)\r\nclient.imprimer(&quot;Connexion: garder en vie&quot;)\r\nclient.imprimer();\r\n                        // envoyer une page Web\r\n                        webFile = Dakota du Sud.ouvrir(&quot;index.htm&quot;)        // ouvrir un fichier de page Web\r\n                        si (webFile) \r\n                            tandis que(webFile.disponible()) \r\nclient.écrire(webFile.lis()); // envoyer une page Web au client\r\n                            \r\nwebFile.Fermer();\r\n\r\n\r\n                    // réinitialise l&#39;index du tampon et tous les éléments du tampon à 0\r\n                    req_index = 0;\r\nStrClear (HTTP_req, REQ_BUF_SZ);\r\n                    Pause;\r\n\r\n                // chaque ligne de texte reçue du client se termine par  r  n\r\n                si (c == &#39; n&#39;) \r\n                    // dernier caractère sur la ligne du texte reçu\r\n                    // commence une nouvelle ligne avec le caractère suivant lu\r\n                    currentLineIsBlank = vrai;\r\n \r\n                autre si (c! = &#39; r&#39;) \r\n                    // un caractère de texte a été reçu du client\r\n                    currentLineIsBlank = faux;\r\n\r\n} // fin si (client.available ())\r\n        } // fin tout le temps (client.connected ())\r\n        retard(1);      // donne le temps au navigateur Web pour recevoir les données\r\n        client.Arrêtez(); // ferme la connexion\r\n    } // fin si (client)\r\n}\r\n\r\n// extraire le texte de la chaîne de données HTTP GET entrante\r\n// renvoie true uniquement si du texte a été reçu\r\n// la chaîne doit commencer par &quot;&amp; txt =&quot; et se terminer par &quot;&amp; end&quot;\r\n// si la chaîne est trop longue pour le tampon HTTP_req et\r\n// &quot;&amp; end&quot; est coupé, la fonction retourne alors false\r\nbooléen GetText (carboniser *SMS, int len)\r\n{\r\n  booléen got_text = faux;    // indicateur de texte reçu\r\n  carboniser * str_begin;             // pointeur vers le début du texte\r\n  carboniser * str_end;               // pointeur vers la fin du texte\r\n  int str_len = 0;\r\n  int txt_index = 0;\r\n  \r\n  // obtient un pointeur au début du texte\r\n  str_begin = strstr (HTTP_req, &quot;&amp; txt =&quot;)\r\n  si (str_begin! = NULL) {\r\nstr_begin = strstr (str_begin, &quot;=&quot;)  // passe à la =\r\n    str_begin + = 1;                      // saute le =\r\n    str_end = strstr (str_begin, &quot;&amp;fin&quot;)\r\n    si (str_end! = NULL) {\r\nstr_end[0] = 0;  // termine la chaîne\r\n      str_len = strlen (str_begin);\r\n\r\n      // copie la chaîne dans le tampon txt et remplace% 20 par un espace &#39;&#39;\r\n      pour (int i = 0; i &lt;str_len; i ++) \r\n        si (str_begin[i] ! = &#39;%&#39;) \r\n          si (str_begin[i] == 0) \r\n            // fin de chaîne\r\n            Pause;\r\n\r\n          autre \r\nSMS[txt_index++] = Str_begin[i];\r\n            si (index_txt&gt; = (len - 1)) \r\n              // garde la chaîne de sortie dans les limites\r\n              Pause;\r\n\r\n\r\n\r\n        autre \r\n          // remplace% 20 par un espace\r\n          si ((str_begin[i + 1] == &#39;2&#39;) &amp;&amp; (str_begin[i + 2] == &#39;0&#39;)) \r\nSMS[txt_index++] = &#39;&#39;;\r\ni + = 2;\r\n            si (index_txt&gt; = (len - 1)) \r\n              // garde la chaîne de sortie dans les limites\r\n              Pause;\r\n\r\n\r\n\r\n\r\n      // termine la chaîne\r\n      SMS[txt_index] = 0;\r\ngot_text = vrai;\r\n}\r\n}\r\n\r\n  revenir got_text;\r\n}\r\n\r\n// met tous les éléments de str à 0 (efface le tableau)\r\nvide StrClear (carboniser * str, carboniser longueur)\r\n\r\n    pour (int i = 0; je &lt; longueur; i ++) \r\nstr[i] = 0;\r\n\r\n\r\n\r\n// recherche la chaîne sfind dans la chaîne str\r\n// retourne 1 si une chaîne est trouvée\r\n// retourne 0 si la chaîne est introuvable\r\ncarboniser StrContains (carboniser * str, carboniser * sfind)\r\n\r\n    carboniser trouvé = 0;\r\n    carboniser indice = 0;\r\n    carboniser len;\r\n\r\nlen = strlen (str);\r\n    \r\n    si (strlen (sfind)&gt; len) \r\n        revenir 0;\r\n\r\n    tandis que (index &lt;len) \r\n        si (str[index] == sfind[found]) \r\ntrouvé ++;\r\n            si (strlen (sfind) == trouvé) \r\n                revenir 1;\r\n\r\n\r\n        autre \r\ntrouvé = 0;\r\n\r\nindex ++;\r\n\r\n\r\n    revenir 0;\r\n\r\n\r\n\r\n\nPage HTML de la zone de texte\nCopiez le code HTML ci-dessous et enregistrez-le dans un fichier nommé index.htm sur la carte SD.\n\r\n\r\n    \r\n        \r\n        Zone de texte utilisant textarea\r\n        \r\n    \r\n\r\n    \r\n        \r\n            \r\n        \r\n        \r\n    \r\n\r\n\r\n\r\n\nFonctionnement de l&#39;esquisse de zone de texte\nJavaScript intégré à la page Web envoie le texte de la zone de texte à l&#39;Arduino dans le cadre d&#39;une demande HTTP GET lorsque l&#39;utilisateur clique sur le bouton de la page Web.\nFormat de la chaîne\nCette image montre l&#39;aspect de la chaîne avant son envoi à l&#39;Arduino.\n\nZone de texte HTML et chaîne de texte\n\nLe texte de la zone de texte est mis entre &amp; txt = et &amp; fin = fin avant d&#39;être envoyé. L&#39;Arduino utilise ce texte pour trouver la chaîne dans la requête HTTP GET entrante.\nLorsque le texte atteint l’Arduino, il a été modifié en remplaçant les espaces dans le texte par % 20 comme indiqué dans l&#39;image ci-dessous.\n\nChaîne de la zone de texte reçue par Arduino\n\nL&#39;esquisse Arduino doit remplacer% 20 dans le texte par des espaces.\nTraitement de la chaîne dans l&#39;esquisse Arduino\nLa fonction GetText () est utilisé pour obtenir la chaîne de zone de texte à partir de la requête HTTP GET entrante. le HTTP_req Le tableau contient le début de la requête GET entrante, comme indiqué dans l&#39;image ci-dessus &#8211; en commençant par GET / ajax_inputs &amp; txt…\nle GetText () la fonction obtient d&#39;abord un pointeur vers le début de la chaîne de la zone de texte en recherchant &amp; txt = puis en terminant la chaîne quand il trouve &amp;fin. Une boucle for est utilisée pour copier la chaîne dans le SMS tableau (qui est un pointeur sur le global txt_buf tableau). Pendant la copie, le code recherche les espaces codés sous la forme% 20 et les convertit en espaces.\nLimitations de l&#39;esquisse de la zone de texte Arduino\nL&#39;esquisse est limitée par la taille du tampon qui enregistre la demande HTTP GET entrante ainsi que par la taille du tableau qui stocke la chaîne à partir de la zone de texte. Ces deux mémoires tampon de tableaux ont été réduites afin que le code puisse être exécuté sur un Arduino Uno.\nSi la chaîne de la zone de texte est trop grande pour le tampon HTTP sur l’Arduino, la chaîne est tronquée avant la fin. &amp;fin, le texte ne sera pas affiché dans la fenêtre Serial Monitor car le GetText () la fonction retournera faux.\nCeci est juste une démonstration simple qui utilise GET pour envoyer du texte. Il serait préférable d’envoyer le texte en utilisant POST à ​​la place. Ce texte sera ajouté ultérieurement sous forme de didacticiel.\n\nClick to rate this post!\r\n                                   \r\n                               [Total: 0  Average: 0]","paragraphs":["Un bouclier Arduino et Ethernet sont utilisés en tant que serveur Web pour héberger une page Web contenant une zone de texte. Le texte peut être saisi dans la zone de texte de la page Web à l&#39;aide d&#39;un navigateur Web et envoyé à l&#39;Arduino en cliquant sur un bouton de la page Web.","Un HTML textarea est utilisé dans un HTML forme pour créer la zone de texte. JavaScript est utilisé pour envoyer le texte à l&#39;Arduino à l&#39;aide d&#39;une requête HTTP GET lorsque l&#39;utilisateur clique sur le bouton de la page Web. Ceci est utile pour tout projet Arduino ayant besoin de recevoir du texte d&#39;une page Web à l&#39;aide d&#39;une zone de texte.\nLe code Arduino de ce projet suit le format du serveur Web Ajax I / O du didacticiel relatif au serveur Web du bouclier Arduino Ethernet, sauf qu&#39;il appelle la fonction JavaScript qui envoie la demande GET lorsque le bouton de la page Web est cliqué plutôt que périodiquement. l&#39;envoi de la requête GET au serveur Web Arduino.\nLa vidéo ci-dessous montre la page Web Arduino accessible par un navigateur Web et le texte envoyé à l&#39;Arduino.","Configuration matérielle, logicielle et de page HTML pour Arduino\nMatériel\nLe bouclier Ethernet Arduino Uno et Arduino avec une carte micro SD de 2 Go a été utilisé pour tester le projet. La plupart des cartes Arduino compatibles avec le bouclier Ethernet devraient fonctionner.\nInstaller\nCopiez le code HTML ci-dessous dans un fichier nommé index.htm sur la carte micro SD et insérez-la dans le connecteur de carte micro SD pour bouclier Ethernet. Chargez l&#39;esquisse Arduino d&#39;en bas sur l&#39;Arduino. Commencez par modifier l&#39;adresse MAC et IP de l&#39;esquisse en fonction de votre propre réseau. Dans la fenêtre Arduino IDE Serial Monitor, définissez le débit en bauds au bas de la fenêtre sur 115200.\nLancer le projet\nUne fois l’Arduino connecté au réseau Ethernet, ouvrez d’abord la fenêtre Serial Monitor, puis ouvrez un navigateur Web et naviguez jusqu’à l’adresse IP définie dans l’esquisse. Le texte peut être saisi dans la zone de texte de la page Web et envoyé à Arduino. Arduino affichera le texte dans la fenêtre Serial Monitor si la ligne de texte n’est pas trop longue (la longueur est définie par des matrices de mémoire tampon dans le code Arduino).\nCroquis de zone de texte Arduino\nLa liste des croquis de la zone de texte Arduino appelée text_area est montré ci-dessous. Copiez-le et collez-le dans l&#39;IDE Arduino.\n/ * ---------------------------------------------------- --------------\n    Programme: text_area","Description: serveur Web Arduino qui récupère le texte d&#39;un fichier HTML\n                                zone de texte textarea sur la page Web hébergée.\n                                La page Web est stockée sur la carte micro SD.\n  \n    Date: 23 juin 2015\n \n    Auteur: W.A. Smith, http://startingelectronics.org\n-------------------------------------------------- ------------ * /","#include &lt;SPI.h&gt;\n#include &lt;Ethernet.h&gt;\n#include &lt;Dakota du Sud.h&gt;\n// taille de la mémoire tampon utilisée pour capturer les requêtes HTTP\n#define REQ_BUF_SZ 90\n// taille du tampon qui stocke la chaîne entrante\n#define TXT_BUF_SZ 50","// adresse MAC de l&#39;autocollant du bouclier Ethernet sous la carte\noctet Mac[] = 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED;\nAdresse IP    ip (192, 168, 0, 20);   // adresse IP, il peut être nécessaire de changer en fonction du réseau\nEthernetServer    serveur (80);       // crée un serveur sur le port 80\nFichier webFile;                    // le fichier de page Web sur la carte SD\ncarboniser HTTP_req[REQ_BUF_SZ] = 0; // requête HTTP en mémoire tampon stockée sous forme de chaîne terminée par un caractère null\ncarboniser req_index = 0;              // index dans le tampon HTTP_req\ncarboniser txt_buf[TXT_BUF_SZ] = 0;  // tampon pour sauvegarder le texte","vide installer()","// désactiver la puce Ethernet\n    pinMode(dix, SORTIE)\n    digitalWrite(dix, HAUTE)\n    \n    En série.commencer(115200);       // pour le débogage\n    \n    // initialise la carte SD\n    En série.imprimer(&quot;Initialisation de la carte SD ...&quot;)\n    si (!Dakota du Sud.commencer(4)) \n        En série.imprimer(&quot;ERREUR - L&#39;initialisation de la carte SD a échoué!&quot;)\n        revenir;    // l&#39;initialisation a échoué\n    \n    En série.imprimer(&quot;SUCCESS - Carte SD initialisée.&quot;)\n    // vérifier le fichier index.htm\n    si (!Dakota du Sud.existe(&quot;index.htm&quot;)) \n        En série.imprimer(&quot;ERREUR - Impossible de trouver le fichier index.htm!&quot;)\n        revenir;  // impossible de trouver le fichier d&#39;index\n    \n    En série.imprimer(&quot;SUCCESS - Fichier index.htm trouvé.&quot;)\n    \n    Ethernet.commencer(mac, ip);  // initialise le périphérique Ethernet\n    serveur.commencer();           // commence à écouter les clients","vide boucle()\n{\n    EthernetClient    client = serveur.disponible();  // essaie d&#39;obtenir un client","si (client) {  // client obtenu?\n        booléen currentLineIsBlank = vrai;\n        tandis que (client.connecté()) {\n            si (client.disponible()) {   // données client disponibles à lire\n                carboniser c = client.lis(); // lit 1 octet (caractère) du client\n                // limite la taille de la requête HTTP reçue stockée\n                // tampon la première partie de la requête HTTP dans un tableau HTTP_req (chaîne)\n                // laisse le dernier élément du tableau sous la forme 0 à une chaîne de terminaison nulle (REQ_BUF_SZ - 1)\n                si (req_index &lt;(REQ_BUF_SZ - 1)) \nHTTP_req[req_index] = C;          // sauvegarde le caractère de requête HTTP\n                    req_index ++;","// la dernière ligne de la demande du client est vide et se termine par  n\n                // répond au client seulement après la dernière ligne reçue\n                si (c == &#39; n&#39; &amp;&amp; currentLineIsBlank) \n                    // envoie un en-tête de réponse http standard\n                    client.imprimer(&quot;HTTP / 1.1 200 OK&quot;)\n                    // le reste de l&#39;en-tête suit ci-dessous, selon si\n                    // une page Web ou une page XML est demandée\n                    // demande Ajax - envoi d&#39;un fichier XML\n                    si (StrContains (HTTP_req, &quot;ajax_inputs&quot;)) \n                        // envoie le reste de l&#39;en-tête HTTP\n                        client.imprimer(&quot;Content-Type: text / xml&quot;)\nclient.imprimer(&quot;Connexion: garder en vie&quot;)\nclient.imprimer();","// affiche le texte reçu dans la fenêtre Serial Monitor\n                        // si reçu avec la chaîne HTTP GET entrante\n                        si (GetText (txt_buf, TXT_BUF_SZ)) \n                          En série.imprimer(&quot; r  nTexte reçu:&quot;)\n                          En série.imprimer(txt_buf);","autre   // demande de page Web\n                        // envoie le reste de l&#39;en-tête HTTP\n                        client.imprimer(&quot;Content-Type: text / html&quot;)\nclient.imprimer(&quot;Connexion: garder en vie&quot;)\nclient.imprimer();\n                        // envoyer une page Web\n                        webFile = Dakota du Sud.ouvrir(&quot;index.htm&quot;)        // ouvrir un fichier de page Web\n                        si (webFile) \n                            tandis que(webFile.disponible()) \nclient.écrire(webFile.lis()); // envoyer une page Web au client\n                            \nwebFile.Fermer();","// réinitialise l&#39;index du tampon et tous les éléments du tampon à 0\n                    req_index = 0;\nStrClear (HTTP_req, REQ_BUF_SZ);\n                    Pause;","// chaque ligne de texte reçue du client se termine par  r  n\n                si (c == &#39; n&#39;) \n                    // dernier caractère sur la ligne du texte reçu\n                    // commence une nouvelle ligne avec le caractère suivant lu\n                    currentLineIsBlank = vrai;\n \n                autre si (c! = &#39; r&#39;) \n                    // un caractère de texte a été reçu du client\n                    currentLineIsBlank = faux;","} // fin si (client.available ())\n        } // fin tout le temps (client.connected ())\n        retard(1);      // donne le temps au navigateur Web pour recevoir les données\n        client.Arrêtez(); // ferme la connexion\n    } // fin si (client)\n}","// extraire le texte de la chaîne de données HTTP GET entrante\n// renvoie true uniquement si du texte a été reçu\n// la chaîne doit commencer par &quot;&amp; txt =&quot; et se terminer par &quot;&amp; end&quot;\n// si la chaîne est trop longue pour le tampon HTTP_req et\n// &quot;&amp; end&quot; est coupé, la fonction retourne alors false\nbooléen GetText (carboniser *SMS, int len)\n{\n  booléen got_text = faux;    // indicateur de texte reçu\n  carboniser * str_begin;             // pointeur vers le début du texte\n  carboniser * str_end;               // pointeur vers la fin du texte\n  int str_len = 0;\n  int txt_index = 0;\n  \n  // obtient un pointeur au début du texte\n  str_begin = strstr (HTTP_req, &quot;&amp; txt =&quot;)\n  si (str_begin! = NULL) {\nstr_begin = strstr (str_begin, &quot;=&quot;)  // passe à la =\n    str_begin + = 1;                      // saute le =\n    str_end = strstr (str_begin, &quot;&amp;fin&quot;)\n    si (str_end! = NULL) {\nstr_end[0] = 0;  // termine la chaîne\n      str_len = strlen (str_begin);","// copie la chaîne dans le tampon txt et remplace% 20 par un espace &#39;&#39;\n      pour (int i = 0; i &lt;str_len; i ++) \n        si (str_begin[i] ! = &#39;%&#39;) \n          si (str_begin[i] == 0) \n            // fin de chaîne\n            Pause;","autre \nSMS[txt_index++] = Str_begin[i];\n            si (index_txt&gt; = (len - 1)) \n              // garde la chaîne de sortie dans les limites\n              Pause;","autre \n          // remplace% 20 par un espace\n          si ((str_begin[i + 1] == &#39;2&#39;) &amp;&amp; (str_begin[i + 2] == &#39;0&#39;)) \nSMS[txt_index++] = &#39;&#39;;\ni + = 2;\n            si (index_txt&gt; = (len - 1)) \n              // garde la chaîne de sortie dans les limites\n              Pause;","// termine la chaîne\n      SMS[txt_index] = 0;\ngot_text = vrai;\n}\n}","revenir got_text;\n}","// met tous les éléments de str à 0 (efface le tableau)\nvide StrClear (carboniser * str, carboniser longueur)","pour (int i = 0; je &lt; longueur; i ++) \nstr[i] = 0;","// recherche la chaîne sfind dans la chaîne str\n// retourne 1 si une chaîne est trouvée\n// retourne 0 si la chaîne est introuvable\ncarboniser StrContains (carboniser * str, carboniser * sfind)","carboniser trouvé = 0;\n    carboniser indice = 0;\n    carboniser len;","len = strlen (str);\n    \n    si (strlen (sfind)&gt; len) \n        revenir 0;","tandis que (index &lt;len) \n        si (str[index] == sfind[found]) \ntrouvé ++;\n            si (strlen (sfind) == trouvé) \n                revenir 1;","autre \ntrouvé = 0;","index ++;","revenir 0;","Page HTML de la zone de texte\nCopiez le code HTML ci-dessous et enregistrez-le dans un fichier nommé index.htm sur la carte SD.","Zone de texte utilisant textarea","Fonctionnement de l&#39;esquisse de zone de texte\nJavaScript intégré à la page Web envoie le texte de la zone de texte à l&#39;Arduino dans le cadre d&#39;une demande HTTP GET lorsque l&#39;utilisateur clique sur le bouton de la page Web.\nFormat de la chaîne\nCette image montre l&#39;aspect de la chaîne avant son envoi à l&#39;Arduino.","Zone de texte HTML et chaîne de texte","Le texte de la zone de texte est mis entre &amp; txt = et &amp; fin = fin avant d&#39;être envoyé. L&#39;Arduino utilise ce texte pour trouver la chaîne dans la requête HTTP GET entrante.\nLorsque le texte atteint l’Arduino, il a été modifié en remplaçant les espaces dans le texte par % 20 comme indiqué dans l&#39;image ci-dessous.","Chaîne de la zone de texte reçue par Arduino","L&#39;esquisse Arduino doit remplacer% 20 dans le texte par des espaces.\nTraitement de la chaîne dans l&#39;esquisse Arduino\nLa fonction GetText () est utilisé pour obtenir la chaîne de zone de texte à partir de la requête HTTP GET entrante. le HTTP_req Le tableau contient le début de la requête GET entrante, comme indiqué dans l&#39;image ci-dessus &#8211; en commençant par GET / ajax_inputs &amp; txt…\nle GetText () la fonction obtient d&#39;abord un pointeur vers le début de la chaîne de la zone de texte en recherchant &amp; txt = puis en terminant la chaîne quand il trouve &amp;fin. Une boucle for est utilisée pour copier la chaîne dans le SMS tableau (qui est un pointeur sur le global txt_buf tableau). Pendant la copie, le code recherche les espaces codés sous la forme% 20 et les convertit en espaces.\nLimitations de l&#39;esquisse de la zone de texte Arduino\nL&#39;esquisse est limitée par la taille du tampon qui enregistre la demande HTTP GET entrante ainsi que par la taille du tableau qui stocke la chaîne à partir de la zone de texte. Ces deux mémoires tampon de tableaux ont été réduites afin que le code puisse être exécuté sur un Arduino Uno.\nSi la chaîne de la zone de texte est trop grande pour le tampon HTTP sur l’Arduino, la chaîne est tronquée avant la fin. &amp;fin, le texte ne sera pas affiché dans la fenêtre Serial Monitor car le GetText () la fonction retournera faux.\nCeci est juste une démonstration simple qui utilise GET pour envoyer du texte. Il serait préférable d’envoyer le texte en utilisant POST à ​​la place. Ce texte sera ajouté ultérieurement sous forme de didacticiel.","Click to rate this post!\n                                   \n                               [Total: 0  Average: 0]"],"content_blocks":[{"id":"text-1","type":"text","heading":"","plain_text":"Un bouclier Arduino et Ethernet sont utilisés en tant que serveur Web pour héberger une page Web contenant une zone de texte. Le texte peut être saisi dans la zone de texte de la page Web à l&#39;aide d&#39;un navigateur Web et envoyé à l&#39;Arduino en cliquant sur un bouton de la page Web.","html":"<p>Un bouclier Arduino et Ethernet sont utilisés en tant que serveur Web pour héberger une page Web contenant une zone de texte. Le texte peut être saisi dans la zone de texte de la page Web à l&#039;aide d&#039;un navigateur Web et envoyé à l&#039;Arduino en cliquant sur un bouton de la page Web.</p>"},{"id":"text-2","type":"text","heading":"","plain_text":"Un HTML textarea est utilisé dans un HTML forme pour créer la zone de texte. JavaScript est utilisé pour envoyer le texte à l&#39;Arduino à l&#39;aide d&#39;une requête HTTP GET lorsque l&#39;utilisateur clique sur le bouton de la page Web. Ceci est utile pour tout projet Arduino ayant besoin de recevoir du texte d&#39;une page Web à l&#39;aide d&#39;une zone de texte.\nLe code Arduino de ce projet suit le format du serveur Web Ajax I / O du didacticiel relatif au serveur Web du bouclier Arduino Ethernet, sauf qu&#39;il appelle la fonction JavaScript qui envoie la demande GET lorsque le bouton de la page Web est cliqué plutôt que périodiquement. l&#39;envoi de la requête GET au serveur Web Arduino.\nLa vidéo ci-dessous montre la page Web Arduino accessible par un navigateur Web et le texte envoyé à l&#39;Arduino.","html":"<p>Un HTML textarea est utilisé dans un HTML forme pour créer la zone de texte. JavaScript est utilisé pour envoyer le texte à l&#039;Arduino à l&#039;aide d&#039;une requête HTTP GET lorsque l&#039;utilisateur clique sur le bouton de la page Web. Ceci est utile pour tout projet Arduino ayant besoin de recevoir du texte d&#039;une page Web à l&#039;aide d&#039;une zone de texte.\nLe code Arduino de ce projet suit le format du serveur Web Ajax I / O du didacticiel relatif au serveur Web du bouclier Arduino Ethernet, sauf qu&#039;il appelle la fonction JavaScript qui envoie la demande GET lorsque le bouton de la page Web est cliqué plutôt que périodiquement. l&#039;envoi de la requête GET au serveur Web Arduino.\nLa vidéo ci-dessous montre la page Web Arduino accessible par un navigateur Web et le texte envoyé à l&#039;Arduino.</p>"},{"id":"text-3","type":"text","heading":"","plain_text":"Configuration matérielle, logicielle et de page HTML pour Arduino\nMatériel\nLe bouclier Ethernet Arduino Uno et Arduino avec une carte micro SD de 2 Go a été utilisé pour tester le projet. La plupart des cartes Arduino compatibles avec le bouclier Ethernet devraient fonctionner.\nInstaller\nCopiez le code HTML ci-dessous dans un fichier nommé index.htm sur la carte micro SD et insérez-la dans le connecteur de carte micro SD pour bouclier Ethernet. Chargez l&#39;esquisse Arduino d&#39;en bas sur l&#39;Arduino. Commencez par modifier l&#39;adresse MAC et IP de l&#39;esquisse en fonction de votre propre réseau. Dans la fenêtre Arduino IDE Serial Monitor, définissez le débit en bauds au bas de la fenêtre sur 115200.\nLancer le projet\nUne fois l’Arduino connecté au réseau Ethernet, ouvrez d’abord la fenêtre Serial Monitor, puis ouvrez un navigateur Web et naviguez jusqu’à l’adresse IP définie dans l’esquisse. Le texte peut être saisi dans la zone de texte de la page Web et envoyé à Arduino. Arduino affichera le texte dans la fenêtre Serial Monitor si la ligne de texte n’est pas trop longue (la longueur est définie par des matrices de mémoire tampon dans le code Arduino).\nCroquis de zone de texte Arduino\nLa liste des croquis de la zone de texte Arduino appelée text_area est montré ci-dessous. Copiez-le et collez-le dans l&#39;IDE Arduino.\n/ * ---------------------------------------------------- --------------\n    Programme: text_area","html":"<p>Configuration matérielle, logicielle et de page HTML pour Arduino\nMatériel\nLe bouclier Ethernet Arduino Uno et Arduino avec une carte micro SD de 2 Go a été utilisé pour tester le projet. La plupart des cartes Arduino compatibles avec le bouclier Ethernet devraient fonctionner.\nInstaller\nCopiez le code HTML ci-dessous dans un fichier nommé index.htm sur la carte micro SD et insérez-la dans le connecteur de carte micro SD pour bouclier Ethernet. Chargez l&#039;esquisse Arduino d&#039;en bas sur l&#039;Arduino. Commencez par modifier l&#039;adresse MAC et IP de l&#039;esquisse en fonction de votre propre réseau. Dans la fenêtre Arduino IDE Serial Monitor, définissez le débit en bauds au bas de la fenêtre sur 115200.\nLancer le projet\nUne fois l’Arduino connecté au réseau Ethernet, ouvrez d’abord la fenêtre Serial Monitor, puis ouvrez un navigateur Web et naviguez jusqu’à l’adresse IP définie dans l’esquisse. Le texte peut être saisi dans la zone de texte de la page Web et envoyé à Arduino. Arduino affichera le texte dans la fenêtre Serial Monitor si la ligne de texte n’est pas trop longue (la longueur est définie par des matrices de mémoire tampon dans le code Arduino).\nCroquis de zone de texte Arduino\nLa liste des croquis de la zone de texte Arduino appelée text_area est montré ci-dessous. Copiez-le et collez-le dans l&#039;IDE Arduino.\n/ * ---------------------------------------------------- --------------\n    Programme: text_area</p>"},{"id":"text-4","type":"text","heading":"","plain_text":"Description: serveur Web Arduino qui récupère le texte d&#39;un fichier HTML\n                                zone de texte textarea sur la page Web hébergée.\n                                La page Web est stockée sur la carte micro SD.\n  \n    Date: 23 juin 2015\n \n    Auteur: W.A. Smith, http://startingelectronics.org\n-------------------------------------------------- ------------ * /","html":"<p>Description: serveur Web Arduino qui récupère le texte d&#039;un fichier HTML\n                                zone de texte textarea sur la page Web hébergée.\n                                La page Web est stockée sur la carte micro SD.\n  \n    Date: 23 juin 2015\n \n    Auteur: W.A. Smith, http://startingelectronics.org\n-------------------------------------------------- ------------ * /</p>"},{"id":"text-5","type":"text","heading":"","plain_text":"#include &lt;SPI.h&gt;\n#include &lt;Ethernet.h&gt;\n#include &lt;Dakota du Sud.h&gt;\n// taille de la mémoire tampon utilisée pour capturer les requêtes HTTP\n#define REQ_BUF_SZ 90\n// taille du tampon qui stocke la chaîne entrante\n#define TXT_BUF_SZ 50","html":"<p>#include &lt;SPI.h&gt;\n#include &lt;Ethernet.h&gt;\n#include &lt;Dakota du Sud.h&gt;\n// taille de la mémoire tampon utilisée pour capturer les requêtes HTTP\n#define REQ_BUF_SZ 90\n// taille du tampon qui stocke la chaîne entrante\n#define TXT_BUF_SZ 50</p>"},{"id":"text-6","type":"text","heading":"","plain_text":"// adresse MAC de l&#39;autocollant du bouclier Ethernet sous la carte\noctet Mac[] = 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED;\nAdresse IP    ip (192, 168, 0, 20);   // adresse IP, il peut être nécessaire de changer en fonction du réseau\nEthernetServer    serveur (80);       // crée un serveur sur le port 80\nFichier webFile;                    // le fichier de page Web sur la carte SD\ncarboniser HTTP_req[REQ_BUF_SZ] = 0; // requête HTTP en mémoire tampon stockée sous forme de chaîne terminée par un caractère null\ncarboniser req_index = 0;              // index dans le tampon HTTP_req\ncarboniser txt_buf[TXT_BUF_SZ] = 0;  // tampon pour sauvegarder le texte","html":"<p>// adresse MAC de l&#039;autocollant du bouclier Ethernet sous la carte\noctet Mac[] = 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED;\nAdresse IP    ip (192, 168, 0, 20);   // adresse IP, il peut être nécessaire de changer en fonction du réseau\nEthernetServer    serveur (80);       // crée un serveur sur le port 80\nFichier webFile;                    // le fichier de page Web sur la carte SD\ncarboniser HTTP_req[REQ_BUF_SZ] = 0; // requête HTTP en mémoire tampon stockée sous forme de chaîne terminée par un caractère null\ncarboniser req_index = 0;              // index dans le tampon HTTP_req\ncarboniser txt_buf[TXT_BUF_SZ] = 0;  // tampon pour sauvegarder le texte</p>"},{"id":"text-7","type":"text","heading":"","plain_text":"vide installer()","html":"<p>vide installer()</p>"},{"id":"text-8","type":"text","heading":"","plain_text":"// désactiver la puce Ethernet\n    pinMode(dix, SORTIE)\n    digitalWrite(dix, HAUTE)\n    \n    En série.commencer(115200);       // pour le débogage\n    \n    // initialise la carte SD\n    En série.imprimer(&quot;Initialisation de la carte SD ...&quot;)\n    si (!Dakota du Sud.commencer(4)) \n        En série.imprimer(&quot;ERREUR - L&#39;initialisation de la carte SD a échoué!&quot;)\n        revenir;    // l&#39;initialisation a échoué\n    \n    En série.imprimer(&quot;SUCCESS - Carte SD initialisée.&quot;)\n    // vérifier le fichier index.htm\n    si (!Dakota du Sud.existe(&quot;index.htm&quot;)) \n        En série.imprimer(&quot;ERREUR - Impossible de trouver le fichier index.htm!&quot;)\n        revenir;  // impossible de trouver le fichier d&#39;index\n    \n    En série.imprimer(&quot;SUCCESS - Fichier index.htm trouvé.&quot;)\n    \n    Ethernet.commencer(mac, ip);  // initialise le périphérique Ethernet\n    serveur.commencer();           // commence à écouter les clients","html":"<p>// désactiver la puce Ethernet\n    pinMode(dix, SORTIE)\n    digitalWrite(dix, HAUTE)\n    \n    En série.commencer(115200);       // pour le débogage\n    \n    // initialise la carte SD\n    En série.imprimer(&quot;Initialisation de la carte SD ...&quot;)\n    si (!Dakota du Sud.commencer(4)) \n        En série.imprimer(&quot;ERREUR - L&#039;initialisation de la carte SD a échoué!&quot;)\n        revenir;    // l&#039;initialisation a échoué\n    \n    En série.imprimer(&quot;SUCCESS - Carte SD initialisée.&quot;)\n    // vérifier le fichier index.htm\n    si (!Dakota du Sud.existe(&quot;index.htm&quot;)) \n        En série.imprimer(&quot;ERREUR - Impossible de trouver le fichier index.htm!&quot;)\n        revenir;  // impossible de trouver le fichier d&#039;index\n    \n    En série.imprimer(&quot;SUCCESS - Fichier index.htm trouvé.&quot;)\n    \n    Ethernet.commencer(mac, ip);  // initialise le périphérique Ethernet\n    serveur.commencer();           // commence à écouter les clients</p>"},{"id":"text-9","type":"text","heading":"","plain_text":"vide boucle()\n{\n    EthernetClient    client = serveur.disponible();  // essaie d&#39;obtenir un client","html":"<p>vide boucle()\n{\n    EthernetClient    client = serveur.disponible();  // essaie d&#039;obtenir un client</p>"},{"id":"text-10","type":"text","heading":"","plain_text":"si (client) {  // client obtenu?\n        booléen currentLineIsBlank = vrai;\n        tandis que (client.connecté()) {\n            si (client.disponible()) {   // données client disponibles à lire\n                carboniser c = client.lis(); // lit 1 octet (caractère) du client\n                // limite la taille de la requête HTTP reçue stockée\n                // tampon la première partie de la requête HTTP dans un tableau HTTP_req (chaîne)\n                // laisse le dernier élément du tableau sous la forme 0 à une chaîne de terminaison nulle (REQ_BUF_SZ - 1)\n                si (req_index &lt;(REQ_BUF_SZ - 1)) \nHTTP_req[req_index] = C;          // sauvegarde le caractère de requête HTTP\n                    req_index ++;","html":"<p>si (client) {  // client obtenu?\n        booléen currentLineIsBlank = vrai;\n        tandis que (client.connecté()) {\n            si (client.disponible()) {   // données client disponibles à lire\n                carboniser c = client.lis(); // lit 1 octet (caractère) du client\n                // limite la taille de la requête HTTP reçue stockée\n                // tampon la première partie de la requête HTTP dans un tableau HTTP_req (chaîne)\n                // laisse le dernier élément du tableau sous la forme 0 à une chaîne de terminaison nulle (REQ_BUF_SZ - 1)\n                si (req_index &lt;(REQ_BUF_SZ - 1)) \nHTTP_req[req_index] = C;          // sauvegarde le caractère de requête HTTP\n                    req_index ++;</p>"},{"id":"text-11","type":"text","heading":"","plain_text":"// la dernière ligne de la demande du client est vide et se termine par  n\n                // répond au client seulement après la dernière ligne reçue\n                si (c == &#39; n&#39; &amp;&amp; currentLineIsBlank) \n                    // envoie un en-tête de réponse http standard\n                    client.imprimer(&quot;HTTP / 1.1 200 OK&quot;)\n                    // le reste de l&#39;en-tête suit ci-dessous, selon si\n                    // une page Web ou une page XML est demandée\n                    // demande Ajax - envoi d&#39;un fichier XML\n                    si (StrContains (HTTP_req, &quot;ajax_inputs&quot;)) \n                        // envoie le reste de l&#39;en-tête HTTP\n                        client.imprimer(&quot;Content-Type: text / xml&quot;)\nclient.imprimer(&quot;Connexion: garder en vie&quot;)\nclient.imprimer();","html":"<p>// la dernière ligne de la demande du client est vide et se termine par  n\n                // répond au client seulement après la dernière ligne reçue\n                si (c == &#039; n&#039; &amp;&amp; currentLineIsBlank) \n                    // envoie un en-tête de réponse http standard\n                    client.imprimer(&quot;HTTP / 1.1 200 OK&quot;)\n                    // le reste de l&#039;en-tête suit ci-dessous, selon si\n                    // une page Web ou une page XML est demandée\n                    // demande Ajax - envoi d&#039;un fichier XML\n                    si (StrContains (HTTP_req, &quot;ajax_inputs&quot;)) \n                        // envoie le reste de l&#039;en-tête HTTP\n                        client.imprimer(&quot;Content-Type: text / xml&quot;)\nclient.imprimer(&quot;Connexion: garder en vie&quot;)\nclient.imprimer();</p>"},{"id":"text-12","type":"text","heading":"","plain_text":"// affiche le texte reçu dans la fenêtre Serial Monitor\n                        // si reçu avec la chaîne HTTP GET entrante\n                        si (GetText (txt_buf, TXT_BUF_SZ)) \n                          En série.imprimer(&quot; r  nTexte reçu:&quot;)\n                          En série.imprimer(txt_buf);","html":"<p>// affiche le texte reçu dans la fenêtre Serial Monitor\n                        // si reçu avec la chaîne HTTP GET entrante\n                        si (GetText (txt_buf, TXT_BUF_SZ)) \n                          En série.imprimer(&quot; r  nTexte reçu:&quot;)\n                          En série.imprimer(txt_buf);</p>"},{"id":"text-13","type":"text","heading":"","plain_text":"autre   // demande de page Web\n                        // envoie le reste de l&#39;en-tête HTTP\n                        client.imprimer(&quot;Content-Type: text / html&quot;)\nclient.imprimer(&quot;Connexion: garder en vie&quot;)\nclient.imprimer();\n                        // envoyer une page Web\n                        webFile = Dakota du Sud.ouvrir(&quot;index.htm&quot;)        // ouvrir un fichier de page Web\n                        si (webFile) \n                            tandis que(webFile.disponible()) \nclient.écrire(webFile.lis()); // envoyer une page Web au client\n                            \nwebFile.Fermer();","html":"<p>autre   // demande de page Web\n                        // envoie le reste de l&#039;en-tête HTTP\n                        client.imprimer(&quot;Content-Type: text / html&quot;)\nclient.imprimer(&quot;Connexion: garder en vie&quot;)\nclient.imprimer();\n                        // envoyer une page Web\n                        webFile = Dakota du Sud.ouvrir(&quot;index.htm&quot;)        // ouvrir un fichier de page Web\n                        si (webFile) \n                            tandis que(webFile.disponible()) \nclient.écrire(webFile.lis()); // envoyer une page Web au client\n                            \nwebFile.Fermer();</p>"},{"id":"text-14","type":"text","heading":"","plain_text":"// réinitialise l&#39;index du tampon et tous les éléments du tampon à 0\n                    req_index = 0;\nStrClear (HTTP_req, REQ_BUF_SZ);\n                    Pause;","html":"<p>// réinitialise l&#039;index du tampon et tous les éléments du tampon à 0\n                    req_index = 0;\nStrClear (HTTP_req, REQ_BUF_SZ);\n                    Pause;</p>"},{"id":"text-15","type":"text","heading":"","plain_text":"// chaque ligne de texte reçue du client se termine par  r  n\n                si (c == &#39; n&#39;) \n                    // dernier caractère sur la ligne du texte reçu\n                    // commence une nouvelle ligne avec le caractère suivant lu\n                    currentLineIsBlank = vrai;\n \n                autre si (c! = &#39; r&#39;) \n                    // un caractère de texte a été reçu du client\n                    currentLineIsBlank = faux;","html":"<p>// chaque ligne de texte reçue du client se termine par  r  n\n                si (c == &#039; n&#039;) \n                    // dernier caractère sur la ligne du texte reçu\n                    // commence une nouvelle ligne avec le caractère suivant lu\n                    currentLineIsBlank = vrai;\n \n                autre si (c! = &#039; r&#039;) \n                    // un caractère de texte a été reçu du client\n                    currentLineIsBlank = faux;</p>"},{"id":"text-16","type":"text","heading":"","plain_text":"} // fin si (client.available ())\n        } // fin tout le temps (client.connected ())\n        retard(1);      // donne le temps au navigateur Web pour recevoir les données\n        client.Arrêtez(); // ferme la connexion\n    } // fin si (client)\n}","html":"<p>} // fin si (client.available ())\n        } // fin tout le temps (client.connected ())\n        retard(1);      // donne le temps au navigateur Web pour recevoir les données\n        client.Arrêtez(); // ferme la connexion\n    } // fin si (client)\n}</p>"},{"id":"text-17","type":"text","heading":"","plain_text":"// extraire le texte de la chaîne de données HTTP GET entrante\n// renvoie true uniquement si du texte a été reçu\n// la chaîne doit commencer par &quot;&amp; txt =&quot; et se terminer par &quot;&amp; end&quot;\n// si la chaîne est trop longue pour le tampon HTTP_req et\n// &quot;&amp; end&quot; est coupé, la fonction retourne alors false\nbooléen GetText (carboniser *SMS, int len)\n{\n  booléen got_text = faux;    // indicateur de texte reçu\n  carboniser * str_begin;             // pointeur vers le début du texte\n  carboniser * str_end;               // pointeur vers la fin du texte\n  int str_len = 0;\n  int txt_index = 0;\n  \n  // obtient un pointeur au début du texte\n  str_begin = strstr (HTTP_req, &quot;&amp; txt =&quot;)\n  si (str_begin! = NULL) {\nstr_begin = strstr (str_begin, &quot;=&quot;)  // passe à la =\n    str_begin + = 1;                      // saute le =\n    str_end = strstr (str_begin, &quot;&amp;fin&quot;)\n    si (str_end! = NULL) {\nstr_end[0] = 0;  // termine la chaîne\n      str_len = strlen (str_begin);","html":"<p>// extraire le texte de la chaîne de données HTTP GET entrante\n// renvoie true uniquement si du texte a été reçu\n// la chaîne doit commencer par &quot;&amp; txt =&quot; et se terminer par &quot;&amp; end&quot;\n// si la chaîne est trop longue pour le tampon HTTP_req et\n// &quot;&amp; end&quot; est coupé, la fonction retourne alors false\nbooléen GetText (carboniser *SMS, int len)\n{\n  booléen got_text = faux;    // indicateur de texte reçu\n  carboniser * str_begin;             // pointeur vers le début du texte\n  carboniser * str_end;               // pointeur vers la fin du texte\n  int str_len = 0;\n  int txt_index = 0;\n  \n  // obtient un pointeur au début du texte\n  str_begin = strstr (HTTP_req, &quot;&amp; txt =&quot;)\n  si (str_begin! = NULL) {\nstr_begin = strstr (str_begin, &quot;=&quot;)  // passe à la =\n    str_begin + = 1;                      // saute le =\n    str_end = strstr (str_begin, &quot;&amp;fin&quot;)\n    si (str_end! = NULL) {\nstr_end[0] = 0;  // termine la chaîne\n      str_len = strlen (str_begin);</p>"},{"id":"text-18","type":"text","heading":"","plain_text":"// copie la chaîne dans le tampon txt et remplace% 20 par un espace &#39;&#39;\n      pour (int i = 0; i &lt;str_len; i ++) \n        si (str_begin[i] ! = &#39;%&#39;) \n          si (str_begin[i] == 0) \n            // fin de chaîne\n            Pause;","html":"<p>// copie la chaîne dans le tampon txt et remplace% 20 par un espace &#039;&#039;\n      pour (int i = 0; i &lt;str_len; i ++) \n        si (str_begin[i] ! = &#039;%&#039;) \n          si (str_begin[i] == 0) \n            // fin de chaîne\n            Pause;</p>"},{"id":"text-19","type":"text","heading":"","plain_text":"autre \nSMS[txt_index++] = Str_begin[i];\n            si (index_txt&gt; = (len - 1)) \n              // garde la chaîne de sortie dans les limites\n              Pause;","html":"<p>autre \nSMS[txt_index++] = Str_begin[i];\n            si (index_txt&gt; = (len - 1)) \n              // garde la chaîne de sortie dans les limites\n              Pause;</p>"},{"id":"text-20","type":"text","heading":"","plain_text":"autre \n          // remplace% 20 par un espace\n          si ((str_begin[i + 1] == &#39;2&#39;) &amp;&amp; (str_begin[i + 2] == &#39;0&#39;)) \nSMS[txt_index++] = &#39;&#39;;\ni + = 2;\n            si (index_txt&gt; = (len - 1)) \n              // garde la chaîne de sortie dans les limites\n              Pause;","html":"<p>autre \n          // remplace% 20 par un espace\n          si ((str_begin[i + 1] == &#039;2&#039;) &amp;&amp; (str_begin[i + 2] == &#039;0&#039;)) \nSMS[txt_index++] = &#039;&#039;;\ni + = 2;\n            si (index_txt&gt; = (len - 1)) \n              // garde la chaîne de sortie dans les limites\n              Pause;</p>"},{"id":"text-21","type":"text","heading":"","plain_text":"// termine la chaîne\n      SMS[txt_index] = 0;\ngot_text = vrai;\n}\n}","html":"<p>// termine la chaîne\n      SMS[txt_index] = 0;\ngot_text = vrai;\n}\n}</p>"},{"id":"text-22","type":"text","heading":"","plain_text":"revenir got_text;\n}","html":"<p>revenir got_text;\n}</p>"},{"id":"text-23","type":"text","heading":"","plain_text":"// met tous les éléments de str à 0 (efface le tableau)\nvide StrClear (carboniser * str, carboniser longueur)","html":"<p>// met tous les éléments de str à 0 (efface le tableau)\nvide StrClear (carboniser * str, carboniser longueur)</p>"},{"id":"text-24","type":"text","heading":"","plain_text":"pour (int i = 0; je &lt; longueur; i ++) \nstr[i] = 0;","html":"<p>pour (int i = 0; je &lt; longueur; i ++) \nstr[i] = 0;</p>"},{"id":"text-25","type":"text","heading":"","plain_text":"// recherche la chaîne sfind dans la chaîne str\n// retourne 1 si une chaîne est trouvée\n// retourne 0 si la chaîne est introuvable\ncarboniser StrContains (carboniser * str, carboniser * sfind)","html":"<p>// recherche la chaîne sfind dans la chaîne str\n// retourne 1 si une chaîne est trouvée\n// retourne 0 si la chaîne est introuvable\ncarboniser StrContains (carboniser * str, carboniser * sfind)</p>"},{"id":"text-26","type":"text","heading":"","plain_text":"carboniser trouvé = 0;\n    carboniser indice = 0;\n    carboniser len;","html":"<p>carboniser trouvé = 0;\n    carboniser indice = 0;\n    carboniser len;</p>"},{"id":"text-27","type":"text","heading":"","plain_text":"len = strlen (str);\n    \n    si (strlen (sfind)&gt; len) \n        revenir 0;","html":"<p>len = strlen (str);\n    \n    si (strlen (sfind)&gt; len) \n        revenir 0;</p>"},{"id":"text-28","type":"text","heading":"","plain_text":"tandis que (index &lt;len) \n        si (str[index] == sfind[found]) \ntrouvé ++;\n            si (strlen (sfind) == trouvé) \n                revenir 1;","html":"<p>tandis que (index &lt;len) \n        si (str[index] == sfind[found]) \ntrouvé ++;\n            si (strlen (sfind) == trouvé) \n                revenir 1;</p>"},{"id":"text-29","type":"text","heading":"","plain_text":"autre \ntrouvé = 0;","html":"<p>autre \ntrouvé = 0;</p>"},{"id":"text-30","type":"text","heading":"","plain_text":"index ++;","html":"<p>index ++;</p>"},{"id":"text-31","type":"text","heading":"","plain_text":"revenir 0;","html":"<p>revenir 0;</p>"},{"id":"text-32","type":"text","heading":"","plain_text":"Page HTML de la zone de texte\nCopiez le code HTML ci-dessous et enregistrez-le dans un fichier nommé index.htm sur la carte SD.","html":"<p>Page HTML de la zone de texte\nCopiez le code HTML ci-dessous et enregistrez-le dans un fichier nommé index.htm sur la carte SD.</p>"},{"id":"text-33","type":"text","heading":"","plain_text":"Zone de texte utilisant textarea","html":"<p>Zone de texte utilisant textarea</p>"},{"id":"text-34","type":"text","heading":"","plain_text":"Fonctionnement de l&#39;esquisse de zone de texte\nJavaScript intégré à la page Web envoie le texte de la zone de texte à l&#39;Arduino dans le cadre d&#39;une demande HTTP GET lorsque l&#39;utilisateur clique sur le bouton de la page Web.\nFormat de la chaîne\nCette image montre l&#39;aspect de la chaîne avant son envoi à l&#39;Arduino.","html":"<p>Fonctionnement de l&#039;esquisse de zone de texte\nJavaScript intégré à la page Web envoie le texte de la zone de texte à l&#039;Arduino dans le cadre d&#039;une demande HTTP GET lorsque l&#039;utilisateur clique sur le bouton de la page Web.\nFormat de la chaîne\nCette image montre l&#039;aspect de la chaîne avant son envoi à l&#039;Arduino.</p>"},{"id":"text-35","type":"text","heading":"","plain_text":"Zone de texte HTML et chaîne de texte","html":"<p>Zone de texte HTML et chaîne de texte</p>"},{"id":"text-36","type":"text","heading":"","plain_text":"Le texte de la zone de texte est mis entre &amp; txt = et &amp; fin = fin avant d&#39;être envoyé. L&#39;Arduino utilise ce texte pour trouver la chaîne dans la requête HTTP GET entrante.\nLorsque le texte atteint l’Arduino, il a été modifié en remplaçant les espaces dans le texte par % 20 comme indiqué dans l&#39;image ci-dessous.","html":"<p>Le texte de la zone de texte est mis entre &amp; txt = et &amp; fin = fin avant d&#039;être envoyé. L&#039;Arduino utilise ce texte pour trouver la chaîne dans la requête HTTP GET entrante.\nLorsque le texte atteint l’Arduino, il a été modifié en remplaçant les espaces dans le texte par % 20 comme indiqué dans l&#039;image ci-dessous.</p>"},{"id":"text-37","type":"text","heading":"","plain_text":"Chaîne de la zone de texte reçue par Arduino","html":"<p>Chaîne de la zone de texte reçue par Arduino</p>"},{"id":"text-38","type":"text","heading":"","plain_text":"L&#39;esquisse Arduino doit remplacer% 20 dans le texte par des espaces.\nTraitement de la chaîne dans l&#39;esquisse Arduino\nLa fonction GetText () est utilisé pour obtenir la chaîne de zone de texte à partir de la requête HTTP GET entrante. le HTTP_req Le tableau contient le début de la requête GET entrante, comme indiqué dans l&#39;image ci-dessus &#8211; en commençant par GET / ajax_inputs &amp; txt…\nle GetText () la fonction obtient d&#39;abord un pointeur vers le début de la chaîne de la zone de texte en recherchant &amp; txt = puis en terminant la chaîne quand il trouve &amp;fin. Une boucle for est utilisée pour copier la chaîne dans le SMS tableau (qui est un pointeur sur le global txt_buf tableau). Pendant la copie, le code recherche les espaces codés sous la forme% 20 et les convertit en espaces.\nLimitations de l&#39;esquisse de la zone de texte Arduino\nL&#39;esquisse est limitée par la taille du tampon qui enregistre la demande HTTP GET entrante ainsi que par la taille du tableau qui stocke la chaîne à partir de la zone de texte. Ces deux mémoires tampon de tableaux ont été réduites afin que le code puisse être exécuté sur un Arduino Uno.\nSi la chaîne de la zone de texte est trop grande pour le tampon HTTP sur l’Arduino, la chaîne est tronquée avant la fin. &amp;fin, le texte ne sera pas affiché dans la fenêtre Serial Monitor car le GetText () la fonction retournera faux.\nCeci est juste une démonstration simple qui utilise GET pour envoyer du texte. Il serait préférable d’envoyer le texte en utilisant POST à ​​la place. Ce texte sera ajouté ultérieurement sous forme de didacticiel.","html":"<p>L&#039;esquisse Arduino doit remplacer% 20 dans le texte par des espaces.\nTraitement de la chaîne dans l&#039;esquisse Arduino\nLa fonction GetText () est utilisé pour obtenir la chaîne de zone de texte à partir de la requête HTTP GET entrante. le HTTP_req Le tableau contient le début de la requête GET entrante, comme indiqué dans l&#039;image ci-dessus &#8211; en commençant par GET / ajax_inputs &amp; txt…\nle GetText () la fonction obtient d&#039;abord un pointeur vers le début de la chaîne de la zone de texte en recherchant &amp; txt = puis en terminant la chaîne quand il trouve &amp;fin. Une boucle for est utilisée pour copier la chaîne dans le SMS tableau (qui est un pointeur sur le global txt_buf tableau). Pendant la copie, le code recherche les espaces codés sous la forme% 20 et les convertit en espaces.\nLimitations de l&#039;esquisse de la zone de texte Arduino\nL&#039;esquisse est limitée par la taille du tampon qui enregistre la demande HTTP GET entrante ainsi que par la taille du tableau qui stocke la chaîne à partir de la zone de texte. Ces deux mémoires tampon de tableaux ont été réduites afin que le code puisse être exécuté sur un Arduino Uno.\nSi la chaîne de la zone de texte est trop grande pour le tampon HTTP sur l’Arduino, la chaîne est tronquée avant la fin. &amp;fin, le texte ne sera pas affiché dans la fenêtre Serial Monitor car le GetText () la fonction retournera faux.\nCeci est juste une démonstration simple qui utilise GET pour envoyer du texte. Il serait préférable d’envoyer le texte en utilisant POST à ​​la place. Ce texte sera ajouté ultérieurement sous forme de didacticiel.</p>"},{"id":"text-39","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":"Un bouclier Arduino et Ethernet sont utilisés en tant que serveur Web pour héberger une page Web contenant une zone de texte. Le texte peut être saisi dans la zone de texte de la page Web à l&#39;aide d&#39;un navigateur Web et envoyé à l&#39;Arduino en cliquant sur un bouton de la page Web."},{"id":"text-2","heading":"Text","content":"Un HTML textarea est utilisé dans un HTML forme pour créer la zone de texte. JavaScript est utilisé pour envoyer le texte à l&#39;Arduino à l&#39;aide d&#39;une requête HTTP GET lorsque l&#39;utilisateur clique sur le bouton de la page Web. Ceci est utile pour tout projet Arduino ayant besoin de recevoir du texte d&#39;une page Web à l&#39;aide d&#39;une zone de texte.\nLe code Arduino de ce projet suit le format du serveur Web Ajax I / O du didacticiel relatif au serveur Web du bouclier Arduino Ethernet, sauf qu&#39;il appelle la fonction JavaScript qui envoie la demande GET lorsque le bouton de la page Web est cliqué plutôt que périodiquement. l&#39;envoi de la requête GET au serveur Web Arduino.\nLa vidéo ci-dessous montre la page Web Arduino accessible par un navigateur Web et le texte envoyé à l&#39;Arduino."},{"id":"text-3","heading":"Text","content":"Configuration matérielle, logicielle et de page HTML pour Arduino\nMatériel\nLe bouclier Ethernet Arduino Uno et Arduino avec une carte micro SD de 2 Go a été utilisé pour tester le projet. La plupart des cartes Arduino compatibles avec le bouclier Ethernet devraient fonctionner.\nInstaller\nCopiez le code HTML ci-dessous dans un fichier nommé index.htm sur la carte micro SD et insérez-la dans le connecteur de carte micro SD pour bouclier Ethernet. Chargez l&#39;esquisse Arduino d&#39;en bas sur l&#39;Arduino. Commencez par modifier l&#39;adresse MAC et IP de l&#39;esquisse en fonction de votre propre réseau. Dans la fenêtre Arduino IDE Serial Monitor, définissez le débit en bauds au bas de la fenêtre sur 115200.\nLancer le projet\nUne fois l’Arduino connecté au réseau Ethernet, ouvrez d’abord la fenêtre Serial Monitor, puis ouvrez un navigateur Web et naviguez jusqu’à l’adresse IP définie dans l’esquisse. Le texte peut être saisi dans la zone de texte de la page Web et envoyé à Arduino. Arduino affichera le texte dans la fenêtre Serial Monitor si la ligne de texte n’est pas trop longue (la longueur est définie par des matrices de mémoire tampon dans le code Arduino).\nCroquis de zone de texte Arduino\nLa liste des croquis de la zone de texte Arduino appelée text_area est montré ci-dessous. Copiez-le et collez-le dans l&#39;IDE Arduino.\n/ * ---------------------------------------------------- --------------\n    Programme: text_area"},{"id":"text-4","heading":"Text","content":"Description: serveur Web Arduino qui récupère le texte d&#39;un fichier HTML\n                                zone de texte textarea sur la page Web hébergée.\n                                La page Web est stockée sur la carte micro SD.\n  \n    Date: 23 juin 2015\n \n    Auteur: W.A. Smith, http://startingelectronics.org\n-------------------------------------------------- ------------ * /"},{"id":"text-5","heading":"Text","content":"#include &lt;SPI.h&gt;\n#include &lt;Ethernet.h&gt;\n#include &lt;Dakota du Sud.h&gt;\n// taille de la mémoire tampon utilisée pour capturer les requêtes HTTP\n#define REQ_BUF_SZ 90\n// taille du tampon qui stocke la chaîne entrante\n#define TXT_BUF_SZ 50"},{"id":"text-6","heading":"Text","content":"// adresse MAC de l&#39;autocollant du bouclier Ethernet sous la carte\noctet Mac[] = 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED;\nAdresse IP    ip (192, 168, 0, 20);   // adresse IP, il peut être nécessaire de changer en fonction du réseau\nEthernetServer    serveur (80);       // crée un serveur sur le port 80\nFichier webFile;                    // le fichier de page Web sur la carte SD\ncarboniser HTTP_req[REQ_BUF_SZ] = 0; // requête HTTP en mémoire tampon stockée sous forme de chaîne terminée par un caractère null\ncarboniser req_index = 0;              // index dans le tampon HTTP_req\ncarboniser txt_buf[TXT_BUF_SZ] = 0;  // tampon pour sauvegarder le texte"},{"id":"text-7","heading":"Text","content":"vide installer()"},{"id":"text-8","heading":"Text","content":"// désactiver la puce Ethernet\n    pinMode(dix, SORTIE)\n    digitalWrite(dix, HAUTE)\n    \n    En série.commencer(115200);       // pour le débogage\n    \n    // initialise la carte SD\n    En série.imprimer(&quot;Initialisation de la carte SD ...&quot;)\n    si (!Dakota du Sud.commencer(4)) \n        En série.imprimer(&quot;ERREUR - L&#39;initialisation de la carte SD a échoué!&quot;)\n        revenir;    // l&#39;initialisation a échoué\n    \n    En série.imprimer(&quot;SUCCESS - Carte SD initialisée.&quot;)\n    // vérifier le fichier index.htm\n    si (!Dakota du Sud.existe(&quot;index.htm&quot;)) \n        En série.imprimer(&quot;ERREUR - Impossible de trouver le fichier index.htm!&quot;)\n        revenir;  // impossible de trouver le fichier d&#39;index\n    \n    En série.imprimer(&quot;SUCCESS - Fichier index.htm trouvé.&quot;)\n    \n    Ethernet.commencer(mac, ip);  // initialise le périphérique Ethernet\n    serveur.commencer();           // commence à écouter les clients"},{"id":"text-9","heading":"Text","content":"vide boucle()\n{\n    EthernetClient    client = serveur.disponible();  // essaie d&#39;obtenir un client"},{"id":"text-10","heading":"Text","content":"si (client) {  // client obtenu?\n        booléen currentLineIsBlank = vrai;\n        tandis que (client.connecté()) {\n            si (client.disponible()) {   // données client disponibles à lire\n                carboniser c = client.lis(); // lit 1 octet (caractère) du client\n                // limite la taille de la requête HTTP reçue stockée\n                // tampon la première partie de la requête HTTP dans un tableau HTTP_req (chaîne)\n                // laisse le dernier élément du tableau sous la forme 0 à une chaîne de terminaison nulle (REQ_BUF_SZ - 1)\n                si (req_index &lt;(REQ_BUF_SZ - 1)) \nHTTP_req[req_index] = C;          // sauvegarde le caractère de requête HTTP\n                    req_index ++;"},{"id":"text-11","heading":"Text","content":"// la dernière ligne de la demande du client est vide et se termine par  n\n                // répond au client seulement après la dernière ligne reçue\n                si (c == &#39; n&#39; &amp;&amp; currentLineIsBlank) \n                    // envoie un en-tête de réponse http standard\n                    client.imprimer(&quot;HTTP / 1.1 200 OK&quot;)\n                    // le reste de l&#39;en-tête suit ci-dessous, selon si\n                    // une page Web ou une page XML est demandée\n                    // demande Ajax - envoi d&#39;un fichier XML\n                    si (StrContains (HTTP_req, &quot;ajax_inputs&quot;)) \n                        // envoie le reste de l&#39;en-tête HTTP\n                        client.imprimer(&quot;Content-Type: text / xml&quot;)\nclient.imprimer(&quot;Connexion: garder en vie&quot;)\nclient.imprimer();"},{"id":"text-12","heading":"Text","content":"// affiche le texte reçu dans la fenêtre Serial Monitor\n                        // si reçu avec la chaîne HTTP GET entrante\n                        si (GetText (txt_buf, TXT_BUF_SZ)) \n                          En série.imprimer(&quot; r  nTexte reçu:&quot;)\n                          En série.imprimer(txt_buf);"},{"id":"text-13","heading":"Text","content":"autre   // demande de page Web\n                        // envoie le reste de l&#39;en-tête HTTP\n                        client.imprimer(&quot;Content-Type: text / html&quot;)\nclient.imprimer(&quot;Connexion: garder en vie&quot;)\nclient.imprimer();\n                        // envoyer une page Web\n                        webFile = Dakota du Sud.ouvrir(&quot;index.htm&quot;)        // ouvrir un fichier de page Web\n                        si (webFile) \n                            tandis que(webFile.disponible()) \nclient.écrire(webFile.lis()); // envoyer une page Web au client\n                            \nwebFile.Fermer();"},{"id":"text-14","heading":"Text","content":"// réinitialise l&#39;index du tampon et tous les éléments du tampon à 0\n                    req_index = 0;\nStrClear (HTTP_req, REQ_BUF_SZ);\n                    Pause;"},{"id":"text-15","heading":"Text","content":"// chaque ligne de texte reçue du client se termine par  r  n\n                si (c == &#39; n&#39;) \n                    // dernier caractère sur la ligne du texte reçu\n                    // commence une nouvelle ligne avec le caractère suivant lu\n                    currentLineIsBlank = vrai;\n \n                autre si (c! = &#39; r&#39;) \n                    // un caractère de texte a été reçu du client\n                    currentLineIsBlank = faux;"},{"id":"text-16","heading":"Text","content":"} // fin si (client.available ())\n        } // fin tout le temps (client.connected ())\n        retard(1);      // donne le temps au navigateur Web pour recevoir les données\n        client.Arrêtez(); // ferme la connexion\n    } // fin si (client)\n}"},{"id":"text-17","heading":"Text","content":"// extraire le texte de la chaîne de données HTTP GET entrante\n// renvoie true uniquement si du texte a été reçu\n// la chaîne doit commencer par &quot;&amp; txt =&quot; et se terminer par &quot;&amp; end&quot;\n// si la chaîne est trop longue pour le tampon HTTP_req et\n// &quot;&amp; end&quot; est coupé, la fonction retourne alors false\nbooléen GetText (carboniser *SMS, int len)\n{\n  booléen got_text = faux;    // indicateur de texte reçu\n  carboniser * str_begin;             // pointeur vers le début du texte\n  carboniser * str_end;               // pointeur vers la fin du texte\n  int str_len = 0;\n  int txt_index = 0;\n  \n  // obtient un pointeur au début du texte\n  str_begin = strstr (HTTP_req, &quot;&amp; txt =&quot;)\n  si (str_begin! = NULL) {\nstr_begin = strstr (str_begin, &quot;=&quot;)  // passe à la =\n    str_begin + = 1;                      // saute le =\n    str_end = strstr (str_begin, &quot;&amp;fin&quot;)\n    si (str_end! = NULL) {\nstr_end[0] = 0;  // termine la chaîne\n      str_len = strlen (str_begin);"},{"id":"text-18","heading":"Text","content":"// copie la chaîne dans le tampon txt et remplace% 20 par un espace &#39;&#39;\n      pour (int i = 0; i &lt;str_len; i ++) \n        si (str_begin[i] ! = &#39;%&#39;) \n          si (str_begin[i] == 0) \n            // fin de chaîne\n            Pause;"},{"id":"text-19","heading":"Text","content":"autre \nSMS[txt_index++] = Str_begin[i];\n            si (index_txt&gt; = (len - 1)) \n              // garde la chaîne de sortie dans les limites\n              Pause;"},{"id":"text-20","heading":"Text","content":"autre \n          // remplace% 20 par un espace\n          si ((str_begin[i + 1] == &#39;2&#39;) &amp;&amp; (str_begin[i + 2] == &#39;0&#39;)) \nSMS[txt_index++] = &#39;&#39;;\ni + = 2;\n            si (index_txt&gt; = (len - 1)) \n              // garde la chaîne de sortie dans les limites\n              Pause;"},{"id":"text-21","heading":"Text","content":"// termine la chaîne\n      SMS[txt_index] = 0;\ngot_text = vrai;\n}\n}"},{"id":"text-22","heading":"Text","content":"revenir got_text;\n}"},{"id":"text-23","heading":"Text","content":"// met tous les éléments de str à 0 (efface le tableau)\nvide StrClear (carboniser * str, carboniser longueur)"},{"id":"text-24","heading":"Text","content":"pour (int i = 0; je &lt; longueur; i ++) \nstr[i] = 0;"},{"id":"text-25","heading":"Text","content":"// recherche la chaîne sfind dans la chaîne str\n// retourne 1 si une chaîne est trouvée\n// retourne 0 si la chaîne est introuvable\ncarboniser StrContains (carboniser * str, carboniser * sfind)"},{"id":"text-26","heading":"Text","content":"carboniser trouvé = 0;\n    carboniser indice = 0;\n    carboniser len;"},{"id":"text-27","heading":"Text","content":"len = strlen (str);\n    \n    si (strlen (sfind)&gt; len) \n        revenir 0;"},{"id":"text-28","heading":"Text","content":"tandis que (index &lt;len) \n        si (str[index] == sfind[found]) \ntrouvé ++;\n            si (strlen (sfind) == trouvé) \n                revenir 1;"},{"id":"text-29","heading":"Text","content":"autre \ntrouvé = 0;"},{"id":"text-30","heading":"Text","content":"index ++;"},{"id":"text-31","heading":"Text","content":"revenir 0;"},{"id":"text-32","heading":"Text","content":"Page HTML de la zone de texte\nCopiez le code HTML ci-dessous et enregistrez-le dans un fichier nommé index.htm sur la carte SD."},{"id":"text-33","heading":"Text","content":"Zone de texte utilisant textarea"},{"id":"text-34","heading":"Text","content":"Fonctionnement de l&#39;esquisse de zone de texte\nJavaScript intégré à la page Web envoie le texte de la zone de texte à l&#39;Arduino dans le cadre d&#39;une demande HTTP GET lorsque l&#39;utilisateur clique sur le bouton de la page Web.\nFormat de la chaîne\nCette image montre l&#39;aspect de la chaîne avant son envoi à l&#39;Arduino."},{"id":"text-35","heading":"Text","content":"Zone de texte HTML et chaîne de texte"},{"id":"text-36","heading":"Text","content":"Le texte de la zone de texte est mis entre &amp; txt = et &amp; fin = fin avant d&#39;être envoyé. L&#39;Arduino utilise ce texte pour trouver la chaîne dans la requête HTTP GET entrante.\nLorsque le texte atteint l’Arduino, il a été modifié en remplaçant les espaces dans le texte par % 20 comme indiqué dans l&#39;image ci-dessous."},{"id":"text-37","heading":"Text","content":"Chaîne de la zone de texte reçue par Arduino"},{"id":"text-38","heading":"Text","content":"L&#39;esquisse Arduino doit remplacer% 20 dans le texte par des espaces.\nTraitement de la chaîne dans l&#39;esquisse Arduino\nLa fonction GetText () est utilisé pour obtenir la chaîne de zone de texte à partir de la requête HTTP GET entrante. le HTTP_req Le tableau contient le début de la requête GET entrante, comme indiqué dans l&#39;image ci-dessus &#8211; en commençant par GET / ajax_inputs &amp; txt…\nle GetText () la fonction obtient d&#39;abord un pointeur vers le début de la chaîne de la zone de texte en recherchant &amp; txt = puis en terminant la chaîne quand il trouve &amp;fin. Une boucle for est utilisée pour copier la chaîne dans le SMS tableau (qui est un pointeur sur le global txt_buf tableau). Pendant la copie, le code recherche les espaces codés sous la forme% 20 et les convertit en espaces.\nLimitations de l&#39;esquisse de la zone de texte Arduino\nL&#39;esquisse est limitée par la taille du tampon qui enregistre la demande HTTP GET entrante ainsi que par la taille du tableau qui stocke la chaîne à partir de la zone de texte. Ces deux mémoires tampon de tableaux ont été réduites afin que le code puisse être exécuté sur un Arduino Uno.\nSi la chaîne de la zone de texte est trop grande pour le tampon HTTP sur l’Arduino, la chaîne est tronquée avant la fin. &amp;fin, le texte ne sera pas affiché dans la fenêtre Serial Monitor car le GetText () la fonction retournera faux.\nCeci est juste une démonstration simple qui utilise GET pour envoyer du texte. Il serait préférable d’envoyer le texte en utilisant POST à ​​la place. Ce texte sera ajouté ultérieurement sous forme de didacticiel."},{"id":"text-39","heading":"Text","content":"Click to rate this post!\n                                   \n                               [Total: 0  Average: 0]"}],"media":{"primary_image":"https://tutos-gameserver.fr/wp-content/uploads/2019/07/HTML-text-box.jpg"},"relations":[{"rel":"canonical","href":"https://tutos-gameserver.fr/2019/07/04/zone-de-texte-html-pour-envoyer-du-texte-au-serveur-web-arduino-bien-choisir-son-serveur-d-impression/"},{"rel":"alternate","href":"https://tutos-gameserver.fr/2019/07/04/zone-de-texte-html-pour-envoyer-du-texte-au-serveur-web-arduino-bien-choisir-son-serveur-d-impression/llm","type":"text/html"},{"rel":"alternate","href":"https://tutos-gameserver.fr/2019/07/04/zone-de-texte-html-pour-envoyer-du-texte-au-serveur-web-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}