-
Uncategorized
-
- Join this Course to access resources
-
- Join this Course to access resources
- Quiz
-
- Join this Course to access resources
- Quiz
-
- Join this Course to access resources
- Quiz
-
- Join this Course to access resources
- Quiz
-
#3 Set and clear output
This chapter adds a couple of links to set and clear an output.
Add set and clear actions
The easiest way to add simple actions into the web page is to insert anchor HTML elements with associated action paths. The HTTP response from the server should contain these anchors:
client.println("HTTP/1.1 200 OK");client.println("Content-Type: text/html");client.println();client.println( "<!doctype html>" "<html>" "<head>" "<title>Hello PLC!</title>" "</head>" "<body>" "<h1>Hello PLC!</h1>"<a href='/setOutput'>Set output</a><br>" "<a href='/clearOutput'>Clear output</a><br>""</body>" "</html>" );client.flush();
Parse the request
Now the sketch should parse the request to set or clear the output, depending on the path. To do this, it gets the route from the first line of the request using a String object called path and some of its functions.
Some variables are needed:
String header; bool firstLine = true;
And the character received from the client is appended to the header:
if (firstLine) { header += c; }
When the request is complete, the sketch parses the header line to get the path:
int pos = header.indexOf(' '); String path = header.substring(pos + 1, header.indexOf(' ', pos + 1));
Remember to update the first Line variable when the client sends a ‘new line’ (\n) character:
if (c == '\n') { emptyLine = true; firstLine = false; } else if (c != '\r') { emptyLine = false; }
Set or clear an output depending on the path
The server should set output to HIGH when the path is equal to “/setOutput” and LOW when the path is equal to “/clearOutput”.
if (path.compareTo("/setOutput") == 0){ // Set outputdigitalWrite(Q0_0, HIGH);} else if (path.compareTo("/clearOutput") == 0) {// Clear outputdigitalWrite(Q0_0, LOW);}
Final code review
send a 404 error for unknown requests,
send a redirection response to the main page on set/clear command request,
add the sendMainPage()
Code Example
#include <Ethernet2.h> // Server creation
EthernetServer server(80);
void setup() {
Serial.begin(9600UL); Serial.println("WebServer started"); // Ethernet initialization
byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
byte ip[] = {10, 10, 10, 25}; Ethernet.begin(mac, ip); // Server initialization
server.begin();
}
void loop() { // Wait for clients
EthernetClient client = server.available();
if (client) { // Parse request
bool emptyLine = true;
String header; bool firstLine = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
if (firstLine) {
header += c; // The request is finished when an empty line is received
}
if (emptyLine && (c == '\n')) { // Get path from the header line
int pos = header.indexOf(' ');
String path = header.substring(pos + 1, header.indexOf(' ', pos + 1)); // Act depending on path
if (path.compareTo("/") == 0) {
sendMainPage(client);
}
else if (path.compareTo("/setOutput") == 0) { // Set output
digitalWrite(Q0_0, HIGH); // Redirect response
redirectToMainPage(client);
}
else if (path.compareTo("/clearOutput") == 0) { // Clear output
digitalWrite(Q0_0, LOW); // Redirect response
redirectToMainPage(client);
}
else { // Unrecognized path
sendNotFound(client);
} client.flush(); // Close connection
client.stop(); break;
} // The request is finished when a blank line is received
if (c == '\n') {
emptyLine = true;
firstLine = false;
}
else if (c != '\r') {
emptyLine = false;
}
}
}
}
}
void sendNotFound(EthernetClient &client) { // Path not found
client.println("HTTP/1.1 404 Not Found");
client.println("Content-Type: text/plain");
client.println();
client.println("404 Not Found");
}
void redirectToMainPage(EthernetClient &client) { // Redirect to main page
client.println("HTTP/1.1 303 See Other");
client.println("Location: /");
client.println();
}
void sendMainPage(EthernetClient &client) { // Send the response
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println(); client.println( "<!doctype html>" "<html>" "<head>" "<title>Hello PLC!</title>" "</head>" "<body>" "<h1>Hello PLC!</h1>" "<a href='/setOutput'>Set output</a><br>" "<a href='/clearOutput'>Clear output</a><br>" "</body>" "</html>" );
}
Commenting is not enabled on this course.