V.O. 21 juillet 2015
Rev 16 dec 2016


GSM2 click Application avec Clicker2 PIC18F87J50

-Montage de tests
-Presentation
-1er Essai envoi SMS
-Problemes rencontres
-Details softwarers
-modif harware sur GSM2-Click
-3em solution
-4em solution retenue (Hardware + Softw )
-Mixage Applications GSM2 et GPS Ublox



Montages de tests
:
last update : 25/06/2016

En version deportée pour test direct avec Terminal VBRAY..

Etude des commandes AT et reponses du GSM2-click

img/t_GSM2_hors_click.gif


En version definitive, le GSM2-click est monté sur l'emplacement Mikrobus#1

img/t_GSM2_click_Montage_de_test_150821.gif



Presentation du module GSM

Le module Micro-click , emplacement mikrobus #1:

img/t_GSM2_click_photo.gif img/t_Antenne_Mikroe-275.gif
GSM2-Click MikroE-1684 Antenne 932-MIKROE-275

Ne pas oublier de commander aussi l'antenne : GSM ANTENNA WITH SMA RA CONNECTOR


Interlaison PIC 18F87J50 et GSM2-click via le MikroBus

img/t_Clicker2-18F87J50-GSM2_Click_links.gif

Carte GSM2:
Puce QUECTEL M95
M95A-02-NCH-STD
M95AR01A21
S2-W0953-MQ009
SN: MP24414N3008263
IMEI: 863071014743659
CE 2200

Schema de la carte GSM2-click
img/t_GSM2_click_schema.gif


HISTORIQUE & Notes :

Carte SIM :
Usage d'une carte SIM de chez Fremobile.fr, ayant deja un abonnement FAI freebox
La carte SIM coute 10 €
L'abonnement normal de 2€ est gratuit si abonné freebox.
Free envoi par courier la carte SIM + les instructions :

Il faut initilaliser / activer la carte SIM sur le site de free.fr
1er test , envoi d'un SMS sur le nouveau numero de ligne 07.XX.XX.XX.XX..
=> message sur repondeur.. (la carte SIM n'etant pas encore sur le GSM2.
donc, la ligne est bien activée.
nota: je n'ai pas de telephone "Libre de fournisseur" pour pouvoir le faire ...en mode vocal

1er test d'envoi commande AT
Le module GSM2-click dialogue avec le PIC via son UART2 à 19200,N,8,1
J'utilise aussi l'UART1, comme outil de debugging, relié au terminal RS232 Vbray..
Tracage du programme par copie de la commande et du retour de l'UART2 (= GSM2)
Attention: niveaux logiques en 3,3V (interface 2TR avec VBRAY OK à 19200 bauds!)

PAS DE REPONSE à la commande AT<CR>
en fait, l'interruption UART2 (GSM2) était basée sur acceptation l'apparition d'un caractere CR en fin de trame
or le GSM2 renvoi : 79 75 13 10
un LF est rajouté et se retouvait donc en debut de la trame suivante
en position 0 dans le buffer. Le test de OK etant fait sur les 2 premier caractere.. NEVER SUCCES!,
j'ai donc fait le test reception de trame entiere sur l'apparition de LF (au lieu de CR.
pour bien retrouver 'O' en buffer[0] et 'K' en buffer[1].
réponse sur cde AT .. résolu.
Ensuite, ne pas oublier d'envoyer le code PIN , ici "1234" par défaut.

Quelques commandes AT tres utiles :

ATE0<CR> : Cette commande permet de désactiver la commande écho (ATE1 la réactive).
Cela demande donc au modem de ne pas répéter systématiquement les commandes qui lui sont envoyées.
AT+CMGF=1<CR> : Cette commande permet de régler le format de message pour l'envoi de SMS.
Par défaut, le modem est en mode PDU (AT+CMGF=0). C'est-à-dire que l'envoi de message se fait
en hexadécimal.
AT+CMGF=1 permet de passer en mode texte, ce qui simplifie les manipulations de SMS.
Numero de telephone au format international 145
AT+CMGS="+336XXXXXXXX"<CR> : Cette commande permet de commencer la rédaction d'un SMS
. On précise en argument le numéro de téléphone choisi. En retour on obtient le caractère d'invite
de commande « > » qui nous invite à rentrer le texte du SMS.
Texte du SMS<CTRL+Z><CR> : Cette fin de commande permet alors de préciser le texte et de
valider l'envoi du SMS par un CTRL+Z et un retour chariot.
<CTRL+Z> : Combinaison des touches CTRL et Z. Sa valeur hexa est 0x1A

Documentation commandes AT

Je recommande fortement , suite à des multiples déboires, de commencer à explorerl a Carte GSM2-click
avec un terminal RS232 (comme Terminal VBRAY par exemple) , afin de tester toutes les commandes ATpossibles
et de les modifier si besoin est.
Le module GSM2-click N'EST PAS installé sur le mikrobus #1 , mais il y est relié partiellement via des straps (fils) male-femelle
SAUF la partie UART qui est reliée directement au terminal RS232 , via l'interface 2 TR ( 3,3V levels <->RS232 levels)
L'init du module GSM2 est donc faite par le programme PIC, mais le controle par le terminal VBRAY.

Fichier de config des touches terminal :GSM2_click.tmf
exemple de dialogue direct : Quecktel_dialogue_150818a.txt

Notes:

RED LED = Etat NETLIGHT (Led rouge)
Off The module is not running.
64ms On/ 800ms Off Le module n'est pas Synchronisé au Reseau.
64ms On/ 2000ms Off Le module est Synchronisé au Reseau..
64ms On/ 600ms Off Transmission de donnee GPRS apres connection PPP.

YELLO LED = STATus du module GSM (Led Jaune)
domme l'etat d'initialisation du module GSM, elle doit etre et rester allumée si l(init POWER est OK

Signal RING :
relié à l'entree RG3 , niveau HAUT au repos.
Lorsqu'un SMS arrive, le signal RI passe à l'etat BAS pendant 120mS, puis revient à l'état HAUT,
Non exploité , avec l'affectation des pins de liaison MikroBus , car va sur une entree NON interruptible.
Je pense qu'il aurait été preferable de l'aiguiller sur RB0.. => traitement IT RB0 .etc
afin de ne pas bloquer le programme sur un test permanent.




1er Envoi SMS Successfull :

il faut rajouter le + devant l'indicatif international
En reception SMS, il affiche bien +336.......5
on trouve sur le web ,beaucoup de contradiction à ce sujet.. ou alors la norme n'est pas rigoureuse.
Le numero de telephone doit AUSSI etre entre guillemet !
UART2_Write_CText("AT+CMGS=\"+336123456789\"\r\n");
33 indicatif FRANCE, suivi du numero national de 10 chiffres - 1
soit 9 digits, le 0 du 06 étant éliminé

Exemple d'echange (récupéré via UART1)



Reception SMS et Envoi SMS avec mon telephone mobile .. OK .. MAIS ...



up to date 06/01/2016
Software MikroC:
Source : GSM2_click_18F87J50
chargeur :GSM2_click_18F87J50
doc: GSM2_Click_Quecktel_dialogue_w_PIC_1510.doc
Zip avec *.h : GSM2_click_18F87J50_clicker2_UART1_150924.zip
Contenu du projet



Problemes :


img/t_GSM2_Clicker2_battery.gif

Une grosse partie des problemes est due à l'alimentation Cliker2 via le port USB en 5V
qui génere en local ,l'alim 3,3V. Celle ci ne peut pas fournir les accoups de courant demandés
par la carte GSM2 => reset intempestifs..
MikroE n'est pas tres objectif sur ce point là.. mikroE preconise le rajout d'une batterie
pour que celle ci lisse l'appel de courant.. c'est UNE SOLUTION au probleme.
Fil de discussion forum MikroE , à ce sujet

Choix pour l'alimentation:
- soit on alimente via le port mini-USB + battery ( lorsqu'on est en mode programmation/modification/test)

img/t_GSM2_Clicker2_USB_et_battery_conso_repos.gif img/t_GSM2_Clicker2_Battery_powered.gif
la batterie est chargée via la connection USB la batterie seule alimente les modules, SANS USB

- soit on pourrait alimenter via le port USB mini et un bloc alim secteur 5V 2A ( 1A un peu trop juste !)
- autre possibilité , ci dessous, lorsqu'on rajoute le MIKROE-938 Terminal Connect shield

Verif avec alimentation externe en 5V

Alim 230V AC/ 5V DC lineaire Transfo 230/9V uA7805K.. (sortie reglable 5 à 12V limitée à 1Amp, reglée à 5V.)
test avec USB NON connecté et Batterie NON connectée.
Alim raccordée sur les bornes Vsys +5V et 0V du connector Shield

img/Cliker2_mesure_I.jpg ../common/mikroE_938_connect_shield.gif
Alimentation 5V sur bornier Bornierconnector Shield placé sous le clicker2


Amperemetre FI515 en serie avec alim
Sans echange avec GSM2 ...37mA
pic > 220mA à l'init Power du GSM2
Variable pendant l'init GSM2 pas 1 à 12 .. de 50 à 150 mA
puis retour à 37 mA .. pendant l' acquisition ADC et display UART1
sans echange avec GSM2
> 130mA pendant l'envoi d'un SMS
puis retour à 37 mA ...
>100 mA pendant la reception d'un SMS

img/t_Gsm2_Cliker2_18F_alim_ext_5V_151006.gif img/t_Gsm2_Cliker2_18F_Dialogue_151006.gif
la mesure du courant delivré à Clicker2+GSM2 le dialogque PIC <-> GSM2 correspondaant

Le pic d'intensité maxi reel doit etre bien au delà de 220mA ..
Le driver USB MikroE servant à la programmatuion du PIC via MikroE Bootloader est limité à 100mA maxi
Question à MikroE ..augmenter ce maxi .. reponse : pas possible .. j'en doute fortement !
Mesure à l'oscilloscope , préferable pour mesurer ce PIC maxi de courant :


img/t_Consom_GSM2_oscillo.gif
on peut passer de 16mA à plus de 400mA !



SOFTWARE :

Remise en cause de la partie Reception UART2 et interruption .

La fin de message etait basée sur la detection du caractere LF (terminaison CR LF),
MAIS ! le GSM renvoi une trame comportant plusieurs CR LF , et donc message tronqué
L'IT UART2 est toujours declenchée sur l'apparition d'un LF, MAIS la comm. n'est pas fermée pour autant
et le buffer continue à se remplir , pendant un temps minimum de plusieurs secondes
Le contenu du buffer , arrivé à terme, est alors inspecté et visualisé, et des que recupéré,
RAZ du buffer, RAZ du drapeau IT et reautorisation nouveau remplissage si LF reçu.
On ne perd ainsi, aucun caractere.
La fin de message 'OK' en temoigne.
=> Reception SMS OK et fiable.

Des qu'un SMS est reçu, analysé et exploité, la zone de memoire SMS INBOX est razée ,de sorte
à ne conserver aucun message reçu et donc celui qui arrive est toujour en position #1.
On peut donc le lire soit via "REC UNREAD" soit en précisant son index (numero) ,inutile dans ce cas là.
Un stockage des messages recus pourrait etre envisagé si besoin..


Les fonctionalites :


Init activation Power GSM
Delay imperatif de 5 sec mini!
Init du GSM faite en 12 etapes
... Etapes à reduire depuis le stockage profil #0

18:55:10.218> Set PIN code(AT+CPIN=1234)
18:55:12.718> +CPIN: READY
18:55:12.718> OK
18:55:12.718> Call Ready
18:55:12.781> Last Step: 1
18:55:12.781> Send Msg type as text mode (AT+CMGF=1)
18:55:15.281> OK
18:55:15.281> Last Step: 2
18:55:15.343> Never go in SLEEP mode(AT+QSCLK=0)
18:55:17.859> OK
18:55:17.859> Last Step: 3
18:55:17.859> Software Version (AT+CGMR)
18:55:20.421> Revision: M95AR01A21
18:55:20.421> OK
18:55:20.421> Last Step: 4
18:55:20.421> IMEI Serial number (AT+CGSN)
18:55:22.921> 863071014743659
18:55:22.921> OK
18:55:22.984> Last Step: 5
18:55:22.984> Format de Reponse via libellé (ATV1)
18:55:25.484> OK
18:55:25.484> Last Step: 6
18:55:25.546> Select SM (AT+CPMS="SM","SM","SM"
18:55:28.046> +CPMS: 0,60,0,60,0,60
18:55:28.046> OK
18:55:28.046> Last Step: 7
18:55:28.109> Renvoi SMS sur terminal (AT+CNMI=2,1)
18:55:30.609> OK
18:55:30.609> Last Step: 8
18:55:30.609> Test si enregistré sur le reseau (AT+CREG?1)
18:55:33.109> +CREG: 0,5
18:55:33.109> OK
18:55:33.171> Last Step: 9
18:55:33.171> Lecture de date et heure (AT+CCLK?)
18:55:35.671> +CCLK: "15/10/03,18:59:47+04"
18:55:35.671> OK
18:55:35.734> Last Step: 10
18:55:35.734> Savet profile (AT&W)
18:55:38.234> OK
18:55:38.234> Last Step: 11
18:55:38.234> List all msg from inbox (AT+CMGL=ALL)
18:55:40.796> OK
18:55:40.796> Last Step: 12
18:55:40.796> Phase d'init en 12 pas / 12 .. OK

Declaration d'une table de numero de telephone (ici 2 actives)
Possibilite de stocker les numero de tel dans la SIM, avec appel par pseudo nom
exemple de cde :



verif : lecture emplacement botin #1



Envoi SMS automatique , sur seuil de detection :
Envoi sous 4 conditions reunies, d'une collecte de données
- 1 seule envoi par tranche de 5 minutes
- Seuil voie Ana RA1 > 512 points
- Seuil mesure Ana. RA2 temperature < 20°C
- Dialogue PIC <-> GSM2 activé ou Non
- Init Power GSM2 ..STAT=1=led jaune=OK

Gestion des requetes via SMS :

Possibilité d'activer ou non l'envoi automatique
Cde "Survey On"
Cde "Survey Off"
La reponse est renvoyée au demandeur ( 1 des 2 telephones!)
exemple:
17:22:39.953> Read message NON LUS (AT+CMGL="REC UNREAD")
17:22:43.515> +CMGL: 1,"REC UNREAD","+336123456789","","2015/10/04 17:17:34+08"
17:22:43.515> Survey On
17:22:43.515> OK
17:22:43.515>
17:22:43.593> Dialogue SMS retablit
17:22:43.593> Efface tous les SMS reçus (AT+QMGDA="DEL INBOX")
17:22:46.078> OK


Envoi d'une collecte de donnée sur Demande :
- sur reception d'un SMS "Data On Demand
la collecte de données est envoyé au numero emetteur de demande
1 voie ANA (Potar 0 à 3,3V) + 1 voie ANA LM35DZ (0 à 330°C) + 2 entrees TOR (BP1, BP2)
exemple:
14:48:07.781> Read message NON LUS (AT+CMGL="REC UNREAD")
14:48:11.343> +CMGL: 1,"REC UNREAD","+336123456789","","2015/10/05 14:47:55+08"
14:48:11.343> Data On Demand
14:48:11.343> OK
14:48:11.343> Envoi Datas demandées
14:48:11.343> Contenu du SMS à envoyer

14:48:11.406> GSM2 PIC18F87J50:
14:48:11.406> BP1 = 1 BP2 = 1
14:48:11.406> EA1= 128
14:48:11.406> Temp= 22.56°C
14:48:11.406> End.

14:48:11.406> Compose Numero (AT+CMGS=+336123456789)
14:48:14.468> > OK pour envoi Msg txt
14:48:17.046> Efface tous les SMS reçus (AT+QMGDA="DEL INBOX")
14:48:19.546> +CMGS: 123
14:48:19.546> OK

Mise à la date et Heure du GSM2
L'heure n'est pas maintenue si on coupe l'alimentation Clicker2
par defaut elle se retouve à "04/01/01,00:00:30+04"
Le telephone envoi une requete specifique pour Mise à jour:

ex: MAH=15/10/05,14:48
exemple de lecture SMS coté GSM:
14:47:23.406> +CMGL: 1,"REC UNREAD","+336123456789","","2015/10/05 14:47:08+08"
14:47:23.468> MAH=15/10/05,14:48
14:47:23.468>
14:47:23.468> OK

tiens je m'apercois que le decalage horaire est de +08 ?
en effet +04 heure fuseau Greenwich + 1 H decalage Horiare été => 2x 4 quart d'heure= 8

Commande de 2 sorties (ici des Leds) et renvoi compte-rendu d'etat :
Cdes Led1 On,Led1 Off, Led2 On,Led2 Off
exemple:
19:21:21.125> Read message NON LUS (AT+CMGL="REC UNREAD")
19:21:24.687> +CMGL: 1,"REC UNREAD","+336123456789","","2015/10/05 19:21:06+08"
19:21:24.687> Cde Led1 Off
19:21:24.687> OK
19:21:24.687> Retour cde Leds
19:21:24.687> Contenu du SMS à envoyer
19:21:24.687> Retour Led1= 0 Led2= 1
19:21:24.765> Compose Numero (AT+CMGS="+336123456789"
19:21:27.750> > OK pour envoi Msg txt
19:21:30.312> +CMGS: 130
19:21:30.312> OK



Commande Debug / Normal via clavier terminal UART1

img/t_Vbray_Macros_GSM2.gf

Le fichier Macro Vbray Terminal : GSM2_click.tmf

UART1 = terminal RS232 VBRAY sur PC
il est utilisé ici comme outil de debugging, et controle des échanges PIC <-> GSM
En envoyant la commande "Debug" depuis le clavier terminal VBray, on passe en mode debug
le terminal n'affiche plus le message de collecte de donnée toutes les 3 secondes.L'ecran reste vide.
Ce qui permet l'envoi de commandes AT directement dans le GSM2 et voir l'echange resultant.
Les touches de fonctions sont programmes sur certaines commandes AT
pour revenir au mode Normal = display les trames de collecte datas toutes les 3 secondes.
L'indice , entete de message,varie de 0 à 59 .. soit 60x 3 secondes .. sert à bloquer un envoi automatique de SMS
si < 180 seondes écoulées depuis le precedent envoi.

On peut envisager un fonctionnement en Aveugle ..sans terminal / UART1 ..
mais j'aime bien avoir un outil sous la main en cas de probleme..et on a de la place dans ce PIC evolué!

La Version tout en un (seul fichier) du programme
Source MikroC : GSM2_click_18F87J50_Uart1_Uart2_UART1_151006w.c
Chargeur : GSM2_18F87J50_UART1_UART2_1510.hex

Version avec 1 fichier par fonction ou interface

img/t_Project_Manager.gif img/t_Project_GSM2_18F87J50_UART1_UART2_1510_All_mcppi.gif
Project Manager Edit Project (config bits)

Rajout d'un LCD 2x16
pour info minimum locales (pas de PC !)
Usage du bus I2C1 pour un afficheur LCD 2119 et futur rajout de 8E et 8S( extension)
rajout fichier include .. pas de probleme particulier , car deja testé ICI.



Mise en pause du GSM pour reduire la conso globale
Sujet de discussion ICI
23/10/2015

avec Montage GSM2-Click déporté

1ere solution :Test avec detection via interruption "RI" :

- impose de ne plus installer directement le GSM2-click sur le support MikroBus
afin de pouvoir connecter la pin RB0 au lieu de RG3 sur l'info "RI" Ring du GSM

Si on met en veille le GSM2 , on ne transmet plus le SMS reçu à l'UART2 !
Il n'est donc plus possible de surveiller la reception de "+CTMI" via l'IT UART2.
Par contre , le signe RI passe de 1 à 0 pendant 60 à 120mS ..
Si on surveille cet etat en mode pooling, on ne peut plus faire autre chose .
D'ou la liaison "RI" sur l'entree PIC RB0 , interruptible.
L'IT RB0 va reveiller le GSM2 et sera donc ensuite , pret à recevoir un SMS et le traiter.
La difficulté a été de Reveiller le GSM2 .. avec une commande NON DOCUMENTEE par Quectel
AT+QCLCK=2 au lieu de 1 !

On detecte donc l'arrivée d'un SMS , soit par le contenu "+CTMI" , soit par le signal "RI" ring.
Un SMS specifique libellé "Sommeil" met le GSM2 en mode sommeil .. la conso globale passe alors de 48mA à 28mA
L'Envoi d'un Autre SMS (contenu quelconque ou) "Reveil" generera l'apparition de l'IT RING.
Le traitement de l'IT replace le module en etat actif AT+QCCLK=0 , pret à recevoir un SMS de commande.
La consommation remonte à 48mA .. (Sans echange Quectel)
Dans les 2 cas de figure, le programme principal continue à tourner .. Acquisition Analogique + etat E/S
surveillance de seuil ..etc ...

img/t_GSM2_Prototype_en_5V.gif img/t_GSM2_Prototype_Mesure_I.gif
Vue d'ensemble du prototype Mesure de courant aux bornes de
l'interrupteur (ouvert)alim 5V


Programme source : 18F87J50_GSM2_...c
Chargeur : 18F87J50_GSM2_.....hex
Test et Suivi d'Echange d'info : Test_echanges_GSM2_151020.txt

2em solution : on laisse le GSM2-click sur son support MikroBus #1
La tache de fond : acquisitions Analog, etat des E/S sera faite via interruption Timer1
On surveillera le "RI" en mode pooling
Vu la duree tres courte du signal RI à zero .. il faut que le traitement interrupt timer1 soit moins de 50ms
1er Test avec timer interrupt à 30mS..
Essai peu probant .. ABANDON de cette solution trop restrictive



3em solution (version)

Mise en sommeil sur commande, Reveil sur evenement
On demarrage l'application normalement .. conso =48mA
Le GSM2 ets pret à recevoir et repondre aux demandes SMS.
Boucle de fond tourne en 10 secondes.
sur commande specifique "Sommeil" on met le GSM2 en mode Sleep : conso=28mA
Pour reveiller le GSM2 , il faut qu'un evenement surgisse :
soit depassement de seuil EA1 ou Temperature EA2, ou action BP1 ou BP2
Cet evenement genere un message ,envoyé au phone
Le GSM2 reste ensuite EVEILLE. i=48mA
Il est vrai qu'on a plus la main depuis le PHONE , si le GSM est en mode sommeil
il faudra attendre un evenement !
mais vu que le role premier est la SURVEILLANCE .. c'est OK
Les memes fonctionalites sont reconduites
Rajout d'un filtrage arithmetique glissant sur 8 valeurs pour la temperature (EA2)



Hardware:


Le module GSM2-click reste alors sur son support MikroBus#1
La commande DTR depuis RD6 (modif hardware) est necessaire
Alim 5V externe sur le bornier clicker2

  img/GSM2_click_connections.gif img/t_GSM2_click_modif_DTR_to_RD6.gif
GSM2-Click Déporté la modif : RI-> RB0 et DTR -> RD6 modif hardware R=470 sur DTR

 

img/t_GSM2_Prototype_Version3_151026b.gi
prototype

Attention : l'usage du multimetre (Powerfix Jaune) sur le calibre 200 mA pour la mesure de courant consommé
perturbe l'init du GSM2 (pic de sous tension= reset) .. => usage calibre 10A (resolution +-1mA)
Par contre avec mon multimetre Rouge FI515X sur calibre mA , ce n'est pas le cas, c'est pas la meme qualité de Multimetre
..10 fois plus cher .. Le shunt doit etre de valeur beaucoup plus faible.
.
Software :
Source : 18F87J50_GSM2..._Sleep_on_event_151026_with_h.c
Chargeur :
18F87J50_GSM2_...Sleep_On_Event_151026_with_h.he x

Tests :
18F87J50_GSM2_Sleep_On_Event_tests.txt
Fiabilité ..OK




4em solution (version retenue)


Hardware:

Le module GSM2-Click est cette fois , installé sur son support Mikrobus #1.
le bus I2C étant déja utilisé pour le LCD 2119 2x16car
Rajout d'un expander d'entrées/Sorties MCP23017 en I2 C pour gerer 8 sorties et 8 entrees.
voir aussi appli avec 12F683 gérant un MCP23017 pour autres details
Le mode Debug est conservé.
Rajout Entree RB2 pour permettre (RB2=0) ou inhiber (RB2=1) l'envoi d'un SMS pour signaler le demmarage du programme

img/t_GSM2_Clicker2_MCP.gif img/t_Clikcer2_GSM2_interconnections.gif
proto avec MCP23017 inter-connections




Explicages:

Rappel: alim VCC =3,3V
L'adresse de basedu MCP23017 est 0x40 + adresse hardware (formée par A0,A1,A2)
ici = 000 donc 0x40 ou 64
La sortie INTB genere une impulsion lorsque'une entree parmi les 8 change d'etat.
Cette sortie est aiguilléee sur l'entree RB0 , disponible sur le bornier de ma carte clicker2,
permet donc de generer une interruption RB0 , qui mettra la ligne Cde_DTR à 0 et armera
un drapeau (Drapeaux.RB0 .. naturlich !)
La Ligne DTR=0 reveille le GSM.!
Dans le main program , on teste le drapeau RB0 pour inhiber la mise en sommeil (Sleep mode)
et envoyer un SMS regroupant (en plus des etats precedement definis) l'etat des 8 commandes de sorties
et l'etat actuel des 8 entrees sous la forme binaire : 8E= 00001000 8S= 00000000
On peut toujours remettre en sommeil le GSM2 en envoyant la cde "Sommeil".
mais on ne pourra pas reveiller le GSM en envoyant une commande via le Phone !
mais via Uniquement un evenement exterieur :
Seuil analogique, ou Temperature > seuil, ou etat BPx modifié ,ou sur un changement d'etat d'une
des 8 Entrees, pourra reveiller le GSM.
Rajout Entree RB2 pour permettre (RB2=0) ou inhiber (RB2=1) l'envoi d'un SMS au demmarage
ou suite à un Reset.
Rappel: :
#define Full_Init est une directive pour valider une initialisation complete en 16 etapes
.. à faire au moins la 1ere fois
sachant que le parametrage est sauvegardé dans le telephone profile #0 ,
on peut donc ensuite se limiter à une init en 5 etapes. ( voir moins !)

SOFTWARE :

rev 31/01/2016
Rajout d'un fichier MCP23017_I2C.h au projet
source : 18F87J50_GSM2_...2016.c_
chargeur : 18F87J50_GSM2_.....WakeUp_OnEvent_2016.hex_
Rajout de la commande des 8 sorties, depuis le phone.. "MCP1=00000000"
Verification de la commande , si OK , appliquée et SMS de confirmation envoyé avec valeur de la commande en decimal,
si erreur , modification des sorties NON appliqué .
Modifs du 7/11/2015 :
Rajout d'une LDDR pour detection intrusion dans une piece ( lumiere) en remplacement du potar de test
seuil reglé à 512 (en dur dans le software).. nota: Mesure au soleil >600, mesure 330 à la lumiere naturelle , mesure= 25 dans le noir....
Attention, si lumiere ambiante teop forte (avec gros soleil) => alarme
donc pour eviter ,
soit mettre les lunettes de soleil !
soit fermer les volets
soit envoyer SURVEY OFF

En résumé, Alarme par envoi d'un SMS , sur un evenement :
// reveille e GSM si il etait en sommeil et envoi le message d'alarme
// si changement d'etat sur 1 des 8 entrees du MCP23017 => IT RB0
// si mesure ANA RA1 > 512 points
// si mesure ANA EA2_F > 30(°C) ..plus facile pour les tests de chauffer le capteur LM35DZ
// ET
// si Flag_Over=0 : 60x3=180 sec ecoulees entre les alarmes

Resultat sur terminal Vbray

18F87J50_GSM2_Test_160131.log




Rajout Cde "Help"
réponse :
Cdes disponibles :

Data On demand
Survey On (ou Off)
Sommeil
Cde Led1 0n (ou Off)
Cde Led2 0n (ou Off)
MAH=15/09/29,16:45:00+04
MCP1=00000000

Debug
Normal

Demande et effectue l'envoi des donnees de la carte BP1,BP2nEA,EA2,MCP
Active ou non la surveillance des alarmes
Mets le GSM en mode sommeil, seul un evenement peut le reveiller
Commande led 1 locale sur la carte
Commande led 1 locale sur la carte
reMise A l'Heure en respectant ce format
Positionnement des 8 bits du MCP xxxxxxxx avec 0 ou 1


Passe en mode Debug: GSM UART2 <- direct -> QNAVIGATOR UART1
Retour au mode PIC <-> GSM2 et UART1 en espion

Commande detail


Mode Debug

En envoyant la commande "Debug<CR>", on passe en mode Debug=1
De ce faitn ce n'est plus le PIC qui gere le GSM2, mais l'utilisateur , via le clavier Terminal VBRAY.
ou l'outil QNavigator V1.5 du constructeur QUECTEL
Nota: il faut s'incrire sur le site quectel pour recuperer le logiciel.

Problemo:
Le 1er essai de QNavigator montrait que la commande reçue (emis epar le terminal) était tronquée du 1er caractere
recu ebug au lieu de Debug ou TI au lieu de ATI
Alors qu'avec VBRAY terminal .. no problemo, avec dans la fenetre Transmit : case CR=CR+LF non coché

img/t_Qnavigator_01.gif img/t_Qnavigator_04.gif
problemo: Qnavigator envoie CR + LF apres modif: arret reception si rencontre CR


Il s' est avéré que QNavigator envoit <CR><LF> et non <CR> , de ce fait <LF> genere une IT RX UART1

et donc LF est rangé dans le 1er byte du buffer1, sa ns affecter les autres bytes
Modif: Interrupt RX UART1
Rajout inhibition interrupt RCIE1_bit=0; des la reception de <CR>
et on retrouve alors un fonctionnement OK de QNavigator.
Tant qu'on ne recoit pas une commande "Normal<CR>" , on reste dans la boucle de surveillance Reception UART1
La commande recue est alors directement renvoyée sur UART2 , reliée au GSM
La reponse GSM est recopiée sur UART1 espion.
Sur retour via cd "Normal<CR>, on recupere la boucle principale du programme
avec ,à nouveau, le PIC gerant le Tout
Un evenement telle qu'une temperature >30°C genere bien un encoi SMS d'alarme

Exmple d'echanges avec QNavigator :
sans modifier le Hardware Clicker2 GSM2
En mode Debug=1
Le message "Attente clavier " n'est rafraichi que toutes les 10 boucles(20 sec)



Last SOFTWARE
Liste des fichiers du Projet MikroC
Chargeur :
18F87J50_GSM2...rev_160625.hex
Source :
18F87J50_GSM2_rev 25 juin 2016




Ameliorations possibles :

Rajouter un 2em MCP23017 ou un PCF8574 pour renvoyer l'info "Retour d'ordre " , 8 entrées recopiant l'etat des sorties commandées.

+1 sortie discordance. et en cas de desaccord .. signaler la DISCORDANCE d'etat .. (principe appliqué en automatisme PLC)

A voir : usage d'un petit 12F1840 au lieu du GROS 18F87J50 ...pour piloter le tout
A suivre : 1 Nokia LCD+ PCF8754 = Nokia I2C brut

Autres liens utiles
-
Elektor Labs

img/t_Proto_GSM2_Click_18F87J50_1606.gif
Prototype ( sans sle MCP23017) juin 2016 SMS reçu si temperature > seuil 30°C




ATTENTION :


Parrallelement à ce projet GSM2 et un autre Projet concomitent GPS
J'ai commandé un Tracker GSM/GPRS/GPS (TK102?) pour moins de 25e€
et utilisé ma carte SIM "free" du GSM2 pour le tester ce tracker.
en Liaison avec un Web GPS Trace Server
http://orange.gps-trace.com
et tests aussi avec d'autres server ...

Le Probleme est que entre temps j'avais fait une fausse manip sur mon Aplli GSM2
montage du GSM2-Click decalé d'une pin vers le bas , sur le support MikroBuS1
donc +3,3v relié au 0V , +5V relié au 0V mais 0V Non connnecté sur la carte GSM2

Mon appli GSM2 permettait toujours de RECEVOIR des SMS , mais
PLUS POSSIBLE D'ENVOYER UN SMS
error 69 ????
Doute sur le hardware !
-Doute sur le PIC18F87J50
-Doute sur la carte GSM2-click
-Doute sur la carte SIM ?
Actions::
- Test des E/S du PIC18F87J50 et des E/S concernée par le module GSM2 => OK , RAS
- Changement de carte SIM aupres de Free => 10e ! recue pares quelques jours.

ReTest : Idem ! pas d'envoi SMS possible
- Test de ma carte SIM sur un telephone : Envoi SMS ...OK

J'ai donc remis ma carte SIM sur le GSM2 , activé le mode debug ( par envoi SMS "Debug On")
recu par le GSM2 et aiguillage de l'UART1 vers le GSM2 (via l'UART2 )
comme si le GSM2 etait directement relié au terminal..
coté Terminal :
usage de QNAVIGATOR (de Quectel, disponible apres inscription sur leur site)
que je recommande vivement !
et envoi de commande famille TCPIP ... etc...
et store en profil 0.

Entre temps un Ticket envoyé à MikroE, me confirmait qu'il y avait peu de chance (ou malheur)
que ma carte GSM2 soit H.S.

Je sort du mode debug en envoyant "Exit" via le clavier terminal
et retombe alors sur la config PIC <-> UART2 <--> GSM2
j'envoi un SMS "Cde Led1 On"
et miracle ,il agit, allume la led et repond en envoyant le SMS "Etat Led1=1 Led2=0"
C'EST OK ! :




Conclusion de cet incident (perdu plusieurs jours !!) :
- Ne pas utiliser la meme carte SIM pour plusieurs applications
- faire gaffe à 2 fois , avant d'installer un module Click sur un mikroBus .
.. meme si dans mon cas , cela n'a pas eu d'incidence





MIXAGE GSM2 Application et avec Appli GPS 7N


Lien sur l'appli GPS
Le GSP UBlox 7N (rond noir) est raccordé sur la liaison UART1 à 19200,8,N,1
Le GPS est configuré via U-Center pour n'émmettre que les 2 trames ($GPGGA et $GPRMC)
La trame GGA arrivant APRES la trame RMC.
La trame RMC était utilisée dans l'appli GPS pour recuperer la Date et Heure (Si on n'a pas de GSM !)
avec un traitement particulier pour le decalage Horaire et Fuseau horaire=+1.

Sinon, dans la mesure ou on dispose du GSM ,
on peut , à partir d'une requete GSM , récuperer la Date et Heure .
ATTENTION :
l'Heure GPS affichée ne tient pas compte du Fuseau Horaire et du Decalage Horaire Ete/Hiver
representé ici dans la fin de trame Trame_RMC +08
via la fonction Recupe_DateHeure_GSM()

Step: 3
Lecture de date et heure (AT+CCLK?)
AT+CCLK?
+CCLK: "16/10/07,09:04:56+08"
OK
Step: 4
+CCLK: "16/10/07,09:04:56+08"
OK
HDecal= 2


8 x 0,25 Heures => +2H00 à rajouter à l'heure presnte dans la trame
il est donc 11H04M56S

La variable HDecal est initialisé au lancement du programme
On peut reactualiser le decalage, en envoyant la demande SMS "MAH"
qui refera une lecture Date et Heure et raffraichissement du decalage horaire.
Mais pour eviter de faire une requette SMS toutes les 10 secondes,
j'utilise la lecture de la date et heure du GPS ! la date est toujours OK
mais il faut réactualiser l'heure , non plus avec des calculs et test compliques,
mais en rajoutant le HDecal , fournit par le GSM
On pourrait envisager une MAH automatique , tous les jours à 00H03:00
en cas de fonctionnement permamnent 24H/24 du montage.





../common/GIF/LTC1286p.jpg

retour à l'index