hi i am developing send data through HTTP from GPRS Module . i found this code on this forum and did changes. but when i am trying to compile its showing me error.
Freematics-master\SIM800.cpp.o:(.bss.sp+0x0): multiple definition of `sp'
ACTALLYWORKING.cpp.o:(.bss.sp+0x0): first defined here
here is code "SIM800.h" --------------File-1
#include <Arduino.h>
#include <SoftwareSerial.h>
// change this to the pin connect with SIM800 reset pin
#define SIM800_RESET_PIN 7
// change this to the serial UART which SIM800 is attached to
SoftwareSerial sp(7, 8);
#define SIM_SERIAL sp
// define DEBUG to one serial UART to enable debug information output
//#define DEBUG Serial
typedef enum {
HTTP_DISABLED = 0,
HTTP_READY,
HTTP_CONNECTING,
HTTP_READING,
HTTP_ERROR,
} HTTP_STATES;
typedef struct {
float lat;
float lon;
uint8_t year; /* year past 2000, e.g. 15 for 2015 */
uint8_t month;
uint8_t day;
uint8_t hour;
uint8_t minute;
uint8_t second;
} GSM_LOCATION;
class CGPRS_SIM800 {
public:
CGPRS_SIM800():httpState(HTTP_DISABLED) {}
// initialize the module
bool init();
// setup network
byte setup(const char* apn);
// get network operator name
bool getOperatorName();
// check for incoming SMS
bool checkSMS();
// get signal quality level (in dB)
int getSignalQuality();
// get GSM location and network time
bool getLocation(GSM_LOCATION* loc);
// initialize HTTP connection
bool httpInit();
// terminate HTTP connection
void httpUninit();
// connect to HTTP server
bool httpConnect(const char* url, const char* args = 0);
// check if HTTP connection is established
// return 0 for in progress, 1 for success, 2 for error
byte httpIsConnected();
// read data from HTTP connection
void httpRead();
// check if HTTP connection is established
// return 0 for in progress, -1 for error, bytes of http payload on success
int httpIsRead();
// send AT command and check for expected response
byte sendCommand(const char* cmd, unsigned int timeout = 2000, const char* expected =
0);
// send AT command and check for two possible responses
byte sendCommand(const char* cmd, const char* expected1, const char* expected2,
unsigned int timeout = 2000);
// toggle low-power mode
bool sleep(bool enabled)
{
return sendCommand(enabled ? "AT+CFUN=0" : "AT+CFUN=1");
}
// check if there is available serial data
bool available()
{
return SIM_SERIAL.available();
}
char buffer[256];
byte httpState;
private:
byte checkbuffer(const char* expected1, const char* expected2 = 0, unsigned int
timeout = 2000);
void purgeSerial();
byte m_bytesRecv;
uint32_t m_checkTimer;
};
here is code "SIM800.cpp" --------------File-2
#include "SIM800.h"
bool CGPRS_SIM800::init()
{
//SIM_SERIAL.begin(9200);
pinMode(SIM800_RESET_PIN, OUTPUT);
digitalWrite(SIM800_RESET_PIN, HIGH);
delay(10);
digitalWrite(SIM800_RESET_PIN, LOW);
delay(100);
digitalWrite(SIM800_RESET_PIN, HIGH);
delay(3000);
if (sendCommand("AT")) {
sendCommand("AT+IPR=9200");
sendCommand("ATE0");
sendCommand("AT+CFUN=1", 10000);
return true;
}
return false;
}
byte CGPRS_SIM800::setup(const char* apn)
{
bool success = false;
for (byte n = 0; n < 30; n++) {
if (sendCommand("AT+CREG?", 2000)) {
char *p = strstr(buffer, "0,");
if (p) {
char mode = *(p + 2);
#if DEBUG
con.print("Mode:");
con.println(mode);
#endif
if (mode == '1' || mode == '5') {
success = true;
break;
}
}
}
delay(1000);
}
if (!success)
return 1;
if (!sendCommand("AT+CGATT?"))
return 2;
if (!sendCommand("AT+SAPBR=3,1,\"Contype\",\"GPRS\""))
return 3;
SIM_SERIAL.print("AT+SAPBR=3,1,\"APN\",\"");
SIM_SERIAL.print(apn);
SIM_SERIAL.println('\"');
if (!sendCommand(0))
return 4;
sendCommand("AT+SAPBR=1,1", 10000);
sendCommand("AT+SAPBR=2,1", 10000);
sendCommand("AT+CMGF=1"); // sets the SMS mode to text
sendCommand("AT+CPMS=\"SM\",\"SM\",\"SM\""); // selects the memory
if (!success)
return 5;
return 0;
}
bool CGPRS_SIM800::getOperatorName()
{
// display operator name
if (sendCommand("AT+COPS?", "OK\r", "ERROR\r") == 1) {
char *p = strstr(buffer, ",\"");
if (p) {
p += 2;
char *s = strchr(p, '\"');
if (s) *s = 0;
strcpy(buffer, p);
return true;
}
}
return false;
}
void CGPRS_SIM800::purgeSerial()
{
while (SIM_SERIAL.available()) SIM_SERIAL.read();
}
here is code "MySketch.Ino" --------------File-3
#include <SoftwareSerial.h>
#include <SIM800.h>
#define APN "connect"
#define con Serial
static const char* url = "http://arduinodev.com/datetime.php";
CGPRS_SIM800 gprs;
uint32_t count = 0;
uint32_t errors = 0;
void setup()
{
// con.begin(9600);
while (!con);
con.println("SIM800 TEST");
for (;;) {
con.print("Resetting...");
while (!gprs.init()) {
con.write('.');
}
con.println("OK");
con.print("Setting up network...");
byte ret = gprs.setup(APN);
if (ret == 0)
break;
con.print("Error code:");
con.println(ret);
con.println(gprs.buffer);
}
con.println("OK");
delay(3000);
if (gprs.getOperatorName()) {
con.print("Operator:");
con.println(gprs.buffer);
}
int ret = gprs.getSignalQuality();
if (ret) {
con.print("Signal:");
con.print(ret);
con.println("dB");
}
for (;;) {
if (gprs.httpInit()) break;
con.println(gprs.buffer);
gprs.httpUninit();
delay(1000);
}
delay(3000);
}
void loop()
{
char mydata[16];
sprintf(mydata, "t=%lu", millis());
con.print("Requesting ");
con.print(url);
con.print('?');
con.println(mydata);
gprs.httpConnect(url, mydata);
count++;
while (gprs.httpIsConnected() == 0) {
// can do something here while waiting
con.write('.');
for (byte n = 0; n < 25 && !gprs.available(); n++) {
delay(10);
}
}
if (gprs.httpState == HTTP_ERROR) {
con.println("Connect error");
errors++;
delay(3000);
return;
}
con.println();
gprs.httpRead();
int ret;
while ((ret = gprs.httpIsRead()) == 0) {
// can do something here while waiting
}
if (gprs.httpState == HTTP_ERROR) {
con.println("Read error");
errors++;
delay(3000);
return;
}
// now we have received payload
con.print("[Payload]");
con.println(gprs.buffer);
// show position
GSM_LOCATION loc;
if (gprs.getLocation(&loc)) {
con.print("LAT:");
con.print(loc.lat, 6);
con.print(" LON:");
con.print(loc.lon, 6);
con.print(" TIME:");
con.print(loc.hour);
con.print(':');
con.print(loc.minute);
con.print(':');
con.println(loc.second);
}
// show stats
con.print("Total Requests:");
con.print(count);
if (errors) {
con.print(" Errors:");
con.print(errors);
}
con.println();
}
can you please tell me how can i correct above error . i am using arduino Uno development board.