-
AVANT DE COMMENCER À la première connexion du IoT-WiFi-Boards (ci-après également appelé NanoESP) il peut arriver que l’ordinateur ne trouve pas automatiquement le pilote indispensable pour le convertisseur série USB. Si c’est le cas, vous devez télécharger le pilote depuis la page www.iot.fkainka.de/driver et l’installer manuellement. Dans le logiciel Arduino vous pouvez ensuite sélectionner le port et comme carte Arduino Nano (processeur : Atmega328). Ensuite le contrôleur doit être prêt à l’emploi.
-
Arduino-IDE sur le site internet www.arduino.cc. En cas de difficultés ou de problèmes avec la carte ou le kit d’apprentissage vous pouvez trouver de l’aide à tout moment sur la page webwww.iot.fkainka.de. Sur cette page vous trouverez de plus un forum, de nouveaux projets d’utilisateurs et également tous les programmes présentés ici dans la toute dernière version.
-
Disposition des broches de la platine Sur la platine il y a beaucoup d‘éléments différents, tels que les broches (pin), parmi lesquels certains ont une fonction particulière, ou également des DELs, dont les fonctions ne sont pas toujours claires au premier coup d'œil. Pour que vous ne perdiez pas la vue d’ensemble, les fonctions et désignations les plus importantes des différents éléments sont répertoriées dans les figures suivantes.
-
Faible puissance CPU 32 bit intégrée Communication via UART ELEMENTS DU KIT D’APPRENTISSAGE Ci-dessous se trouve un aperçu des éléments contenus dans le kit d’apprentissage.
-
Le plus simple est de télécharger le répertoire zip complet et de copier le dossier décompressé complètement dans votre dossier Sketch. Ensuite vous pouvez ouvrir tous les programmes l’un après l’autre confortablement depuis l’interface Arduino. 1.1 | Commandes AT essentielles C’est tout simplement en l’essayant que l’on obtient la meilleure première impression des commandes AT. C’est pourquoi vous allez vous familiariser dans cette section avec quelques unes des commandes de base du module.
-
Paramétrages du terminal : CR et NL et un débit en bauds de 19 200 1.1.1 | Commandes de base Vous pouvez désormais tester certaines commandes de base du module, en saisissant simplement la commande et en l’envoyant au module par [Enter]. L’utilisation des majuscules pour l’instruction a son importance ici. Vous pouvez transmettre votre première instruction en saisissant AT dans le moniteur en série et en appuyant sur [Enter].
-
Premiers essais avec les instructions AT 1.1.2 | Instructions WLAN Avec les commandes WLAN suivantes vous pouvez modifier les propriétés WLAN du module. Avec la plupart des instructions vous pouvez non seulement définir un état mais également vérifier l’état actuel. Cela se fait en ajoutant un point d’interrogation directement après l’instruction, p. ex. AT+CWMODE? Comme valeur de retour est généralement présentée +CWMODE=2 suivie de OK.
-
AT+CWMODE=? Le module vous répond avec les paramètres possibles de l’instruction, à savoir ici 1-3. AvecCWMODE il s’agit d’ailleurs de l’instruction avec laquelle vous pouvez déterminer le mode WLAN. Il y a trois modes de fonctionnement que je peux appeler l’un après l’autre. 1 AT+CWMODE=2 – le module comme point d’accès (Access Point mode AP) À la livraison, le module est un point d’accès.
-
Module en mode socle L’IP de l’ordinateur connecté est marquée. 2 AT+CWMODE=1 – Module en mode socle Avec l’instruction AT+CWMODE=1 Mettez le module en mode socle. Ce mode vous permet de mettre en place une connexion à votre routeur WLAN. De ce fait, le module est également connecté à internet et a plusieurs possibilités. Vous pouvez d’abord lister avec l’instruction AT+CWLAP tous les réseaux à portée et ainsi vérifier si votre réseau est dans le rayon de réception.
-
AT+CWJAP Celle-ci, comme l’instruction CWSAP, a des paramètres importants, à savoir le nom du réseau WLAN (également appelé SSID) et le mot de passe, les deux de nouveau entre guillemets et séparés par une virgule. La mise en place d’une connexion à un deuxième module, paramétré avec les données mentionnées dans la section précédente, ressemblerait donc à : AT+CWJAP="MyNanoESP","MyPassword" La mise en place de la connexion peut durer quelques secondes et devrait ensuite renvoyer OK.
-
La platine établit une connexion à un deuxième NanoESP. 3 AT+CWMODE=3 – le mode double Le troisième mode possible de paramétrage WLAN est le mode double. Il permet, comme son nom le laisse entendre, d’utiliser le module en modes socle et AP. Cela signifie qu’il peut à la fois établir une connexion sans fil avec le module ou atteindre le module via le routeur en station intermédiaire.
-
la question est maintenant de préciser comment ces instructions peuvent être actionnées directement par le contrôleur. D’autre part, vous vous familiarisez avec une autre instruction avec laquelle vous pouvez tester si un PC dans un réseau ou un serveur sur internet peut être atteint. Dans cet exemple le serveur Google est en effet pingué. Dans ce programme d’exempleP02_GooglePing les processus, que vous avez saisis manuellement dans le premier exemple, sont maintenant principalement automatisés.
-
(Timeout) est défini par esp8266.setTimeout . Avec findUntil() une deuxième chaîne de caractères peut cependant être définie par laquelle la fonction de recherche s’arrête et fournit false comme valeur de retour. Nous exploitons ceci dans la fonction sendCom(): 001 //-------Controll ESP-------002 003 boolean sendCom(String command, char respond[]) 004 { 005 esp8266.println(command); 006 if (esp8266.
-
001 String sendCom(String command) 002 { 003 esp8266.println(command); 004 return esp8266.readString(); 005 } 2 Recherche des erreurs En développant le programme il y a souvent des erreurs et des complications. Pour avoir vraiment une chance, il y a deux fonctions debugqui sont activées ou désactivées par un paramètre au tout début du programme. #devine DEBUG true La première fonction n’a pas plus d’effet qu’une simple édition de texte par l’interface série définie comme standard.
-
002 void serialDebug() { 003 while (true) 004 { 005 if (esp8266.available()) 006 Serial.write(esp8266.read()); 007 if (Serial.available()) 008 009 esp8266.write(Serial.read()); } 010 } 3 Configuration Pour rendre les programmes en général plus clairs, la plupart des paramètres sont externalisés dans des fonctions propres, tous dans la fonction espConfig, dans laquelle sont placés les principaux paramètres pour le programme respectif.
-
015 else 016 { 017 018 success &= false; } 019 020 success &= sendCom("AT+CIPMODE=0", "OK"); 021 success &= sendCom("AT+CIPMUX=0", "OK"); 022 023 return success; 024 } Au début de la fonction la variable success est d’abord posée sur true , car cette variable est liée désormais avec différentes fonctions et. Cela signifie que même si une seule des fonctions retourne la valeur, falsesuccess est donc immédiatement false et toue la configuration a échoué.
-
005 006 esp8266.setTimeout(20000); success &= (sendCom("AT+CWJAP=\"" + String(vSSID) + "\",\"" + String(vPASSWORT) + "\"", "OK")); 007 esp8266.setTimeout(1000); 008 return success; 009 } La fonction configStation() a été appelée dans la fonction espConfig(). Ici le paramétrage du mode WLAN sur le mode socle a été entrepris avec la commande CWMODE et ensuite la connexion avec le réseau par l’instruction CWJAP.
-
001 void setup() 002 { 003 // Open serial communications and wait for port to open: 004 Serial.begin(19200); 005 // set the data rate for the SoftwareSerial port 006 esp8266.begin(19200); 007 008 if (!espConfig()) serialDebug(); 009 else debug("Config OK"); 010 011 if (sendCom("AT+PING=\"www.google.de\"", "OK")) 012 { 013 Serial.println("Ping OK"); 014 digitalWrite(13, HIGH); 015 } 016 else 017 { 018 019 Serial.
-
Les fonctions les plus importantes que vous trouverez dans presque tous les programmes sont traitées ainsi. Dans les fonctions Arduino connues setup() et loop() ces fonctions sont maintenant utilisées. Les deux interfaces série sont d’abord initialisées avec 19 200 bauds. Ensuite seulement est appelée la fonction espConfig(). En cas d’erreur la fonction serialDebug()est immédiatement lancée. Si tout est correct un message de réussite est envoyé.
-
Branchement du haut-parleur piezo Le code source pour ce projet est différent de l’essai précédent principalement pour les fonctions suivantes : 001 void findSSID() 002 { 003 004 005 esp8266.println("AT+CWLAP"); if (esp8266.
-
011 012 digitalWrite(LED_ALARM, HIGH); 013 014 for (int i; i <=30; i++) 015 { 016 tone(PIEZO, 400, 500); 017 delay(500); 018 tone(PIEZO, 800, 500); 019 delay(500); 020 } 021 022 digitalWrite(LED_ALARM, LOW); 023 } La fonction findSSID() est appelée environ toutes les 30 secondes dans la routine loopet recherche ensuite tous les réseaux avoisinants. Lorsque le réseau a été trouvé, la fonction alarm() est déclenchée, qui active la DEL D3 et émet un signal sonore sur le piezo.
-
Qu’est-ce qu’une adresse IP ? Une adresse IP fonctionne comme une adresse postale. Un ordinateur du réseau peut être identifié et adressé clairement par celle-ci. Une adresse IP selon la norme IPv4 encore en cours est la suivante : 192.168.4.1 Il s’agit de quatre chiffres ou plus précisément de quatre octets. Cela signifie que la valeur d’un chiffre peut être 255 maximum.
-
est plus minimaliste et simple que tous les autres protocoles internet, comme p. ex. TCP que nous aborderons ultérieurement. La comparaison à ce stade n’est pas encore particulièrement simple mais vous pouvez vous rappeler ce qui suit sur les propriétés du protocole : U UDP peut transmettre. U Il n’y a aucun contrôle de l’exactitude des données et aucune correction des erreurs. U Il n’y a également aucune garanties que les données ont été transmises avec succès.
-
envoyant l’instruction AT+CWLIF au module via le moniteur série. Cette instruction indique tous les ordinateurs connectés au point d’accès avec l’adresse IP et MAC. Maintenant lancez Packet Sender, établissez sous Paramètres -> Réseau le port du serveur UDP sur 90 et cliquez la case Activer le serveur UDP . En général en bas à gauche se trouve UDP:90 . Dans le cas contraire, vous devez redémarrer le logiciel.
-
Le message a été transmis avec succès. Pour envoyer des données, utilisez l’instruction : AT+CIPSEND=7 Ici 7 représente le nombre de caractères à envoyer. Le caractère > apparaît comme valeur de retour. Cela signifie que vous pouvez maintenant transférer votre message. Saisissez Hello et confirmez à nouveau par [Enter]. Le module envoie comme valeur de retour SEND OK, et cela même si vous n’avez saisi que cinq caractères.
-
Le message a été reçu par Packet Sender. 001 boolean configUDP() 002 { 003 boolean success = true; 004 005 success &= (sendCom("AT+CIPMODE=0", "OK")); 006 success &= (sendCom("AT+CIPMUX=0", "OK")); 007 008 success &= sendCom("AT+CIPSTART=\"UDP\",\"192.168.4.
-
009 } Dans le programme Arduino la fonction configUDP() est avant tout décisive pour le trajet de communication. Ici sont entrepris les paramétrages importants pour le transfert. D’abord, le mode transparence des données est placé avec CIPMODE sur0. Ensuite avec CIPMUX=0 est paramétré la connexion d’une seule connexion. L’instruction essentielle est CIPSTART. Avec celle-ci une connexion est établie et notamment à l’IP 192.168.4.
-
Packet Sender a transmis « Hi » avec succès. Le message a donc été reçu. Vous pouvez répondre en utilisant l’instruction CIPSENDdonc p. ex. : 001 AT+CIPSEND=7 002 >Hello La différence par rapport au projet précédent réside dans une seule ligne : success &= sendCom("AT+CIPSTART=\"UDP\",\"192.168.4.2 \",90,91", "OK"); Comme vous voyez, un deuxième port a été indiqué.
-
tes. Avec l’ajout de cette simple ligne, il est possible également d’envoyer des données au module. Vous pouvez d’ailleurs surveiller le même port auquel vous envoyez. Vous pourriez donc attribuer le chiffre 90 aux deux ports. Théoriquement, il est cependant possible avec la modification que le module reçoive ses propres données. 2.3 | Activer une DEL avec UDP Dans le programme P06_UDPLED.ino il s’agit maintenant finalement de commander du matériel via le protocole UDP.
-
autonome. Toutefois, à des fins de debugage d’autres informations seront transmises via le moniteur série. Le contrôleur attend les données reçues par le module WLAN, qui ont été annoncées par le message +IPD. Les commandes légitimes, que vous pouvez envoyer par Packet Sender s’appellent led1 et led0. Le contrôleur les interprète et allume ou éteint la DEL en fonction. Un message de retour est transmis à l’émetteur.
-
012 { 013 sendCom("LED=" + String(setLed), "OK"); 014 } 015 } 016 017 else { 018 debug("Wrong UDP Command"); 019 if (sendCom("AT+CIPSEND=19", ">")) 020 { 021 sendCom("Wrong UDP Command", "OK"); 022 } 023 024 } 025 026 } } 027 } L’analyse des instructions qui arrivent a lieu dans la routine loopqui tourne en permanence. S’il y a des données du module (esp8266.available()), elles sont analysées sur la présence des caractères « +IPD, ».
-
Le programme suivant comprend cette fonction mais peut en plus de manière autonome envoyer une commande au réseau. ssaires Connectez un bouton-poussoir avec le contrôleur NanoESP, 1 DEL (rouge), 1 boutoncomme indiqué dans l’illustration. ce 1 kOhm (marron, noir, rouge), fil Commutateur compact connecté à D8 Le programme Le programme continue à évaluer les instructions qui entrent. De plus, le bouton est interrogé continuellement.
-
Déroulement dans Packet Sender Les modifications du programme sont avant tout dans la routine loop. Une simple requête ifcontrôlée en appuyant sur le commutateur. Si c’est le cas, le contrôleur transmet le message Bouton=1 au réseau. De plus il y a un message debug. La boucle whilequi suit a pour effet qu’un flux de commandes ne soit pas immédiatement envoyé tant que vous appuyez sur le bouton. Vous devez donc d’abord relâcher le bouton avant de poursuivre le programme.
-
Dans un projet d’automatisation de la maison, un serveur recevrait maintenant le message d’état par exemple d’un capteur de proximité et enverrait ensuite la commande d’allumer la lumière à un autre contrôleur. Ainsi se monte tout un réseau de capteurs et acteurs. 2.5 | Capteur analogique Le dernier projet a traité la forme la plus simple d’un capteur avec un boutonpoussoir.
-
ce retour peut donc s’avérer très utile. Par le moniteur série vous recevez également l’information sur quelle adresse IP le routeur a affecté la platine. Cette IP est importante, dans la mesure où vous voulez adresser la platine ultérieurement. La communication avec la platine fonctionne de manière similaire aux tests précédents. Seules les IP du module et de son ordinateur ont été modifiées car une IP a été attribuée par le routeur aux deux appareils.
-
le IP. success &=sendCom("AT+CIPSTART=\"UDP\",\" 192.168.255.255\",90,91,2", "OK"); Pour ce paramètre, il y a les possibilités suivantes : 1 Mode 0: Cela signifie que l’IP et le port ne se modifient pas. C’est également la configuration par défaut, ce qui est clair si vous considérez d’autres modes. 2 Mode 1: Les paramètres se modifient une fois.
-
L’envoi de la valeur analogique se fait dans la routine loop. D’ailleurs la nouvelle fonction sendUDP() est utilisée, et rend les fonctions connues plus facilement accessibles. Il ne doit pas y avoir nécessairement de retard entre les envois d’instructions car le transfert dure un certain temps. En effet, la fréquence, par laquelle les nouvelles données sont transférées, est tellement élevée que le PC est littéralement bombardé de messages.
-
Le programme du premier test établit entre autres la connexion WLAN indépendamment au démarrage. Vous économisez ainsi une quantité de travail d’écriture et pouvez commencer plus vite. N’oubliez pas de transférer les données de votre réseau domestique dans le programme. Saisissez ensuite dans le moniteur série les lignes de commandes suivantes : AT+CIPSTART="TCP","www.example.com",80 Avec cette commande vous établissez une connexion TCP avec le site web www.example.com.
-
Extrait de la réponse du serveur web Sur cet exemple vous voyez les principes de base du format HTTP. Un client établit une connexion avec un serveur web. Que vous ne deviez pas saisir l’adresse IP, mais que vous puissiez utiliser le nom de domaine en format texte est lié à ce qu’on appelle le DNS (Domain Name System). Cela transmet la requête à l’IP difficile à remarquer. Si le client est connecté, le navigateur envoie une requête Get Request.
-
Le programme Lors du programme précédent, il devait encore être principalement utilisé manuellement, celui-ci travaille de façon autonome. Le contrôleur se connecte complètement automatiquement au site web : http://chronic.herokuapp.com/ Différents systèmes et fuseaux horaires peuvent être demandés par l’URL. L’heure actuelle en hiver en Allemagne est demandée par l’URL http://chronic.herokuapp.com/utc/in-one-hour .
-
011 012 if (esp8266.find("+IPD")) 013 { 014 if (esp8266.find("\r\n\r\n")) 015 { 016 xyear = esp8266.parseInt(); 017 xmonth = esp8266.parseInt(); 018 xday = esp8266.parseInt(); 019 xhour = esp8266.parseInt(); 020 xminute = esp8266.parseInt(); 021 xsecond = esp8266.
-
tion. Il en résulte que la requête Get Request crée et, après la création d’une connexion, transmet au serveur TCP de la page web. La réponse du serveur doit maintenant être analysée. De plus, toute la partie Request Header est sautée en recherchant \r\n\r\n, qui ne signifie rien d’autre que ce qu’il se passe après un double Carriage Return und New Line.
-
Branchement de la DEL RVB aux broches D3, D5 et D6 Le programme Dans Sketch il s’agit à nouveau de la requête d’une page internet, mais cette fois il s’agit d’une page spécialement programmée pour ce projet qui prend des données depuis la page météo http://www.openweathermap.com/ . Sur cette page on peut obtenir des informations sur la météo d’une ville par variation de l’URL. Vous pouvez saisir la ville, que vous voulez interroger, simplement dans le code source derrière City.
-
002 { 003 int green, blue, red ; 004 005 006 007 if (val <= 10 & val >= -20) blue = map(val, -20, 10, 255, 0); else blue = 0; 008 009 010 if (val >= 10 & val <= 40) green = map(val, 10, 40, 255, 0); 011 else if (val >= -20 & val < 10) green = map(val, -20, 10, 0, 255); 012 else green = 0; 013 014 if (val > 10 & val <= 40) red = map(val, 10, 40, 0, 255); 015 else red = 0; 016 017 analogWrite(RED, red); 018 analogWrite(GREEN, green); 019 analogWrite(BLUE, blue); 020 } L'ajustement des lum
-
SERVEUR TCP Après avoir appris certains éléments sur l’utilisation du module en client TCP dans le chapitre précédent, le module doit maintenant agir comme serveur TCP. D’une manière pratique il existe également une instruction AT simple avec laquelle vous pouvez démarrer cette application serveur complexe. Le module se comporte ensuite comme un serveur TCP internet, sauf que vous devez programmer vousmême l’envoi de la page web. 4.
-
avez déjà envoyé manuellement. La requête du navigateur Le navigateur attend une réponse et indique un caractère de chargement jusqu’à ce que la connexion soit arrêtée en raison du temps de latence. Vous pouvez envoyer un message avec une variante d’une instruction connue au navigateur : AT+CIPSEND=0,7 Le paramètre 0 indique ici le client auquel le message doit être envoyé. Ceci est nécessaire car plusieurs connexions sont autorisées et donc plusieurs clients peuvent être connectés.
-
4.2 | Serveur web autonome Les résultats des essais précédents vont maintenant être utilisés dans un programme autonome. Le nouveau programme envoie non seulement une page web au navigateur mais il permet également de contrôler une DEL. De plus, vous voyez sur la figure du montage comment vous pouvez brancher une alimentation électrique externe à la platine.
-
001 void loop() { 002 if (esp8266.available()) // check if the esp is sending a message 003 { 004 if (esp8266.find("+IPD,")) 005 { 006 debug("Incomming Request"); 007 int connectionId = esp8266.parseInt(); 008 009 if (esp8266.findUntil("LED","\n")) digitalWrite(LED, !digitalRead(LED)); 010 011 String webpage = "
Hello World!
Open [IP]/LED to Toggle LED on D9"; 012 013 if (sendCom("AT+CIPSEND=" + String(connectionId) + "," + String(webpage.
-
001
Hello World!
002 Open [IP]/LED to Toggle LED on D9 Ici est une indication pour le navigateur de représenter le texte jusqu’à
comme titre de type 1. Il ne s’agit pas encore de véritable code HTML mais beaucoup plus d’une forme simple de représentation de texte. La longueur de la page web est passée avec webpage.length() (une fonction de la classe de chaîne) à la commande CIPSENDet transmise ensuite à la page. 4.
-
fois-ci elle est mémorisée dans ce qu’on appelle des variables progmem (Program Memory). L’utilisation de ce type de mémorisation décharge la SRAM de la platine qui serait autrement responsable du stockage des variables. La SRAM ne comporte que 2 kB et est déjà très chargée par l’utilisation des chaînes. Le contenu du site sera placé dans la mémoire du programme par la fonction progmem, qui est beaucoup plus grande avec environ 32 kB. L'accès aux données est également un peu plus complexe.
-
Dans la fonction createWebsite() le contenu de la variable progmem est chargé et retransmis en chaîne. On voit clairement comment la variable progmem est rechargée depuis la mémoire du programme. 001 boolean sendWebsite(int connectionId, String webpage) 002 { 003 boolean success = true; 004 005 if (sendCom("AT+CIPSEND=" + String(connectionId) + "," + String(webpage.length()), ">")) 006 { 007 esp8266.print(webpage); 008 esp8266.
-
4.4 | Parenthèse: Cours intensif HTML Dans de chapitre je vais donner un petit cours intensif en HTML. Plus précisément l’accent sera mis sur la création de pages web pour le contrôle du NanoESP. Les structures de base d’un document HTML sont une partie de ce cours, la création d’éléments d’entrée et de sortie et enfin l’intégration des propres pages web dans le programme Arduino. Une donnée HTML est toujours reconnaissable par au début du document.
-
La partie suivante se comporte exactement pareil avec seulement deux éléments nouveaux, à savoir
, qui produit une ligne horizontale sur la page web et
, qui gère le saut à la ligne suivante. 001
002
003 004 Switch the LED
005 on D9 ON and OFF 006
007
Tous les éléments présentés jusqu’ici étaient des facteurs de formes purs qui servent à la conception de la page web.
-
Voici à quoi ressemble l’URL après avoir appuyé sur le bouton LED ON. 001
002
003 004 005 Les dernières lignes de code source HTLM ne contiennent rien de nouveau. Un saut à la ligne suivante et une ligne horizontale complètent l’image, avant que le document avec