V.O. 21 juillet 2015
rev 27/04/2024


GSM2 click Application avec Clicker2 PIC18F87J50

-Montage de test
-
Presentation
-1er Essai envoi SMS
-Problemes rencontrés
-
Details software (MikroC)
-modif harware sur GSM2-Click
-3em solution
-4em solution retenue (Hardware + Softw )
-Mixage Applications GSM2 et GPS Ublox
-Tests rev. 2024





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

En version déporté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

Hardware :
MikroE Clicker2 18F47J50
MikroE 938 connect_shield , support avec borniers.
MikroE Click GSM2 Quectel M95

Analog inputs:
RA1 (EA1) Potentiometre (simule une info LDDR)
RA2 EA2 Mesure Température via LM35DZ 0 à100°C

Entrees:

BP1 sur RD7
BP2 sur RH3
BP reset

Sorties :

LD1 sur RD4
LD2 sur RE4

UART1 ..vers Terminal YAT via Prolific TTL/USB
RC6 TX --> RX fil blanc cordon Prolific
RC7 RX <-- TX fil vert cordon Prolific
UART2 :
relié en interne à GSM2
img/t_GSM2_click_Montage_de_test_150821.gif

hardware

banc de test




Présentation du module GSM

Le module Micro-click , emplacement mikrobus #1:

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

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

img/t_clicker2_Carte_Pinout.gif ../common/mikroE_938_connect_shield.gif
Alimentation 5V sur VSys 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","+33612345678","","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","+33612345678","","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=+33612345678)
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","+33612345678","","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","+33612345678","","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="+33612345678"
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

Directory: C:\_MikroC\_MesProjets_MikroC\_18F87J50_GSM2_NEO-6M
Projet: 18F87J50_GSM2_GPS_Ublox_NEO-6M_UART2_UART1_LCD_I2C1_MCP23017_WOE_2016.mcppi
Source : 18F87J50_GSM2_GPS_NEO-6M_UART2_UART1_LCD_I2C1_WOE_w_h_161016.c
UART1 19200,8,N,1 RX <-- GPS NEO_6M et TX ->Display terminal
Envoi Trames GPS toutes les 6000mS
UART2 19200,8,N,1 pour GSM2-Click QUECTEL M95
Usage de SLEEP mode 0 et 2 ,via Cde ligne DTR
FOSC = 48000
Phones Numbers :
"+33621334715"
"+33614133837"

ADC Init
Init I2C1 400Khz
1ere Lecture ADC RA1 et ADC RA2 : 736 78
Verifier la présence de resistances Pull UP sur SCL et SDA
Check presence LCD2119 at @ 0x74
Check Device @ 116 on I2C1 HARDW



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.





Tests ...Version 2024

Nota : Les derniers tests remontant à Janvier 2023 ..étaient OK
Tests actueles : SANS GPS, ni I2C ( donc ni LCD, ni MCP23017)
n'ayant plus de LCD I2C dispo, capable de travailler sous 3,3V
.

Les 1er tests sont négatifs, Reset intempestifs, impossible d'envoyer un SMS ..
avec le même software de Janvier 2023 ...
conditions : alim cordon USB + batterie 3,4V 3000mAH connectée ..
recherche au niveau soft ...???
L'init complete aborte en differents endroits SANS ALLER au bout..

L'inspecteur Bourrel est là pour m'aider !
Bon Dieu, mais c'est bien SUR !

Rappel :
(voir M95_Hardware_Design_V1.3.pdf)

The power supply is one of the key issues in designing GSM terminals. Because of the 577us radio burst
in GSM every 4.615ms,
power supply must be able to deliver high current peaks in a burst period. During
these peaks, drops on the supply voltage must not exceed minimum working voltage of module.
For the M95 module, the max current consumption
could reach to 1.6A during a transmit burst. It will
cause a large voltage drop on the VBAT. In order to ensure stable operation of the module, it is
recommended that the max voltage drop during the transmit burst does not exceed 400mV.

The power supply range of the module is 3.3V to 4.6V. Make sure that the input voltage will never drop
below 3.3V even in a transmitting burst. If the power voltage drops below 3.3V, the module could turn off
automatically. For better power performance, it is recommended to place a 100uF tantalum capacitor with
low ESR (ESR=0.7O) and ceramic capacitor 100nF, 33pF and 10pF near the VBAT pin
The power supply is capable of providing the sufficient current up to 2A at least.

Je connecte alors une alim 5V 2A
Alim FAIRWAY Model WN10B-050 , Inp: 100-240VAC , Out : 5V 2.0Amp
sur le bornier ,coté droit, en 1 :+5V et en 2 :GND
Nota : borne 1 sérigraphie repérée Vsys et non +5V !

Sans alimentation externe 5V 2A,
j'en conclus aussi ,que ma batterie Li-Ion 3,4V 3000mAH ne suffit pas à alimenter la carte GSM2 !
Batterie mesurée à vide : 3.96V .. donc serait insuffisament chargée ! (mesurée 4,23V, chargée à fond , en 2019)
GSM au repos : Mesure 4.1V sur la batterie, donc en charge par la carte GSM ...
ou alors ..ma batterie , agée de plusieurs années ..2018 ! présente maintenant une résistance interne trop grande ...

(Avec alim externe 5V 2A) La séquence d'init complete (19 pas) se deroule alors SANS probleme
et l'envoi et reception SMS est à nouveau... OK ..

Alarme Temperature et envoi Cde Led 2 ON

Alarme Intrusion dététecté par EA1>512

Envoi Cde Help et retour d'infos

nota : le sigle degré ° n'est pas reconnu sur mon mobile !


Application :

Log sur YAT Terminal du demarrage application et init complete GSM :
18F87J50_Clicker2__GSM2_Click_QUECKTEL_M95_Lancement_Application_et_Init_2024-0424.txt


Envoi d'une commande depuis Mobile Startrail 7
********************
Cde Led2 On
*******************
confirmation de la commande par renvoi du retour d'ordre
log sur terminal YAT coté GSM2

38 EA1= 443; EA2= 59;TempF= 19.01deg C;BP1=1; BP2=1; LD1=0; LD2=0;Dialog=1; SOM=0; STAT=1; DTR=0
Read message NON LUS (AT+CMGL="REC UNREAD")
+CMTI: "SM",1
AT+CMGL="REC UNREAD"
+CMGL: 1,"REC UNREAD","+33612345678","","2024/04/23 16:16:36+08"
Cde Led2 On
OK

Retour d'ordre cde Leds
Contenu du SMS à envoyer
Retour Led1=0 Led2=1

Compose Numero AT+CMGS="+33612345678"
Pret pour envoi Msg Tx
>
Retour Led1=0 Led2=1

+CMGS: 142
OK
Envoi SMS OK :

Efface tous les SMS reçus (AT+QMGDA="DEL INBOX")
39 EA1= 443; EA2= 59;TempF= 19.01deg C;BP1=1; BP2=1; LD1=0;
LD2=1;Dialog=1; SOM=0; STAT=1; DTR=0

---------------------------------------------------------------------------

Envoi d'une commande depuis Mobile Startrail 7
*********************
Data On Demand
*********************
Au lieu de recevoir un Message SMS suite à un évenement,
possibilité de demander explicitement un Etat via cette commande.





Modifs 2024
Rajout commande : Batterie?




nota :
Attention , piège à ions avec l'écriture semi-automatique sur mobile :
exemple commande Batterie?
le mobile rajoute un espace apres le choix du mot mot batterie , on envoie donc une mauvaise commande Batterie ?
il faut revenir en arriere , supprimer ?,espace et le e, remettre e? pour que la commande soit correcte !

3.3.4. Monitor Power Supply
To monitor the supply voltage, you can use the ?AT+CBC? command which includes three parameters:
charging status, remaining battery capacity and voltage value (in mV). It returns the 0-100 percent of
battery capacity and actual value measured between VBAT and GND. The voltage is automatically measured in period of 5s. The displayed voltage (in mV) is averaged over the last measuring period
before the ?AT+CBC? command is executed.

Probleme pouvant passer inaperçu !

4320 mV ??

J'ai de gros doute sur les valeurs transmises, dont celle ci : 4320mV ... car invariable ! Avec alim Externe 5V !
(de plus 4320mv = batterie chargée > maxima, la batterie ne delivre aucun courant (mesuré)

Un demarrage Application ,Sans alim Externe, uniquement avec la batterie permet de voir
Monitor Power Supply( AT+CBC)
AT+CBC
+CBC: 0,100,
4272 ......... ?? Mesure multimetre 4,06V
OK
mais erreur systematique si demande envoi SMS !!
Nota 1 :
le GSM maintient la charge de la batterie , si alimenté par USB ou Alim Externe
Sans alim.5V externe, ni alim USB, je mesure 4,12V sur ma batterie à vide (déconnectée)
et 4.06V si la batterie est connectée (...sans alim externe)
mais erreur systematique si reception ou envoi SMS !!
Nota 2:
Le GSM ne peut pas fonctionner seulement avec MA batterie,
il lui faut IMPERATIVEMENT l'alim.externe 5V DC 2Amp (mini.)
conclusion ..dans ce cas précis , à quoi sert la batterie ? à rien !

Test sur ma batterie Li-ION 3000mAH
4.18V à vide ,
3.75V sur 22 ohms ..0.170 Amps
3.50V sur 15 ohms..0.233 Amps
2.74V sur 4.7 ohms ...0.57Amps

ma conclusion : batterie TRES Fatiqguée .. à remplaçer!
Note 3:
Sans l'alim Externe 5V, je ne peux pas avoir la mesure Batterie ,
car le SMS envoyé demande etat Batterie? ..n'est pas lu .

-------------------------------------------------------------------------------------------

Rajout commande One Shoot pour envoi d'un seul SMS
si alarme permanente EA1 et/ou Alarme Temperature
.... avec intervalle de 10 minutes
evite la multiplication d'envoi de SMS ..car la boucle de fond tourne à 10sec..



malgré que l'info Intrusion (EA1>512) persiste ,
le SMS n'est pas renvoyé à nouveau ..il faudra attendre 10minutes pour reverifier ..
sinon on empilerait les SMS chaque 10 sec...(intervalle de la boucle principale du programme)






SOFTWARE (MikroC):

Projet : 18F87J50_GSM2_UART2_UART1_Temperat_WOE_2024-04.mcppi
Code Explorer : 18F87J50_Clicker2_GSM2_Quecktel_M95_Code_Explorer_2024.jpg
Source principal : _18F87J50_GSM2_UART2_UART1_WOE_LM35DZ_2024-0424.MC.c
chargeur : 18F87J50_GSM2_UART2_UART1_Temperat_WOE_2024-0424.hex
Config : 18F87J50_GSM2_UART2_UART1_Temperat_WOE_2024-04.cfg
Schem : P18F87J50_PLL_8_to_48MHz.cfgsch
Annexex : _18F87J50_GSM2_annexes.h.2024.MC.zip

liste des fichiers annexes (MikroC)

"Cliker2_Hardware.h" // definition sepecifique à la carte Clicker2 PIC18F87J50
"GSM2-click_Hardware.h" // definition sepecifique au module GSM2
"Timer0_routines.h" // init Timer0
"Timer1_routines.h" // init Timer1
"String_routines.h" // autres fonctions String hors librairie MikroC
"UART1_UART2_Routines.h" // routine de gestion UART1 et UART2 + interruptions (y compris Timer0)
"Interrupts_Routines.h" // UART1 UART2 Timer0 RB0
"Interrupts_routines-sans_GPS.h"
"MCP23017_I2C1.h" // gestion circuit expanser 16 E/S en I2C
"LCD2119_I2C1_routines.h" // affichage LCD 2x16 en I2C1

à suivre ...
une version XC8 ?
..ou avec un 18F27K42 et SIM800 ?



../common/GIF/LTC1286p.jpg

retour à l'index