vshymanskyy / TinyGSM

A small Arduino library for GSM modules, that just works
GNU Lesser General Public License v3.0
1.91k stars 708 forks source link

SIM7070 does not connect to the server using the client.connect() function in TinyGsmClient.h #756

Open FabriciusLopes opened 8 months ago

FabriciusLopes commented 8 months ago

[X ] I have read the Troubleshooting section of the ReadMe

What type of issues is this?

[ ] Request to support a new module

[ ] Bug or problem compiling the library [X ] Bug or issue with library functionality (ie, sending data over TCP/IP) [X ] Question or request for help

What are you working with?

Modem: SIMCOM SIM7070 , BK-7000 v2 Main processor board: ESP32 TinyGSM version: 0.11.7

Code:

// Versao 3 nao tem reset dentro do loop ,

define TINY_GSM_MODEM_SIM7070

define SerialMon Serial

HardwareSerial debug(1); HardwareSerial SIM7600(2);

if !defined(TINY_GSM_RX_BUFFER)

define TINY_GSM_RX_BUFFER 1024

endif

define TINY_GSM_YIELD() { delay(2); }

const char apn[] = "claro.com.br"; // Change this to your Provider details const char gprsUser[] = "claro"; const char gprsPass[] = "claro"; const char server[] = "xxx.com.br"; // Blurred name of server

const char resource[] = "xxx.php"; const int port = 80; unsigned long timeout;

const int trigPin = 25;
const int echoPin = 26; long duration; int distance;

include

// Define the serial console for debug prints, if needed

define TINY_GSM_DEBUG SerialMon

define DUMP_AT_COMMANDS

ifdef DUMP_AT_COMMANDS

include

StreamDebugger debugger(SIM7600, SerialMon); TinyGsm modem(debugger);

else

TinyGsm modem(SIM7600);

endif

TinyGsmClient client(modem);

void setup() { SerialMon.begin(115200); delay(10); SerialMon.println("Wait..."); SIM7600.begin(115200,SERIAL_8N1,23,19, false); delay(600); SerialMon.println("Initializing modem..."); delay(3000); modem.restart(); delay(2000);
}

void loop() { SerialMon.print("Waiting for network..."); if (!modem.waitForNetwork()) { SerialMon.println(" fail"); delay(1000); return; } SerialMon.println(" success"); if (modem.isNetworkConnected()) { SerialMon.println("Network connected"); }

SerialMon.print(F("Connecting to ")); SerialMon.print(apn); if (!modem.gprsConnect(apn, gprsUser, gprsPass)) { SerialMon.println(" fail"); delay(1000); return; } SerialMon.println(" success");

if (modem.isGprsConnected()) { SerialMon.println("GPRS connected"); }

if (!client.connect(server, port)) { SerialMon.println(" fail"); }

// This return gibberish or 0.0.0.0 SerialMon.println("IP ADDRESS : "+modem.getLocalIP());

String empresa = "teste"; String setor = "teste";

SerialMon.println("Performing HTTP GET request...");

// Blurred the original dir and original script names client.print(String("GET ") + "/monitoxxx/upl_xxxx.php?empresa=teste&setor=teste&idveloc=0x0457&idoperador=xxx;XXX&dadosvel=6844191400159A093B00000000000080F1428098013D3865684674030D0A6844191400159A093B00000000000080F1428098013D3865684674030D0A&datadados=0000-00-00%2000:00:00" + " HTTP/1.1\r\n" +"Host: " + server + "\r\n" + "Connection: close\r\n\r\n");

timeout = millis(); int contStatus = 0; int contresponse = 0; char reqcode[4] = ""; char respcode[10] = "";

// To get return of script while (client.connected() && millis() - timeout < 10000L) { while (client.available()) { char c = client.read();

  if (contStatus == 0) {
    if ( c == 'H' ){
      contStatus++;
    }
  }
  else if( contStatus == 1) {
    if ( c == 'T' ){
      contStatus++;
    }
    else{
     contStatus = 0; 
    }
  }else if( contStatus == 2) {
    if ( c == 'T' ){
      contStatus++;
    }
    else{
     contStatus = 0; 
    }
  }else if( contStatus == 3) {
    if ( c == 'P' ){
      contStatus++;
    }
    else{
     contStatus = 0; 
    }
  }else if( contStatus == 4) {
    if ( c == '/' ){
      contStatus++;
    }
    else{
     contStatus = 0; 
    }
  }else if( contStatus == 5) {
    if ( c == '1' ){
      contStatus++;
    }
    else{
     contStatus = 0; 
    }
  }else if( contStatus == 6) {
    if ( c == '.' ){
      contStatus++;
    }
    else{
     contStatus = 0; 
    }
  }else if( contStatus == 7) {
    if ( c == '1' ){
      contStatus++;
    }
    else{
     contStatus = 0; 
    }
  }else if( contStatus == 8) {
    if ( c == ' ' ){
      contStatus++;
    }
    else{
     contStatus = 0; 
    }
  }else if( contStatus == 9) {
      reqcode[0] = c;
      contStatus++;

  }else if( contStatus == 10) {
    reqcode[1] = c;
      contStatus++;

  }else if( contStatus == 11) {
    reqcode[2] = c;
    reqcode[3]='\0';
    contStatus++;
  }     

if (contresponse == 0) {
    if ( c == 'C' ){
      contresponse++;

    }
  }
  else if( contresponse == 1) {
    if ( c == 'o' ){
      contresponse++;
    }
    else{
     contresponse = 0; 
    }
  }else if( contresponse == 2) {
    if ( c == 'd' ){
      contresponse++;
    }
    else{
     contresponse = 0; 
    }
  }else if( contresponse == 3) {
    if ( c == 'e' ){
      contresponse++;
    }
    else{
     contresponse = 0; 
    }
  }else if( contresponse == 4) {
    if ( c == ' ' ){
      contresponse++;
    }
    else{
     contresponse = 0; 
    }
  }else if( contresponse == 5) {
      respcode[0] = c;
      contresponse++;

  }else if( contresponse == 6) {
    respcode[1] = c;
    respcode[2] = '\0';
      contresponse++;
  }

  SerialMon.print(c);
  timeout = millis();
}

}

SerialMon.println(); SerialMon.println(reqcode); SerialMon.println(); SerialMon.println(respcode); client.stop();

SerialMon.println(F("Server disconnected")); modem.gprsDisconnect(); SerialMon.println(F("GPRS disconnected")); } // End of Arduino file

Scenario, steps to reproduce

This same code works using a SIM7600 module , only changing #define TINY_GSM_MODEM_SIM7070 to #define TINY_GSM_MODEM_SIM7600. Change define is enough to make the script stops to connect to my server. Its connect to operator network.

Expected result

The expected result is to get the GPRS connection and send the data as the SIM7600 does.

Actual result

When I switch to SIM7070, I can access the GPRS network using modem.gprsConnect but I can't connect to the server using client.connect code. So I can't do the GET command to send the data.

Debug and AT command log

I think the log is not correct but it is attached

17:53:54.941 -> ** Initializing modem... 17:53:57.945 -> ATE0 17:53:57.945 -> AT+CFUN=0 17:54:10.948 -> ** Waiting for network... 17:54:10.948 -> AT+CEREG? 17:54:11.908 -> AT+CGREG? 17:54:13.188 -> AT+CEREG? 17:54:13.891 -> AT+CGREG? 17:54:15.460 -> AT+CEREG? 17:54:16.451 -> AT+CGREG? 17:54:17.700 -> AT+CEREG? 17:54:18.715 -> AT+CGREG? 17:54:19.959 -> AT+CEREG? 17:54:19.992 -> AT+CEREG?

17:54:19.992 -> +CEREG: 0,2 17:54:20.025 -> 17:54:20.025 -> OK 17:54:20.025 -> AT+CGREG? 17:54:20.025 -> AT+CGREG?

17:54:20.057 -> +CGREG: 0,2 17:54:20.088 -> 17:54:20.088 -> OK 17:54:20.346 -> AT+CEREG? 17:54:20.346 -> AT+CEREG?

17:54:20.378 -> +CEREG: 0,2 17:54:20.378 -> 17:54:20.411 -> OK 17:54:20.411 -> AT+CGREG? 17:54:20.411 -> AT+CGREG?

17:54:20.443 -> +CGREG: 0,2 17:54:20.443 -> 17:54:20.443 -> OK 17:54:20.704 -> AT+CEREG? 17:54:20.736 -> AT+CEREG?

17:54:20.736 -> +CEREG: 0,4 17:54:20.769 -> 17:54:20.769 -> OK 17:54:20.769 -> AT+CGREG? 17:54:20.769 -> AT+CGREG?

17:54:20.801 -> +CGREG: 0,2 17:54:20.834 -> 17:54:20.834 -> OK 17:54:21.094 -> AT+CEREG? 17:54:21.094 -> AT+CEREG? 17:54:21.126 -> +CEREG: 0,4 17:54:21.126 -> 17:54:21.126 -> OK 17:54:21.158 -> AT+CGREG? 17:54:21.158 -> AT+CGREG?

17:54:21.191 -> +CGREG: 0,2 17:54:21.191 -> 17:54:21.191 -> OK 17:54:21.454 -> AT+CEREG? 17:54:21.454 -> AT+CEREG?

17:54:21.487 -> +CEREG: 0,4 17:54:21.519 -> 17:54:21.519 -> OK 17:54:21.519 -> AT+CGREG? 17:54:21.519 -> AT+CGREG?

17:54:21.551 -> +CGREG: 0,2 17:54:21.584 -> 17:54:21.584 -> OK 17:54:21.840 -> AT+CEREG? 17:54:21.840 -> AT+CEREG?

17:54:21.872 -> +CEREG: 0,4 17:54:21.872 -> 17:54:21.872 -> OK 17:54:21.904 -> AT+CGREG? 17:54:21.904 -> AT+CGREG?

17:54:21.937 -> +CGREG: 0,2 17:54:21.937 -> 17:54:21.937 -> OK 17:54:22.192 -> AT+CEREG? 17:54:22.192 -> AT+CEREG?

17:54:22.226 -> +CEREG: 0,4 17:54:22.259 -> 17:54:22.259 -> OK 17:54:22.259 -> AT+CGREG? 17:54:22.259 -> AT+CGREG?

17:54:22.291 -> +CGREG: 0,2 17:54:22.324 -> 17:54:22.324 -> OK 17:54:22.581 -> AT+CEREG? 17:54:22.581 -> AT+CEREG? 17:54:22.613 -> +CEREG: 0,4 17:54:22.613 -> 17:54:22.613 -> OK 17:54:22.645 -> AT+CGREG? 17:54:22.645 -> AT+CGREG?

17:54:22.677 -> +CGREG: 0,2 17:54:22.677 -> 17:54:22.677 -> OK 17:54:22.935 -> AT+CEREG? 17:54:22.967 -> AT+CEREG?

17:54:22.967 -> +CEREG: 0,4 17:54:22.999 -> 17:54:22.999 -> OK 17:54:22.999 -> AT+CGREG? 17:54:22.999 -> AT+CGREG?

17:54:22.999 -> AT+CGREG?

17:54:23.031 -> +CGREG: 0,2 17:54:23.063 -> 17:54:23.063 -> OK 17:54:23.321 -> AT+CEREG? 17:54:23.321 -> AT+CEREG?

17:54:23.352 -> +CEREG: 0,4 17:54:23.385 -> 17:54:23.385 -> OK 17:54:23.385 -> AT+CGREG? 17:54:23.385 -> AT+CGREG?

17:54:23.417 -> +CGREG: 0,2 17:54:23.417 -> 17:54:23.450 -> OK 17:54:23.674 -> AT+CEREG? 17:54:23.706 -> AT+CEREG?

17:54:23.706 -> +CEREG: 0,4 17:54:23.739 -> 17:54:23.739 -> OK 17:54:23.739 -> AT+CGREG? 17:54:23.770 -> AT+CGREG?

17:54:23.770 -> +CGREG: 0,2 17:54:23.830 -> 17:54:23.830 -> OK 17:54:24.062 -> AT+CEREG? 17:54:24.062 -> AT+CEREG?

17:54:24.094 -> +CEREG: 0,4 17:54:24.127 -> 17:54:24.127 -> OK 17:54:24.127 -> AT+CGREG? 17:54:24.127 -> AT+CGREG?

17:54:24.159 -> +CGREG: 0,1 17:54:24.159 -> 17:54:24.191 -> OK 17:54:24.191 -> ** success 17:54:24.191 -> AT+CEREG? 17:54:24.191 -> AT+CEREG?

17:54:24.223 -> +CEREG: 0,4 17:54:24.223 -> 17:54:24.223 -> OK 17:54:24.257 -> AT+CGREG? 17:54:24.257 -> AT+CGREG?

17:54:24.292 -> +CGREG: 0,1 17:54:24.292 -> 17:54:24.292 -> OK 17:54:24.325 -> ** Network connected 17:54:24.325 -> ** Connecting to g.claro.com.br 17:54:24.325 -> AT+CNACT=0,0 17:54:24.325 -> AT+CNACT=0,0

17:54:24.358 -> ERROR 17:54:24.358 -> AT+CGDCONT=1,"IP","g.claro.com.br" 17:54:24.358 -> AT+CGDCONT=1,"IP","g.claro.com.br"

17:54:24.455 -> OK 17:54:24.455 -> AT+CGATT=1 17:54:28.009 -> ** fail