Sommaire
Présentation du module GSM SIMCOM A7670E
Le module SIMCOM A7670E est un module de communication 4G LTE qui intègre également une fonctionnalité GPS, ce qui en fait un choix polyvalent pour les projets connectés et de géolocalisation. Dans ce tutoriel, nous allons apprendre à l’utiliser avec une carte Arduino afin de mettre en œuvre des fonctions essentielles comme l’envoi et la réception de SMS, ainsi que l’acquisition de données GPS pour suivre la position d’un dispositif.
- Puce A7670E
- Antenne GPS
- Antenne GSM
- Indicateur LED GPS
- Connecteur Micro USB
- Connecteur pour antenne GPS
- Connecteur pour carte Micro SIM
- Indicateur LED GSM
- Connecteur pour antenne GSM
Description des broches :
- S : Sleep (Mode Sommeil)
- G : Ground (Masse)
- V : VCC (+5V à +10V)
- K : PowerKey (Extinction du module)
- T : TX (Emission de données)
- R : RX (Réception de données)
- G : Ground (Masse)
Montage
Dans cette section, nous listons le matériel nécessaire et présentons le câblage entre une carte ESP32et la carte SIMCOM A7670E.
Matériel nécessaire
- 1 Carte ESP32 WROOM-32
- 1 carte SIMCOM A7670E
- 1 câble USB Type-C
- Câbles de connexion M-M 10 cm
- 1 Breadboard 400 points
- 1 Bloc d’alimentation 5V/2A
- 1 Connecteur Jack 2.1 x 5.5 MM
- 1 Carte SIM au format Nano SIM
Tableau récapitulatif
Le tableau ci-dessous indique la correspondance entre les broches numériques de l’ ESP32 WROOM-32 et le module SIMCOM A7670E
| ESP32 WROOM | Module A7670E | LED 5 MM | 5V/2A |
|---|---|---|---|
| D5 | T | ||
| D15 | R | ||
| D18 | Anode + (Patte longue) | ||
| GND | G | Cathode – (Patte courte) | – |
| V | + |
Mise en route du module A7670E
Branchez les antennes GSM et GPS sur les connecteurs dédiés. Dans ce tutoriel, une carte Nano SIM du réseau ORANGE est utilisée.
À la mise sous tension, l’indicateur LED GSM s’allume d’abord de manière fixe. Après environ 3 secondes, il se met à clignoter à un rythme d’environ une fois par seconde : cela correspond à la phase d’initialisation et de recherche du réseau.
Il faut ensuite patienter une dizaine de secondes pour que le module A7670E puisse se connecter au réseau GSM, à condition que la couverture réseau soit suffisante.
Il est important de noter qu’il n’y a pas de différence réellement perceptible dans la fréquence de clignotement de la LED entre la phase de recherche de réseau et celle où le module A7670E est effectivement connecté. La LED continue de clignoter de manière similaire tout au long de l’exploitation du module 4G LTE A7670E, ce qui peut prêter à confusion.
C’est pourquoi nous recommandons de prévoir un délai d’au moins une vingtaine de secondes afin de garantir que le module A7670E ait bien le temps de s’enregistrer correctement sur le réseau GSM.
Dans nos programmes Arduino, un délai de 20 secondes a été volontairement ajouté pour couvrir ce temps de connexion. Il est également possible d’alimenter le module A7670E en premier et d’attendre qu’il se connecte avant de mettre sous tension la carte Arduino. Dans ce cas, ce délai peut être réduit, voire supprimé, dans le code Arduino.
Programmation Arduino du module A7670E (Arduino Mega 2560)
Nous allons configurer et programmer le module SIMCOM A7670E boutons avec un ESP32 WROOM-32 pour réaliser plusieurs applications interactives :
- Envoi de SMS : Le module A7670E envoi un SMS à un numéro de téléphone mobile.
- Commande par SMS simple : L’utilisateur pilote une LED par SMS via le module A7670E.
- Commande par SMS avec filtrage de numéro : Seul les utilisateurs autorisés peuvent piloter la LED via le A7670E
- GPS 1 : Coordonnées GPS et Lien Google MAPS affichés dans le moniteur série.
- GPS 2 : Coordonnées GPS + lien Google Maps affichés dans le moniteur série Arduino + envoi par SMS.
Librairies
TinyGPSPlus.h (nécéssaire uniquement pour le GPS)
Envoi de SMS
Ce code Arduino permet à la carte ESP32 d’envoyer un SMS via le A7670E :
#include
HardwareSerial sim(1);
// Broches UART
#define RXD2 5
#define TXD2 15
void sendAT(String cmd, int delayTime = 2000) {
sim.println(cmd);
delay(delayTime);
while (sim.available()) {
Serial.write(sim.read());
}
}
void setup() {
Serial.begin(115200);
sim.begin(115200, SERIAL_8N1, RXD2, TXD2);
delay(3000);
Serial.println("Initialisation module GSM...");
sendAT("AT"); // Test
sendAT("AT+CPIN?"); // SIM OK ?
sendAT("AT+CSQ"); // Signal
sendAT("AT+CREG?"); // Réseau
// Mode texte SMS
sendAT("AT+CMGF=1");
// Numéro destinataire (format international)
sim.println("AT+CMGS=\"+33644757223\"");
delay(1000);
// Message
sim.print("Bonjour, ceci est un SMS envoye par ESP32");
// CTRL+Z pour envoyer
sim.write(26);
Serial.println("SMS envoyé !");
}
void loop() {
}
Le résultat attendu
Commande par SMS simple
Le code Arduino suivant permet de piloter de piloter la LED intégrée de la carte ESP32 WROOM grâce à 2 commandes envoyées par SMS au module A7670E :
- LED ON : Allume la LED
- LED OFF : Eteint la LED
→ La LED est reliée à la broche D2 de la carte ESP32. libre à vous de modifier le port de commande pour y connecter un module externe (LED 5mm, relais, servomoteur, etc…) .
#include
HardwareSerial sim(1);
#define RXD2 5
#define TXD2 15
// LED
#define LED_PIN 18
String smsBuffer = "";
void sendAT(String cmd, int delayTime = 2000) {
sim.println(cmd);
delay(delayTime);
while (sim.available()) {
Serial.write(sim.read());
}
}
void setup() {
// LED
pinMode(LED_PIN, OUTPUT);
digitalWrite(LED_PIN, LOW);
Serial.begin(115200);
sim.begin(115200, SERIAL_8N1, RXD2, TXD2);
delay(3000);
Serial.println("Initialisation GSM...");
sendAT("AT");
sendAT("AT+CPIN?");
sendAT("AT+CSQ");
sendAT("AT+CREG?");
// Mode texte
sendAT("AT+CMGF=1");
// Notif automatique des SMS reçus
sendAT("AT+CNMI=2,2,0,0,0");
Serial.println("Prêt à recevoir des SMS...");
}
void loop() {
while (sim.available()) {
char c = sim.read();
Serial.write(c);
smsBuffer += c;
}
// Détection d'un SMS
if (smsBuffer.indexOf("+CMT:") != -1) {
Serial.println("\n--- NOUVEAU SMS ---");
// Affichage brut
Serial.println(smsBuffer);
// Ici tu peux traiter le message
traiterSMS(smsBuffer);
smsBuffer = "";
}
}
// Fonction pour traiter le SMS
void traiterSMS(String sms) {
if (sms.indexOf("LED ON") != -1) {
Serial.println("Commande: LED ON");
digitalWrite(LED_PIN, HIGH);
}
if (sms.indexOf("LED OFF") != -1) {
Serial.println("Commande: LED OFF");
digitalWrite(LED_PIN, LOW);
}
}
Commande par SMS avec filtrage de numéro
Le code Arduino ci-dessous permet de piloter une LED connectée à la broche D18 de la carte ESP32 WROOM via les commandes suivantes :
- LED ON : Allumage de la LED
- LED OFF : Extinction de la LED
- STATUS : Etat de la LED (ON ou OFF)
Le code permet de filtrer les numéros de sorte que seuls les numéros autorisés puissent commander la LED :
#include
HardwareSerial sim(1);
#define RXD2 5
#define TXD2 15
// LED
#define LED_PIN 18
// Numéro autorisé
String authorizedNumber = "644757223";
String smsBuffer = "";
// Fonction commandes AT
void sendAT(String cmd, int delayTime = 2000) {
sim.println(cmd);
delay(delayTime);
while (sim.available()) {
Serial.write(sim.read());
}
}
// Fonction envoi SMS
void sendSMS(String number, String text) {
Serial.println("Envoi SMS...");
sim.print("AT+CMGS=\"");
sim.print(number);
sim.println("\"");
delay(1000);
sim.print(text);
delay(500);
sim.write(26); // CTRL+Z
delay(5000);
Serial.println("SMS envoye !");
}
void setup() {
// LED
pinMode(LED_PIN, OUTPUT);
digitalWrite(LED_PIN, LOW);
Serial.begin(115200);
sim.begin(115200, SERIAL_8N1, RXD2, TXD2);
delay(5000);
Serial.println("Initialisation GSM...");
sendAT("AT");
sendAT("ATE0");
sendAT("AT+CPIN?");
sendAT("AT+CSQ");
sendAT("AT+CREG?");
// Mode texte SMS
sendAT("AT+CMGF=1");
// Réception SMS directe
sendAT("AT+CNMI=2,2,0,0,0");
Serial.println("Pret a recevoir des SMS...");
}
void loop() {
while (sim.available()) {
char c = sim.read();
Serial.write(c);
smsBuffer += c;
}
// SMS reçu
if (smsBuffer.indexOf("+CMT:") != -1) {
delay(500);
while (sim.available()) {
char c = sim.read();
Serial.write(c);
smsBuffer += c;
}
Serial.println("\n--- NOUVEAU SMS ---");
Serial.println(smsBuffer);
traiterSMS(smsBuffer);
smsBuffer = "";
}
}
// Traitement SMS
void traiterSMS(String sms) {
sms.toUpperCase();
// Vérification numéro autorisé
if (sms.indexOf(authorizedNumber) == -1) {
Serial.println("Numero NON autorise");
return;
}
Serial.println("Numero autorise");
// LED ON
if (sms.indexOf("LED ON") != -1) {
Serial.println("Commande: LED ON");
digitalWrite(LED_PIN, HIGH);
sendSMS("+33644757223", "LED ALLUMEE");
}
// LED OFF
else if (sms.indexOf("LED OFF") != -1) {
Serial.println("Commande: LED OFF");
digitalWrite(LED_PIN, LOW);
sendSMS("+33644757223", "LED ETEINTE");
}
// STATUS
else if (sms.indexOf("STATUS") != -1) {
String etat;
if (digitalRead(LED_PIN)) {
etat = "LED ON";
} else {
etat = "LED OFF";
}
sendSMS("+33644757223", "STATUS: " + etat);
}
// Commande inconnue
else {
sendSMS("+33644757223", "Commande inconnue");
}
}
Le résultat attendu
En cas de numéro non autorisé, le message suivant s’affiche dans le moniteur série :
Utilisation du GPS A7670E
Lors de l’utilisation du module A7670E en mode GPS, l’indicateur LED GPS doit s’allumer en Bleu :
L’acquisition des données GPS dépend fortement de l’environnement dans lequel se trouve le module A7670E. Il est important d’être dans un environnement dégagé ou dans un bâtiment permettant une bonne réception du signal, sinon de privilégier une utilisation en extérieur afin d’obtenir une meilleure précision et une acquisition plus fiable.
Lors de l’initialisation du GPS, la récupération des coordonnées peut prendre un certain temps avant d’être pleinement opérationnelle, généralement entre 20 secondes et 2 minutes.
Coordonnées GPS et lien Google MAPS
Le programme Arduino ci-dessous permet de récupérer les coordonnées GPS via le module A7670E et de les afficher dans le moniteur série. Il fournit plusieurs informations essentielles, telles que :
- Le Nombre de satellites
- La Longitude
- La Latitude
- La Date du jour
- L’Heure
- La Vitesse
- L’Altitude
#include
#include
// Objet GPS
TinyGPSPlus gps;
// UART du A7670E
HardwareSerial sim(1);
// Broches ESP32
#define RXD2 5
#define TXD2 15
void setup() {
Serial.begin(115200);
// UART GSM/GPS
sim.begin(115200, SERIAL_8N1, RXD2, TXD2);
delay(5000);
Serial.println("Initialisation GPS...");
// Activation GPS
sim.println("AT+CGNSSPWR=1");
delay(1000);
// Envoi du flux NMEA
sim.println("AT+CGNSSTST=1");
delay(1000);
// Routage NMEA vers UART
sim.println("AT+CGNSSPORTSWITCH=0,1");
delay(1000);
Serial.println("Attente FIX GPS...");
}
void loop() {
// Lecture données GPS
while (sim.available()) {
char c = sim.read();
// Debug NMEA brut
// Serial.write(c);
gps.encode(c);
}
// Position valide
if (gps.location.isUpdated()) {
Serial.println("-------- GPS --------");
Serial.print("Latitude: ");
Serial.println(gps.location.lat(), 6);
Serial.print("Longitude: ");
Serial.println(gps.location.lng(), 6);
Serial.print("Satellites: ");
Serial.println(gps.satellites.value());
Serial.print("Altitude: ");
Serial.print(gps.altitude.meters());
Serial.println(" m");
Serial.print("Vitesse: ");
Serial.print(gps.speed.kmph());
Serial.println(" km/h");
Serial.print("Date: ");
Serial.print(gps.date.day());
Serial.print("/");
Serial.print(gps.date.month());
Serial.print("/");
Serial.println(gps.date.year());
Serial.print("Heure UTC: ");
Serial.print(gps.time.hour());
Serial.print(":");
Serial.print(gps.time.minute());
Serial.print(":");
Serial.println(gps.time.second());
// Lien Google Maps
Serial.print("Google Maps: ");
Serial.print("https://maps.google.com/?q=");
Serial.print(gps.location.lat(), 6);
Serial.print(",");
Serial.println(gps.location.lng(), 6);
Serial.println("---------------------");
delay(3000);
}
// Aucun signal GPS
if (millis() > 10000 && gps.charsProcessed() < 10) {
Serial.println("Aucune donnee GPS recue");
delay(2000);
}
}
Le résultat attendu
Coordonnées GPS + lien Google Maps par SMS
Le code Arduino ci-dessous permet d’acquérir les coordonnées GPS du module A7670E (Longitude et Latitude), et de les envoyer par SMS à un utilisateur avec le lien Google Maps en prime :
#include
#include
// GPS
TinyGPSPlus gps;
// UART A7670E
HardwareSerial sim(1);
// Broches ESP32
#define RXD2 5
#define TXD2 15
// Numéro destination
String numero = "+33644757223";
// Variable anti spam
bool smsEnvoye = false;
void setup() {
Serial.begin(115200);
// UART GSM/GPS
sim.begin(115200, SERIAL_8N1, RXD2, TXD2);
delay(5000);
Serial.println("Initialisation module...");
// SMS texte
sim.println("AT+CMGF=1");
delay(1000);
// Activation GPS
sim.println("AT+CGNSSPWR=1");
delay(1000);
// Flux NMEA
sim.println("AT+CGNSSTST=1");
delay(1000);
// Routage UART
sim.println("AT+CGNSSPORTSWITCH=0,1");
delay(1000);
Serial.println("Attente FIX GPS...");
}
void loop() {
// Lecture GPS
while (sim.available()) {
char c = sim.read();
gps.encode(c);
}
// GPS valide
if (gps.location.isUpdated()) {
double lat = gps.location.lat();
double lon = gps.location.lng();
Serial.println("-------- GPS --------");
Serial.print("Latitude: ");
Serial.println(lat, 6);
Serial.print("Longitude: ");
Serial.println(lon, 6);
// Lien Google Maps
String maps =
"https://maps.google.com/?q=" +
String(lat, 6) +
"," +
String(lon, 6);
Serial.println(maps);
Serial.println("---------------------");
// Envoi SMS UNE SEULE FOIS
if (!smsEnvoye) {
String sms =
"Position GPS:\nLat: " +
String(lat, 6) +
"\nLon: " +
String(lon, 6) +
"\n" +
maps;
sendSMS(numero, sms);
smsEnvoye = true;
}
delay(3000);
}
// Pas de GPS
if (millis() > 10000 && gps.charsProcessed() < 10) {
Serial.println("Aucune donnee GPS");
delay(2000);
}
}
// Fonction envoi SMS
void sendSMS(String number, String text) {
Serial.println("Envoi SMS...");
sim.print("AT+CMGS=\"");
sim.print(number);
sim.println("\"");
delay(1000);
sim.print(text);
delay(500);
sim.write(26); // CTRL+Z
delay(5000);
Serial.println("SMS envoye !");
}
Le résultat attendu
Conclusion
Ce tutoriel vous a permis de découvrir les bases d’utilisation du module A7670E avec une carte ESP32, en mettant en œuvre des fonctionnalités concrètes et directement exploitables. Vous avez appris à envoyer et recevoir des SMS, à piloter des éléments matériels comme une LED à distance via SMS, mais aussi à exploiter le GPS intégré pour acquérir des coordonnées, les afficher et même les transmettre sous forme de lien Google Maps.
Ces différentes briques constituent une base solide pour de nombreux projets connectés. À partir de ce que vous venez de mettre en place, il est tout à fait possible d’aller plus loin en développant des systèmes de suivi de véhicules, des solutions de domotique contrôlées à distance, des dispositifs d’alerte (intrusion, coupure de courant, capteurs environnementaux), ou encore des applications industrielles de télémétrie. Le module A7670E, associé à l’ESP32, ouvre ainsi la voie à une large gamme de projets IoT autonomes, capables de communiquer et d’interagir avec leur environnement, même sans connexion Wi-Fi.
Il ne vous reste plus qu’à continuer d’explorer, tester et inventer vos propres applications… Les possibilités sont quasiment infinies !




