I have just started with Web Programming & Arduino. I am trying to learn how an Arduino communicates with a Web Server.
I have this Arduino UNO that communicates with my Web Server via the SimComm SIM808 GSM-GPRS module. I have a file called retrieve.php on my Web Server that basically fetches data from a database & delivers them to whoever makes a request.
My Arduino program is reading the file, but it's reading more than it should.
retrieve.php echos two values 1 & 1. You can have a look at it here
Problem is when I make my Arduino call this file, it reads everything & this is what I end up getting
GSM Shield testing.
status=READY
status=ATTACHED
100.107.219.185
H
Number of data received:
1
Data received:
H
TTP/1.1 200 OK
Date: Sat, 04 Jun 2016 13:07:05 GMT
Server: Apache
X-Powered-By: PHP/5.5.35
Content-Length: 2
Connection: close
Content-Type: text/html
11
CLOSED
My Arduino code is given below:-
#include "SIM900.h"
#include <SoftwareSerial.h>
#include "inetGSM.h"
//#include "sms.h"
//#include "call.h"
//To change pins for Software Serial, use the two lines in GSM.cpp.
//GSM Shield for Arduino
//www.open-electronics.org
//this code is based on the example of Arduino Labs.
//Simple sketch to start a connection as client.
InetGSM inet;
//CallGSM call;
//SMSGSM sms;
char msg[50];
int numdata;
char inSerial[50];
int i=0;
boolean started=false;
void setup()
{
//Serial connection.
Serial.begin(9600);
Serial.println("GSM Shield testing.");
//Start configuration of shield with baudrate.
//For http uses is raccomanded to use 4800 or slower.
if (gsm.begin(2400)) {
Serial.println("\nstatus=READY");
started=true;
} else Serial.println("\nstatus=IDLE");
if(started) {
//GPRS attach, put in order APN, username and password.
//If no needed auth let them blank.
if (inet.attachGPRS("TATA.DOCOMO.INTERNET", "", ""))
Serial.println("status=ATTACHED");
else Serial.println("status=ERROR");
delay(1000);
//Read IP address.
gsm.SimpleWriteln("AT+CIFSR");
delay(5000);
//Read until serial buffer is empty.
gsm.WhileSimpleRead();
//TCP Client GET, send a GET request to the server and
//save the reply.
numdata=inet.httpGET("www.boat.esy.es", 80, "/retrieve.php", msg, 1);
//Print the results.
Serial.println("\nNumber of data received:");
Serial.println(numdata);
Serial.println("\nData received:");
//Serial.println(msg);
char* content = strstr(msg,"\r\n\r\n");
content = content+4;
Serial.println(content);
}
};
void loop()
{
//Read for new byte on serial hardware,
//and write them on NewSoftSerial.
serialhwread();
//Read for new byte on NewSoftSerial.
serialswread();
};
void serialhwread()
{
i=0;
if (Serial.available() > 0) {
while (Serial.available() > 0) {
inSerial[i]=(Serial.read());
delay(10);
i++;
}
inSerial[i]='\0';
if(!strcmp(inSerial,"/END")) {
Serial.println("_");
inSerial[0]=0x1a;
inSerial[1]='\0';
gsm.SimpleWriteln(inSerial);
}
//Send a saved AT command using serial port.
if(!strcmp(inSerial,"TEST")) {
Serial.println("SIGNAL QUALITY");
gsm.SimpleWriteln("AT+CSQ");
}
//Read last message saved.
if(!strcmp(inSerial,"MSG")) {
Serial.println(msg);
} else {
Serial.println(inSerial);
gsm.SimpleWriteln(inSerial);
}
inSerial[0]='\0';
}
}
void serialswread()
{
gsm.SimpleRead();
}
And this is my PHP code
<?php
$server = "mysql.hostinger.in";
$user = "xxxxxxxxxx";
$password = "xxxxxx";
$db = "xxxxxxx";
$lck;
$ign;
$conn = mysqli_connect($server,$user,$password,$db);
if($conn->connect_error)
{
die("Connection Failed:" . $conn->connect_error);
}
$query = "SELECT unlck_lck, ignition FROM BOATOP";
$res = $conn->query($query);
if($res->num_rows>0)
{
$row = $res->fetch_assoc();
$lck = $row["unlck_lck"];
$ign = $row["ignition"];
echo $lck;
echo $ign;
}
mysqli_close($conn);
?>
I want my Arduino to read only the output echoed by my PHP file. But currently it's reading everything.
And I also need to mention one thing here. For my Arduino GSM Shield, I haven't used the examples or libraries that come with the Arduino installation pack since the libraries weren't compatible with my GSM Shield. Instead, I have used some libraries I found online. I didn't post those files here because they would make my post really long. Please let me know if you need to have a look at them as well.
UPDATE 1
Content showing null
Arduino modification
content = strstr(msg,"\r\n\r\n");
if(content == NULL) {
Serial.println("ERROR IN CONTENT READING");
} else {
content = content + 4;
Serial.println("The Content Is:");
Serial.println(content);
}
Result:
GSM Shield testing.
status=READY
status=ATTACHED
100.110.244.218
Number of data received:
50
Data received:
ERROR IN CONTENT READING
HTTP/1.1 200 OK
Date: Sat, 04 Jun 2016 17:17:12 GMT
Server: Apache
X-Powered-By: PHP/5.5.35
Content-Length: 2
Connection: close
Content-Type: text/html
11
CLOSED