Conrad 10215 Operation Manual [fr]

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 ma-
Pour travailler avec le moniteur série vous devez en effet procéder à des paramé­trages. Le débit en bauds utilisé ici est 19 200 Bauds. Pour envoyer des instruc-
tions vous devez d’autre part sélectionner l’option CR et NL à côté du menu pour le débit en bauds.
Les paramétrages corrects dans l’environnement Arduino
J’ai travaillé avec les versions Arduino IDE 1.6 5 et 1.6 6. Les versions plus an­ciennes peuvent provoquer des problèmes. Vous trouverez la version actuelle
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. Dans le kit d’apprentissage se trouve une platine d’expérimentation sur laquelle
vous pouvez enficher le NanoESP, comme indiqué sur la figure ci-dessous. Cela laisse plus de place pour l’expérimentation pendant que le module WLAN derrière dépasse sur la platine d’expérimentation. Le câble micro USB peut ensuite être enfiché, comme indiqué sur la figure dans la section suivante, et la perturbation est minimale. Des figures de montage détaillées se trouvent dans les chapitres respectifs.
La carte IoT-WiFi (NanoESP)
L’élément principal de ce kit d’apprentissage est la carte IoT-WiFi (NanoESP). Comme on le remarque très bien sur la carte, celle-ci est constituée de deux com­posants. Sur la moitié gauche il s’agit d’un système microcontrôleur compatible Arduino qui est comparable au nano Arduino. La partie droite est le module WLAN avec la désignation ESP8266.
Ces deux composants communiquent entre eux par l’interface série générée par logiciel.
NanoESP sur la platine d’expérimentation
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.
Les broches les plus importantes et désignations de la platine
Le module WLAN est contrôlé par ce qu’on appelle les commandes AT. La partie Arduino de la platine est reliée au module WLAN par les broches 11 et 12. Un petit circuit convertit le niveau 5 V en niveau compatible 3,3 V. Vous ne devez donc pas utiliser les broches 11 et 12 dans vos propres projets.
D’autres propriétés hardware importantes de la carte sont brièvement énumérées dans le tableau ci-dessous.
Données techniques
Microcontrôleur : ATmega328 Mémoire-flash : 32 kB (dont 0,5 kB pour le bootloader) SRAM (mémoire vive statique) : 2 kB EEPROM (mémoire morte effaçable électriquement et programmable) : 1 kB Signal d’horloge : 16 MHz Broches E/S : 20 (dont 2 pour la communication avec le module
WLAN)
U
dont MLI : 6
U
dont entrées analogiques : 6
USB pour puce de série : CH340G Tension de service : 5 V Tension d’entrée recommandée : 7 à 12 V Courant maximum par broche E/S : 40 mA Charge admissible de la sortie 3,3 V : 50 mA
Module WLAN : ESP8266 SPI-Flash 4 Mbit Tension de service : 3,3 V Normes WLAN : 802.11 b/g/n Modes WLAN : Wi-Fi Direct (P2P), Soft-AP Firmware : AT-Firmware Version 0.22 Divers : Pile TCP/IP intégrée Puissance de sortie +19,5 dBm en mode 802.11b
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.
1 carte IoT-WiFi (NanoESP) 1 platine d’expérimentation 1 m fil électrique 2 boutons-poussoirs 1 cosse clip 9 V 1 DEL (rouge) 1 DEL RGB (4 pattes de raccordement) 1 résistance 10 kOhm (marron, noire, orange) 1 résistance 1 kOhm (marron, noire, rouge) 1 phototransistor (2 pattes de raccordement) 1 NTC 10 kOhm 1 haut-parleur Piezo 1 potentiomètre 10 kOhm avec bouton rotatif rouge
CONNAITRE LE MODULE
Ce premier chapitre aborde les fonctions de base du module WLAN. Le module est contrôlé par ce qu’on appelle les commandes AT. Vous retrouverez tous les exemples de programmes utilisés ainsi que l’aide et d’autres information sur
www.iot.fkainka.de
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 impres­sion des commandes AT. C’est pourquoi vous allez vous familiariser dans cette section avec quelques unes des commandes de base du module.
Ouvrez pour cela le programme P01_SoftwareSerial dans Arduino-IDE. Il s’agit ici d’un programme simple qui ne fait rien de plus que transférer les données re-
çues par l’interface hardware du microcontrôleur au contrôleur ESP par l’interface logiciel définie. Tout fonctionne également en sens inverse. Comme on peut le voir dans le code source, les deux connexions de l’interface logiciel sont les broches 11 et 12. Celles-ci ne doivent pas être utilisées comme broches GPIO dans vos propres projets. D’autre part, vous avez besoin de la librairie SoftwareSerial-
Library, qui est déjà préinstallée dans la plupart des versions Arduino. Dans le
cas contraire, vous devez télécharger la libraire par le gestionnaire. Une fois le programme téléchargé, vous pouvez démarrer le moniteur série de
l’interface Arduino. Avant de le lancer, vous devez encore procéder à deux para­métrages importants sur le moniteur série, à savoir placer le débit en bauds sur
19 200 dans le coin inférieur droit et procéder au paramétrage CR et NL dans la
case à côté à gauche. Vous pouvez maintenant déjà voir un message, à savoir AT et quelques lignes en
dessous OK. La commande AT a été envoyée par le microcontrôleur au module ESP et le module a répondu par OK. À partir de là vous pouvez remarquer que le module WLAN fonctionne et est prêt à être utilisé.
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 sai­sissant 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]
. Le programme téléchargé transmet l’instruction au module ESP qui répond par retour à AT et ensuite OK . La commande suivante que vous pouvez tester est :
AT+GMR
Le firmware actuel et le numéro de version sont affichés par cette instruction. Avec l’instruction
AT+RST
Vous pouvez réinitialiser le module. Vous voyez d’abord dans le terminal quelques caractères illisibles et au bout readycomme caractère, indiquant que le module est prêt maintenant. Une autre instruction est :
ATE0
Avec celle-ci on peut désactiver ce qu’on appelle l’écho du module. Cela signifie que vous n’avez pas reçu la commande envoyée mais seulement la réponse. Si par exemple vous envoyez AT il n’y a pas d’abord AT et ensuite OK, mais seule­ment OK en retour. Pour vos premiers pas, il est cependant souhaitable que l’écho
ATE1
soit de nouveau activé.
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. Si vous saisissez
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. Cela signifie que vous pouvez enregis­trer avec un appareil compatible WLAN, comme un smartphone ou un PC, une connexion directe avec le module. Pour cela, recherchez simplement le WLAN ou­vert avec le nom NanoESP et connectez-le avec. En réglage usine, aucun mot de passe n’est attribué de façon à ce que la connexion ne représente aucun problème. Lorsque vous êtes connecté au module, vous n’avez pas de connexion internet car le module n’est pas un routeur avec une propre connexion au réseau téléphonique. Ce mode WLAN est néanmoins utile si vous avez besoin par exemple d’un réseau fermé sécurisé. À propos de sécurité : Il est également possible d’attribuer un mot de passe au réseau et ce par l’instruction :
AT+CWSAP
Des paramètres doivent encore être indiqués et dans l’ordre et séparés par des virgules :
U
le nom du réseau entre guillemets,
U
le mot de passe entre guillemets,
U
l’identifiant du canal (Channel ID de préférence une valeur entre 1 et 13),
U
et le mode de cryptage (valeur de 0 à 4).
Un paramétrage potentiel serait :
AT+CWSAP="MyNanoESP","MyPassword",5,3
Après un bref moment apparaît OK comme confirmation. Si ERROR apparaît, vérifiez à nouveau vos données, avant tout les guillemets. Si cependant ERROR apparaît, vérifiez si le CWMODE est vraiment 2.
Si tout a fonctionné, vous pouvez vous connecter avec un appareil compatible WLAN avec la platine. Vous pouvez afficher tous les appareils connectés au mo­dule avec les adresses IP et MAC par l’instruction
AT+CWLIF
.
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. Pour pouvoir établir une connexion à votre routeur, vous avez besoin de l’instruction
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 con­nexion à 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. Vous pouvez d’ailleurs appeler l’IP du module attribuée par le rou­teur par l’instruction
AT+CIFSR
. Cela sera important plus tard si vous voulez établir une connexion au serveur TCP du module. Avec l’instruction
AT+CWQAP
Vous pouvez à nouveau séparer la connexion de votre routeur.
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. Un mode pratique lors-
qu’on envisage un réseau interne avec plusieurs modules et que cependant un module doive servir de serveur, qui livre les données au réseau. Mais davantage à ce sujet plus tard.
1.2 | Configuration automatique
Vous pouvez déjà tester les instructions de base manuellement. Dans ce chapitre
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. Le contrôleur envoie des instructions les unes après les autres au module ESP et établit ainsi la connexion au WLAN. Les différents longs Timeout (temps de latence) donnent suffisamment de temps de réponse au module.
Avant que le programme puisse cependant fonctionner correctement, vous devez inscrire vos données derrière #define SSID et #define PASSWORD dès le début du programme code source. Le module nécessite en effet un accès internet pour pouvoir exécuter sa dernière instruction. Avec l’instruction
AT+PING
d’autres appareils peuvent être pingués au réseau. Le ping signifie que l’on de­mande si un ordinateur est généralement accessible. Ici la commande ping est envoyé au serveur Google-Server avec AT+PING="www.google.de". Si une infor­mation revient, un message de réussite apparaît dans le moniteur en série et la DEL inscrite avec D3 qui est connectée à la broche D13 de la platine est activée. Alors la première communication avec internet aurait réussi.
Le programme
Par la suite nous analyserons progressivement les fonctions du programme. Pour commencer nous abordons la communication avec le module.
1
Communication série
L’ensemble fonctionne par l’interface logiciel série qui est fournie avec Software­Serial-Library . À l’initialisation les broches utilisées doivent en outre être indi­quées, dans ce cas les broches 11 et 12.
001
#include <SoftwareSerial.h>
002
SoftwareSerial esp8266(11, 12);
Précisément comme avec l’interface série normale des octets ou des lignes entiè­res peuvent être transmises avec l’instruction esp8266.print ou esp8266.println . Les instructions esp8266.find et esp8266.findUntil, avec lesquelles un flux entrant sur certaines chaînes de caractères peut être contrôlé, sont particulièrement prati­ques. De ce fait, il est très simple d’intercepter la réponse appropriée du module. Toutefois, si une chaîne de caractères attendue n’est pas échangée, cela peut prendre un certain temps avant que le programme continue. Le temps de latence
(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 fonc­tion sendCom():
001
//-------Controll ESP--------
002
003
boolean sendCom(String command, char respond[])
004
{
005
esp8266.println(command);
006
if (esp8266.findUntil(respond, "ERROR"))
007
{
008
return true;
009
}
010
else
011
{
012
debug("ESP SEND ERROR: " + command);
013
return false;
014
}
015
}
Si vous appelez la fonction, vous devez également remettre à la fonction l’instruction et la valeur de retour attendue, p. ex. AT et la valeur de retour atten­due OK. La commande est transmise par println() et finalement attendue jusqu’à la valeur de retour attendue ou un ERROR est reçu. Si l’attente est remplie, la fonc­tion renvoie la valeur true . Dans le cas contraire, le module transmet par la fonc­tion debug()-un ESP SEND ERROR et la commande envoyée revient pour pouvoir contrôler facilement quelle instruction est à l’origine des problèmes.
Pas toutes les instructions ATont une valeur de retour explicite ou à une ligne. Si par exemple l’adresse IP est interrogée, il n’y a pas nécessairement de valeur connue à l’avance. C’est pourquoi il y a une deuxième fonction sendCom()qui n’a besoin que du paramètre command et renvoie ensuite toute la chaîne (string) reçue. La chaîne ne doit cependant pas être trop longue car la mémoire tampon du SoftwareSerial peut être dépassée.
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. Lorsque la constante DEBUGest vraie, le contenu de la chaîne de caractères Msgest envoyé.
001
void debug(String Msg)
002
{
003
if (DEBUG)
004
{
005
Serial.println(Msg);
006
}
007
}
La deuxième fonction est rapidement expliquée. Si la fonction serialDebug est appelée, le programme passe dans une boucle et se comporte à partir de là comme le premier programme SoftwareSerialtesté. Cela signifie que toutes les données qui ont été envoyées par le moniteur série au contrôleur pas­sent directement sur le module et inversement. En cas d’erreur on peut appeler la fonction et envoyer des instructions manuellement pour tester où se trouve l’erreur.
001
//---Debug Functions---
002
void serialDebug() {
003
while (true)
004
{
005
if (esp8266.available())
006
Serial.write(esp8266.read());
007
if (Serial.available())
008
esp8266.write(Serial.read());
009
}
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.
001
//---Config ESP8266---
002
boolean espConfig()
003
{
004
boolean success = true;
005
esp8266.setTimeout(5000);
006
success &= sendCom("AT+RST", "ready");
007
esp8266.setTimeout(1000);
008
009
if (configStation(SSID, PASSWORD)) {
010
success &= true;
011
debug("WLAN Connected");
012
debug("My IP is:");
013
debug(sendCom("AT+CIFSR"));
014
}
015
else
016
{
017
success &= false;
018
}
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é. La première instruction AT contrôlée avec succès est l’instruction Resetqui est presque toujours exécutée au début du pro­gramme, pour s’assurer que les essais précédents ne revendiquent pas encore le module. Cela peut durer en effet jusqu’à cinq secondes jusqu’à ce que le module renvoie le message ready. C’est pourquoi brièvement avant la fonction send­Com()le temps de latence pour esp8266.findUtil est fixé haut. Après le reset, le temps de latence et de nouveau établi sur la valeur standard d’une seconde.
Ce qui suit ensuite est l’appel d’une fonction elle-même définie avec le nom configStation()qui est abordée dans la section suivante. Elle sert à connecter le module avec son réseau domestique. À cette fin, les paramètres SSID et PASS­WORD que vous avez enregistrés au début du programme, sont transmis. Si la connexion a été établie avec succès, le message de réussite d’abord et ensuite l’adresse IP actuelle du module sont transférés au module série. À la fin de la fonction sont encore fixés des paramètres sur lesquelles je reviendrai plus tard. Enfin la variable success est renvoyée qui, nous l’espérons, a gardé le valeur true.
001
boolean configStation(String vSSID, String vPASSWORT)
002
{
003
boolean success = true;
004
success &= (sendCom("AT+CWMODE=1", "OK"));
005
esp8266.setTimeout(20000);
006
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 para­mé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. Cela peut durer relativement longtemps jusqu’à ce que la connexion soit établie, c’est pourquoi le temps de latence est brièvement dépassé à 20 secondes. Si vous préférez le mode sans fil double, vous pouvez inscrire ici pour CWMODEun3.
001
boolean configAP()
002
{
003
boolean success = true;
004
005
success &= (sendCom("AT+CWMODE=2", "OK"));
006
success &= (sendCom("AT+CWSAP=\"NanoESP\",\"\",5,0", "OK"));
007
008
return success;
009
}
La fonction configAP() n’est pas appelée dans cet exemple mais doit être cepen­dant traitée brièvement. Elle représente pour ainsi dire la contrepartie à la fonction configStation()car le module est ici paramétré comme point d’accès. Un temps de latence plus long n’est pas nécessaire ici car le module peut transformer la com­mande CWSAPplus rapidement. Dans des essais ultérieurs dans la fonction esp­Config()à la place de configStation() la fonctionconfigAP()sera appelée.
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
Serial.println("Ping Error");
019
}
020
}
021
022
void loop() // run over and over
023
{
024
//Start serial Debug Mode - Type Commandos over serial Monitor
025
serialDebug();
026
}
Les fonctions les plus importantes que vous trouverez dans presque tous les pro­grammes 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 esp­Config(). En cas d’erreur la fonction serialDebug()est immédiatement lancée. Si tout est correct un message de réussite est envoyé. Dans les programmes ulté­rieurs, la DEL à la broche 13 qui est marquée D3 sur la platine s’allumera en plus dans une configuration réussie. Pour cela vous avez également un retour si le module n’est pas connecté à un PC avec un moniteur série. Dans cet essai la DEL est en effet nécessaire pour le message de retour du statut ping La requête s’exécute également dans les lignes suivantes après la configuration. La com­mande AT+PINGest envoyée comme paramètre à l’adresse Google. Vous pouvez appeler également une adresse IP dans votre réseau local à la place de cette adresse. En cas de réussite un message apparaît et la DEL nommée D3 est acti­vée. En dernière action le programme saute à la fonction loopqui de son côté appelle la fonction serialDebug()-. Vous pouvez donc tester d’autres instructions après le programme et par exemple envoyer une commande ping à d’autres adresses.
1.3 | Détection d’un réseau
Dans ce chapitre entre autres il s’agit pour la première fois d’une petite structure hardware. Le but de ce projet est un type d'alarme qui réagit quand un certain réseau est à portée ou est activé.
Il ne nécessite que deux composants et un peu de fil. Vous pouvez voir la conception précise dans les figures de construction.
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
esp8266.println("AT+CWLAP");
004
if (esp8266.findUntil(ToFindSSID,"OK")) alarm();
005
else debug("SSID not found!");
006
}
007
008
void alarm()
009
{
010
debug("alarm!");
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. Dans le programme d’exemple, un réseau est recherché avec le SSID NanoESP donc en fait d’autres réseaux nanoESP à portée. Vous pouvez cependant simplement au démarrage du programme enregistrer une autre SSID par #define ToFindSSID . De ce fait vous pouvez par exemple vérifier la distance de portée de votre réseau WLAN.
UDP ET IP
Il s’agit dans ce chapitre de l’échange de données entre deux systèmes via un réseau WLAN. Nous aborderons les sujets tels que ports IP et protocole UDP. Ces concepts de base doivent d’abord être expliqués.
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 nor­me 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. Fondamentalement, il y a des adresses IP locales qui sont réparties sur les ordinateurs et appareils de votre réseau domestique et des IP globales.
Les IP locales sont en général réparties par votre routeur. La plupart commence par 192 168. Le chiffre qui suit est différent de routeur à routeur. Lorsque le Na­noESP fonctionne en point d’accès et se connecte aux ordinateurs dans son ré­seau, les PC reçoivent une adresse qui commence par 192 168.4. En même temps il y a un sous-réseau étendu. Les routeurs Fritz!Box répartissent en général des adresses IP locales selon le schéma 192.168.178.X. Vous pouvez trouver votre IP en entrant par exemple dans Windows dans l’invite de commande (sous Start-> Programmes->Accessoires->Invite de commande) l’instruction ipconfig.
Une plus longue liste apparaît qui contient également le point adresse IPv4 avec votre IP locale dans le réseau..
Les IP globales sont transmises en général par le fournisseur internet. Il s’agit par exemple de l’adresse par laquelle votre routeur peut être atteint dans le réseau mondial. Le routeur fixe le réseau local et répartit les données aux clients. Une possibilité de trouver votre adresse IP globale est par exemple d’appeler la page web http://www.meine-aktuelle-ip.de/. Sur la page sont présentées en plus
d’autres données visibles par un serveur web. Sur internet vous n'êtes donc pas aussi anonyme que vous le croyez.
Qu’est-ce qu’un port ?
Par analogie à l’adresse postale, un port pourrait être quelque chose comme la porte d’entrée d’un immeuble. Un ordinateur avec une IP unique peut fournir diffé­rents services par différents ports. Vous pouvez atteindre le serveur par l’IP mais vous devez choisir le service à utiliser via le port. Cela peut être par exemple le port 20 pour le transfert de données FTP ou le port 23 pour une connexion telnet. En général, vous pouvez choisir librement le port, en effet, il y a des ports normali­sés qui rendent le traitement des applications web plus facile. Vous trouverez une liste des ports normalisés dans
https://de.wikipedia.org/wiki/Liste_der_standardisierten_Ports
Qu’est-ce que UDP ?
UDP est l’abréviation de User Datagram Protocol (protocole de datagramme utili­sateur). Il s’agit d’un protocole réseau minimal sans connexion. C’est à dire qu’il
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.
U
Il n’y a d’autre part aucune garantie que les données ne sont pas
corrompues pendant la transmission ou interceptées par un tiers.
U
Il n’est pas nécessaire d’établir une connexion mais c’est plutôt un
échange de données plus rapide.
U
Il n’y a pratiquement pas de fluctuations de retards de transfert.
U
Le format est adapté par exemple à VoIP (Voice over IP – téléphone
via internet).
Ce sont en premier lieu les bases les plus importantes pour les principes des pro­jets suivants. On pourrait traiter le sujet de façon plus approfondie et au moment opportun d’autres informations suivront. Mais d’abord la partie pratique.
2.1 | Échanger des données entre la platine et le PC avec l’UDP
Dans ce premier projet pour le sujet UDP des données sont échangées entre la platine et le PC via WLAN. À condition que votre ordinateur dispose d’un adapta­teur WLAN. Un programme du côté PC assure la bonne réception des messages. Une structure hardware n’est pas nécessaire pour cette expérience.
Le programme
Lorsque vous chargez le programme P04_UDPBasics.ino sur le contrôleur, le contrôleur est configuré comme point d’accès et vous pouvez trouver un réseau ouvert appelé NanoESP. Avant de vous connecter avec le réseau, vous devez d’abord télécharger un programme pour le PC depuis internet. Pour mes tests j’ai utilisé le programme Packet Sender de Dan Nagle, que vous pouvez télécharger par le lien suivant :
https://packetsender.com/ Après le chargement et l’installation du programme, vous pouvez connecter votre
PC avec le réseau ouvert NanoESP. Assurez-vois que le firewall reconnaît le réseau comme réseau domestique pour qu’aucune donnée ne soit bloquée. Votre ordinateur doit avoir reçu maintenant l’IP 192.168.4.2. Vous pouvez le vérifier en
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.
Les paramétrages corrects du programme Packet Sender
Le programme sur l’ordinateur est utilisé maintenant comme serveur UDP pendant que le contrôleur est paramétré en client UDP. Dans le protocole UDP la distinc­tion client/serveur n’est pas essentielle, mais dans ce cas cela signifie que vous envoyez des données à votre ordinateur avec le contrôleur.
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 com­me 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. Cela vient du fait qu’après votre saisie, encore que Carriage Return et New Lineont été envoyés, donc deux caractères de plus que vous devez calculer dans votre longueur de message.
Si vous basculez à nouveau Packet Sender et regardez là sous journal de trafic, vous pouvez voir l’entrée du message. Dans l’affichage ASCII vous voyez même les deux caractères envoyés représentés par \r et \n.
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
success &= sendCom("AT+CIPSTART=\"UDP\",\"192.168.4.2\",90", "OK"); //UDP-Server
008
return success;
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.2, donc votre PC, et le PORT 90, auquel le program­me Packet Sender écoute avec son serveur UDP. Ce sont avant tout les étapes nécessaires pour établir une première connexion.
2.2 | Envoyer et recevoir des données avec UDP
Dans le projet précédent, la communication UDP a été testée dans une direction, à savoir de la platine au PC. Dans ce programme le module est paramétré de telle manière qu’une communication dans l’autre direction est également possible, presque comme dans un chat.
Le programme
Dans le fond, le programme comporte seulement une modification minime qui a cependant un effet important sur la communication avec le protocole UDP. Lors­que vous téléchargez le programme, un point d’accès est à nouveau établi avec lequel vous pouvez vous connecter à votre PC. Ici aussi vous avez besoin de Packet Sender ou d’un programme similaire. Démarrez le programme et prenez les mêmes paramétrages que précédemment (Fichier -> Paramètres -> Réseau : Activer serveur UDP, Port 90). Enfin vous devez encore saisir dans la fenêtre principale dans le champ Adresse IP l’adresse du module (192.168.4.1), placer le Port sur 91 et dans le menu déroulant plus loin à droite choisir le point UDP. Si ces paramétrages sont faits et le moniteur série ouvert, vous pouvez envoyer le premier message au module en tapant p. ex. Hi dans le champ étiqueté ASCII .
Lorsque vous cliquez sur Send apparaît dans le moniteur série :
001
+IPD,2:Hi
002
OK
Loading...
+ 63 hidden pages