Bonjour Je découvre la carte ESP8266 et je voudrais créer une commande via un smartphone de plusieurs relais. J’ai pris l’exemple wifiwebserver de cette bibliothèque. Jusque là tout va bien. Aussi quand je veux faire une commande d’une autre sortie ça ne fonctionne pas. Ca n’avait pas l’air bien compliqué au départ mais je coince. Voici le code d’origine.
#include <ESP8266WiFi.h>
const char* ssid = "your-ssid";
const char* password = "your-password";
// Create an instance of the server
// specify the port to listen on as an argument
WiFiServer server(80);
void setup() {
Serial.begin(115200);
delay(10);
// prepare GPIO2
pinMode(2, OUTPUT);
digitalWrite(2, 0);
// Connect to WiFi network
Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
// Start the server
server.begin();
Serial.println("Server started");
// Print the IP address
Serial.println(WiFi.localIP());
}
void loop() {
// Check if a client has connected
WiFiClient client = server.available();
if (!client) {
return;
}
// Wait until the client sends some data
Serial.println("new client");
while (!client.available()) {
delay(1);
}
// Read the first line of the request
String req = client.readStringUntil('\r');
Serial.println(req);
client.flush();
// Match the request
int val;
if (req.indexOf("/gpio/0") != -1) {
val = 0;
} else if (req.indexOf("/gpio/1") != -1) {
val = 1;
} else {
Serial.println("invalid request");
client.stop();
return;
}
// Set GPIO2 according to the request
digitalWrite(2, val);
client.flush();
// Prepare the response
String s = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE HTML>\r\n<html>\r\nGPIO is now ";
s += (val) ? "high" : "low";
s += "</html>\n";
// Send the response to the client
client.print(s);
delay(1);
Serial.println("Client disonnected");
J’ai numéroté la commande en ajoutant le N° du GPIO. (GPIO 4 et GPIO5) J’ai créé un val4 pour l’état de la sortie 4 et val5 pour la sortie 5. Mais à la commande à 1 de mon GPIO5 ma valeur val5 devient 1073671544 !!! Je ne comprends pas…??? Voici l’extrait de mon code modifié
// prepare GPIO5 D1
pinMode(5, OUTPUT);
digitalWrite(5, 0);
// prepare GPIO4 D2
pinMode(4, OUTPUT);
digitalWrite(4, 0);
// Connect to WiFi network
Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
// Start the server
server.begin();
Serial.println("Server started");
// Print the IP address
Serial.println(WiFi.localIP());
}
void loop() {
// Check if a client has connected
WiFiClient client = server.available();
if (!client) {
return;
}
// Wait until the client sends some data
Serial.println("new client");
while (!client.available()) {
delay(1);
}
// Read the first line of the request
String req = client.readStringUntil('\r');
Serial.println(req);
client.flush();
// Match the request
int val4;
int val5;
if (req.indexOf("/gpio5/0") != -1) {
val5 = 0;
} else if (req.indexOf("/gpio5/1") != -1) {
val5 = 1;
}
else if (req.indexOf("/gpio4/0") != -1) {
val4 = 0;
}
else if (req.indexOf("/gpio4/1") != -1) {
val4 = 1;
}
else {
Serial.println("invalid request");
client.stop();
return;
}
// Set GPIO2 according to the request
digitalWrite(4, val4);
digitalWrite(5, val5);
Serial.println(val4);
Serial.println(val5);
client.flush();
// Prepare the response
String s = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE HTML>\r\n<html>\r\nGPIO is now ";
s += (val4) ? "high" : "low";
s += (val5) ? "high" : "low";
s += "</html>\n";
Merci de votre aide
+0
-0