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
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
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
Oui, c'est bien cela mon problème...
Voici le message d'erreur :
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.
#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
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 [url=https://github.com/codebendercc/arduino-library-files/blob/0b4140bf19ccee5bc8745004b17c3506e64e3ed7/libraries/GSM/GSM.h]arduino-library-files/libraries/GSM/GSM.h[/url]
vous avez#define GSMPIN GSM3ShieldV1PinManagement
Si je vais voir le code source de [url=https://github.com/codebendercc/arduino-library-files/blob/0b4140bf19ccee5bc8745004b17c3506e64e3ed7/libraries/GSM/GSM3ShieldV1PinManagement.cpp]arduino-library-files/libraries/GSM/GSM3ShieldV1PinManagement.cpp[/url]
je vois
// 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 [url=https://github.com/codebendercc/arduino-library-files/blob/0b4140bf19ccee5bc8745004b17c3506e64e3ed7/libraries/GSM/GSM3ShieldV1PinManagement.h]arduino-library-files/libraries/GSM/GSM3ShieldV1PinManagement.h[/url]
quelles options potentielles sont disponibles pour vérifier l'état:
/** 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);
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.
là encore vous pouvez regarder le code source (une honte de programmer comme cela avec la classe String mais c'est une autre histoire)
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...
Bonjour.
Merci.
Mais je n'arrive pas à récupérer la chaine.
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 !
vous avez quoi comme shield GSM et comme arduino?
l'idéal serait de faire la connexion "à la main"
Une ATMEGA 2560 avec ARDUINO GSM SHIELD 2 (INTEGRATED ANTENNA).
Qu'entendez-vous par connexion "à la main".
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
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
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.
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.
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.