Dans ce projet, nous construisons un dispositif d’appel vocal GSM ESP32 complet en utilisant la carte GeoLinker GL868. L’idée principale de ce projet est très simple. Lorsque l’on appuie sur un bouton poussoir connecté à la carte ESP32, celle-ci appellera automatiquement un numéro de téléphone fixe. De plus, si quelqu’un appelle la carte SIM à l’intérieur du module, l’appel sera automatiquement pris en charge et nous pourrons parler via le microphone et le haut-parleur connectés.
Pour ce projet, nous utilisons la carte GeoLinker GL868 car elle possède déjà un contrôleur ESP32 et un module GSM SIM868 sur la même carte. Cela rend les choses beaucoup plus faciles puisque nous n’avons pas besoin de connecter séparément un module GSM et un ESP32.
Le GL868 peut être utile pour créer des systèmes de communication simples, des dispositifs d’appel d’urgence, des systèmes d’interphonie sans fil, des systèmes de sécurité et de nombreuses autres applications basées sur GSM. La carte de développement GeoLinker GL868 dispose d’une page Wiki bien documentée où vous pouvez découvrir toutes les fonctionnalités et spécifications de la carte.
Aperçu rapide
| Paramètre | Détails |
| Tableau principal | GeoLinker GL868 (ESP32-S3 + SIM868) |
| Module GSM | SIM868 (2G GSM/GPRS + GPS) |
| Déclenchement | Bouton poussoir sur GPIO 4 (actif-LOW, pull-up interne) |
| Sortie audio | Haut-parleur 4Ω sur broches SP+ / SP– (max 1 W à 8Ω) |
| Entrée audio | Microphone à condensateur sur broches M+ / M– |
| Alimentation | Batterie Li-ion 3,7 V via connecteur JST |
| Type de carte SIM | SIM GSM 2G avec forfait voix actif |
| Réponse automatique | Oui – détecte RING, envoie la commande ATA |
| Niveau de difficulté | Débutant à intermédiaire |
Introduction à GeoLinker GL868
Le GeoLinker GL868_ESP32 est une carte de développement open source prête pour la production qui combine un modem GSM ESP32-S3 et SIM868, avec suivi GPS, détection de mouvement, gestion de la batterie, connectivité sans fil (Bluetooth/Wifi) et surveillance cellulaire (GPRS/SMS/Appels) sur un PCB compact. Il cible le suivi des actifs, la surveillance des véhicules, les systèmes antivol et toute application IoT nécessitant une surveillance ou un contrôle cellulaire, ainsi qu’un suivi de localisation. Ce type de projet de système de communication basé sur GSM est très pratique et peut servir de base à un dispositif d’appel d’urgence basé sur GSM pour les soins aux personnes âgées, à un dispositif d’appel sans fil utilisant le GSM pour les alertes industrielles ou à un composeur automatique GSM pour les systèmes d’alarme.
La carte est livrée avec une carte SIM Airtel M2M IoT (en option) et prend facilement en charge le tableau de bord de suivi GPS GeoLinker, vous permettant de suivre et de visualiser les données sur une carte dès la sortie de la boîte pour un prototypage rapide. Pour un développement ultérieur, vous pouvez utiliser la bibliothèque Arduino open source GL868_ESP32, qui fournit une API non bloquante de haut niveau pour le suivi GPS, le téléchargement de données HTTP, le traitement des commandes SMS, la gestion des appels vocaux et la gestion de l’alimentation en veille profonde. Pour vous donner une meilleure compréhension de la carte de développement Geolinker GL868, voici un autre tutoriel sur la façon dont nous pouvons utiliser le GL868 pour créer un système IVR.
Comment fonctionne le système d’appel GSM ESP32
Le fonctionnement de ce projet est très simple. Nous avons un bouton connecté au GPIO 4 du GL868. Une fois ce bouton enfoncé, la condition if dans loop() devient vraie et envoie des commandes AT pour appeler le numéro configuré. Le modem GSM SIM868 prend en charge l’appel et donne une sortie audio via les broches SP+ et SP- auxquelles nous avons connecté notre haut-parleur 4Ω. Le micro à condensateur est connecté aux broches M+ et M-, qui fournissent une entrée audio au modem.
Pour les appels entrants, le modem envoie un message « RING » à l’ESP32, qui continue de se répéter jusqu’à ce que l’appel soit automatiquement répondu par la commande AT envoyée par l’ESP32 au modem. L’appel continue jusqu’à ce qu’il soit déconnecté de l’autre extrémité. Les appels entrants et sortants fonctionnent normalement, car nous appelons normalement avec des téléphones portables. Nous pouvons également ajouter plusieurs boutons, qui redirigent l’appel vers différents points finaux/utilisateurs.
Ce tutoriel vous présente le modem GSM SIM868. Si vous souhaitez commencer avec une autre version, consultez notre projet d’appels et de SMS basés sur GSM utilisant SIM900A. Si vous devez utiliser un Raspberry Pi dans votre projet tout en profitant d’un module GSM, voici notre projet Appel et SMS utilisant Raspberry Pi et module GSM, dans lequel nous avons montré comment un module GSM peut être intégré à un RPI4.
Principales caractéristiques de la carte GeoLinker GL868
* Utilisant une solution à double processeur (ESP32-S3 et SIM868) sur un seul PCB avec des communications Wi-Fi/Bluetooth et GSM 2G (compatible 3G).
* Prise en charge audio bidirectionnelle via entrée/sortie analogique (SP+/SP-) et numérique (M+/M-).
* Gestion de la charge de la batterie lithium-ion via un circuit de charge intégré connecté au JST à 3,7 volts.
* Suivi de localisation GPS en temps réel avec capacité d’antenne externe via un module GPS interne ou des antennes « hors carte » connectées au connecteur d’antenne GPS.
* Intégration avec le tableau de bord cloud GEOlink pour visualiser les données GPS et se connecter à d’autres systèmes IoT.
* Une bibliothèque Arduino est fournie avec des interfaces API plus avancées pour les différentes fonctionnalités prises en charge (c’est-à-dire audio, SMS, GPS, alimentation), facilitant ainsi la programmation.
* L’un des plus petits facteurs de forme matérielle disponibles, ce qui en fait une option intéressante pour les applications basées sur des boîtiers et les produits portables/wearables.
Schéma de circuit
Vous trouverez ci-dessous le schéma de circuit détaillé de ce projet.

Connexions de circuits en un coup d’œil
Le schéma de circuit est très simple.
» Haut-parleur (4Ω) : La borne positive du haut-parleur 4Ω doit être connectée à SP+ et la borne négative doit être connectée à SP- sur la carte à puce GL868 (carte de développement GSM). La sortie haut-parleur de la carte GL868 fournit jusqu’à 1 Watt de puissance lorsqu’elle est connectée à un haut-parleur 8Ω ; cependant, un haut-parleur 4Ω connecté à la même sortie fonctionnera toujours tant qu’il recevra une puissance de sortie inférieure à la puissance maximale de l’appareil.
»Microphone à condensateur : Doit être connecté à la carte comme suit : Fil positif connecté à M+, Fil négatif (et fil blindé) connecté à M-. Ceci est utilisé pour l’entrée audio directement sur le SIM868.
» Bouton poussoir : Connectez une branche d’un bouton-poussoir au GPIO 4 sur la carte GL868 et l’autre branche à GND sur la carte GL868. Il existe une résistance de rappel interne pour les broches GPIO dans le micrologiciel qui maintient GPIO 4 HIGH jusqu’à ce que la broche GPIO soit reliée à GND par le bouton.
» Antennes : Lorsque vous fixez les antennes GSM et GPS, faites-le à l’aide d’une vis ou d’un encliquetage sur leurs connecteurs respectifs sur l’appareil en position verticale pour maximiser la force du signal de chaque antenne.
» Batterie: Utilisez une batterie de 3,7 volts (Li-ion) connectée au connecteur JST situé sur la face inférieure de la carte à puce GL868 ; il est important de ne pas effectuer de tests d’appels sortants en utilisant UNIQUEMENT l’alimentation USB.

Ci-dessus se trouve la véritable configuration matérielle du projet, conservée dans un boîtier imprimé en 3D. Le boîtier est conçu pour maintenir correctement la batterie et les fils de manière bien organisée.
Commandes SIM868 AT utilisées dans ce projet
Le modem SIM868 est contrôlé par l’ESP32 via Serial2 à l’aide des commandes Hayes AT standard, ce qui permet la communication entre les deux appareils. Une liste complète des commandes AT utilisées dans ce projet est fournie dans le tableau ci-dessous. Il est recommandé d’utiliser ce tableau comme référence pour tous vos projets de communication vocale GSM utilisant l’ESP32.
| Commande AT | But | Plage de valeurs |
| AT+CHFA=1 | Sélectionnez le canal audio 1 (haut-parleur/micro externe sur les broches GPIO) | 0 = interne, 1 = externe |
| AT+CLVL=90 | Régler le niveau de volume du haut-parleur | 0 (muet) – 100 (maximum) |
| AT+CMIC=0,12 | Régler le gain du microphone pour le canal 0 | 0-15 |
| AT+FMMUTE=0 | Réactiver le chemin audio | 0 = réactiver le son, 1 = muet |
| AT+CÔTÉ=1 | Activer l’effet local (entendre votre propre retour vocal) | 0 = désactivé, 1 = activé |
| ATD+[number]; | Composez un appel vocal (le point-virgule garantit la voix, pas les données) | Format international avec code pays |
| ATA | Répondre à un appel entrant (réponse automatique sur détection de RING) | — |
| ATH | Raccrocher/mettre fin à l’appel en cours | — |
Composants requis
Vous trouverez ci-dessous la liste des composants requis pour construire ce projet avec leur description.
| S Non | Composant | Description |
| 1. | Carte de développement GeoLinker GL868 | Le contrôleur principal du projet |
| 2. | Haut-parleur 4Ω | Pour obtenir la sortie audio |
| 3. | Micro à condensateur | Pour donner une entrée audio à l’appareil |
| 4. | Pile au lithium 3,7 V | Pour alimenter l’ensemble du projet |
| 5. | Bouton poussoir | Pour déclencher un appel en appuyant sur un bouton |
| 6. | Carte SIM | Carte SIM 2G pour la connectivité |
| 7. | Fils de connexion | Pour faire tout le circuit |
Explication du code
Vous trouverez ci-dessous une ventilation détaillée de l’ensemble du code, afin que vous puissiez découvrir les fonctionnalités que ce code offre à notre projet.
Section Configuration
#define DEVICE_ID "GL868_ESP32"
#define API_KEY "cd_har_270526_LUOh63"
#define BUTTON_PIN 4
const char* phoneNumber = "+919744041489";
DEVICE_ID et API_KEY : Informations d’identification pour se connecter au service cloud GeoLinker. Vous pouvez donner au DEVICE_ID un nom que vous pouvez facilement identifier. Ici, j’ai donné GL868_ESP32.
Pour API_KEY, vous devez accéder à Circuit Digest Cloud > Connexion/Créer un compte > Clés API > Copiez la clé API affichée dans le tableau de bord et collez-la ici
BOUTON_PIN 4 : Broche GPIO où le bouton poussoir est connecté (avec une résistance pull-up)
Numéro de téléphone: Le numéro d’urgence qui sera composé lorsque le bouton sera enfoncé
Variables globales
bool lastButtonState = HIGH;
bool callActive = false;
bool audioConfigured = false;
état du dernier bouton : Suit l’état précédent du bouton pour détecter la pression sur le bouton.
appelActif : Permet de savoir si un appel est actuellement en cours.
AudioConfiguré : Empêche les commandes de configuration audio de s’exécuter à plusieurs reprises pendant un appel actif (empêche une boucle de commande sans fin). Cela aide à éviter les sorties audio cassées.
Fonction de configuration
void setup() {
Serial.begin(115200);
pinMode(BUTTON_PIN, INPUT_PULLUP);
Serial.println("GL868 Voice System");
// Initialize library
GeoLinker.begin(DEVICE_ID, API_KEY);
// Power modem
Serial.println("Powering modem...");
if (!GeoLinker.modem.powerOn()) {
Serial.println("Modem power failed!");
while (1) delay(1000);
}
Serial.println("Waiting for network...");
while (!GeoLinker.gsm.waitNetworkRegistration(10000)) {
Serial.println("Searching network...");
}
Serial.println("Network connected");
// Global Audio Setup
Serial2.println("AT+CHFA=1");
delay(100);
Serial2.println("AT+CLVL=90");
delay(100);
Serial2.println("AT+CMIC=0,12");
delay(100);
Serial2.println("AT+FMMUTE=0");
delay(100);
Serial2.println("AT+SIDET=1");
delay(100);
Serial.println("Ready");
}
Cette section commence par Série à un débit de 115 200 bauds. Ensuite, il se connecte au cloud GeoLinker avec les informations d’identification de l’appareil, allume le modem GSM, attend jusqu’à 10 secondes pour l’enregistrement du réseau cellulaire et configure le chemin audio pour les appels vocaux (haut-parleur + micro).
Fonction de boucle
void loop() {
// ======================================
// BUTTON PRESS -> VOICE CALL
// ======================================
bool currentState = digitalRead(BUTTON_PIN);
if (lastButtonState == HIGH && currentState == LOW && !callActive) {
delay(50);
if (digitalRead(BUTTON_PIN) == LOW) {
Serial.println("Executing Voice Dial Sequence...");
Serial2.println("AT+CHFA=1");
delay(100);
Serial2.println("AT+CLVL=90");
delay(100);
Serial2.println("AT+CMIC=0,12");
delay(100);
Serial2.println("AT+FMMUTE=0");
delay(100);
// Start voice call
Serial2.print("ATD");
Serial2.print(phoneNumber);
Serial2.println(";");
Serial.print("Dialing: ATD");
Serial.print(phoneNumber);
Serial.println(";");
callActive = true;
audioConfigured = false; // Reset for the new outgoing call
}
}
lastButtonState = currentState;
La boucle commence par détecter les pressions sur les boutons de haut en bas et vérifie si un appel est actuellement en cours. Il envoie ensuite les commandes GSM AT standard au modem GSM pour composer un numéro.
Gestion des réponses du modem
while (Serial2.available()) {
String response = Serial2.readStringUntil('\n');
response.trim();
// ... process responses
}
Lisez les réponses aux commandes AT du modem GSM.
Détection d’appel entrant :
if (response.indexOf("RING") >= 0) {
Serial2.println("ATA"); // Answer the call
callActive = true;
audioConfigured = false;
}
Lorsque le modem envoie « RING », il répond automatiquement avec la commande ATA.
Appel connecté – Configuration audio
if (callActive && !audioConfigured &&
(response.indexOf("MO CONNECTED") >= 0 || response.indexOf("CONNECT") >= 0)) {
audioConfigured = true; // Lock to prevent re-running
// Re-apply audio AT commands
}
Exécuté une fois lorsque l’appel se connecte (empêche le spam des commandes). Réapplique la configuration audio une fois l’appel établi – cela permet d’éviter des interruptions audio, car si nous vérifions l’appel connecté plusieurs fois en boucle, la sortie audio sera interrompue.
Appel déconnecté
if (response.indexOf("NO CARRIER") >= 0 ||
response.indexOf("BUSY") >= 0 ||
response.indexOf("NO ANSWER") >= 0) {
callActive = false;
audioConfigured = false;
}
Réinitialise les indicateurs à la fin de l’appel (pour n’importe quelle raison : déconnexion, occupé, pas de réponse)
Mise à jour du cloud GeoLinker
if (!callActive) {
GeoLinker.update();
}
Exécute uniquement les mises à jour du cloud lorsqu’aucun appel n’est actif (empêche les interférences avec les données vocales)
Vitrine de projets en direct : communication GSM et surveillance GPS
Regardez ci-dessous la démonstration fonctionnelle complète du dispositif d’appel vocal GSM ESP32, comprenant un appel sortant déclenché par le bouton-poussoir et un appel entrant avec réponse automatique :

Guide de dépannage
| Problème | Cause probable | Solution |
| L’appel sortant échoue, mais l’appel entrant fonctionne | Courant insuffisant pendant la numérotation – réinitialisation du modem | Utilisez une batterie Li-ion 3,7 V entièrement chargée via JST. Ne comptez pas uniquement sur l’alimentation USB Type-C pour les appels sortants. |
| La pression sur un bouton ne déclenche pas d’appel | Mauvaise broche GPIO configurée dans le code | Vérifiez que le bouton est connecté au GPIO 4 et que BUTTON_PIN 4 correspond au croquis. Utilisez un multimètre pour confirmer que la broche indique FAIBLE lorsqu’elle est enfoncée. |
| Le moniteur série ne montre rien | Mauvais débit en bauds ou USB CDC au démarrage désactivé | Réglez le moniteur série sur 115 200 bauds. Dans Arduino IDE → Outils, activez USB CDC On Boot pour la carte ESP32-S3. |
| L’appel est interrompu quelques secondes après la connexion | Signal 2G faible ou crédit SIM insuffisant | Vérifiez la force du signal 2G avec AT+CSQ (17+ est bon). Rechargez les crédits d’appels vocaux sur la carte SIM. |
| Le son est interrompu, saccadé ou silencieux | Commandes audio AT exécutées en boucle pendant un appel | Assurez-vous que l’indicateur audioConfigured est coché afin que les commandes ne s’exécutent qu’une seule fois par connexion d’appel. Revérifiez le câblage du haut-parleur/micro vers SP+/SP– et M+/M–. |
| Le modem ne s’allume pas | Pas de batterie connectée ou batterie déchargée | Connectez et chargez le Li-ion 3,7 V via le connecteur JST avant de mettre la carte sous tension. |
| Inscription au réseau bloquée sur « Recherche » | SIM non compatible 2G, ou pas de couverture 2G dans la zone | Confirmez que la carte SIM prend en charge le GSM 2G (le SIM868 ne prend pas en charge la 4G/LTE). Déplacez-vous vers une zone avec une couverture 2G ou essayez un autre opérateur. |
Conclusion
Dans ce projet, nous avons construit avec succès un dispositif d’appel vocal GSM ESP32 complet et un système de réponse automatique GSM à l’aide de la carte de développement GeoLinker GL868. Avec un simple bouton-poussoir, l’appareil peut appeler automatiquement un numéro de téléphone prédéfini, tandis que les appels entrants reçoivent une réponse automatique, qui peut être modifiée dans le code. Nous avons appris à interfacer un haut-parleur externe et un micro à la carte de développement Geolinked GL868.
Puisque l’ESP32 et le SIM868 étaient disponibles sur la même carte, nous n’avons pas eu à passer trop de temps à câbler l’ensemble du circuit. Ce projet peut être étendu à un dispositif d’appel d’urgence, un dispositif d’appel d’urgence basé sur GSM pour les personnes âgées, un interphone sans fil, un composeur automatique GSM pour les systèmes d’alarme ou une unité d’alerte cellulaire pour l’automatisation industrielle. Il constitue également un bon point de départ pour apprendre la communication vocale GSM à l’aide de l’ESP32. Si vous avez apprécié ce projet, vous pouvez explorer des versions et des didacticiels plus intéressants basés sur ESP32 à partir de notre collection de projets ESP32. Si vous souhaitez explorer davantage de projets basés sur l’IoT, nous disposons d’une collection dédiée de projets IOT qui utilisent une large gamme de capteurs et de microcontrôleurs.
Référentiel GitHub du périphérique d’appel GSM ESP32
Ce référentiel GitHub contient le code source et la documentation d’un appareil d’appel GSM basé sur ESP32 capable de passer et de gérer des appels téléphoniques via un module GSM. Il sert de référence pratique pour la mise en œuvre de fonctionnalités de communication et de téléphonie sans fil dans les applications IoT.
Foire aux questions
⇥ Dois-je débrancher la batterie et utiliser des modules de charge externes ?
Le GL868 dispose d’un chargeur de batterie intégré. Il n’est donc pas nécessaire de charger la batterie en externe. Branchez simplement le Type-C ; cela chargera la batterie.
⇥ Puis-je modifier le numéro de destination ?
Absolument, le numéro de destination peut être modifié en mettant à jour la variable « phoneNumber »
⇥ Combien de boutons puis-je ajouter ?
Vous pouvez ajouter plusieurs boutons en définissant plus de broches GPIO et en ajoutant une logique de détection de pression similaire pour chacune. Chaque bouton peut composer des numéros différents.
⇥ Que se passe-t-il si j’appuie sur le bouton pendant un appel actif ?
Rien ne se passe, car le code vérifie !callActive et la pression sur le bouton est ignorée pendant un appel pour éviter les recompositions accidentelles.
⇥ Qu’est-ce qu’un appareil d’appel GSM basé sur ESP32 ?
Un dispositif d’appel GSM basé sur ESP32 est une combinaison d’un microcontrôleur ESP32 et d’un modem GSM (comme le SIM868). L’ESP32 envoie des commandes AT au modem GSM pour tenter de passer des appels téléphoniques ou de répondre automatiquement aux appels entrants. Par conséquent, un appareil d’appel basé sur GSM fonctionnera bien pour les applications qui doivent envoyer des alertes d’urgence ou pour les applications de type interphone.
⇥ Comment fonctionne la fonction de réponse automatique dans un système de réponse automatique GSM ?
Lorsque le SIM868 détecte un appel entrant, il renvoie une chaîne RING à l’ESP32 (via UART) de manière répétée. Le micrologiciel ESP32 écoute en permanence cette réponse RING et envoie immédiatement la commande ATA (Answer) AT au modem GSM pour répondre à l’appel sans aucune interaction de l’utilisateur. De cette façon, la configuration de l’audio bidirectionnel (pouvoir entendre et être entendu) s’effectue automatiquement dès que le modem GSM reçoit un appel téléphonique entrant.
⇥ Qu’est-ce que la carte de développement GeoLinker GL868 et pourquoi est-elle utilisée ?
La carte de développement GeoLinker GL868 est une carte de développement open source prête pour la production qui intègre un microcontrôleur ESP32-S3 et un modem GSM/GPS SIM868 dans un seul PCB. Il est conçu pour éliminer le câblage compliqué entre le microcontrôleur ESP32 et le modem GSM/GPS SIM868. En outre, la carte de développement GeoLinker GL868 est livrée avec une carte SIM Airtel M2M en option à utiliser avec la carte et comprend une bibliothèque Arduino facile à utiliser pour passer et recevoir des appels vocaux, des SMS, un GPS et télécharger des données dans le cloud.
Projets de communication GSM basés sur l’IoT

Appel et message utilisant le module Arduino et GSM
Nous allons donc ici construire un téléphone mobile simple utilisant Arduino, dans lequel un module GSM est utilisé pour passer des appels, répondre aux appels, envoyer des SMS et lire des SMS, et ce téléphone Arduino dispose également d’un micro et d’un haut-parleur pour parler sur ce téléphone. Ce projet servira également d’interface appropriée du module GSM avec Arduino, avec tout le code nécessaire pour faire fonctionner les fonctions de base de n’importe quel téléphone.


Retrouvez l’histoire de Raspberry Pi dans cette vidéo :

-
Module GSM GPRS avec antenne sma pour transmission de données sans fil SMS IoT pour Arduino pour STM32 pour Raspberry Pi Homematic CCU3 pour capteur Lora 5 V 3,3 V (A)
