Go Down

Topic: GSM GSMPin.begin return (Read 152 times) previous topic - next topic

schrist

Bonjour.
j'essaie de vérifier l'état de ma carte SIM avec la commande
GSMPin.begin(), mais je ne peux pas récupérer de valeur. J'obtiens une erreur de compilation qui me dit que la fonction ne retourne rien (void). J'utilise la librairie GSM 1.0.6.
Y a-t-il une explication ?
Merci d'avance.
Sébastien

J-M-L

#1
Apr 13, 2017, 10:37 am Last Edit: Apr 13, 2017, 10:44 am by J-M-L
je pense que vous utilisez ceci comme référence mais bon de confirmer - vous pouvez y voir que l'appel à begin retourne 1 si le modem est OK, sinon une erreurr

Quote
J'utilise la librairie GSM 1.0.6.
---> la libraire GSM fait partie en standard de l'IDE. avez vous téléchargé une autre librairie?

bien sûr il faut utiliser une version récente et moderne de l'IDE
Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums
Pas de messages privés SVP

schrist

Oui, c'est bien cela mon problème...
Voici le message d'erreur :
Code: [Select]
Arduino : 1.8.2 (Windows XP), Carte : "Arduino/Genuino Mega or Mega 2560, ATmega2560 (Mega 2560)"

In file included from C:\Program Files\Arduino\libraries\GSM\src/GSM.h:46:0,

                 from C:\Arduino\GSM_Control\GSM_Control.ino:19:

C:\Program Files\Arduino\libraries\GSM\src/GSM3ShieldV1BandManagement.h:49:125: warning: 'typedef' was ignored in this declaration

 typedef enum GSM3GSMBand {UNDEFINED, EGSM_MODE, DCS_MODE, PCS_MODE, EGSM_DCS_MODE, GSM850_PCS_MODE, GSM850_EGSM_DCS_PCS_MODE};

                                                                                                                             ^

C:\Arduino\GSM_Control\GSM_Control.ino: In function 'void setup()':

GSM_Control:204: error: void value not ignored as it ought to be

   int pin_inserted=PINManager.begin();

                                     ^

exit status 1
void value not ignored as it ought to be

Bibliothèque non valide trouvée dans C:\Documents and Settings\sc\Mes documents\Arduino\libraries\examples : C:\Documents and Settings\sc\Mes documents\Arduino\libraries\examples
Bibliothèque non valide trouvée dans C:\Documents and Settings\sc\Mes documents\Arduino\libraries\libraries : C:\Documents and Settings\sc\Mes documents\Arduino\libraries\libraries

Ce rapport pourrait être plus détaillé avec
l'option "Afficher les résultats détaillés de la compilation"
activée dans Fichier -> Préférences.


Code: [Select]
#include <GSM.h>        // import the GSM library

#include <HEXA_NUM.h>
#include <RS485.h>
#include <CALCTIME.h>
#include <EEPROM.h>

GSMPIN PINManager;
.....
  int pin_inserted=PINManager.begin();


J'ai chargé la dernière version de l'ide
1.8.2

J-M-L

#3
Apr 13, 2017, 12:59 pm Last Edit: Apr 13, 2017, 01:10 pm by J-M-L
hum - quand on rencontre ce genre de soucis, le meilleur moyen de debugger c'est d'aller voir le code source - c'est "the ultimate documentation" comme disent les anglophones :)


 dans le fichier arduino-library-files/libraries/GSM/GSM.h vous avez
Code: [Select]
#define GSMPIN GSM3ShieldV1PinManagement

Si je vais voir le code source de arduino-library-files/libraries/GSM/GSM3ShieldV1PinManagement.cpp

je vois
Code: [Select]
// reset the modem for direct access
void GSM3ShieldV1PinManagement::begin()
{
// reset hardware
gsm.HWrestart();

pin_used = false;

// check modem response
modemAccess.writeModemCommand("AT", 1000);
modemAccess.writeModemCommand("ATE0", 1000);
}


--> donc la doc n'est pas à jour, l'appel à begin retourne bien un void.


si vous regardez dans le fichier arduino-library-files/libraries/GSM/GSM3ShieldV1PinManagement.h quelles options potentielles sont disponibles pour vérifier l'état:
Code: [Select]

/** Check modem response and restart it */
void begin();

/** Check if PIN lock or PUK lock is activated
@return 0 if PIN lock is off, 1 if PIN lock is on, -1 if PUK lock is on, -2 if error exists
*/
int isPIN();

/** Check if PIN code is correct and valid
@param pin PIN code
@return 0 if is correct, -1 if is incorrect
*/
int checkPIN(String pin);

/** Check if PUK code is correct and establish new PIN code
@param puk PUK code
@param pin New PIN code
@return 0 if successful, otherwise return -1
*/
int checkPUK(String puk, String pin);


--> utilisez une des fonctions de test pour votre besoin
int isPIN();
int checkPIN(String pin);
int checkPUK(String puk, String pin);
Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums
Pas de messages privés SVP

schrist

Tout d'abord, un GRAND merci.
C'est en effet ce que je craignais.....

De plus, lorsque je fais un IsPIN, je reçois la valeur -2.
Alors que si je mets la puce dans un portable, j'entre le PIN et tout fonctionne !
Donc je voulais prendre le résultat du begin pour savoir s'il y avait un problème de connexion.
Je séche maintenant avec mon IsPIN à -2.

J-M-L

là encore vous pouvez regarder le code source (une honte de programmer comme cela avec la classe String mais c'est une autre histoire)

Code: [Select]
int GSM3ShieldV1PinManagement::isPIN()
{
  String res = modemAccess.writeModemCommand("AT+CPIN?",1000);
  // Check response
  char res_to_compare[res.length()];
  res.toCharArray(res_to_compare, res.length());
  if(strstr(res_to_compare, "READY") != NULL)
    return 0;
  else if(strstr(res_to_compare, "SIM PIN") != NULL)
    return 1;
  else if(strstr(res_to_compare, "SIM PUK") != NULL)
    return -1;
  else
    return -2;
}


ils envoient un AT+CPIN? au module et regardent la réponse

si c'est  READY --> renvoie 0
si c'est  SIM PIN --> renvoie 1
si c'est  SIM PUK --> renvoie -1
sinon si c'est autre chose, ça vous renvoie -2

==> si j'étais vous je connecterais mon shield GSM à la main et j'enverrrai la commande AT+CPIN? au module et j'afficherai la réponse...

Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums
Pas de messages privés SVP

schrist

Bonjour.
Merci.
Mais je n'arrive pas à récupérer la chaine.

Code: [Select]
GSM3ShieldV1DirectModemProvider modemAccess(false);

  modemAccess.begin();
  modemAccess.restartModem();
//modemAccess.connect();
  String tmps;
 
  Serial.println("modemAccess.writeModemCommand");
  String res;
  res.reserve(40);
  res = (modemAccess.writeModemCommand("AT+CPIN?",1000));
  Serial.print("modemAccess.writeModemCommand = ");
  Serial.print(res);
  Serial.println("//");


J'ai toujours un chaine vide !

J-M-L

vous avez quoi comme shield GSM et comme arduino?

l'idéal serait de faire la connexion "à la main"
Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums
Pas de messages privés SVP

schrist

#8
Apr 14, 2017, 04:33 pm Last Edit: Apr 14, 2017, 05:31 pm by schrist
Une ATMEGA 2560 avec ARDUINO GSM SHIELD 2 (INTEGRATED ANTENNA).

Qu'entendez-vous par connexion "à la main".

J-M-L

#9
Apr 14, 2017, 06:41 pm Last Edit: Apr 14, 2017, 06:42 pm by J-M-L
comme vous avez une MEGA qui a des port séries matériel, je n'utiliserai pas SoftwareSerial

n'enfichez pas la carte au dessus de votre Mega, mettez des fils entre des pins de la MEGA et votre shield pour avoir les fonctions minimum et n'utilisez pas la librairie, utilisez juste la communication Série

la doc dit:
---
The shield uses digital pins 2 and 3 for software serial communication with the M10. Pin 2 is connected to the M10's TX pin and pin 3 to its RX pin. The modem's PWRKEY pin is connected to Arduino pin 7.
--

--> au lieu de prendre les Pins 2 et 3 de votre arduino Mega connectée sur les pin Tx/Rx utilisez le pins du port Serial 1: 19 (RX) and 18 (TX); --> mettez un fil entre arduino D19 et la pin du shield qui vient se brancher sur la pin 2 de l'arduino et un fil entre Arduino D18 et la pin du shield qui vient se brancher sur la pin 3 de l'arduino

comme cela vous aurez Serial 1 Rx <--> M10's TX et  Serial 1 Tx <--> M10's RX

Connectez les pins 7 entre elles
Connectez les pins GND entre elles


Alimentez votre Mega depuis le port USB
Alimentez le shield GSM depuis une alimentation 5V capable de délivrer 2A


ensuite faire un bout de code qui dans le setup() faire

Code: [Select]

Serial.begin(115200);
Serial1.begin(9600); // à vérifier si c'est le bon débit
pinMode(7, OUTPUT);
digitalWrite(7, HIGH);


et dans la loop() lit sur Serial (ce que vous tapez dans la console arduino) et qui l'envoie sur Serial1 et inversement

--> ça vous permet d'envoyer directement des commandes AT et de voir les réponses
Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums
Pas de messages privés SVP

schrist

J'ai essayé mais je ne reçois rien sur la ligne Série Serial1.

Par contre, si j'utilise gsmAccess.begin(aCodePin) de la classe GSM, mon système s'initialise correctement.
et je reçois les sms.
J'aurais voulu faire des tests sur le code PIN car j'ai réussi à bloquer une carte SIM.

schrist

J'ai recommencé avec les platines séparées. Je travaille avec le port 3 et la commande AT+PIN?
me retourne
AT+CPIN?
AT+CPIN?

+CPIN: SIM PIN

Alors maintenant pourquoi la classe GSMPIN ne fonctionne pas, je ne trouve pas.

schrist

J'ai mis l'oscillo.
Les commandes arrivent bien sur la pin 3.
Par contre pas de réponse. (en pin2)
Problème d'initialisation ou de vitesse ? je ne sais pas.

Go Up