Skip to content

Instantly share code, notes, and snippets.

@naimrajib07
Last active July 4, 2017 01:56
Show Gist options
  • Save naimrajib07/866300d6ba95e77d91bc45f799bb053d to your computer and use it in GitHub Desktop.
Save naimrajib07/866300d6ba95e77d91bc45f799bb053d to your computer and use it in GitHub Desktop.
Arduino and Node MCU ESP-8266 12E webserver.
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>
#define LISTEN_PORT 80
// Set your wifi credential
const char *ssid = "Your Wifi Name";
const char *password = "Your Wifi Password";
// Config Veraible
const int ledOn = 1;
const int ledOff = 0;
const char *ledBlink = "blink";
const char *blinkOnTime = "blinkOnTime";
const char *blinkOffTime = "blinkOffTime";
const int ledOne = D3;
char *ledOneName = "ledOne";
const char *ledOneOnPath = "/led/1/on";
const char *ledOneOffPath = "/led/1/off";
int ledOneNoOfBlink = 0;
int ledOneBlinkOn = 0;
int ledOneBlinkOff = 0;
const int ledTwo = D2;
char *ledTwoName = "ledTwo";
const char *ledTwoOnPath = "/led/2/on";
const char *ledTwoOffPath = "/led/2/off";
int ledTwoNoOfBlink = 0;
int ledTwoBlinkOn = 0;
int ledTwoBlinkOff = 0;
const int ledThree = D1;
char *ledThreeName = "ledThree";
const char *ledThreeOnPath = "/led/3/on";
const char *ledThreeOffPath = "/led/3/off";
int ledThreeNoOfBlink = 0;
int ledThreeBlinkOn = 0;
int ledThreeBlinkOff = 0;
char *ledStatusPath = "/led/status";
const int statusOn = 1;
const int statusOff = 0;
char *statusMessageOn = "On";
char *statusMessageOff = "Off";
const char *statusParam = "name";
int noOfRequest;
ESP8266WebServer server ( LISTEN_PORT );
void handleNotFound() {
noOfRequest = noOfRequest + 1;
String message = "File Not Found\n\n";
message += "URI: ";
message += server.uri();
message += "\nMethod: ";
message += ( server.method() == HTTP_GET ) ? "GET" : "POST";
message += "\nArguments: ";
message += server.args();
message += "\n";
for ( uint8_t i = 0; i < server.args(); i++ ) {
message += " " + server.argName ( i ) + ": " + server.arg ( i ) + "\n";
}
server.send ( 404, "text/plain", message );
}
void ledStatus() {
// Count Request
noOfRequest = noOfRequest + 1;
String statusMessage = "";
String statusMessageLedOne = digitalRead(ledOne) == HIGH ? "High" : "Low";
String statusMessageLedTwo = digitalRead(ledTwo) == HIGH ? "High" : "Low";
String statusMessageLedThree = digitalRead(ledThree) == HIGH ? "High" : "Low";
if (server.args()) {
for ( uint8_t i = 0; i < server.args(); i++ ) {
Serial.println("Status Debug...");
Serial.println(server.argName ( i ));
Serial.println(server.arg ( i ));
if (server.argName ( i ) == statusParam) {
if (server.arg ( i ) == ledOneName) {
statusMessage = statusMessageLedOne;
Serial.println(statusMessage);
} else if (server.arg ( i ) == ledTwoName) {
statusMessage = statusMessageLedTwo;
} else if (server.arg ( i ) == ledThreeName) {
statusMessage = statusMessageLedThree;
}
}
}
} else {
char temp[2500];
int sec = millis() / 1000;
int min = sec / 60;
int hr = min / 60;
snprintf ( temp, 2500,
"<html>\
<head>\
<title>ESP8266 WIFI WebServer</title>\
</head>\
<body>\
<h1>Hello from ESP8266!</h1>\
<table width='250px' border='1px solid black' >\
<tr>\
<th>LED</th>\
<th>Status</th>\
</tr>\
<tr>\
<td>#1</td>\
<td>%s</td>\
</tr>\
<tr>\
<td>#2</td>\
<td>%s</td>\
</tr>\
<tr>\
<td>#3</td>\
<td>%s</td>\
</tr>\
</table>\
<p><b>Device Uptime:</b> %02d:%02d:%02d</p>\
<p><b>Number Of Request:</b> %02d</p>\
<b>Command Documentation</b>\
<table border='1px solid black' width='100%' height='350px'>\
<tr>\
<th>Command Title</th>\
<th>REST Command</th>\
<th>Description</th>\
<th>Example</th>\
</tr>\
<tr>\
<td>Check Status</td>\
<td>/led/status</td>\
<td>List all the available LED status and the available REST functionality.</td>\
<td>http://192.168.0.4/led/status</td>\
</tr>\
<tr>\
<td>Check LED Status</td>\
<td>/led/status?name=ledOne</td>\
<td>To Check individual LED Status, have to provide Query Parameter: <b>name</b> <br>The available options are: <ul><li>ledOne</li><li>ledTwo</li><li>ledThree</li></ul></td>\
<td>http://192.168.0.4/led/status?name=ledOne , http://192.168.0.4/led/status?name=ledTwo , http://192.168.0.4/led/status?name=ledThree</td>\
</tr>\
<tr>\
<td>Turn On LED</td>\
<td>/led/(1|2|3)/on</td>\
<td>Turn On Specific LED.</td>\
<td>http://192.168.0.4/led/1/on, http://192.168.0.4/led/2/on, http://192.168.0.4/led/3/on</td>\
</tr>\
<tr>\
<td>Turn Off LED</td>\
<td>/led/(1|2|3)/off</td>\
<td>Turn On Specific LED.</td>\
<td>http://192.168.0.4/led/1/off, http://192.168.0.4/led/2/off, http://192.168.0.4/led/3/off</td>\
</tr>\
<tr>\
<td>Set Blink</td>\
<td>/led/1/on?blinkOnTime=Duration&blinkOffTime=Duration&blink=NoOfBlinks</td>\
<td>To set blink option, there are threee options: <br> <ul><li>blinkOnTime: 500ms</li><li>blinkOffTime: 500ms</li><li>blink: 5</li></ul></td>\
<td>http://192.168.0.4/led/1/on?blinkOnTime=500&blinkOffTime=300&blink=5</td>\
</tr>\
</table>\
</body>\
</html>", statusMessageLedOne.c_str(), statusMessageLedTwo.c_str(), statusMessageLedThree.c_str(), hr, min % 60, sec % 60, int(noOfRequest));
server.send ( 200, "text/html", temp );
}
server.send ( 200, "text/plain", statusMessage );
}
void handleLed() {
// Count Request
noOfRequest = noOfRequest + 1;
if (server.uri() == ledOneOnPath) {
if (server.args()) {
setAnimationConfig(ledOneName);
ledAnimate(ledOneName, ledOneNoOfBlink, ledOneBlinkOn, ledOneBlinkOff);
} else {
digitalWrite(ledOne, ledOn);
}
} else if (server.uri() == ledOneOffPath) {
digitalWrite(ledOne, ledOff);
} else if (server.uri() == ledTwoOnPath) {
if (server.args()) {
setAnimationConfig(ledTwoName);
ledAnimate(ledTwoName, ledTwoNoOfBlink, ledTwoBlinkOn, ledTwoBlinkOff);
} else {
digitalWrite(ledTwo, ledOn);
}
} else if (server.uri() == ledTwoOffPath) {
digitalWrite(ledTwo, ledOff);
} else if (server.uri() == ledThreeOnPath) {
if (server.args()) {
setAnimationConfig(ledThreeName);
ledAnimate(ledThreeName, ledThreeNoOfBlink, ledThreeBlinkOn, ledThreeBlinkOff);
} else {
digitalWrite(ledThree, ledOn);
}
} else if (server.uri() == ledThreeOffPath) {
digitalWrite(ledThree, ledOff);
}
server.sendHeader("Location", String("/"), true);
server.send ( 302, "text/plain", "");
}
void setAnimationConfig(char *led) {
// Led nuber of Blink
for ( uint8_t i = 0; i < server.args(); i++ ) {
if (server.argName ( i ) == ledBlink) {
if (led == ledOneName) {
ledOneNoOfBlink = server.arg ( i ).toInt();
} else if (led == ledTwoName) {
ledTwoNoOfBlink = server.arg ( i ).toInt();
} else if (led == ledThreeName) {
ledThreeNoOfBlink = server.arg ( i ).toInt();
}
}
// Led Blink on duration
if (server.argName ( i ) == blinkOnTime) {
if (led == ledOneName) {
ledOneBlinkOn = server.arg ( i ).toInt();
} else if (led == ledTwoName) {
ledTwoBlinkOn = server.arg ( i ).toInt();
} else if (led == ledThreeName) {
ledThreeBlinkOn = server.arg ( i ).toInt();
}
}
// Led Blink off duration
if (server.argName ( i ) == blinkOffTime) {
ledOneBlinkOff = server.arg ( i ).toInt();
if (led == ledOneName) {
ledOneBlinkOff = server.arg ( i ).toInt();
} else if (led == ledTwoName) {
ledTwoBlinkOff = server.arg ( i ).toInt();
} else if (led == ledThreeName) {
ledThreeBlinkOff = server.arg ( i ).toInt();
}
}
}
}
void ledAnimate(char *led, int ledNoOfBlink, int ledBlinkOn, int ledBlinkOff) {
int ledToBlink;
if (led == ledOneName ) {
ledToBlink = ledOne;
} else if (led == ledTwoName) {
ledToBlink = ledTwo;
} else if (led == ledThreeName) {
ledToBlink = ledThree;
}
for (int i = 0; i < ledNoOfBlink; i++ ) {
digitalWrite(ledToBlink, ledOn);
delay(ledBlinkOn);
digitalWrite(ledToBlink, ledOff);
delay(ledBlinkOff);
}
}
void setup ( void ) {
// Initialize Led Pin, defualt off/low
pinMode ( ledOne, OUTPUT );
digitalWrite ( ledOne, 0 );
pinMode ( ledTwo, OUTPUT );
digitalWrite ( ledTwo, 0 );
pinMode ( ledThree, OUTPUT );
digitalWrite ( ledThree, 0 );
Serial.begin ( 115200 );
Serial.println("Debugging enabled....");
WiFi.begin ( ssid, password );
Serial.println ( "" );
// Wait for connection
while ( WiFi.status() != WL_CONNECTED ) {
delay ( 500 );
Serial.print ( "." );
}
Serial.println ( "" );
Serial.print ( "Connected to " );
Serial.println ( ssid );
Serial.print ( "IP address: " );
Serial.println ( WiFi.localIP() );
if ( MDNS.begin ( "esp8266" ) ) {
Serial.println ( "MDNS responder started" );
}
// Initialize No Of Request
noOfRequest = 0;
// Route Config
server.on ( "/", ledStatus );
server.on ( ledOneOnPath, handleLed );
server.on ( ledOneOffPath, handleLed );
server.on ( ledTwoOnPath, handleLed );
server.on ( ledTwoOffPath, handleLed );
server.on ( ledThreeOnPath, handleLed );
server.on ( ledThreeOffPath, handleLed );
server.on(ledStatusPath, ledStatus);
server.onNotFound ( handleNotFound );
server.begin();
Serial.println ( "HTTP server started" );
}
void loop ( void ) {
server.handleClient();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment