Saturday, February 27, 2016

Arduino WiFi Shield 101 Web Server Basics

Without much fuss, the earlier code example was modified per Arduino instructions for a WiFi Web Server.   No additional code libraries were needed, and the application worked without issue.  Here is a snapshot of the page being served by the Arduino after opening the IP address in Chrome.


The code is documented below:

 #include <SPI.h>  
 #include <WiFi101.h>  
   
 char ssid[] = "mynetwork";   // your network SSID (name)   
 char pass[] = "mypassword!";  // your network password  
 int status = WL_IDLE_STATUS;   // the Wifi radio's status  
 WiFiServer server(80);  

 void setup()   
 {  
  // initialize serial:  
  Serial.begin(9600);  
  while (!Serial)  
  {  
   ; // wait for serial port to connect. Needed for native USB port only  
  }  
   
  if (WiFi.status() == WL_NO_SHIELD)  
  {  
   Serial.println("WiFi shield not present");  
   // don't continue:  
   while (true);  
  }   
   
  // attempt to connect to Wifi network:  
  while ( status != WL_CONNECTED)  
  {  
   // attempt to connect using WPA2 encryption:  
   Serial.println("");  
   Serial.println("Attempting to connect to WPA2 network...");  
   status = WiFi.begin(ssid, pass);  
   
   if (status != WL_CONNECTED)  
   {   
    // if you're not connected, stop here:  
    Serial.println("Network unavailable, trying again in 10 seconds...");  
    // wait 10 seconds for connection:  
    delay(10000);  
   }  
  }  
    
  server.begin();  
   
  Serial.println("Connected to network");  
  printWifiStatus();  
 }  
   
 void loop()  
 {  
  // listen for incoming clients  
  WiFiClient client = server.available();  
  if (client)  
  {  
   Serial.println("new client...");  
   // an http request ends with a blank line  
   boolean currentLineIsBlank = true;  
   while (client.connected())  
   {  
    if (client.available())  
    {  
     char c = client.read();  
     Serial.write(c);  
     // if you've gotten to the end of the line (received a newline  
     // character) and the line is blank, the http request has ended,  
     // so you can send a reply  
     if (c == '\n' && currentLineIsBlank)  
     {  
      // send a standard http response header  
      client.println("HTTP/1.1 200 OK");  
      client.println("Content-Type: text/html");  
      client.println("Connection: close"); // the connection will be closed after completion of the response  
      client.println("Refresh: 5"); // refresh the page automatically every 5 sec  
      client.println();  
      client.println("<!DOCTYPE HTML>");  
      client.println("<html>");  
      client.println("<head><title>Arduino Web Server</title></head>");  
      client.println("<body>");  
      // output the value of each analog input pin  
      for (int analogChannel = 0; analogChannel < 6; analogChannel++)  
      {  
       int sensorReading = analogRead(analogChannel);  
       client.print("analog input channel ");  
       client.print(analogChannel);  
       client.print(" is ");  
       client.print(sensorReading);  
       client.println("<br />");  
      }  
      client.println("</body>");  
      client.println("</html>");  
      break;  
     }  
       
     if (c == '\n')  
     {  
      // you're starting a new line  
      currentLineIsBlank = true;  
     }  
     else if (c != '\r')  
     {  
      // you've gotten a character on the current line  
      currentLineIsBlank = false;  
     }  
    }  
   }  
   // give the web browser time to receive the data  
   delay(1);  
   
   // close the connection:  
   client.stop();  
   Serial.println("client disonnected...");  
  }  
 }  
   
 void printWifiStatus()   
 {  
  // print the SSID of the network you're attached to:  
  Serial.print("SSID: ");  
  Serial.println(WiFi.SSID());  
   
  // print your WiFi shield's IP address:  
  IPAddress ip = WiFi.localIP();  
  Serial.print("IP Address: ");  
  Serial.println(ip);  
   
  // print your gateway address:  
  IPAddress gateway = WiFi.gatewayIP();  
  Serial.print("Gateway: ");  
  Serial.println(gateway);  
    
  // print the received signal strength:  
  long rssi = WiFi.RSSI();  
  Serial.print("signal strength (RSSI):");  
  Serial.print(rssi);  
  Serial.println(" dBm");  
 }  
   

The data itself is not very interesting (as it is just pulling values from floating pins), however that will be remedied in the next post.

No comments:

Post a Comment