vshymanskyy / TinyGSM

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

simcom 7600 modem and gps coordinate problem #576

Open tradexsrl opened 2 years ago

tradexsrl commented 2 years ago

Hi i'm testing this modem with gps with this code:

`/** *

define TINY_GSM_MODEM_SIM7600

// Set serial for debug console (to the Serial Monitor, default speed 115200)

define SerialMon Serial

// Set serial for AT commands (to the module) // Use Hardware Serial on Mega, Leonardo, Micro

define SerialAT Serial1

// See all AT commands, if wanted

define DUMP_AT_COMMANDS

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

define TINY_GSM_DEBUG SerialMon

/*

// set GSM PIN, if any

define GSM_PIN ""

// Your GPRS credentials, if any const char apn[] = ""; const char gprsUser[] = ""; const char gprsPass[] = "";

// Server details to test TCP/SSL const char server[] = "vsh.pp.ua"; const char resource[] = "/TinyGSM/logo.txt";

include "utilities.h"

include

include

ifdef DUMP_AT_COMMANDS

include

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

else

TinyGsm modem(SerialAT);

endif

void setup() { // Set console baud rate SerialMon.begin(115200); delay(10);

// Set GSM module baud rate
SerialAT.begin(UART_BAUD, SERIAL_8N1, MODEM_RX, MODEM_TX);

/*
The indicator light of the board can be controlled
*/
pinMode(LED_PIN, OUTPUT);
digitalWrite(LED_PIN, HIGH);

/*
MODEM_PWRKEY IO:4 The power-on signal of the modulator must be given to it,
otherwise the modulator will not reply when the command is sent
*/
pinMode(MODEM_PWRKEY, OUTPUT);
digitalWrite(MODEM_PWRKEY, HIGH);
delay(300); //Need delay
digitalWrite(MODEM_PWRKEY, LOW);

/*
MODEM_FLIGHT IO:25 Modulator flight mode control,
need to enable modulator, this pin must be set to high
*/
pinMode(MODEM_FLIGHT, OUTPUT);
digitalWrite(MODEM_FLIGHT, HIGH);

}

void light_sleep(uint32_t sec ) { esp_sleep_enable_timer_wakeup(sec * 1000000ULL); esp_light_sleep_start(); }

void loop() { bool res ;

    // Restart takes quite some time
// To skip it, call init() instead of restart()
DBG("Initializing modem...");
if (!modem.init()) {
    DBG("Failed to restart modem, delaying 10s and retrying");
    return;
}

if TINY_GSM_TEST_GPRS

/*  Preferred mode selection : AT+CNMP
      2 – Automatic
      13 – GSM Only
      14 – WCDMA Only
      38 – LTE Only
      59 – TDS-CDMA Only
      9 – CDMA Only
      10 – EVDO Only
      19 – GSM+WCDMA Only
      22 – CDMA+EVDO Only
      48 – Any but LTE
      60 – GSM+TDSCDMA Only
      63 – GSM+WCDMA+TDSCDMA Only
      67 – CDMA+EVDO+GSM+WCDMA+TDSCDMA Only
      39 – GSM+WCDMA+LTE Only
      51 – GSM+LTE Only
      54 – WCDMA+LTE Only
  */
String ret;
    ret= modem.setNetworkMode(2);
    DBG("setNetworkMode:", ret);

//https://github.com/vshymanskyy/TinyGSM/pull/405
uint8_t mode = modem.getGNSSMode();
DBG("GNSS Mode:", mode);

/**
 *  CGNSSMODE: <gnss_mode>,<dpo_mode>
 *  This command is used to configure GPS, GLONASS, BEIDOU and QZSS support mode.
 *  gnss_mode:
 *      0 : GLONASS
 *      1 : BEIDOU
 *      2 : GALILEO
 *      3 : QZSS
 *  dpo_mode :
 *      0 disable
 *      1 enable
 */
modem.setGNSSMode(2, 1);
light_sleep(1);

String name = modem.getModemName();
DBG("Modem Name:", name);

String modemInfo = modem.getModemInfo();
DBG("Modem Info:", modemInfo);

// Unlock your SIM card with a PIN if needed
if (GSM_PIN && modem.getSimStatus() != 3) {
    modem.simUnlock(GSM_PIN);
}

DBG("Waiting for network...");
if (!modem.waitForNetwork(600000L)) {
    light_sleep(10);
    return;
}

if (modem.isNetworkConnected()) {
    DBG("Network connected");
}

endif

if TINY_GSM_TEST_GPRS

DBG("Connecting to", apn);
if (!modem.gprsConnect(apn, gprsUser, gprsPass)) {
    light_sleep(10);
    return;
}

res = modem.isGprsConnected();
DBG("GPRS status:", res ? "connected" : "not connected");

String ccid = modem.getSimCCID();
DBG("CCID:", ccid);

String imei = modem.getIMEI();
DBG("IMEI:", imei);

String imsi = modem.getIMSI();
DBG("IMSI:", imsi);

String cop = modem.getOperator();
DBG("Operator:", cop);

IPAddress local = modem.localIP();
DBG("Local IP:", local);

int csq = modem.getSignalQuality();
DBG("Signal quality:", csq);

endif

if TINY_GSM_TEST_TCP && defined TINY_GSM_MODEM_HAS_TCP

TinyGsmClient client(modem, 0);
const int port = 80;
DBG("Connecting to ", server);
if (!client.connect(server, port)) {
    DBG("... failed");
} else {
    // Make a HTTP GET request:
    client.print(String("GET ") + resource + " HTTP/1.0\r\n");
    client.print(String("Host: ") + server + "\r\n");
    client.print("Connection: close\r\n\r\n");

    // Wait for data to arrive
    uint32_t start = millis();
    while (client.connected() && !client.available() &&
            millis() - start < 30000L) {
        delay(100);
    };

    // Read data
    start = millis();
    while (client.connected() && millis() - start < 5000L) {
        while (client.available()) {
            SerialMon.write(client.read());
            start = millis();
        }
    }
    client.stop();
}

endif

if TINY_GSM_TEST_GPS && defined TINY_GSM_MODEM_HAS_GPS

DBG("Enabling GPS/GNSS/GLONASS");
modem.enableGPS();
light_sleep(2);

float lat2      = 0;
float lon2      = 0;
float speed2    = 0;
float alt2      = 0;
int   vsat2     = 0;
int   usat2     = 0;
float accuracy2 = 0;
int   year2     = 0;
int   month2    = 0;
int   day2      = 0;
int   hour2     = 0;
int   min2      = 0;
int   sec2      = 0;
DBG("Requesting current GPS/GNSS/GLONASS location");
for (;;) {
    digitalWrite(LED_PIN, !digitalRead(LED_PIN));
    if (modem.getGPS(&lat2, &lon2, &speed2, &alt2, &vsat2, &usat2, &accuracy2,
                     &year2, &month2, &day2, &hour2, &min2, &sec2)) {
        DBG("Latitude:", String(lat2, 8), "\tLongitude:", String(lon2, 8));
        DBG("Speed:", speed2, "\tAltitude:", alt2);
        DBG("Visible Satellites:", vsat2, "\tUsed Satellites:", usat2);
        DBG("Accuracy:", accuracy2);
        DBG("Year:", year2, "\tMonth:", month2, "\tDay:", day2);
        DBG("Hour:", hour2, "\tMinute:", min2, "\tSecond:", sec2);
        break;
    } else {
        light_sleep(2);
    }
}
DBG("Retrieving GPS/GNSS/GLONASS location again as a string");
String gps_raw = modem.getGPSraw();
DBG("GPS/GNSS Based Location String:", gps_raw);
DBG("Disabling GPS");
modem.disableGPS();

endif

if TINY_GSM_TEST_GPRS

modem.gprsDisconnect();
light_sleep(5);
if (!modem.isGprsConnected()) {
    DBG("GPRS disconnected");
} else {
    DBG("GPRS disconnect: Failed.");
}

endif

ifdef MODEM_DTR1

modem.sleepEnable();

delay(100);

// test modem response , res == 0 , modem is sleep
res = modem.testAT();
Serial.print(" Test AT result -> ");
Serial.println(res);

delay(1000);

Serial.println("Use DTR Pin Wakeup");
pinMode(MODEM_DTR, OUTPUT);
//Set DTR Pin low , wakeup modem .
digitalWrite(MODEM_DTR, LOW);

// test modem response , res == 1 , modem is wakeup
res = modem.testAT();
Serial.print(" Test AT result -> ");
Serial.println(res);

endif

if TINY_GSM_POWERDOWN

// Try to power-off (modem may decide to restart automatically)
// To turn off modem completely, please use Reset/Enable pins
modem.poweroff();
DBG("Poweroff.");

endif

SerialMon.printf("End of tests. Enable deep sleep , Will wake up in %d seconds", TIME_TO_SLEEP);

//Wait moden power off
light_sleep(5);

esp_sleep_enable_timer_wakeup(TIME_TO_SLEEP * uS_TO_S_FACTOR);
delay(200);
esp_deep_sleep_start();

while (1);

`

but i get negative coordinate and strangely i get zero satellite visible which is not possible because i get the correct location if i delete the minus sign:

[30374] Latitude: -44.59538651 Longitude: -8.44853134 10:56:29.026 -> [30374] Speed: 0.00 Altitude: 205.20 10:56:29.026 -> [30374] Visible Satellites: 0 Used Satellites: 0 10:56:29.026 -> [30375] Accuracy: 1.30 10:56:29.026 -> [30377] Year: 2021 Month: 8 Day: 10 10:56:29.026 -> [30381] Hour: 8 Minute: 55 Second: 36

the gpsraw request instead is correct:

10:56:29.026 -> [30384] Retrieving GPS/GNSS/GLONASS location again as a string 10:56:29.026 -> AT+CGNSSINFO 10:56:29.026 -> 10:56:29.026 -> +CGNSSINFO: 2,05,00,00,4435.722450,N,00844.911711,E,100821,085540.0,208.1,0.0,0.0,1.6,1.3,0.9

wjcloudy commented 2 years ago

Please see #566