Interface utilisateur pour afficher des données, modifier des paramètres et passer des commandes. Aucune installation spécifique de programme sur l’unité du client. Interface multilogiciel, fonctionne avec les fureteurs des différentes plateformes.
Mode WIFI
Au démarrage le mode réseau WiFi est activé automatiquement. En un premier temps, le programme essaie de monter une connexion WiFi sur le réseau WiFi identifié dans la variable «ssid» du programme avec l’adresse IP préconfigurée. Après un certain nombre d’essais, si la connexion n’est pas établie, le programme configure le circuit en Point d’accès WiFi.
Fonctions de la DEL
Une DEL RGB est utilisée pour afficher 3 conditions
- Vert : Le circuit est en mode Client WiFi
- Rouge : Le circuit est en mode Point d’accès
- Orange : Le voltage de la source d’alimentation est sous un certain seuil. La DEL clignote entre Orange et Rouge ou Vert pour conserver l’information du mode réseau
Afin d’ajuster au besoin l’intensité et la couleur de la DEL, le programme fait appel une fonction (ledcWrite) qui module la sortie PWM des broches selon la valeur fournie à la fonction
EEPROM
Les données importantes à conserver, même lors de mise hors tension, sont enregistrées dans la mémoire flash EEPROM. L’enregistrement s’exécute lors du changement d’une donnée.
Mesure de voltages
Le voltage de la source d’alimentation est surveillé. La donnée est envoyée à l’interface Web lors d’une requête du client. Une DEL clignote en orange pour indiquer que le voltage est sous le seuil établi.
L’interface client
Affichage
Voltage de la source d’alimentation. Voltage évalué par programmation
Délai de réaction. Délai avant d’activer le relais suite à une demande d’activation. Celui-ci peut-être en microseconde ou en milliseconde au choix de l’utilisateur.
Durée d’activation du relais. Période pendant laquelle le relais reste activé suite à une demande d’activation. Durée configurable par le client.
Durée avant le retour aux détecteurs. Délai configurable d’attente ajouté à la fin de l’opération du relais. Blocage volontaire avant de redonner la main à la suite du programme. Exemple d’utilisation: Quand le circuit sert au déclenchement d’un appareil photographique, l’activation du relais est très courte. Le délai de retour assure le blocage du programme tant que le temps d’exposition n’est pas expiré.
Bouton RELAIS
Le clic du bouton envoie la requête d’activation du relais
Champs de saisie de données
Trois champs de saisie de données et deux boutons permettent à l’utilisateur de configurer les paramètres selon ses besoins.
Lignes d’action
Deux lignes cliquables permettent d’incrémenter ou de décrémenter, d’une unité, le délai de réaction
L’APPLICATION
L’application est divisée en trois fichiers. Ils doivent être placer dans le même répertoire nommé «Declencheur_de_relais_01»
Téléchargement
https://github.com/rcepmorel/Declencheur_de_relais_01
Détails des fichiers
connect_id_Wifi.h
Fichier dans lequel vous incorporer les paramètres réseau que vous voulez utiliser
const char* ssid = "Le nom du réseau WiFi"; // Réseau à accéder const char* password = "Le mot de passe du réseau WiFI"; const char* ssid_AP = "Nom donné au point d'accès"; // Point d'accès const char* password_AP = "Mot de passe donné au point d'accès"; // Set your Static IP address IPAddress local_IP(192, 168, 1, 141); // Set your Gateway IP address IPAddress gateway(192, 168, 1, 1); IPAddress subnet(255, 255, 0, 0);
Declencheur_de_relais_01.ino
Fichier principal
/* DÉCLENCHEUR DE RELAIS * * Auteur : Richard Morel * 2018-11-09 * * Modification * 2018-11-17 * - Mesure du voltage d'entrée * - Ajout du clignotement de la DEL bleue * Relié sur la broche D33 * 2018-11-30 * - Ajout du déclencheur de relais * Relié sur le GPIO 32 * - Ajout du détecteur du rayon laser pour déclencher le relais * sur la coupure du faisceau * Relié sur la GPIO 13 * - Ajout d'un interrupteur pour déclencher le relais * Relié sur la GPIO 25 * - La DEL bleue suit l'état du détecteur laser * 2018-11-01 * - Ajout du serveur WEB * - Déplacer l'interrupteur pour déclencher le relais * sur le GPIO 26 * - Remplacement de la DEL bleue par une DEL RGB * - La broche «rouge» de la DEL RGB se relie sur GPIO 25 * - La broche «verte» de la DEL RGB se relie sur GPIO 33 * 2019-01-13 * - Quelques corrections pour donner suite aux avertissements du compilateur * */ // ----------------------------------------------------------------------------- // Importation des fichiers et définition des variables // ----------------------------------------------------------------------------- //******* Affichage DEL ******** // Afin d'ajuster au besoin l'intensité et la couleur de la DEL, le programme // fait appel une fonction (ledcWrite) qui module la sortie PWM des broches // selon la valeur fournie à la fonction #define LEDC_CHANNEL_0_VERT 0 #define LEDC_CHANNEL_1_ROUGE 1 // use 13 bit precission for LEDC timer #define LEDC_TIMER_13_BIT 13 // use 5000 Hz as a LEDC base frequency #define LEDC_BASE_FREQ 5000 #define DELROUGE 25 // DEL rouge reliée au GPIO25 #define DELVERTE 33 // DEL verte reliée au GPIO33 byte byBrightnessVert; byte byBrightnessRouge; //******* Convertisseurs Analogique/Numérique ****** #include <driver/adc.h> //ADC1_CHANNEL_7 D35 35 //******* EEPROM ***************** // Inclure la librairie de lecture et d'écriture de la mémoire flash #include "EEPROM.h" // définie le nombre de Bytes que l'on veut accéder #define EEPROM_SIZE 64 //****** WIFI ********************* #include "connect_id_Wifi.h" #include <WiFi.h> WiFiServer server(80); const char* chStatusWifi[] ={"WL_IDLE_STATUS", "WL_NO_SSID_AVAIL", "-", "WL_CONNECTED ", "WL_CONNECT_FAILED ", "-", "WL_DISCONNECTED"}; String stWifiConnectionNetwork = "Connecté"; // ***** Mesure de voltage ************ float flCalibrationDiviseurTsn = 8.02/7.97; // Valeur réelle diviser par // flVoltMesure lorsque // flCalibrationDiviseurTsn // égal à 1 int inSeuilDeVoltage = 7; // Niveau d'alerte de basse tension // de l'alimentation d'entrée float flReading; float flVoltAlimCtrlReduit; float flVoltMesure; //***** Interrupteurs, détecteurs et sorties ******** #define PIN_ACTIVE_RELAIS 32 // Sortie pour déclencher le relais #define PIN_DETECTEUR_LASER_1 13 // Détecte une MALT à l'entrée D13 #define PIN_BOUTON_DECLENCHEUR 26 // Détecte une MALT à l'entrée D26 boolean blEtatLaser1; boolean blTamponEtatLaser1; boolean blEtatBtnDeclencheur; boolean blTamponEtatBouton = 1; boolean blDeclencheRelais = 0; boolean blUnitDlReactMicroScd = 0; // Unité du délai de réaction // 1 => microseconde // 0 => milliseconde // La variable suivante est de type «uint64_t» car le temps, // mesuré en millisecondes, deviendra rapidement un nombre grand uint64_t u64HorodatageBtnDeclencheur = 0; // La dernière fois que la broche // de sortie a été basculée uint32_t u32DelaiReActInterup = 3000; // Délai de réactivation // Pas plus d'un changement d'état // au 3 secondes pour éliminer // les intermittences uint64_t u64HorodatageRayonCoupe = 0; // La dernière fois que le rayon // laser a été coupé uint32_t u32DelaiReActRayon = 3000; // Pas plus d'un changement d'état // au 3 secondes pour éliminer // les intermittences // Les prochaines variables sont de type «unsigned int» // Ceci évite des valeurs négatives lors de la première lecture du EEPROM // au SETUP avant qu'il y est eu une première écriture // Sinon, il pourrait y avoir blocage du programme // Ces données sont aléatoires avant la première écriture uint32_t u32DelaiDeReaction = 0; // Durée d'attente avant d'activer le relais uint32_t u32TempsRelaisActif = 2000; // Durée d'activation du relais en milliseconde uint32_t u32DelaiAvantRetour = 1000; // Délai en milliseconde avant de redonner // la main à la suite du programme après // l'activation du relais //******** Divers *************** int inChronoDebutIndicModReseau = 0; // Chrono Indique le mode réseau int inChronoDebutIndicBattFbl = 0; // Chrono Indique batterie faible // ------------------------------------------------------------------------------- // FONCTION FONCTION FONCTION FONCTION FONCTION FONCTION FONCTION // ------------------------------------------------------------------------------- //***** Activation du DEL ***************** void ledcAnalogWrite(uint8_t channel, uint32_t value, uint32_t valueMax = 255) { // calculate duty, 8191 from 2 ^ 13 - 1 if (value > valueMax){value = valueMax;} uint32_t duty = (8191 / valueMax) * value; // write duty to LEDC ledcWrite(channel, duty); } //****** Enregistrement dans la mémoire flash ******* void memFlashDataUser(){ EEPROM.writeInt(0, u32DelaiDeReaction); EEPROM.writeInt(4, u32TempsRelaisActif); EEPROM.writeInt(8, u32DelaiAvantRetour); EEPROM.writeInt(12, blUnitDlReactMicroScd); EEPROM.commit(); } //*** Attente selon le délai de réaction **** void delaiDeReaction(){ if (blUnitDlReactMicroScd){ delayMicroseconds(u32DelaiDeReaction); // délai avant d'activer // le relais (en microseconde) } else { delay(u32DelaiDeReaction); // délai avant d'activer // le relais (en milliseconde) } } //****** Activation du relais ************** void declencheRelais(){ digitalWrite(PIN_ACTIVE_RELAIS, HIGH); // Déclenche le relais delay(u32TempsRelaisActif); // Attente en milliseconde digitalWrite(PIN_ACTIVE_RELAIS, LOW); // Relâche le relais delay(u32DelaiAvantRetour); // Attente en milliseconde } //***** Choix d'affichage de la couleur du DEL ******* void AfficheVertCWRougePA(){ if (stWifiConnectionNetwork=="Non connecté au réseau") { byBrightnessVert = 0 ; byBrightnessRouge = 255 ; // set the brightness on LEDC channel 0 ledcAnalogWrite(LEDC_CHANNEL_0_VERT, byBrightnessVert); // set the brightness on LEDC channel 1 ledcAnalogWrite(LEDC_CHANNEL_1_ROUGE,byBrightnessRouge); } else { byBrightnessVert = 255; byBrightnessRouge = 0 ; ledcAnalogWrite(LEDC_CHANNEL_0_VERT, byBrightnessVert); ledcAnalogWrite(LEDC_CHANNEL_1_ROUGE,byBrightnessRouge); } } // ******* html Serveur Web ******** #include "do_Web.h" // ------------------------------------------------------------------------------- // SETUP SETUP SETUP SETUP SETUP SETUP SETUP SETUP SETUP SETUP // ------------------------------------------------------------------------------- void setup() { Serial.begin(115200); Serial.println(); //********** EEPROM ************* if (!EEPROM.begin(EEPROM_SIZE)) { Serial.println("failed to initialise EEPROM"); delay(1000000); } Serial.println(); // Lecture des valeurs sauvegardées dans le EEPROM u32DelaiDeReaction = EEPROM.readInt(0); u32TempsRelaisActif = EEPROM.readInt(4); u32DelaiAvantRetour = EEPROM.readInt(8); blUnitDlReactMicroScd = EEPROM.readInt(12); if (u32DelaiDeReaction == 4294967295){ // valeur par défaut du ESP u32DelaiDeReaction = 0; // Changer sinon le programme est figé u32TempsRelaisActif = 1000; // pour longtemps u32DelaiAvantRetour = 0; memFlashDataUser(); u32DelaiDeReaction = EEPROM.readInt(0); // Validation u32TempsRelaisActif = EEPROM.readInt(4); u32DelaiAvantRetour = EEPROM.readInt(8); blUnitDlReactMicroScd = EEPROM.readInt(12); } Serial.print(u32DelaiDeReaction); Serial.println(" delaiDeReaction " ); Serial.print(u32TempsRelaisActif); Serial.println(" tempsRelaisActif " ); Serial.print(u32DelaiAvantRetour); Serial.println(" delaiAvantRetour " ); Serial.print(blUnitDlReactMicroScd); Serial.println(" Bool unité délai de réaction " ); //********** ENTRÉES - SORTIES ************* pinMode(PIN_ACTIVE_RELAIS, OUTPUT ); digitalWrite(PIN_ACTIVE_RELAIS, LOW); pinMode(PIN_DETECTEUR_LASER_1, INPUT); pinMode(PIN_BOUTON_DECLENCHEUR, INPUT_PULLUP); // active la résistance // de pull-up interne sur le +3V //********** CONVERTISSEURS ANALOGIQUE/NUMÉRIQUE ************* // Configuration pour faire des mesures sur D35 // (voltage de la source d'alimentation) ****** adc1_config_width(ADC_WIDTH_BIT_12); // Définie la résolution (0 à 4095) adc1_config_channel_atten(ADC1_CHANNEL_7, // Le voltage maximum au GPIO ADC_ATTEN_DB_11); // est de 3.3V // *********** WIFI **************************** // Configuration d'une adresse IP statique if (!WiFi.config(local_IP, gateway, subnet)) { Serial.println("STA Failed to configure"); } WiFi.begin(ssid, password); delay(1000); uint8_t retries = 15; while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print(".."); Serial.print(WiFi.status()); Serial.print("-"); Serial.println(retries); retries--; if (retries == 0) { int intStatus = WiFi.status(); if (intStatus==255){intStatus=2;} Serial.print(".."); Serial.print(WiFi.status()); Serial.print("-"); Serial.println(retries); Serial.print("WiFi status :"); Serial.print(WiFi.status()); Serial.print("->"); Serial.println(chStatusWifi[intStatus]); stWifiConnectionNetwork = "Non connecté au réseau"; break; } } Serial.println(stWifiConnectionNetwork); if (stWifiConnectionNetwork=="Non connecté au réseau") { Serial.println("- * Activation du point d'accès Wifi * - "); WiFi.softAP(ssid_AP, password_AP); IPAddress myIP = WiFi.softAPIP(); Serial.print("AP IP address: "); Serial.println(myIP); } else{ Serial.print("WiFi status :"); Serial.println(WiFi.status()); Serial.println(""); Serial.println("WiFi connected."); Serial.println("IP address: "); Serial.println(WiFi.localIP()); } server.begin(); //********** DEL ************* // Setup timer and attach timer to a led pin ledcSetup(LEDC_CHANNEL_0_VERT, LEDC_BASE_FREQ, LEDC_TIMER_13_BIT); ledcAttachPin(DELVERTE, LEDC_CHANNEL_0_VERT); ledcSetup(LEDC_CHANNEL_1_ROUGE, LEDC_BASE_FREQ, LEDC_TIMER_13_BIT); ledcAttachPin(DELROUGE, LEDC_CHANNEL_1_ROUGE); AfficheVertCWRougePA(); //***** Divers ****** inChronoDebutIndicModReseau = millis(); Serial.println("PRÊT"); } // ------------------------------------------------------------------------------- // LOOP LOOP LOOP LOOP LOOP LOOP LOOP LOOP LOOP // ------------------------------------------------------------------------------- void loop() { //******* Lecture des entrées numériques ****** blEtatLaser1 = digitalRead(PIN_DETECTEUR_LASER_1); if (blEtatLaser1 != blTamponEtatLaser1){ if ((millis() - u64HorodatageRayonCoupe) > u32DelaiReActRayon) { blTamponEtatLaser1 = blEtatLaser1; // Mémorise le nouvel état u64HorodatageRayonCoupe = millis(); } } blEtatBtnDeclencheur = digitalRead(PIN_BOUTON_DECLENCHEUR); if (blEtatBtnDeclencheur != blTamponEtatBouton){ if ((millis() - u64HorodatageBtnDeclencheur) > u32DelaiReActInterup) { blTamponEtatBouton = blEtatBtnDeclencheur; // Mémorise le nouvel état u64HorodatageBtnDeclencheur = millis(); } } //*********** ACTIONS ***************** if (!blTamponEtatLaser1){; // si l'état du détecteur est 0 (faisceau coupé) delaiDeReaction(); declencheRelais(); blTamponEtatLaser1 = 1; } if (!blTamponEtatBouton){; // si l'état du bouton est 0 delaiDeReaction(); declencheRelais(); blTamponEtatBouton = 1; } if (blDeclencheRelais){; // si la commande web D reçue blDeclencheRelais = 0; delaiDeReaction(); declencheRelais(); } // ******* ******** Lecture du voltage d'alimentation ********************** // // Méthode de G6EJD (applicable si l'atténuation est 11dB // et la résolution est 12 bits) flReading = analogRead(35); flVoltAlimCtrlReduit = -0.000000000000016*pow(flReading,4) +0.000000000118171*pow(flReading,3) -0.000000301211691*pow(flReading,2) +0.001109019271794*flReading+0.034143524634089; flVoltMesure = flVoltAlimCtrlReduit*122/22; // Diviseur de tension // 100K, 22K flVoltMesure = flVoltMesure*flCalibrationDiviseurTsn; // correction attribuable aux // valeurs imprécises du diviseur // de tension et au changement // de ESP32 // Serial.print(flReading); Serial.print(" DigitalValueVoltAlimCtrl "); // Serial.print(flVoltAlimCtrlReduit); Serial.print(" flVoltAlimCtrlReduit "); // Serial.print(flVoltMesure); Serial.println(" flVoltMesure"); // Serial.println(" "); Serial.print(blEtatLaser1); Serial.print(" État détecteur Laser,"); Serial.print(blEtatBtnDeclencheur); Serial.print(" État Interrupteur,"); Serial.print(flVoltMesure); Serial.println(" Voltage d'alimentation,"); // ***************** Traitement de l'affichage du DEL ************************ // if (flVoltMesure > inSeuilDeVoltage ){ // Voltage d'alimentation > 7 volts AfficheVertCWRougePA(); }else{ // Voltage d'alimentation < 7 volts if ((millis() - inChronoDebutIndicModReseau) > 1000){ if (inChronoDebutIndicBattFbl == 0) { inChronoDebutIndicBattFbl= millis(); // Démarre le chrono Indique // batterie faible } if ((millis() - inChronoDebutIndicBattFbl) < 1000){ // DEL ORANGE pendant // 1 seconde ledcAnalogWrite(LEDC_CHANNEL_0_VERT, 32); ledcAnalogWrite(LEDC_CHANNEL_1_ROUGE, 128); } else{ AfficheVertCWRougePA(); // Vert Client Wifi // Rouge Point d'accès inChronoDebutIndicModReseau = millis(); // Démarre le chrono // Indication le mode réseau inChronoDebutIndicBattFbl = 0; // Remet à zéro le chrono // Indication batterie faible } } } do_Web(); } // # Fin du
do_Web.h
Fichier qui contient la fenêtre Web
// ------------------------------------------------------------------------------- // serveur WEB serveur WEB serveur WEB serveur WEB serveur WEB // ------------------------------------------------------------------------------- void do_Web(){ WiFiClient client = server.available(); // Écouter les clients entrants if (client) { // si vous avez un client, Serial.println("Nouveau Client!"); // imprimer un message sur le port série int inChronoDebutConnexion= millis(); String currentLine = ""; // Variable de type String pour contenir // les données entrantes du client while (client.connected()) { // boucle alors que le client est connecté if ((millis() - inChronoDebutConnexion) > 1000){ // Déconnecte les fureteurs qui restent client.stop(); // connecter sans avoir d'échange à inChronoDebutConnexion= millis(); // faire comme Chrome } if (client.available()) { // s'il y a des octets à lire du client, char c = client.read(); // lire un octet, puis //Serial.write(c); // Imprimez sur le moniteur série if (c == '\n') { // si l'octet est un caractère // de nouvelle ligne // si la ligne en cours est vide, vous avez // deux caractères de nouvelle ligne consécutifs. // c'est la fin de la requête HTTP du client, // alors envoyez une réponse: if (currentLine.length() == 0) { client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/html\n"); // Début du HTML client.println("<!DOCTYPE html><html>"); client.println("<head>"); client.println("<title>DÉCLENCHEUR Web Server</title>"); client.println("<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">"); client.println("<link rel=\"icon\" href=\"data:,\">"); // CSS to style the on/off buttons client.println("<style>html { font-family: Helvetica;}"); client.println(".button { background-color: #4CAF50; border: none; color: white; padding: 16px 40px;"); client.println("text-decoration: none; font-size: 40px; margin: 2px; cursor: pointer;}"); client.println("</style>"); client.println("</head>"); client.println("<table align=\"center\" style=\"background-color:#5EA084\"><tr><td>"); client.println("<table>"); client.println("<tr><th colspan=\"2\"><h1>DÉCLENCHEUR</h1></th></tr>"); client.println("<tr><td>"); client.println(flVoltMesure); client.println("</td><td>"); client.println("V - Voltage de la source d'alimentation"); client.println("</td></tr>"); client.println("<tr><td>"); client.println(u32DelaiDeReaction); client.println("</td><td>"); if (blUnitDlReactMicroScd){ client.println("us "); } else { client.println("ms "); } client.println("Délai de réaction"); client.println("</td></tr>"); client.println("<tr><td>"); client.println(u32TempsRelaisActif); client.println("</td><td>"); client.println("ms Durée d'activation du relais<br>"); client.println("</td></tr>"); client.println("<tr><td>"); client.println(u32DelaiAvantRetour); client.println("</td><td>"); client.println("ms Délai avant le retour aux détecteurs"); client.println("</td></tr>"); client.println("<tr><th colspan=\"2\"><br><a href=\"/D\"><button class=\"button\">RELAIS</button></a><br><br></th></tr>"); client.println("</table>"); client.println("<form action=\"/action_page.php\">"); client.println("<table><tr><td>Délai de réaction:</td><td><input type=\"text\" name=\"dlyReact\"></td></tr>"); client.println("<tr><td>Temps actif:</td><td><input type=\"text\" name=\"TmpsActif\"></td></tr>"); client.println("<tr><td>Délai de retour:</td><td><input type=\"text\" name=\"dlyRtour\"></td></tr>"); if (blUnitDlReactMicroScd){ client.println("<tr><td colspan=\"2\"><input type=\"radio\" name=\"unitDelaiReactMS\" value=\"1\" checked>Délais de réaction en microseconde</td></tr>"); client.println("<tr><td colspan=\"2\"><input type=\"radio\" name=\"unitDelaiReactMS\" value=\"0\" >Délais de réaction en milliseconde</td></tr>"); } else { client.println("<tr><td colspan=\"2\"><input type=\"radio\" name=\"unitDelaiReactMS\" value=\"1\" >Délais de réaction en microseconde</td></tr>"); client.println("<tr><td colspan=\"2\"><input type=\"radio\" name=\"unitDelaiReactMS\" value=\"0\" checked>Délais de réaction en milliseconde</td></tr>"); } client.println("<tr><th colspan=\"2\"><br><input type=\"submit\" value=\"Soumettre\"><br><br></th></tr>"); client.println("</table>"); client.println("</form>"); client.println("<table>"); client.println("<tr><td><br> <a href=\"/P\">+ Augmenter le délai de réaction</a></td></tr>"); client.println("<tr><td><br><br> <a href=\"/M\">- Diminuer le délai de réaction</a></td></tr>"); client.println("</table>"); client.println("<br><br></td></tr></table>"); client.println("</body>\n</html>"); // break out of the while loop: break; } else { // si vous avez une nouvelle ligne, effacez currentLine: int posDlyReact = currentLine.indexOf("dlyReact="); int posTmpsActif = currentLine.indexOf("TmpsActif="); int posDlyRtour = currentLine.indexOf("dlyRtour="); int posUnitDelaiReactMS = currentLine.indexOf("unitDelaiReactMS="); int posHTTP = currentLine.indexOf("HTTP"); if (currentLine.startsWith("GET /action_page.php?")){ if (posDlyReact >0) { Serial.println(""); Serial.println("***" ); Serial.print(posDlyReact); Serial.println(" position du dlyReact" ); Serial.print(posTmpsActif); Serial.println(" position du TmpsActif" ); Serial.print(posDlyRtour); Serial.println(" position du dlyRtour" ); Serial.print(posUnitDelaiReactMS); Serial.println(" position du unitDelaiReactMS" ); Serial.println(currentLine); String strDlyReact = currentLine.substring(posDlyReact+9,posTmpsActif-1); Serial.println(strDlyReact); String strTmpsActif = currentLine.substring(posTmpsActif+10,posDlyRtour-1); Serial.println(strTmpsActif); String strDlyRtour = currentLine.substring(posDlyRtour+9,posUnitDelaiReactMS-1); Serial.println(strDlyRtour); String strUnitDelaiReactMS = currentLine.substring(posUnitDelaiReactMS+17,posHTTP-1); Serial.println(strUnitDelaiReactMS); if (strDlyReact != ""){ u32DelaiDeReaction = strDlyReact.toInt(); memFlashDataUser(); } if (strTmpsActif != ""){ u32TempsRelaisActif = strTmpsActif.toInt(); memFlashDataUser(); } if (strDlyRtour != ""){ u32DelaiAvantRetour = strDlyRtour.toInt(); memFlashDataUser(); } if (strUnitDelaiReactMS != ""){ blUnitDlReactMicroScd = strUnitDelaiReactMS.toInt(); memFlashDataUser(); } } } currentLine = ""; } } else if (c != '\r') { // si vous avez autre chose qu'un caractère de retour de chariot, currentLine += c; // l'ajouter à la fin de la currentLine } // Vérifiez si la demande du client if (currentLine.endsWith("GET /P")) { u32DelaiDeReaction ++; // Augmente la durée d'activation du relais memFlashDataUser(); currentLine = ""; } if (currentLine.endsWith("GET /M")) { u32DelaiDeReaction --; // Diminue la durée d'activation du relais if (u32DelaiDeReaction == 4294967295){ u32DelaiDeReaction =0;} memFlashDataUser(); currentLine = ""; } if (currentLine.endsWith("GET /D")) { Serial.println(currentLine); blDeclencheRelais = 1; // currentLine = ""; } } // # if (client.available()) } // # fin du while (client.connected()) } // # fin du if (client) // close the connection: client.stop(); //Serial.println("Client Disconnected."); delay(0); }
<- Contrôleur multifonctionnel élaboré autour du ESP32 DEVKIT V1 DOIT (4 de 4) | L’interface BLUETOOTH du déclencheur de relais ( 1 de 2 ) -> |