Basculer le menu
Changer de menu des préférences
Basculer le menu personnel
Non connecté(e)
Votre adresse IP sera visible au public si vous faites des modifications.

Esp8266 udp server

De The Linux Craftsman

Introduction

Soyez sûr de comprendre la section sur comment écrire un sketch avant de poursuivre. Le code ci-dessous fait référence à des parties bien spécifiques, détaillées et expliquées dans la section suscitée. De plus, il est impératif d'avoir configuré la puce comme Esp8266_wifi#Client_WiFiclient WiFi !

Dans cet exemple, nous allons créer un serveur UDP qui va écouter les messages en unicast et multicast

Connexion au réseau

Commençons par nous connecter à un réseau en utilisant le DHCP :

#include <ESP8266WiFi.h>

const char ssid[] = "e900";
const char password[] = "********";

void setup() {
	// on démarre le port série
	Serial.begin(115200);
	// On attend "un peu" que le buffer soit prêt
	delay(10);
	// On efface la configuration précédente
	WiFi.disconnect(true);
	// Initialisation de la connection
	WiFi.begin(ssid, password);
	// Test pour déterminer quand la connection est prete
	while (WiFi.status() != WL_CONNECTED) {
		delay(500);
	}
	// Affichage des informations
	Serial.print("\nConnecte a ");
	Serial.print(ssid);
	Serial.print(" avec l'ip ");
	Serial.println(WiFi.localIP());
}
void loop() {
}

Le code précédent vous donne le résultat suivant sur le port série :

Connecte a e900 avec l'ip 192.168.1.188

Ajout d'un serveur UDP unicast

Création du serveur

Nous allons maintenant ajouter la partie écoute en UDP.

Dans la partie des imports ajoutez la ligne suivante :

#include <WiFiUDP.h>

Dans la partie des variables statiques ajoutez les lignes suivantes :

// Port d'écoute UDP
const uint16_t PORT = 4321;
// Taille du tampon de réception
const uint16_t BUFFER_SIZE = 512;
// Tampon de réception
char buffer[BUFFER_SIZE];
// L'instance du serveur UDP
WiFiUDP udp;

A la fin de la fonction setup() nous allons ajouter la ligne suivante :

// Démarrage de l'écoute
udp.begin(PORT);
Serial.print("Démarrage de l'ecoute sur le port ");
Serial.println(PORT);

Récupération et affichage des paquets

Pour récupérer et afficher le contenu du paquet, nous allons créer une fonction :

void readPacket() {
	uint16_t len = udp.parsePacket();
	Serial.print("Paquet de ");
	Serial.print(len);
	Serial.print(" octets recu de ");
	Serial.print(udp.remoteIP());
	Serial.print(":");
	Serial.print(udp.remotePort());
	Serial.print(" contenant '");
	// Mise en tampon du paquet
	udp.read(buffer, len);
	// Affichage du contenu du paquet
	for (int i = 1; i <= len; i++) {
		Serial.print(buffer[i - 1]);
	}
	Serial.println("'");
}

Que nous allons appeler dans la fonction loop():

void loop() {
	if (udp.available() > 0) {
		readPacket();
	}
}

Il est désormais possible, en utilisant un logiciel comme Packet Sender d'envoyer un paquet à notre ESP:

Lorsque vous appuyer sur send, vous devriez voir le message suivant s'afficher dans la console :

Paquet de 11 octets recu de 192.168.1.1:62971 contenant 'Hello World'

Envoie d'un paquet en UDP

Maintenant que nous recevons les paquets, il faudrait que nous puissions répondre ! Pour cela nous allons créer la fonction suivante :

void sendPacket(const char content[], IPAddress ip, uint16_t port) {
	udp.beginPacket(ip, port);
	udp.write(content);
	udp.endPacket();
}

Pour créer un serveur echo, après la ligne:

readPacket();

Il nous suffit d'ajouter:

sendPacket(buffer, udp.remoteIP(), udp.remotePort());

On a maintenant une réponse de l'ESP:

Multicast