Ce module est équippé du ESP32-S3 dual Core LX7 240 MHz
Il possède une connexion pour carte SD et un support de batterie (18650).

Au départ le module SIMCOM A7670 était programmé avec le firmware 2374B03SIM767XM5A_M mais celui-i préssente un problème avec les connexions mqtt.
Le nouveau firmware 2374B05V01SIM767XM5A à donc été intallé.
La procédure d’installation est documentée, il faut faire cela avec une machine windows pour laquelle le logiciel est disponible. Il faut faire attention de bien répertorier les port USB, la mise a àjour se faisant via un port connecté au module SimCom (donc pas l’USB du S3).
Un fois faite, la commande AT+SIMCOMATI donne
Manufacturer: SIMCOM INCORPORATED
Model: SIM7670G-MNGV
Revision: 2374B05SIM767XM5A_M
SIM767XM5_B05V01_241206
IMEI: 864643060182807
Le S3 est programmé avec un firmware qui donne accès aux commandes AT (AT passthrough ?) et dans l’IDE arduino est configuré comme ESP32 S3 Dev module.
Activation de la carte Sim (Orange prepaid)
AT+CPIN=XXXX (XXXX = le code Pin de la carte)
Ensuite il faut vérifier que la carte se connecte au réseau.
Qualité du signal LTE.
AT+CSQ
+CSQ: 19,0
Service CS (network registration)
AT+CREG?
+CREG=0,1
0 -> disable network registration unsolicited result code. 1 -> registered, home network, si 5 alors le module est en roaming les autres valeurs indiquent un problème
Service PS (EPS network registration status/Packet service)
AT+CEREG?
+CEREG= 0,1
0 -> disable network registration unsolicited result code, 1 1 -> registered, home network (5 registered roaming)
Les deux commandes peuvent être envoyées simultanément
AT+CREG?;+CEREG?
+CREG: 0,1
+CEREG: 0,1
Information du service AT+CPSI? +CPSI: LTE,Online,206-10,0x3390,102442517,62,EUTRAN-BAND3,1525,4,4,-11,-106,-94,3
Configuration du contexte PDP (Packet Data Protocol)
Celle-ci se fait via la commande CGDCONT J’ai définit deux contextes le premier en IPV4 le second en dual V4 et V6, ceci via AT+CGDCONT=1,“IP”,“mworld.be” et AT+CGDCONT=2,“IPV4V6”,“DUAL”
AT+CGDCONT?
+CGDCONT: 1,"IP","mworld.be","10.75.197.154",,,,,,,,,,,
+CGDCONT: 2,"IPV4V6","DUAL"
Vérification que le context est bien actif
AT+CGACT?
+CGACT: 1,1
+CGACT: 2,0
contexte cid, State (1 actif, 0 inactif)
Pour activer -> AT+CGACT=state,cid
Après on remarque l’attribution des adresses IP aux contextes.
AT+CGACT?;+CGDCONT?
+CGACT: 1,1
+CGACT: 2,1
+CGDCONT: 1,"IP","mworld.be","10.75.197.154",,,,,,,,,,,
+CGDCONT: 2,"IPV4V6","DUAL","10.220.69.19",,,,,,,,,,,
Configuration mqtt:
AT+CMQTTSTART active le service mqtt
AT+CMQTTACCQ active un client
AT+CMQTTACCQ=index-client,“client id”, serv type (0 TCP, 1 SSL/TLS)
Ensuite il ne rete plus qu’a connecter le serveur via le client (le server va recevoir l’identification du client).
AT+CMQTTSTART
AT+CMQTTACCQ=0,"S3-A7670G",0
AT+CMQTTCONNECT=0,"tcp://www.serveur:port",20,1,"user","pword"
et sur le serveur (mosquitto) on recoit la connexion
1765558619: New connection from 94.109.94.248:25746 on port 8883.
1765558619: New client connected from 94.109.94.248:25746 as S3-A7670G (p1, c1, k20, u'user').
On remarque bien que l’identifiant du client est celui indiqué dans la commande AT+CMQTTACCQ. Attention que mqtt ne permet qu’une connexion par identifiant client, il pourrait être nécessaire de générer un ideentifiant client aléatoire pour éviter de bloquer la connexion (voir la configuration du serveur).
Les adresse IP ne sont pas les mêmes car le segment 10.x.x.x n’est pas sur internet on passe donc par un gateway.
Un whois donnant:
inetnum: 94.108.128.0 - 94.111.255.255
netname: KPNBE
descr: KPN Belgium IPv4 dynamic - Consumer
country: BE
admin-c: KPNB-RIPE
tech-c: KPNB-RIPE
status: ASSIGNED PA
mnt-by: MNT-AS47377
created: 2008-11-03T12:22:10Z
last-modified: 2009-01-14T09:28:11Z
source: RIPE
Le smartphone est maintenant connecté via mqtt au serveur mosquitto via la 4G.
Le code utilisé pour le T-Sim 7670E a été réutilisé dans le S3 avec l’IDE arduino.
Celui-ci doit être configuré comme suit.

La partie GPS du module doit être configuré correctement (notemment pour alimenter l’antenne active GPS), ceci est fait, dans le code d’example, via la librairie tinyGSM
while (!modem.enableGPS(MODEM_GPS_ENABLE_GPIO, MODEM_GPS_ENABLE_LEVEL)) {
Serial.print(".");
}
Serial.println();
Serial.println("GPS Enabled");
De fait, en pilotant le module directement, la partie GPS ne fonctionnait pas, l’antenne n’étant pas alimentée, une commande AT est prévue pour gérer le GPIO.
Dans utilities.h
#define MODEM_GPS_ENABLE_GPIO (4)
#define MODEM_GPS_ENABLE_LEVEL (1)
Et donc les commandes AT sont
AT+CGDRT=4,1 configuration du GPIO pin 4 en sortie AT+CGSETV=4,1 Set GPIO 4 à 1 (alimentation de l’antenne)
Une fois implémenté dans le code, le GPS démarre correctement.
L’antenne active a été branchée et placée en extérieur, le GS verouille beaucoup plus rapidement.
La routine Haversine pour le calcul de la distance inter mesure montre aussi une meilleure stabilité.