Une petite bibliothèque Arduino pour les modules GSM, qui fonctionne.
Si vous aimez TinyGSM , donnez-lui une étoile, ou donnez-la et contribuez !
Vous pouvez également rejoindre notre chat :
Cette bibliothèque est facile à intégrer à de nombreux croquis utilisant Ethernet ou WiFi. Des exemples de PubSubClient (MQTT) , Blynk , HTTP Client et File Download sont fournis.
L'exemple WebClient complet pour Arduino Uno (via Software Serial) nécessite peu de ressources :
Sketch uses 15022 bytes (46%) of program storage space. Maximum is 32256 bytes.
Global variables use 574 bytes (28%) of dynamic memory, leaving 1474 bytes for local variables. Maximum is 2048 bytes.
La bibliothèque Arduino GSM utilise 15 868 octets (49 %) de Flash et 1 113 octets (54 %) de RAM dans un scénario similaire. TinyGSM extrait également doucement les données du modem (dans la mesure du possible), afin de pouvoir fonctionner avec très peu de RAM. Vous disposez désormais de plus d’espace pour vos expériences.
Regardez ce dépôt pour les nouvelles mises à jour ! Et bien sûr, les contributions sont les bienvenues ;)
Connexions de données
USSD
SMS
Appels vocaux
Emplacement
Crédits
AT
à l'aide de ce croquisLe flux général de votre code doit être :
#define TINY_GSM_MODEM_SIM800
#include
TinyGsm modem(SerialAT);
TinyGsmClient client(modem);
ou TinyGsmClientSecure client(modem);
(sur les modules supportés)TinyGsmClient clientX(modem, 0);
, TinyGsmClient clientY(modem, 1);
, etc. ouTinyGsmClientSecure clientX(modem, 0);
, TinyGsmClientSecure clientY(modem, 1);
, etcmodem.init()
ou modem.restart()
modem.simUnlock(GSM_PIN)
modem.networkConnect(wifiSSID, wifiPass)
modem.waitForNetwork(600000L)
modem.gprsConnect(apn, gprsUser, gprsPass)
(ou simplement modem.gprsConnect(apn)
)client.connect(server, port)
De nombreux modems GSM, modules WiFi et radio peuvent être contrôlés en envoyant des commandes AT via série. TinyGSM sait quelles commandes envoyer et comment gérer les réponses AT, et intègre cela dans l'interface client Arduino standard.
Cette bibliothèque « bloque » toutes ses communications. Selon la fonction, votre code peut être bloqué longtemps en attendant les réponses du module. En dehors de ce qui est évident (c'est-à-dire waitForNetwork()
), plusieurs autres fonctions peuvent bloquer votre code pendant plusieurs minutes . Les fonctions gprsConnect()
et client.connect()
bloquent généralement le plus longtemps, en particulier dans les régions de service les plus pauvres. L'arrêt et le redémarrage du module peuvent également être assez lents.
Cette bibliothèque ne prend en charge aucune sorte de contrôle « matériel » ou de niveau de broche pour les modules. Si vous devez allumer votre module ou le réinitialiser à l'aide d'une sorte de séquence de broches High/Low/High, vous devez écrire ces fonctions vous-même.
Pour les flux de données GPRS, cette bibliothèque fournit l'interface client Arduino standard. Pour des fonctions supplémentaires, veuillez vous référer à cet exemple de croquis
La plupart des modules nécessitent jusqu'à 2 A pour se connecter correctement au réseau. C'est 4x ce qu'un USB "standard" fournira ! L’amélioration de l’alimentation électrique résout effectivement les problèmes de stabilité dans de nombreux cas !
La plupart des modules prennent en charge une sorte de fonction « auto-bauding » dans laquelle le module tentera d'ajuster son débit en bauds pour qu'il corresponde à ce qu'il reçoit. TinyGSM implémente également sa propre fonction de mise en Bauding automatique ( TinyGsmAutoBaud(SerialAT, GSM_AUTOBAUD_MIN, GSM_AUTOBAUD_MAX);
). Bien que très utiles lors de la connexion initiale à un module et lors de la réalisation de tests, ceux-ci ne doivent PAS être utilisés dans aucun type de code de production. Une fois que vous avez établi la communication avec le module, définissez le débit en bauds à l'aide de la fonction setBaud(#)
et respectez ce débit.
Parfois (surtout si vous jouez avec les commandes AT), la configuration de votre module peut devenir invalide. Cela peut entraîner des problèmes tels que :
Pour remettre le module aux paramètres d'usine par défaut , utilisez ce croquis : Fichier -> Exemples -> TinyGSM -> outils -> FactoryReset
Dans certains cas, vous devrez peut-être définir un APN initial pour vous connecter au réseau cellulaire. Essayez d'utiliser la fonction gprsConnect(APN)
pour définir un APN initial si vous ne parvenez pas à vous inscrire sur le réseau. Vous devrez peut-être redéfinir l'APN après votre inscription. (Dans la plupart des cas, vous devez définir l'APN après l'enregistrement.)
La première connexion avec une nouvelle carte SIM, un nouveau module ou à un nouvel emplacement/tour peut prendre un LONG temps - jusqu'à 15 minutes ou même plus, surtout si la qualité du signal n'est pas excellente. S'il s'agit de votre première connexion, vous devrez peut-être ajuster vos temps d'attente et éventuellement aller déjeuner en attendant.
Si vous parvenez à ouvrir une connexion TCP mais que la connexion est fermée avant de recevoir des données, essayez d'ajouter un en-tête keep-alive à votre demande. Certains modules (par exemple, le SIM7000 en mode SSL) rejetteront immédiatement toutes les données non lues lorsque le serveur distant ferme la connexion - parfois sans même donner de notification indiquant que les données sont arrivées en premier lieu. Lorsque vous utilisez MQTT, pour maintenir une connexion continue, vous devrez peut-être réduire votre intervalle de maintien (PINGREQ/PINGESP).
Utilisez ce croquis pour vous aider à diagnostiquer les problèmes de carte SIM et de connexion GPRS : Fichier -> Exemples -> TinyGSM -> outils -> Diagnostics
Si les diagnostics échouent, décommentez cette ligne pour afficher des commentaires de débogage de la bibliothèque :
# define TINY_GSM_DEBUG SerialMon
Dans tout code personnalisé, TINY_GSM_DEBUG
doit être défini avant d'inclure la bibliothèque TinyGSM.
Si vous ne parvenez pas à voir d'erreurs évidentes dans le débogage de la bibliothèque, utilisez StreamDebugger pour copier l'intégralité de la séquence de commandes AT sur le port série principal. Dans l'exemple de diagnostic, décommentez simplement la ligne :
# define DUMP_AT_COMMANDS
Dans le code personnalisé, vous pouvez ajouter cet extrait :
# ifdef DUMP_AT_COMMANDS
# include < StreamDebugger.h >
StreamDebugger debugger (SerialAT, SerialMon);
TinyGsm modem (debugger);
# else
TinyGsm modem (SerialAT);
# endif
Cette bibliothèque ouvre une connexion TCP (ou SSL) à un serveur. Dans le modèle OSI, il s'agit de la couche 4 (ou 5 pour SSL). HTTP (GET/POST), MQTT et la plupart des autres fonctions que vous souhaitez probablement utiliser sont au niveau de la couche 7. Cela signifie que vous devez soit coder manuellement la couche supérieure, soit utiliser une autre bibliothèque (comme HTTPClient ou PubSubClient) pour le faire. c'est pour vous. Des outils comme PostMan affichent également la couche 7, et non la couche 4/5 comme TinyGSM. Si vous parvenez à vous connecter à un serveur, mais que vous obtenez des réponses de « mauvaise demande » (ou aucune réponse), le problème vient probablement de votre formatage. Voici quelques conseils pour écrire manuellement la couche 7 (en particulier la requête HTTP) :
client.print("...")
, ou client.write(buf, #)
, ou même client.write(String("..."))
, pas client.write("...")
pour aide à empêcher le texte d'être envoyé un caractère à la fois (style machine à écrire)client.print(String( " GET " ) + resource + " HTTP/1.1 rn " );
client.print( " GET " );
client.print(resource);
client.println( " HTTP/1.1 " )
client.print("....rnrn")
ou insérez un client.println()
supplémentaire Lors de l'utilisation SoftwareSerial
(sur Uno, Nano, etc.), la vitesse 115200 peut ne pas fonctionner. Essayez de sélectionner 57 600 , 38 400 ou même moins – celui qui vous convient le mieux. Dans certains cas, 9600 est instable, mais l'utilisation de 38400 aide, etc. Assurez-vous de définir les bonnes broches TX/RX dans le croquis. Veuillez noter que toutes les broches Arduino ne peuvent pas servir de broches TX ou RX. En savoir plus sur les options et la configuration de SoftSerial ici et ici.
Lorsque vous utilisez ESP32 HardwareSerial
, vous devrez peut-être spécifier des paramètres supplémentaires à l'appel .begin()
. Veuillez vous référer à ce commentaire.
Vous ne pourrez pas compiler les exemples HttpClient ou HttpsClient avec ESP32 core 1.0.2. Effectuez une mise à niveau vers la version 1.0.3, rétrogradez vers la version 1.0.1 ou utilisez l'exemple WebClient.
Lorsque vous utilisez des cartes basées sur SAMD21, vous devrez peut-être utiliser un port Sercom Uart au lieu de Serial1
. Veuillez vous référer à ce commentaire.
Il s'avère que Goouuu Tech IOT-GA6 n'est pas la même chose que AI-Thinker A6 . Malheureusement, IOT-GA6 n'est pas encore pris en charge dès la sortie de la boîte. Certains indices suggèrent que le micrologiciel IOT-GA6 pourrait être mis à jour pour correspondre à A6... Voir cette rubrique.
Certaines versions du SIM800, mais pas toutes, prennent en charge SSL. La prise en charge SSL dépend de la version du micrologiciel et du module individuel. Les utilisateurs ont eu différents niveaux de succès dans l'utilisation de SSL sur le SIM800, même avec un micrologiciel apparemment identique. Si vous avez besoin de SSL et qu'il ne semble pas fonctionner sur votre SIM800, essayez un autre module ou essayez d'utiliser une bibliothèque SSL secondaire.
Il existe deux versions du code SIM7000, une utilisant TINY_GSM_MODEM_SIM7000
et une autre avec TINY_GSM_MODEM_SIM7000SSL
. La version TINY_GSM_MODEM_SIM7000
ne prend pas en charge SSL mais prend en charge jusqu'à 8 connexions simultanées. La version TINY_GSM_MODEM_SIM7000SSL
prend en charge les connexions SSL et non sécurisées avec jusqu'à 2 connexions simultanées. Alors pourquoi y a-t-il deux versions ? La version « SSL » utilise les commandes « application » du SIM7000 tandis que l'autre utilise le « Toolkit TCP-IP ». Selon votre région/micrologiciel, l'un ou l'autre peut ne pas fonctionner pour vous. Essayez les deux et utilisez celui qui est le plus stable. Si vous n'avez pas besoin de SSL, je vous recommande de commencer par TINY_GSM_MODEM_SIM7000
.
Ce projet est publié sous la licence publique générale limitée GNU (LGPL-3.0)