Ressources informatiques

Ressources informatiques

Ressources informatiques

NodeMcu : Créer un client TCP

L'objectif est de créer un client TCPminimal : le client envoie une lettre au serveur qui renvoie la lettre suivante dans l'ordre alphabétique. Le serveur renvoie le caractère '!' s'il reçoit un caractère qui n'est pas une lettre ou s'il reçoit la lettre 'z' ou la lettre 'Z'.

Coder le client

Un exemple est accessible dans le logiciel Arduino à l'aide du menu Fichier > Exemples > ESP8622WiFi > WiFiClient
Il faut le charger puis l'adapter à notre algorithme.

Se connecter au point d'accès WiFI

/* client TCP minimal adapté de ESP8622WiFi > WiFiClient */
#include <ESP8266WiFi.h>

#define SSID_WIFI "votre SSID"
#define PASSWORD_WIFI "votre mot de passe"

void setup() {
  Serial.begin(115200);
  delay(10);

  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(SSID_WIFI);

  // Client WiFi uniquement (le NodeMCU fait également point d'accès par défaut)
  WiFi.mode(WIFI_STA);
  
  WiFi.begin(SSID_WIFI, PASSWORD_WIFI);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println("WiFi connected");  
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());
}

void loop() {
  delay(1000);
}

La console indique que le NodeMcu est connecté au réseau WiFi et a obtenu l'adresse IP 192.168.1.43.

Connecting to ______
.WiFi connected
IP address: 192.168.1.43

Communiquer avec le serveur TCP minimal

Il faut compléter le programme ci-dessus pour l'adapter à notre algorithme.

/* client TCP minimal adapté de ESP8622WiFi > WiFiClient */
...
#define PORT_SERVEUR_MINIMAL 50000
#define ADRESSE_IP_SERVEUR_MINIMAL "192.168.1.11"

void setup() {
...
}

char car ='A';

void loop() {
  delay(1000);

  WiFiClient client;
  char reponse;
  delay(1000);

  // Se connecter au serveur
  while (!client.connected()) {
    client.connect(ADRESSE_IP_SERVEUR_MINIMAL, PORT_SERVEUR_MINIMAL);
    delay(1000);
  }

  // Emettre la requête
  client.print(car);

  // Atendre la réponse
  unsigned long timeout = millis();
  while (client.available() == 0) {
    if (millis() - timeout > 5000) {
      Serial.println(">>> Client Timeout !");
      client.stop();
      return;
    }
  }

  // Lire la réponse
  while(client.available()){
    reponse = client.read();
  }

  // Afficher la réponse
  Serial.println(reponse);

  car++;
}

Réponse obtenue dans la console :

Connecting to ______
.WiFi connected
IP address: 192.168.1.43
B
C
D
E
F
G
H
I
J
K
L

Se documenter