A lightweight Arduino library for GSM, LTE, and WiFi modules that provides a simple client interface for IoT connectivity.
TinyGSM is an Arduino library that enables communication with GSM, LTE, and WiFi modules via AT commands. It provides a unified client interface for connecting IoT devices to the internet over cellular or WiFi networks, handling data connections, SMS, and more. The library solves the complexity of interacting with diverse modem hardware by abstracting AT command sequences into simple Arduino functions.
Arduino developers and IoT hobbyists building projects that require cellular or WiFi connectivity, especially those working with resource-constrained microcontrollers and needing a lightweight, reliable library.
Developers choose TinyGSM for its broad modem support, low memory usage, and straightforward Arduino Client API, which reduces integration effort compared to writing custom AT command handlers or using heavier alternatives.
A small Arduino library for GSM modules, that just works
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Compatible with over 30 modems from major manufacturers like SIMCom, Quectel, u-blox, and ESP8266/ESP32, as detailed in the Supported modems list, reducing vendor lock-in.
Optimized for small memory usage; the WebClient example uses only 15022 bytes (46%) on Arduino Uno, leaving more space for application code, as shown in the 'TinyGSM is tiny' section.
Wraps modem AT commands into the standard Arduino Client interface, enabling easy integration with libraries like PubSubClient for MQTT and HTTPClient, mentioned in Arduino Client interface support.
Includes support for SMS, USSD, voice calls, and GPS on supported hardware, enhancing features beyond basic data connectivity, as outlined in the Features section.
UDP is not yet supported on any module, and SSL/TLS implementation is inconsistent—some modems like SIM900 and A6/A7 lack it entirely, limiting secure or real-time applications.
Functions like gprsConnect() block execution for up to several minutes in poor service areas, as noted in 'How does it work?', hindering responsive or time-sensitive code.
Modules require up to 2A for stable operation, four times a standard USB supply, leading to connectivity issues if not properly powered, as warned in the troubleshooting section.
Setup involves managing baud rates, network settings, and firmware quirks, with extensive troubleshooting for issues like broken initial configuration and SoftwareSerial problems.