iPhone Web Browser controlling LED via Arduino Uno + Wifi Shield

Hello Guys,

I'm testing out some simple web server operation by controlling the LED on/off operation via iPhone's safari web browser. The LED is mounted on the Wifi shield module attaching to the Arduino Uno R3 (between the Digital Pin 9 and GND pin). The sample sketch as below found in the Arduino IDE is used for the testing.

I found that the LED on and off operation can be easily controlled via safari web browser so long my iPhone is connected to Wifi but it would failed to connect to browser (e.g. http://192.168.1.5)
once i turn off the Wifi setting in my iPhone and switch it over to the 3G/4G network instead.

Any idea why it would works only when the iphone is connected to Wifi but not the 3G/4G network?

Am i doing something wrong in the code?

Look forward to hearing from you guys soon.

#include <SPI.h>
#include <WiFi.h>

char ssid[] = "ABC-C1A2"; // your network SSID (name)
char pass[] = "12345678"; // your network password
int keyIndex = 0; // your network key Index number (needed only for WEP)

int status = WL_IDLE_STATUS;
WiFiServer server(80);

void setup() {
Serial.begin(9600); // initialize serial communication
pinMode(9, OUTPUT); // set the LED pin mode

// check for the presence of the shield:
if (WiFi.status() == WL_NO_SHIELD) {
Serial.println("WiFi shield not present");
while (true); // don't continue
}

Serial.print(F("Firmware Version:"));
Serial.println(WiFi.firmwareVersion());

String fv = WiFi.firmwareVersion();
if ( fv != "1.1.0" )
Serial.println("Please upgrade the firmware");

// attempt to connect to Wifi network:
while ( status != WL_CONNECTED) {
Serial.print("Attempting to connect to Network named: ");
Serial.println(ssid); // print the network name (SSID);

// Connect to WPA/WPA2 network. Change this line if using open or WEP network:
status = WiFi.begin(ssid, pass);
// wait 10 seconds for connection:
delay(10000);
}
server.begin(); // start the web server on port 80
printWifiStatus(); // you're connected now, so print out the status
}

void loop() {
WiFiClient client = server.available(); // listen for incoming clients

if (client) { // if you get a client,
Serial.println("new client"); // print a message out the serial port
String currentLine = ""; // make a String to hold incoming data from the client
while (client.connected()) { // loop while the client's connected
if (client.available()) { // if there's bytes to read from the client,
char c = client.read(); // read a byte, then
Serial.write(c); // print it out the serial monitor
if (c == '\n') { // if the byte is a newline character

// if the current line is blank, you got two newline characters in a row.
// that's the end of the client HTTP request, so send a response:
if (currentLine.length() == 0) {
// HTTP headers always start with a response code (e.g. HTTP/1.1 200 OK)
// and a content-type so the client knows what's coming, then a blank line:
client.println("HTTP/1.1 200 OK");
client.println("Content-type:text/html");
client.println();

//the content of the HTTP response follows the header:
//client.print("Click <a href="/H">here turn the LED on pin 9 on
");
//client.print("Click <a href="/H">here turn the LED on pin 9 on
");
client.print("Click <a href="/H">here turn the LED on pin 9 on
");
//client.print("Click <a href="/L">here turn the LED on pin 9 off
");
client.print("Click <a href="/L">here turn the LED on pin 9 off
");

// The HTTP response ends with another blank line:
client.println();
// break out of the while loop:
break;
}
else { // if you got a newline, then clear currentLine:
currentLine = "";
}
}
else if (c != '\r') { // if you got anything else but a carriage return character,
currentLine += c; // add it to the end of the currentLine
}

// Check to see if the client request was "GET /H" or "GET /L":
if (currentLine.endsWith("GET /H")) {
digitalWrite(9, HIGH); // GET /H turns the LED on
}
if (currentLine.endsWith("GET /L")) {
digitalWrite(9, LOW); // GET /L turns the LED off
}
}
}
// 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 the received signal strength:
long rssi = WiFi.RSSI();
Serial.print("signal strength (RSSI):");
Serial.print(rssi);
Serial.println(" dBm");
// print where to go in a browser:
Serial.print("To see this page in action, open a browser to http://");
Serial.println(ip);
}

Any guys can help to guide me along as i still very new to Arduino. Thanks guys

keithlee:
Any guys can help to guide me along as i still very new to Arduino. Thanks guys

#7 below:

http://forum.arduino.cc/index.php/topic,148850.0.html

Hello Zoomkat,

Thanks for notifying me on the given link.

I have been struggling on this issue for few days and also searched through the internet but just could not find any relevant information that could help to resolve the connection issue if web browser is not connecting to the same Wifi network as Arduino. Would really appreciate if someone could enlighten me on this. Your help is much appreciated in advance.

I haven't seen any good server setup using the arduino wifi shields. You might check out the ESP8266 wifi chips.

keithlee:
I have been struggling on this issue for few days and also searched through the internet but just could not find any relevant information that could help to resolve the connection issue if web browser is not connecting to the same Wifi network as Arduino. Would really appreciate if someone could enlighten me on this. Your help is much appreciated in advance.

Hi

My Arduino website at http://www.2wg.co.nz is accessible on my local lan and the www using my iPhone. On my lan it is 192.168.2.80. On the www it is www.2wg.co.nz or 219.88.69.69 - I have a fixed IP address so at my domain name registry I have mapped www.2wg.co.nz to 219.88.69.69.

You don't have to have a formal website but you need to know the Internet IP address assigned to your lan. If your isp will not give you a fixed IP address then you need to research dynamic ip solutions.

My Arduino system runs on the standard http port 80. The final link in the chain is to forward port 80 traffic to the local lan IP address of your system. For me my adsl broadband modem has a port forwarding instruction to forward all port 80 traffic coming from the Internet to my system running on local lan IP address 192.168.2.80.

I hope this helps.

Cheers

Catweazle NZ