Una pequeña biblioteca Arduino para módulos GSM que simplemente funciona.
Si te gusta TinyGSM , ¡dale una estrella o bifurca y contribuye!
También puedes unirte a nuestro chat:
Esta biblioteca es fácil de integrar con muchos bocetos que utilizan Ethernet o WiFi. Se proporcionan ejemplos de PubSubClient (MQTT) , Blynk , cliente HTTP y descarga de archivos .
El ejemplo completo de WebClient para Arduino Uno (a través de Software Serial) requiere pocos recursos:
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 biblioteca Arduino GSM utiliza 15868 bytes (49%) de Flash y 1113 bytes (54%) de RAM en un escenario similar. TinyGSM también extrae datos suavemente del módem (siempre que sea posible), por lo que puede funcionar con muy poca RAM. Ahora tienes más espacio para tus experimentos.
¡Mire este repositorio para obtener nuevas actualizaciones! Y por supuesto, las aportaciones son bienvenidas ;)
Conexiones de datos
USSD
SMS
Llamadas de voz
Ubicación
Créditos
AT
usando este bocetoEl flujo general de su código debería ser:
#define TINY_GSM_MODEM_SIM800
#include
TinyGsm modem(SerialAT);
TinyGsmClient client(modem);
o TinyGsmClientSecure client(modem);
(en módulos compatibles)TinyGsmClient clientX(modem, 0);
, TinyGsmClient clientY(modem, 1);
, etc. oTinyGsmClientSecure clientX(modem, 0);
, TinyGsmClientSecure clientY(modem, 1);
, etcmodem.init()
o modem.restart()
modem.simUnlock(GSM_PIN)
modem.networkConnect(wifiSSID, wifiPass)
modem.waitForNetwork(600000L)
modem.gprsConnect(apn, gprsUser, gprsPass)
(o simplemente modem.gprsConnect(apn)
)client.connect(server, port)
Muchos módems GSM, WiFi y módulos de radio se pueden controlar enviando comandos AT a través de serie. TinyGSM sabe qué comandos enviar y cómo manejar las respuestas AT, y lo integra en la interfaz estándar de Cliente Arduino.
Esta biblioteca está "bloqueando" todas sus comunicaciones. Dependiendo de la función, su código puede estar bloqueado durante mucho tiempo esperando las respuestas del módulo. Aparte de lo obvio (es decir, waitForNetwork()
), varias otras funciones pueden bloquear su código durante varios minutos . Las funciones gprsConnect()
y client.connect()
suelen bloquear durante más tiempo, especialmente en regiones con peores servicios. El apagado y reinicio del módulo también puede ser bastante lento.
Esta biblioteca no admite ningún tipo de "hardware" o controles de nivel de pin para los módulos. Si necesita encender su módulo o restablecerlo usando algún tipo de secuencia de pines Alto/Bajo/Alto, debe escribir esas funciones usted mismo.
Para flujos de datos GPRS, esta biblioteca proporciona la interfaz estándar Arduino Client. Para funciones adicionales, consulte este boceto de ejemplo.
La mayoría de los módulos requieren hasta 2 A para conectarse correctamente a la red. ¡Esto es 4 veces lo que proporcionará un USB "estándar"! ¡Mejorar el suministro de energía realmente resuelve los problemas de estabilidad en muchos casos!
La mayoría de los módulos admiten algún tipo de función de "baudio automático" en la que el módulo intentará ajustar su velocidad en baudios para que coincida con lo que está recibiendo. TinyGSM también implementa su propia función de transmisión automática ( TinyGsmAutoBaud(SerialAT, GSM_AUTOBAUD_MIN, GSM_AUTOBAUD_MAX);
). Si bien son muy útiles al conectarse inicialmente a un módulo y realizar pruebas, NO deben usarse en ningún tipo de código de producción. Una vez que haya establecido comunicación con el módulo, configure la velocidad en baudios usando la función setBaud(#)
y manténgala.
A veces (especialmente si jugaste con comandos AT), la configuración de tu módulo puede dejar de ser válida. Esto puede resultar en problemas como:
Para devolver el módulo a los valores predeterminados de fábrica , utilice este boceto: Archivo -> Ejemplos -> TinyGSM -> herramientas -> FactoryReset
En algunos casos, es posible que deba configurar un APN inicial para conectarse a la red celular. Intente utilizar la función gprsConnect(APN)
para configurar un APN inicial si no puede registrarse en la red. Es posible que necesites configurar el APN nuevamente después de registrarte. (En la mayoría de los casos, debes configurar el APN después del registro).
La primera conexión con una nueva tarjeta SIM, un nuevo módulo o en una nueva ubicación/torre puede tardar MUCHO tiempo, hasta 15 minutos o incluso más, especialmente si la calidad de la señal no es excelente. Si es su primera conexión, es posible que deba ajustar sus tiempos de espera y posiblemente ir a almorzar mientras espera.
Si puede abrir una conexión TCP pero la cierra antes de recibir datos, intente agregar un encabezado de mantenimiento de conexión a su solicitud. Algunos módulos (es decir, el SIM7000 en modo SSL) descartarán inmediatamente cualquier dato no leído cuando el servidor remoto cierre la conexión, a veces sin siquiera dar una notificación de que los datos llegaron en primer lugar. Cuando utilice MQTT, para mantener una conexión continua es posible que necesite reducir su intervalo de mantenimiento (PINGREQ/PINGRESP).
Utilice este boceto para ayudar a diagnosticar problemas de conexión GPRS y de tarjeta SIM: Archivo -> Ejemplos -> TinyGSM -> herramientas -> Diagnóstico
Si el diagnóstico falla, descomente esta línea para generar algunos comentarios de depuración de la biblioteca:
# define TINY_GSM_DEBUG SerialMon
En cualquier código personalizado, se debe definir TINY_GSM_DEBUG
antes de incluir la biblioteca TinyGSM.
Si no puede ver ningún error obvio en la depuración de la biblioteca, use StreamDebugger para copiar toda la secuencia del comando AT al puerto serie principal. En el ejemplo de diagnóstico, simplemente descomente la línea:
# define DUMP_AT_COMMANDS
En el código personalizado, puedes agregar este fragmento:
# ifdef DUMP_AT_COMMANDS
# include < StreamDebugger.h >
StreamDebugger debugger (SerialAT, SerialMon);
TinyGsm modem (debugger);
# else
TinyGsm modem (SerialAT);
# endif
Esta biblioteca abre una conexión TCP (o SSL) a un servidor. En el modelo OSI, esa es la capa 4 (o 5 para SSL). HTTP (GET/POST), MQTT y la mayoría de las otras funciones que probablemente quieras usar se encuentran en la capa 7. Esto significa que necesitas codificar manualmente la capa superior o usar otra biblioteca (como HTTPClient o PubSubClient) para hacerlo. es para ti. Herramientas como PostMan también muestran la capa 7, no la capa 4/5 como TinyGSM. Si se conecta exitosamente a un servidor, pero obtiene respuestas de "solicitud incorrecta" (o ninguna respuesta), el problema probablemente sea su formato. A continuación se ofrecen algunos consejos para escribir la capa 7 (particularmente la solicitud HTTP) manualmente:
client.print("...")
, o client.write(buf, #)
, o incluso client.write(String("..."))
, no client.write("...")
para ayudar a evitar que el texto se envíe un carácter a la vez (estilo de máquina de escribir)client.print(String( " GET " ) + resource + " HTTP/1.1 rn " );
client.print( " GET " );
client.print(resource);
client.println( " HTTP/1.1 " )
client.print("....rnrn")
o agregue un client.println()
adicional Cuando se utiliza SoftwareSerial
(en Uno, Nano, etc.), es posible que la velocidad 115200 no funcione. Intente seleccionar 57600 , 38400 o incluso menos: el que funcione mejor para usted. En algunos casos, 9600 es inestable, pero el uso de 38400 ayuda, etc. Asegúrese de configurar los pines TX/RX correctos en el boceto. Tenga en cuenta que no todos los pines Arduino pueden servir como pines TX o RX. Lea más sobre las opciones y configuración de SoftSerial aquí y aquí.
Cuando utilice ESP32 HardwareSerial
, es posible que necesite especificar parámetros adicionales para la llamada .begin()
. Consulte este comentario.
No podrá compilar los ejemplos HttpClient o HttpsClient con ESP32 core 1.0.2. Actualice a 1.0.3, baje a la versión 1.0.1 o utilice el ejemplo de WebClient.
Cuando utilice placas basadas en SAMD21, es posible que necesite utilizar un puerto sercom uart en lugar de Serial1
. Consulte este comentario.
Resulta que Goouuu Tech IOT-GA6 no es lo mismo que AI-Thinker A6 . Desafortunadamente, IOT-GA6 aún no es compatible de fábrica. Hay algunos indicios de que el firmware del IOT-GA6 puede actualizarse para que coincida con el A6... Consulte este tema.
Algunas versiones, pero no todas, del SIM800 admiten SSL. Tener soporte SSL depende de la versión del firmware y del módulo individual. Los usuarios han tenido distintos niveles de éxito en el uso de SSL en el SIM800 incluso con firmware aparentemente idéntico. Si necesita SSL y no parece funcionar en su SIM800, pruebe con un módulo diferente o intente usar una biblioteca SSL secundaria.
Hay dos versiones del código SIM7000, una que usa TINY_GSM_MODEM_SIM7000
y otra con TINY_GSM_MODEM_SIM7000SSL
. La versión TINY_GSM_MODEM_SIM7000
no admite SSL pero admite hasta 8 conexiones simultáneas. La versión TINY_GSM_MODEM_SIM7000SSL
admite conexiones SSL y no seguras con hasta 2 conexiones simultáneas. Entonces ¿por qué hay dos versiones? La versión "SSL" utiliza los comandos de "aplicación" del SIM7000 mientras que la otra utiliza el "kit de herramientas TCP-IP". Dependiendo de su región/firmware, es posible que uno u otro no funcione para usted. Pruebe ambos y use el que sea más estable. Si no necesita SSL, le recomiendo comenzar con TINY_GSM_MODEM_SIM7000
.
Este proyecto se publica bajo la licencia pública general reducida GNU (LGPL-3.0)