Skip to content
Arduino library for SIM800L (SIM800) board to perform GET and POST requests to a JSON API
C++ C
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
HttpExample Update Weather station example Mar 23, 2019
Geo.cpp
Geo.h Fix Geo constructor change parent class Aug 23, 2019
Http.cpp Fix connection for non available roaming Jun 14, 2019
Http.h Reduce memory in voltage read May 26, 2019
Parser.cpp Reduce memory in voltage read May 26, 2019
Parser.h Reduce memory in voltage read May 26, 2019
Readme.md Update Readme.md Nov 26, 2018
Sim800.cpp Improve library latency by removing unnecessary delays and flushing t… Sep 30, 2018
Sim800.h Add pattern matching in order to support 2XX status codes Mar 11, 2018

Readme.md

Arduino SIM800L library

A smart HTTP library based on Seeeduino that implements the AT HTTP commands to perform GET and POST requests to a JSON API.

Support

  • Your board have to support the standard SoftwareSerial library. It doesn't work with HardwareSerial based boards for the moment.
  • The API response have to be a valid JSON.
  • The library has been tested again Arduino Uno and Arduino Nano

Instalation

Download the library and then import it.

Quick start!

Here's some code to perform a GET request! 👍

unsigned int RX_PIN = 7;
unsigned int TX_PIN = 8;
unsigned int RST_PIN = 12;
HTTP http(9600, RX_PIN, TX_PIN, RST_PIN);
http.configureBearer("your.mobile.service.provider.apn");
http.connect();

char response[256];
Result result = http.get("your.api.com", response);

Serial.println(response);

http.disconnect();

Here's some code to perform a POST request! 👍

unsigned int RX_PIN = 7;
unsigned int TX_PIN = 8;
unsigned int RST_PIN = 12;
HTTP http(9600, RX_PIN, TX_PIN, RST_PIN);
http.configureBearer("your.mobile.service.provider.apn");
http.connect();

char response[256];
Result result = http.post("your.api.com", "{\"date\":\"12345678\"}", response);

Serial.println(response);

http.disconnect();

I suggest the ArduinoJSON library for parsing the JSON response, then you can play with the values easily.

How it works?

In order to perform a request, the library follows these steps:

Configure Bearer:
  • AT+CREG? -> try until 0,1 (connected to the network)
  • AT+SAPBR=3,1,"Contype","GPRS" -> wait for OK
  • AT+SAPBR=3,1,"APN","movistar.es" -> wait for OK
  • AT+SAPBR=1,1 -> wait for OK
HTTP GET:
  • AT+HTTPINIT -> wait for OK
  • AT+HTTPPARA="CID",1 -> wait for OK
  • AT+HTTPPARA="URL","your.api.com"-> wait for OK
  • AT+HTTPSSL=0 -> wait for OK (1 when URL starts with "https://")
  • AT+HTTPACTION=0 -> wait for 200
  • AT+HTTPREAD -> read buffer and parse it
  • AT+HTTPTERM -> wait for OK
  • AT+SAPBR=0,1
HTTP POST:
  • AT+HTTPINIT -> wait for OK
  • AT+HTTPPARA="CID",1 -> wait for OK
  • AT+HTTPPARA="URL","your.api.com" -> wait for OK

For example, if we have this body: {"location_id": 238, "fill_percent": 90}

  • AT+HTTPPARA="CONTENT","application/json"
  • AT+HTTPDATA=strlen(body),10000 -> wait for DOWNLOAD, then write the body and wait 10000
  • AT+HTTPSSL=0 -> wait for OK (1 when URL starts with "https://")
  • AT+HTTPACTION=1 -> wait for ,200,
  • AT+HTTPREAD -> read buffer and parse it
  • AT+HTTPTERM -> wait for OK
  • AT+SAPBR=0,1

Future improvements

  • Support of HardwareSerial.
  • Support of more content types, not only JSON (application/json).
You can’t perform that action at this time.