Soft Serveur :
/*
Programme test serveur TCP
Programme principal
nom programme : serveur01.ino
os : sans objet
logiciel : arduino_1_8_5 + extension ESP
compilateur :
bibliothèques :
cible : ESP-03 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
date de création : 03/08/2018
date de mise à jour : 06/08/2018
version : 0.0.1 (X.Y.Z X = stable, Y = màj et Z = en cours)
makefile :
auteur : icarePetibles
références :
Remarques : d'après soft Stefan Thesen - http://blog.thesen.eu
*/
/*
***** ******* ****** * * ******* ******
* * * * * * * * * *
* * * * * * * * *
***** ***** ****** * * ***** ******
* * * * * * * * *
* * * * * * * * * *
***** ******* * * * ******* * *
*/
#include <ESP8266WiFi.h>
#include <ESP8266Ping.h> //https://github.com/dancol90/ESP8266Ping
/* ************************************************************************ */
/* Déclarations */
/* ************************************************************************ */
//#define DEBUG
//#define TEST
#define ON LOW
#define OFF HIGH
#define JAUNE 12
#define ROUGE 13
#define VERTE 14
#define TEMPS_WIFI 300 //
const WiFiMode wifi_mode = WIFI_AP; //définir WIFI_AP pour le point d'accès
const char* ssid = "serieWifi"; //nom du AP
const char* password = "curieuse"; //mot de passe
const uint8_t channel = 6; //canal wifi
const int iSerialSpeed = 115200; //vitesse port série
const int iSerialSpeed1 = 115200; //vitesse port série 1
const bool bSuppressLocalEcho = true; //l'écho local dans telnet doit être supprimé (généralement oui)
const IPAddress local_IP(192, 168, 0, 1); //adresse Serveur
//const IPAddress gateway(192, 168, 0, 1);
const IPAddress subnet(255, 255, 255, 0); //masque réseau
const IPAddress client_IP(192, 168, 0, 2); //adresse client
#ifdef TEST
unsigned long previous = 0UL;
#endif
bool foundPlace = false;
WiFiServer server(23); //Créer une instance du serveur sur le port 23
WiFiClient client; //instance client
/* ************************************************************************ */
/* Initialisation */
/* ************************************************************************ */
void setup(){
uint8_t iSet = 0;
Serial.begin(iSerialSpeed);
#ifdef DEBUG
Serial1.begin(iSerialSpeed1);
Serial1.println();
Serial1.println();
Serial1.println("mode DEBUG serveur");
#endif
pinMode(JAUNE, OUTPUT); //pin en sortie
pinMode(ROUGE, OUTPUT);
pinMode(VERTE, OUTPUT);
digitalWrite(JAUNE, HIGH); //led off cde inverse
digitalWrite(ROUGE, HIGH);
digitalWrite(VERTE, HIGH);
//#ifdef DEBUG
forFun(); //message de bienvenue
//#endif
WiFi.mode(wifi_mode); //AP mode
//*********************
//configuration soft-AP
//*********************
while(!WiFi.softAPConfig(local_IP, local_IP, subnet) && iSet++ < 20){
#ifdef DEBUG
Serial1.print(".");
#endif
digitalWrite(ROUGE, !digitalRead(ROUGE)); //led rouge clignotante
delay(300);
} //sortie si ok ou iSet >= 20
#ifdef DEBUG
Serial1.println();
#endif
digitalWrite(ROUGE, OFF); //led rouge off
if(iSet >= 20){
#ifdef DEBUG
Serial1.println("Erreur de configuration reseau ...");
Serial1.println();
#endif
while(1){ //bsf, sortie par reset
digitalWrite(ROUGE, !digitalRead(ROUGE)); //led rouge clignotante
delay(100);
}
}else{
#ifdef DEBUG
Serial1.println("Configuration reseau : Ok.");
Serial1.println();
#endif
}
//******************
//activation soft-AP
//******************
iSet = 0;
while(!WiFi.softAP(ssid, password, channel, 0) && iSet++ < 20){
#ifdef DEBUG
Serial1.print(".");
#endif
digitalWrite(JAUNE, !digitalRead(JAUNE)); //led jaune clignotante
delay(200);
} //sortie si ok ou iSet >= 20
#ifdef DEBUG
Serial1.println();
#endif
digitalWrite(JAUNE, ON); //led jaune on
if(iSet >= 20){
#ifdef DEBUG
Serial1.println("Erreur reseau wifi ...");
Serial1.println();
#endif
while(1){ //bsf, sortie par reset
digitalWrite(JAUNE, OFF); //led jaune off
digitalWrite(ROUGE, ON); //led rouge on
delay(500);
}
}else{
#ifdef DEBUG
Serial1.println("Wifi : Ok.");
Serial1.println();
#endif
}
//*****************
//démarrage serveur
//*****************
server.begin();
server.setNoDelay(true);
#ifdef DEBUG
Serial1.print("Ok! Utilisez 'Telnet ");
Serial1.print(WiFi.softAPIP());
Serial1.println(":23' pour vous connecter.");
Serial1.println();
Serial1.println("### Fin init ###");
Serial1.println();
#endif
#ifdef TEST
previous = millis();
#endif
}
/* ************************************************************************ */
/* Boucle sans fin */
/* ************************************************************************ */
void loop(){
uint8_t iLoop = 0;
#ifdef TEST
static uint8_t compteur = 0;
#endif
// *******************
// Client non connecté
// *******************
if(!client.connected()){
#ifdef DEBUG
Serial1.println("Client deconnecte du serveur.");
Serial1.println();
Serial1.println("Attente connexion client...");
#endif
while(!client.connected()){
if(iLoop++ < 20){
Serial1.print("*");
}else{
Serial1.println();
iLoop = 0;
}
digitalWrite(VERTE, !digitalRead(VERTE));
delay(500);
if(server.hasClient()){
client = server.available();
}
}
digitalWrite(VERTE, ON); //client connecté
#ifdef DEBUG
Serial1.println();
Serial1.println("Client connecte.");
Serial1.println();
#endif
}
// *******************
// Serveur a un client
// *******************
if(server.hasClient()){
foundPlace = false;
if(client || !client.connected()){
//supprime ancienne connexion
if(client){
client.stop();
}
//nouveau client
client = server.available();
foundPlace = true;
}
}
// *************************
// Vérifie si client présent
// *************************
if(!Ping.ping(client_IP, 2)){
//Serial1.println("<pas de client>");
client.stop();
}
// *****************
// Telnet --> Serial
// *****************
if(client && client.connected()){
if(client.available()){
while(client.available()){
Serial.write(client.read());
}
}
}
// *****************
// Serial --> Telnet
// *****************
if(Serial.available()){
size_t len = Serial.available();
uint8_t sbuf[len];
Serial.readBytes(sbuf, len);
if(client && client.connected()){
client.write(sbuf, len);
delay(1);
}
}
// ************
// Zone de test
// ************
#ifdef TEST
//affichage pour voir si cela fonctionne
if(millis() - previous >= 1000){
previous = millis();
if(compteur++ < 200){
client.print("seveur vers client : ");
client.println(compteur);
// client.printf("\r%u ", compteur); //aff sur la même ligne (retour à la ligne)
}else{
compteur = 0;
client.print("seveur vers client : ");
client.println(compteur);
// client.printf("\r%u ", compteur); //aff sur la même ligne (retour à la ligne)
}
}
#endif
}
/* ************************************************************************ */
/* Pour le plaisir de voir clignoter les leds */
/* ************************************************************************ */
void forFun(){
delay(500);
digitalWrite(ROUGE, OFF);
digitalWrite(JAUNE, OFF);
digitalWrite(VERTE, OFF);
delay(500);
digitalWrite(ROUGE, ON);
digitalWrite(JAUNE, ON);
digitalWrite(VERTE, ON);
delay(500);
digitalWrite(ROUGE, OFF);
digitalWrite(JAUNE, OFF);
digitalWrite(VERTE, OFF);
delay(500);
digitalWrite(ROUGE, ON);
digitalWrite(JAUNE, ON);
digitalWrite(VERTE, ON);
delay(500);
digitalWrite(ROUGE, OFF);
digitalWrite(JAUNE, OFF);
digitalWrite(VERTE, OFF);
}
/* ************************************************************************ */
serveur01.zip (2.41 KB)