From fe4ca175a1fdb775ba1be9c4308a789abeb09eeb Mon Sep 17 00:00:00 2001 From: zDimaBY Date: Fri, 8 Jul 2022 23:26:50 +0300 Subject: [PATCH] Added connection to the server using TCP/IP. --- src/GSMSimGPRS.cpp | 74 +++++++++++++++++++++++++++++++++------------- src/GSMSimGPRS.h | 24 ++++++++++++--- 2 files changed, 74 insertions(+), 24 deletions(-) diff --git a/src/GSMSimGPRS.cpp b/src/GSMSimGPRS.cpp index 82d47cc..30cee0f 100644 --- a/src/GSMSimGPRS.cpp +++ b/src/GSMSimGPRS.cpp @@ -46,11 +46,15 @@ void GSMSimGPRS::gprsInit(String apn, String user, String password) { USER = user; PWD = password; } +void GSMSimGPRS::gprsInitServer(String server, String port) { + SERVER = server; + PORT = port; +} + // Connect to GPRS Bearer bool GSMSimGPRS::connect() { gsm.print(F("AT+SAPBR=3,1,\"CONTYPE\",\"GPRS\"\r")); _readSerial(); - if (_buffer.indexOf(F("OK")) != -1) { gsm.print(F("AT+SAPBR=3,1,\"APN\",\"")); gsm.print(APN); @@ -74,28 +78,38 @@ bool GSMSimGPRS::connect() { _readSerial(); if (_buffer.indexOf(F("\"0.0.0.0\"")) == -1 || _buffer.indexOf(F("ERR")) == -1) { return true; - } - else { + } else { return false; } - } - else { + } else { return false; } - } - else { + } else { return false; } - } - else { + } else { return false; } - } - else { + } else { return false; } + } else { + return false; } - else { +} +bool GSMSimGPRS::gprsSend() { //Dont work. should be 5 packets per second. As far as I understand. + gsm.print(F("AT+CIPSEND\r")); + _readSerial(); + if (_buffer.indexOf(F(">")) != -1) { + gsm.print(F("99:88:77:66:55:44:33:22:00:88:77:66:55:44:33:22:11")); + gsm.print(F("\n\x1A\r")); + _readSerial(); + if (_buffer.indexOf(F("SEND OK")) != -1) { + return true; + } else { + return true; + } + } else { return false; } } @@ -105,8 +119,7 @@ bool GSMSimGPRS::isConnected() { _readSerial(); if (_buffer.indexOf(F("ERROR")) != -1 || _buffer.indexOf(F("\"0.0.0.0\"")) != -1) { return false; - } - else { + } else { return true; } } @@ -116,26 +129,47 @@ String GSMSimGPRS::getIP() { _readSerial(); if (_buffer.indexOf(F("ERROR")) != -1 || _buffer.indexOf(F("\"0.0.0.0\"")) != -1) { return "ERROR:NO_IP"; - } - else { + } else { if (_buffer.indexOf("+SAPBR:") != -1) { String veri = _buffer.substring(_buffer.indexOf(F(",\""))+2, _buffer.lastIndexOf(F("\""))); veri.trim(); return veri; - } - else { + } else { "ERROR:NO_IP_FETCH"; } } } +// Specify the address and port of the server +bool GSMSimGPRS::gprsServerConn() { + gsm.print(F("AT+CIPSTART=\"TCP\",\"")); + gsm.print(SERVER); + gsm.print(F("\",\"")); + gsm.print(PORT); + gsm.print(F("\"\r")); + _readSerial(); + if (_buffer.indexOf(F("CONNECT OK")) != -1) { + return true; + } else { + return false; + } +} +// Context deactivation +bool GSMSimGPRS::closeContext() { + gsm.print(F("AT+CIPSHUT\r")); + _readSerial(); + if (_buffer.indexOf(F("SHUT OK")) != -1) { + return true; + } else { + return false; + } +} // Close GPRS Connection bool GSMSimGPRS::closeConn() { gsm.print(F("AT+SAPBR=0,1\r")); _readSerial(); if (_buffer.indexOf(F("OK")) != -1) { return true; - } - else { + } else { return false; } } \ No newline at end of file diff --git a/src/GSMSimGPRS.h b/src/GSMSimGPRS.h index 0a78ab5..c22d9dc 100644 --- a/src/GSMSimGPRS.h +++ b/src/GSMSimGPRS.h @@ -47,6 +47,8 @@ #define DEFAULT_GPRS_APN "internet" #define DEFAULT_GPRS_USER "" #define DEFAULT_GPRS_PWD "" +#define DEFAULT_GPRS_SERVER "" +#define DEFAULT_GPRS_PORT "" class GSMSimGPRS : public GSMSim { @@ -55,11 +57,13 @@ class GSMSimGPRS : public GSMSim { String APN; String USER; String PWD; + String SERVER; + String PORT; public : - // Sınıfı Başlatıcı... + // Class Initializer... GSMSimGPRS(Stream& s) : GSMSim(s) { RESET_PIN = DEFAULT_RST_PIN; LED_PIN = DEFAULT_LED_PIN; @@ -68,6 +72,9 @@ class GSMSimGPRS : public GSMSim { APN = DEFAULT_GPRS_APN; USER = DEFAULT_GPRS_USER; PWD = DEFAULT_GPRS_PWD; + + SERVER = DEFAULT_GPRS_SERVER; + PORT = DEFAULT_GPRS_PORT; } GSMSimGPRS(Stream& s, unsigned int resetPin) : GSMSim(s, resetPin) { @@ -79,6 +86,9 @@ class GSMSimGPRS : public GSMSim { APN = DEFAULT_GPRS_APN; USER = DEFAULT_GPRS_USER; PWD = DEFAULT_GPRS_PWD; + + SERVER = DEFAULT_GPRS_SERVER; + PORT = DEFAULT_GPRS_PORT; } GSMSimGPRS(Stream& s, unsigned int resetPin, unsigned int ledPin, bool ledFlag) : GSMSim(s, resetPin, ledPin, ledFlag) { @@ -90,21 +100,27 @@ class GSMSimGPRS : public GSMSim { APN = DEFAULT_GPRS_APN; USER = DEFAULT_GPRS_USER; PWD = DEFAULT_GPRS_PWD; + + SERVER = DEFAULT_GPRS_SERVER; + PORT = DEFAULT_GPRS_PORT; } void gprsInit(String apn); void gprsInit(String apn, String user, String password); - + void gprsInitServer(String server, String port); // Connect to Bearer bool connect(); - + // Connect to server + bool gprsServerConn(); + // Send to server + bool gprsSend();//Dont work. should be 5 packets per second. As far as I understand. // Check connection bool isConnected(); // get ip address String getIP(); // close gprs bearer connection + bool closeContext(); bool closeConn(); }; - #endif