New libraries: ESP8266 AT, GSM AT and GPS NMEA parsers

In the past few weeks, I was working on 3 new generic libraries, specially intended for embedded systems.

Libraries are:

  • ESP8266 AT parser version 2
  • GSM AT parser for SIMcom modules (SIM800, SIM900, etc)
  • GPS NMEA parser for parsing NMEA statements from GPS output

Each library is written in a way where user must prepare additional coding to support arhitecture where it is used. They are written in ANSII C and will work on any compiler which is in ANSII C89 standard. Below is a brief description of each library.

Each library has its own documentation page and Github repository with examples. Please take a look at reading below and check if it fits your needs.

You are welcome to report a bug, suggest a feature or ask other question. Please use official repositories for this purpose.

ESP8266 AT parser

After first version in January 2016, I decided to rewrite entire library to be more user friendy for future upgrades and to allow easier parsing without unexpected problems as that was in first version. It features less RAM usability than first library version. Other specs are:

  • Supports official AT commands software from Espressif Systems
  • Supports different platforms (written in ANSI C)
  • Supports RAM limited embedded systems
  • Event based system with callback functions. Almost none blocking functions except one which are needed
  • Supports multiple connections at the same time (TCP, UPD, SSL)
  • Supports client and/or server mode
  • Supports station and softAP mode
  • Supports ping to other server
  • Free to use
  • Documentation, reposiroty and download

GSM AT parser

GSM AT parser is a new and fresh library, build with the exactly same principle as ESP8266 AT parser. It works with SIMcom GSM modules because of their powerful features in simple low-cost modules.

  • Supports official AT commands from SIMcom modules
  • Supports RAM limited embedded systems
  • Supports CALL, SMS, GPRS, TCP/UDP CLIENT, HTTP, PHONEBOOK and others parts, which are all supported directly using AT commands
  • Supports different platforms (written in ANSI C)
  • Supports RAM limited embedded systems
  • RTOS first written with support for blocking or non-blocking (non RTOS) API function calls
  • Free to use
  • Documentation, repository and download

GPS NMEA parser

GPS NMEA parser will process standard NMEA 0183 output format from GPS devices. It features basic 4 statement parsing as well as user defined custom statements when required for other application usage.

Library is totally independent of platform, can be used on PC easily. It consist of one input function, processing function and output data structure. There is no communication dependance

  • Platform independent, easy to port
  • Written in ANSI C89
  • Parser has built-in support for 4 GPS statements
    • GPGGA: GPS fix data
    • GPGSA: GPS active satellites and dillusion of position
    • GPGSV: List of satellites in view zone
    • GPRMC: Recommended minimum specific GPS/Transit data
  • Support for custom GPS statements for user specific applications
  • Low-level layer is separated from application layer, thus allows you to add custom communication with GPS device
  • Free of charge
  • Documentation, repository and download


Owner of this site. Also electronic enthusiasts, web developer, 3D printer fan, handball player and more. Big fan of STM32F4 devices. In anticipation of the new Discovery board for STM32F7 lines.

You may also like...

Read before commenting!

Before you make a new comment, make sure you agree with things listed below:

  • - Read post to make sure if it is already posted what you are asking for,
  • - Make sure you have the latest version of libraries used in your project,
  • - Make a clean and grammatically correct written message,
  • - Report as many details as possible, including what have you done so far,
  • - Do NOT post any code here. Use Pastebin,
  • - Do NOT post any error codes here. Use Pastebin,
  • - Specify STM32Fxxx family and used Discovery/EVAL/Nucleo or custom made board,
  • - Make sure your clock is set correct for PLL,
  • - If you are using my HAL drivers, please check this post how to start.
Comment will be deleted on breaking these rules without notification!
  • radipta ady

    morning sir, I am new to stm32f4 programming. currently I am learning with stdperipheral library and now I have some school project with stm32f4 and sim800l module. what I wanna ask, is this library use a HAL library or STDperiph ? because for now I use stdperiph in all my project.
    thank you

    • It is mentioned that it is platform independent so use what you want.

      • radipta ady

        so it is okay to use it with program that builded with stdperiph library , thank for the answer. it will help me a lot

  • mert

    Hi Tilen, i want to make a basic 7segment system and i want to share data via wifi module. I’m so confused between SPWF01S and esp8266 12-f. When i use SPWF01S, i don’t need mcu but esp, i need mcu but it doesn’t matter. I have too many stm32f103 now. I already have an esp module but i don’t know how to connect pins to esp for my circuit schematic. Only rx,tx, vcc ans vss ? Briefly i need your help.

    With warmest regards.
    Mert Mutlu

    • I don’t know how your circuit schematics looks like, but in general yes, only TX, RX and VCC/GND are required.
      Recommended setup has also RTS and CTS and RST as well.

      • mert

        Thanks Tilen. I want to share details with you. Can i e mail you ? If you want.

  • Seky

    Hello, the link for GPS NMEA parser is not working. Could you please fix it? Thank you 🙂

    • Right now open my github account. There is gps library too.

      • Seky

        Got it, thank you. Every time I come by this site I am amazed by the size and level of this api.

  • An Code

    Hello, are there examples for esp8266 use?
    Thank you so much )

    • Yes.

      • An Code

        I want to use this libs with Stmf469. Is this board supported? Thank you

  • Trường BHH

    I build my app with your GIS LIB, that is running good, but some function do nothing
    1) if ((gsmRes =GSM_DATETIME_Get(&GSM,SIMDATE,1))== gsmOK) {
    sprintf(buf, “%02d.%02d.%04d n”,SIMDATE->Date.Day,SIMDATE->Date.Month,SIMDATE->Date.Year) ;
    printf(“Date GSM: %s”,buf);
    buf = empty
    I check directly by AT command from PC, with 2 command : AT+CLTS=1 for Enable time and get time = AT+CCLK?
    I got the true time
    2) When check balance by with network code *101# ; I code as this:
    if ((gsmRes = GSM_CALL_Data(&GSM,”*101#”, 1))==gsmOK)
    {printf(“Call Data Okay: rn”); } else { printf(“Call Data error: rn”); }
    But i got nothing USSD message after call, don’t t as control module by AT command.
    3) I wanna know, what mode the SIM800 work while waiting CALL or SMS (sleep or auto sleep after 5 second as AT command AT+CSCLK =1, AT+CSCLK=2 …)
    Thank you a lots

    • Ok, let me give the answer. I’ve made these AT instructions based on docs. I never managed data call, but according to docs, it should work. Maybe I missed something, I wouldn’t know.

      1. Datetime returns only data from startup on this device and not actual time. This was never working as supposed.
      2. As I mentioned above
      3. I’m not that deep into this module yet 🙂

  • Antti Mauranen


    is it possible to use the –GPS AT parser– with SW4STM32 tools. I have tried to get it to work some time now and I am stuck with it. I have SIM800H module that is functional.

    I generated FreeRTOS (tried to configure FreeRTOS same way as in the example) project by CubeMX for STM32407ZGT6 (Olimex STM32-E407 board), added libraries from the packet to the project and the code to main from example 01-EXAMPLE_CLIENT_RTOS.

    I can compile it ok and also to run it but the code gets stuck in GSM_Main_Thread already in GSM_Init. When I run it with debugger it seems to get as far as writing the first AT command.

    I have debugged the SIM800H line in and I can see that command AT is written to the line (so USART is functional) and answer OK is returned from SIM800H out line. But nothing more.

    What must I do to make it work with SW4STM32.

    Yours truly Antti

  • Ansh

    Hello, Majerle Tilen!
    I build my app with your GSM LIB with SIM800L and STM32F030C8T6.
    I want to send a single message to multiple mobile numbers. Please help me how i can implement this functionality using your library.