Bonjour,
J'ai réussi a créer une zone de saisie avec retour au Client!
Merci de m'avoir mis sur la piste...
Maintenant j'essai de piloter une led avec : server.on("/on", HTTP_GET, [](AsyncWebServerRequest *request), mais ca ne fonctionne pas.
J'ai une page web en PROGMEM dans mon PGM dans laquelle j'ai 2 fonctions appelées par un bouton qui
font appel a la commande dans le Setup:
server.on("/on", HTTP_GET, [](AsyncWebServerRequest *request)
{
digitalWrite(led_rouge, HIGH);
request->send(200);
});
Ca ne fonctionne pas. J'ai contrôlé la led qui est bien en D2 et fonctionne avec d'autre PGM...
Est-ce que j'ai mal utilisé AsyncWebServerRequest *request?
MERCI a ceux qui pourront m'aider
Voici mon code:
#include <Arduino.h>
#ifdef ESP32
#include <WiFi.h>
#include <AsyncTCP.h>
#include <SPIFFS.h>
#else
#include <ESP8266WiFi.h>
#include <ESPAsyncTCP.h>
#include <Hash.h>
#include <FS.h>
#endif
#include <ESPAsyncWebServer.h>
AsyncWebServer server(80);
// REPLACE WITH YOUR NETWORK CREDENTIALS
const char *ssid = "mon SSID";
const char *password = "MdP";
const char* PARAM_STRING = "inputString";
int interrupteur; // inter
int led_rouge; // led rouge
int fourche_IR;
int val = 0; // variable pour memoriser comptage
int lumiere = 0; // eclairage pluviometre
int buttonPushCounter = 0; // variable pour le comptage du nombre d'appuis sur le bouton poussoir
int buttonState = 1; // Variable pour l'état actuel du bouton poussoir
int lastButtonState = 1; // Variable pour l'état précédent du bouton poussoir
//=========== HTML web page to handle 1 input fields (inputString) ========================
const char index_html[] PROGMEM = R"rawliteral(
<!DOCTYPE HTML>
<html>
<body>
<title>pluviometre</title>
<!-- saisie de la date avec retour/visu -->
<form action="/get" target="hidden-form">
Date en cours: %inputString%
Nouvelle date? <input type="text" name="inputString">
<input type="submit" value="Submit" onclick="submitMessage()">
</form>
<iframe style="display:none" name="hidden-form"></iframe>
<!-- message validation pour test... -->
<script type="text/javascript">
function submitMessage() {
alert("Saved value to ESP SPIFFS");
setTimeout(function(){ document.location.reload(false); }, 500);
}
<!-- XMLHttpRequest() dans Setup() pgm -->
function onButton() { /* Fonction pour le bouton ON */
alert("onButton!");
XMLHttpRequest().open("GET", "on", true);
xhttp.send();
Serial.println("onButton!");
}
function offButton() { /* Fonction pour le bouton OFF */
alert("offButton!");
XMLHttpRequest().open("GET", "off", true);
xhttp.send();
Serial.println("offButton!");
}
</script>
<center>
<style type="text/css"> body { color: #212121; background-color: #CCCC33 } </style>
<h1 style="font-size:150%"><font face="Comic Sans MS" color=#339900>Pluviomètre chez Nanard</font>
<img src="pluvio">
<!-- Les boutons ON / OFF -- j appelle les fonctions onButton() et offButton() de cette page -->
Allumer/eteindre
<button onclick="onButton()" >ON</button> <button onclick="offButton()">OFF</button>
</body>)rawliteral";
//=============================================================================================
void notFound(AsyncWebServerRequest *request) {
request->send(404, "text/plain", "Not found");
}
//=============================================================================================
String readFile(fs::FS &fs, const char * path){
Serial.printf("Reading file: %s\r\n", path);
File file = fs.open(path, "r");
if(!file || file.isDirectory()){
Serial.println("- empty file or failed to open file");
return String();
}
Serial.println("- read from file:");
String fileContent;
while(file.available()){
fileContent+=String((char)file.read());
}
Serial.println(fileContent);
return fileContent;
}
//=============================================================================================
void writeFile(fs::FS &fs, const char * path, const char * message){
Serial.printf("Writing file: %s\r\n", path);
File file = fs.open(path, "w");
if(!file){
Serial.println("- failed to open file for writing");
return;
}
if(file.print(message)){
Serial.println("- file written");
} else {
Serial.println("- write failed");
}
}
// Replaces placeholder with stored values
String processor(const String& var){
//Serial.println(var);
var == "inputString";
return readFile(SPIFFS, "/inputString.txt");
return String();
}
//=============================================================================================
void setup() {
Serial.begin(9600);
// Initialize SPIFFS
#ifdef ESP32
if(!SPIFFS.begin(true)){
Serial.println("An Error has occurred while mounting SPIFFS");
return;
}
#else
if(!SPIFFS.begin()){
Serial.println("An Error has occurred while mounting SPIFFS");
return;
}
#endif
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
if (WiFi.waitForConnectResult() != WL_CONNECTED) {
Serial.println("WiFi Failed!");
return;
}
Serial.println();
Serial.print("IP Address: ");
Serial.println(WiFi.localIP());
// Assign output variables to GPIO pins
////interrupteur= 1; // inter sur GPIO3
led_rouge = 2; // led rouge sur GPIO2
fourche_IR = 0; // led verte sur GPIO0
//pinMode(interrupteur, INPUT);
pinMode(led_rouge, OUTPUT);
pinMode(fourche_IR, INPUT);
// Set outputs to LOW
digitalWrite(led_rouge, LOW);
digitalWrite(fourche_IR, HIGH);
// Send web page with input fields to client
server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){
request->send_P(200, "text/html", index_html, processor);
});
server.on("/pluvio", HTTP_GET, [](AsyncWebServerRequest *request){
request->send(SPIFFS, "/pluvio.png", "image/png");
});
// Send a GET request to <ESP_IP>/get?inputString=<inputMessage>
server.on("/get", HTTP_GET, [] (AsyncWebServerRequest *request) {
String inputMessage;
/* Lorsque l'on clique sur ON, on allume la led */
server.on("/on", HTTP_GET, [](AsyncWebServerRequest *request)
{
digitalWrite(led_rouge, HIGH);
request->send(200);
});
/* Lorsque l'on clique sur OFF, on éteint la led */
server.on("/off", HTTP_GET, [](AsyncWebServerRequest *request)
{
digitalWrite(led_rouge, LOW);
request->send(200);
});
// GET inputString value on <ESP_IP>/get?inputString=<inputMessage>
if (request->hasParam(PARAM_STRING)) {
inputMessage = request->getParam(PARAM_STRING)->value();
writeFile(SPIFFS, "/inputString.txt", inputMessage.c_str());
}
else {
inputMessage = "No message sent";
}
Serial.println(inputMessage);
request->send(200, "text/text", inputMessage);
});
server.onNotFound(notFound);
server.begin();
}
//=============================================================================================
void loop() {
// // To access your stored values on inputString, inputInt, inputFloat
// String yourInputString = readFile(SPIFFS, "/inputString.txt");
// Serial.print("*** Your inputString: ");
// Serial.println(yourInputString);
// delay(5000);
}