problema con modulo sim928a

Buongiorno a tutti gli utenti del forum,
mi presento, sono Francesco, abito a padova, ho parecchie passioni tra le quali l'elettronica, lavoro in una azienda che produce impianti per il taglio delle lamiere (plasma e laser) e mi occupo della parte plc di queste macchine utilizzando prevalentemente fanuc come controllo;
mi sto avvicinando ora al mondo arduino e da qui la mia richiesta.

sto utilizzando una scheda arduino uno con il modulo SIM928A abbinato alla shield di futura elettronica, ma riscontro un problema e cioè.. provando gli sketch di esempio della libreria GSM-GPRS-GPS-Shield-3.07.1 noto che la parte relativa alle chiamate e/o ai messaggi di testo funziona correttamente mentre quella relativa al gps non ne vuole sapere, avrei quindi bisogno di aiuto per capire cosa non va, ho provato a cercare la libreria dedicata al modulo in questione ma senza risultati,

lo scopo è quello di creare uno sketch in grado di restituirmi, dopo aver ricevuto una chiamata da un numero autorizzato, le coordinate gps attraverso un sms.

Grazie fin d'ora per l'aiuto

Ti invitiamo a presentarti (dicci quali conoscenze hai di elettronica e di programmazione) qui: Presentazioni
e a leggere il regolamento se non lo hai già fatto: Regolamento
Qui una serie di link utili, non inerenti al tuo problema:

Prima di tutto, come indicato da Nid, ti chiederei cortesemente di presentarti QUI (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con attenzione il REGOLAMENTO ...

... poi, vai su QUESTO sito (il produttore di quel modulo), ti registri (altrimenti NON puoi scaricare nulla), ti scarichi il manuale dei comandi AT e vedi esattamente se sono gli stessi che invia la libreria che stai usando visto che probabilmente è per un altro modulo SIM (anche se i comandi AT, specie per il GPS, sono quasi sempre uguali).

Guglielmo

Hai collegato l'antenna per il GPS?

Si, l'antenna gps è collegata come anche quella gsm.

Ho scaricato il manuale con i comandi AT ma non fa riferimento alla parte gps.

Devi scaricare il manuale per il SIM928:

http://storage.seges-electronics.ru/documentation/SIM928_AT%20Command%20Manual_V1.00.pdf

cyberhs:
Devi scaricare il manuale per il SIM928

E' quello che ha fatto e dal sito UFFICIALE della Simcom ! :wink:

Guglielmo

frankycora:
Ho scaricato il manuale con i comandi AT ma non fa riferimento alla parte gps.

Si, è vero ...
... se però te li scarichi tutti, scopri che nel "SIM928A&SIM908_Compatible Design_Application Note_V1.01" parla delle similitudini/differenze nella parte GPS con il SIM908 ... con il quale, comunque, credo sia compatibile a livello di comandi AT :

5 GPS Application Interface
The GSM/GPRS engines of SIM928A and SIM908 are the same. The following chapters describe compatible design of SIM928A and SIM908 on GPS functionality.

Guglielmo

Puoi scrivere un semplice programma che manda dei comandi AT e ti mostra le risposte ?

Prova con ...

  1. AT+CGPSPWR=1 \r\n (accende il GPS)

  2. AT+CGPSRST=0 \r\n (effettua un cold reset)

  3. AT+CGPSSTATUS? \r\n (per sapere se ha fissato la posizione)

  4. AT+CGPSINF=0 \r\n (quando è fissata la posizione, recupera i dati GPS)

... e vedi le risposte :slight_smile:

Ah ... per il Fix iniziale della posizione, all'aperto (NO dentro casa) ci possono volere anche 15 o più minuti !

Guglielmo

ok Guglielmo,

provo subito e poi vi aggiorno

grazi

Francesco

Eccomi qua,
premesso che secondo me ho fatto un po' di casino... ti allego l'immagine del monitor seriale che mi compare facendo delle prove con lo sketch che allego

#include "SIM900.h"
#include <SoftwareSerial.h>
#include "sms.h"
#include "call.h"
#include "gps.h"

CallGSM call;
SMSGSM sms;
GPSGSM gps;

char message[40];
char number[15];
byte state;
char lon[15];
float lon_db;
float lon_db_2;
char lat[15];
float lat_db;
float lat_db_2;
char alt[15];
char time[20];
char vel[15];
char msg1[5];
char msg2[5];
char stat;
char inSerial[20];
int i = 0;
boolean started = false;

void setup()
{
  Serial.begin(9600);
  Serial.println("GSM Shield testing.");
  if (gsm.begin(9600)) {
    Serial.println("\nstatus=READY");
    gsm.forceON(); 
    started = true;
  }
  else Serial.println("\nstatus=IDLE");
  if (started) {
    //GPS attach
    if (gps.attachGPS())
      Serial.println("status=GPSREADY");
    else Serial.println("status=ERROR");
  }
  delay(20000); //Time for fixing
};

void loop()
{
  state = call.CallStatusWithAuth(number, 0, 10);
  if (state == CALL_INCOM_VOICE_AUTH)
  {
    //Serial.println(value);
    delay(1000);
    call.HangUp();
    //   value=1;
    Serial.println("Chiamata in corso da numero autorizzato");
    stat = gps.getStat();
    delay(5000);
    gps.getPar(lon, lat, alt, time, vel);
    message[0] = '\0';
    Serial.println(lon);
    Serial.println(lat);
    strcat(message, "lon: ");
    strcat(message, lon);
    strcat(message, " lat: ");
    strcat(message, lat);
    //      sms.SendSMS(number,message);
  }
  delay(500);
};

Ok, questo è un'altro problema ...
... puoi fare una prova ? Vai nella cartella dell'IDE, /hardware/arduino/avr/libraries/SoftwareSerial/src/SoftwareSerial.h edita il file e cambia la riga 42 da così:

#define _SS_MAX_RX_BUFF 64 // RX buffer size

a così:

#define _SS_MAX_RX_BUFF 128 // RX buffer size

e riprova. Dimmi se il risultato migliora.

Guglielmo

ho verificato, in realtà era già a 128;
per scrupolo ho provato a rimettere 64 come valore ma effettivamente peggiora

Francesco

Tra l'altro, mentre prima dal monitor seriare dell'ide riuscivo a spedire dei comandi AT,
ora mi sembra non funzionare più nemmeno quello.

Francesco

frankycora:
ho verificato, in realtà era già a 128;

... quindi l'avevi già modificata in passato, perché di base arriva con 64 ::slight_smile:

Comunque NON mi quadra che su quanto tu hai allegato NON vedo i messaggi delle tue Serial.println e non si capisce bene cosa stampi ...

Prima di stampare i valori, cortesemente stampa una label con il nome del valore che segue, così si capisce cosa stai stampando ed in che punto.

Quindi ...
... modifica il codice, aggiungi le Serial.print() con le label, metti il codice nuovo (... mi raccomando, sempre racchiuso tra i tag CODE) e metti il nuovo risultato che ottieni.

Guglielmo

P.S. Metti anche un link a dove hai scaricato la libreria SIM900

Eccomi, sembra che ora proprio non faccia nulla; effettivamente risulta spento anche il led relativo al gps, e tramite l’ide non riesco ad inviare i comandi AT;
allego l’immagine

#include "SIM900.h"
#include <SoftwareSerial.h>
#include "sms.h"
#include "call.h"
#include "gps.h"

CallGSM call;
SMSGSM sms;
GPSGSM gps;

char message[40];
char number[15];
byte state;
char lon[15];
float lon_db;
float lon_db_2;
char lat[15];
float lat_db;
float lat_db_2;
char alt[15];
char time[20];
char vel[15];
char msg1[5];
char msg2[5];
char stat;
char inSerial[20];
int i = 0;
boolean started = false;

void setup()
{
  Serial.begin(9600);
  Serial.println("GSM Shield testing.");
  if (gsm.begin(9600)) {
    Serial.println("\nstatus=READY");
    gsm.forceON(); 
    started = true;
  }
  else Serial.println("\nstatus=IDLE");
  if (started) {
    //GPS attach
    if (gps.attachGPS())
      Serial.println("status=GPSREADY");
    else Serial.println("status=ERROR");
  }
  delay(20000); //Time for fixing
};

void loop()
{
  state = call.CallStatusWithAuth(number, 0, 10);
  if (state == CALL_INCOM_VOICE_AUTH)
  {
    //Serial.println(value);
    delay(1000);
    call.HangUp();
    //   value=1;
    Serial.println("Chiamata in corso da numero autorizzato");
    stat = gps.getStat();
    delay(5000);
    gps.getPar(lon, lat, alt, time, vel);
    message[0] = '\0';
    Serial.print("Lon = ");
    Serial.println(lon);
    Serial.print("Lat = ");
    Serial.println(lat);
    strcat(message, "lon: ");
    strcat(message, lon);
    strcat(message, " lat: ");
    strcat(message, lat);
    //      sms.SendSMS(number,message);
  }
  delay(500);
};

questo invece il link

Francesco

Rettifico, il led relativo al gps, lampeggia.

Francesco

Buongiorno a tutti,

dopo una notta passata a fare e rifare svariate prove e demoralizzato per il fatto di non riuscire a far funzionare il modulo SIM928A, ho provato usando sempre gli esempi ad utilizzare il modulo SIM900 per la parte GSM e una shield separata per la parte GPS.
Ora singolarmente gli sketch relativi al GSM e GPS funzionano correttamente, ma nel momento i cui provo a farli coesistere, probabilmente vista la mia non conoscenza di arduino, qualcosa non funziona… mi spiego meglio; o funziona correttamente il GSM o il GPS ma se provo ad abilitare entrambe le seriali qualcosa non va

allego lo sketch che sto usando

#include "SIM900.h"
#include "sms.h"
#include "call.h"
#include <TinyGPS.h>
#include <SoftwareSerial.h>

#define PIN_GPS_ENABLE 7

CallGSM call;
SMSGSM sms;

TinyGPS gps;

SoftwareSerial uart_gps(5, 6);

byte stat = 0;
String latitudine, longitudine, posizione, intestazione;
char messaggio[70];

void getgps(TinyGPS &gps);

void setup(void)
{
  intestazione = String("http://maps.google.com/maps?q=");
  pinMode(PIN_GPS_ENABLE, OUTPUT);
  digitalWrite(PIN_GPS_ENABLE, LOW);
  Serial.begin(9600);
  Serial.println("Test GSM e GPS");

  uart_gps.begin(4800);

  if (gsm.begin(9600))
    Serial.println("\nstatus=GSM_READY");
  else
    Serial.println("\nstatus=GSM_IDLE");

}

void loop()
{
  lettura_GPS();
  telefono();
}

void lettura_GPS()
{
  while (uart_gps.available())
  {
    int c = uart_gps.read();
    if (gps.encode(c))
    {
      getgps(gps);
    }
  }
}

void getgps(TinyGPS & gps)
{
  float latitude, longitude;
  gps.f_get_position(&latitude, &longitude);
  latitudine =  String(latitude, 5);
  longitudine =  String(longitude, 5);
  posizione =  String(intestazione + latitudine + "," + longitudine);
  posizione.toCharArray(messaggio, 65);
  Serial.println(posizione);
  telefono();
}

void telefono()
{
  stat = call.CallStatus();
  if (stat == CALL_INCOM_VOICE) {
    Serial.println("CHIAMATA");
    call.HangUp();
    delay(2000);
    //sms.SendSMS("xxxxxxx", messaggio);
  }
}

grazie anticipatamente per l’aiuto.

frankycora:
il GSM o il GPS ma se provo ad abilitare entrambe le seriali qualcosa non va

...entrambe le seriali ? ? ? Non conosco il SIM928A, ma a quanto mi risulta, i moduli SIMcom usano UNA seriale sia per il GSM che per il GPS ... strano quindi che tu usi due seriali ... ::slight_smile:

Mi dai il link dove hai comprato la scheda ed il modulo ? ... perché voglio verificare bene ...

Comunque DUE SoftwareSerial assieme NON funzionano in ricezione ... si deve SEMPRE selezionare quella che si usa con l'apposito comando listen() , quindi ... una per volta !

Guglielmo