Add possibility to set the GPIO mode
This commit is contained in:
parent
4f76fd6025
commit
146d8b65ce
@ -9,6 +9,7 @@
|
|||||||
|
|
||||||
#include <ESP8266WiFi.h>
|
#include <ESP8266WiFi.h>
|
||||||
#define URL_GPIO "/gpio"
|
#define URL_GPIO "/gpio"
|
||||||
|
#define URL_MODE "/mode"
|
||||||
|
|
||||||
const char* ssid = "freebox_sarah";
|
const char* ssid = "freebox_sarah";
|
||||||
const char* password = "password";
|
const char* password = "password";
|
||||||
@ -17,18 +18,35 @@ const char* password = "password";
|
|||||||
// specify the port to listen on as an argument
|
// specify the port to listen on as an argument
|
||||||
WiFiServer server(80);
|
WiFiServer server(80);
|
||||||
|
|
||||||
enum request_type {INVALID, GET_VALUE, SET_VALUE};
|
enum requestType {INVALID, GET_VALUE, SET_VALUE, SET_MODE};
|
||||||
|
|
||||||
|
int mode[] = {INPUT, OUTPUT, INPUT_PULLUP};
|
||||||
|
|
||||||
struct request {
|
struct request {
|
||||||
int gpio;
|
int gpio;
|
||||||
int value;
|
int value;
|
||||||
request_type type;
|
requestType type;
|
||||||
};
|
};
|
||||||
|
|
||||||
int parseRequest(String &raw, struct request &req ) {
|
int parseRequest(String &raw, struct request &req ) {
|
||||||
int index, end;
|
int index, end;
|
||||||
String url;
|
String url;
|
||||||
|
|
||||||
|
index = raw.indexOf(URL_MODE);
|
||||||
|
|
||||||
|
if ( index != -1) {
|
||||||
|
String subUrl = raw.substring(index + strlen(URL_MODE));
|
||||||
|
if (parseRequest(subUrl, req) >= 0) {
|
||||||
|
if ( req.value >= 0 && req.value <= 2) {
|
||||||
|
req.type = SET_MODE;
|
||||||
|
req.value = mode[req.value];
|
||||||
|
return 0;
|
||||||
|
} else
|
||||||
|
goto invalid;
|
||||||
|
} else
|
||||||
|
goto invalid;
|
||||||
|
}
|
||||||
|
|
||||||
index = raw.indexOf(URL_GPIO);
|
index = raw.indexOf(URL_GPIO);
|
||||||
|
|
||||||
if (index == -1)
|
if (index == -1)
|
||||||
@ -152,8 +170,20 @@ void loop() {
|
|||||||
s += request.gpio;
|
s += request.gpio;
|
||||||
s += " is ";
|
s += " is ";
|
||||||
s += digitalRead(request.gpio);
|
s += digitalRead(request.gpio);
|
||||||
|
} else if (request.type == SET_MODE) {
|
||||||
|
Serial.print("Setting mode of GPIO");
|
||||||
|
Serial.print(request.gpio);
|
||||||
|
Serial.print(" to mode ");
|
||||||
|
Serial.print(request.value);
|
||||||
|
|
||||||
|
pinMode(request.gpio, request.value);
|
||||||
|
|
||||||
|
s += "GPIO";
|
||||||
|
s += request.gpio;
|
||||||
|
s += " mode is now ";
|
||||||
|
s += (request.value);
|
||||||
}
|
}
|
||||||
|
|
||||||
s += "</html>\n";
|
s += "</html>\n";
|
||||||
client.print(s);
|
client.print(s);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user