If you really want the Arduino to be a web server (that is, you connect to it with your web browser) then I made a library a little while back to simplify processing the get/post/pathname/cookie arguments.
See Tiny web server for Arduino or similar.
Example code (that comes with the library) turns on various LEDs (presumably connected to pins on the Arduino) upon getting a "get" request like this:
http://10.0.0.241/?on=4&off=5
That would turn on pin 4 and turn off pin 5. Obviously you change the IP address to suit your network, and use a suitable MAC address.
// Tiny web server demo
// Author: Nick Gammon
// Date: 20 July 2015
#include <SPI.h>
#include <Ethernet.h>
#include <HTTPserver.h>
const int LOW_PIN = 3;
const int HIGH_PIN = 5;
// Enter a MAC address and IP address for your controller below.
byte mac[] = { 0x90, 0xA2, 0xDA, 0x00, 0x2D, 0xA1 };
// The IP address will be dependent on your local network:
byte ip[] = { 10, 0, 0, 241 };
// the router's gateway address:
byte gateway[] = { 10, 0, 0, 1 };
// the subnet mask
byte subnet[] = { 255, 255, 255, 0 };
// Initialize the Ethernet server library
EthernetServer server(80);
// derive an instance of the HTTPserver class with custom handlers
class myServerClass : public HTTPserver
{
virtual void processPostType (const char * key, const byte flags);
virtual void processGetArgument (const char * key, const char * value, const byte flags);
}; // end of myServerClass
myServerClass myServer;
// -----------------------------------------------
// User handlers
// -----------------------------------------------
void myServerClass::processPostType (const char * key, const byte flags)
{
println(F("HTTP/1.1 200 OK"));
println(F("Content-Type: text/html\n"
"Connection: close\n"
"Server: HTTPserver/1.0.0 (Arduino)"));
println(); // end of headers
println (F("<!DOCTYPE html>\n"
"<html>\n"
"<head>\n"
"<title>Arduino test</title>\n"
"</head>\n"
"<body>\n"));
} // end of processPostType
void myServerClass::processGetArgument (const char * key, const char * value, const byte flags)
{
int which = atoi (value);
if (which >= LOW_PIN && which <= HIGH_PIN)
{
if (strcmp (key, "on") == 0)
{
digitalWrite (which, HIGH);
print (F("<p>Turning on pin "));
println (which);
}
else if (strcmp (key, "off") == 0)
{
digitalWrite (which, LOW);
print (F("<p>Turning OFF pin "));
println (which);
}
else
{
print (F("<p><b>Bad action: "));
fixHTML (value);
println (F("</b>"));
}
}
else
{
print (F("<p><b>Bad pin number: "));
fixHTML (value);
println (F("</b>"));
}
} // end of processGetArgument
// -----------------------------------------------
// End of user handlers
// -----------------------------------------------
void setup ()
{
// start the Ethernet connection and the server:
Ethernet.begin(mac, ip, gateway, subnet);
for (int i = LOW_PIN; i <= HIGH_PIN; i++)
pinMode (i, OUTPUT);
} // end of setup
void loop ()
{
// listen for incoming clients
EthernetClient client = server.available();
if (!client)
{
// do other processing here
return;
}
myServer.begin (&client);
while (client.connected() && !myServer.done)
{
while (client.available () > 0 && !myServer.done)
myServer.processIncomingByte (client.read ());
// do other stuff here
} // end of while client connected
client.println(F("<hr>OK, done."));
client.println (F("</body>\n"
"</html>"));
// give the web browser time to receive the data
delay(1);
// close the connection:
client.stop();
} // end of loop
Library source on GitHub at nickgammon/HTTPserver.
The library is designed to allow you to receive cookies, POST data, pathnames (on the URL) and GET parameters.
send a string variable to the Arduino, which would then of course run its code
- server – Matt Clark Aug 11 at 1:46looked at many tutorials featuring an Arduino requesting data from a web server through a Wifi Shield
- the Arduino requesting data from a web server makes it sound like a client to me. – Nick Gammon Aug 12 at 2:24