Skip to content

About

Arduino HTTP & FTP client for SIM800L/SIM800 boards to perform GET and POST requests to a JSON API as well as FTP uploads.

Topics

Resources

Stars

156 stars

Watchers

11 watching

Forks

Latest commit

 

History

89 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 

Repository files navigation

Donate

Arduino SIM800L library

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

Support

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

Instalation

Download the ZIP library and then import it: Sketch -> Include Library -> Add .ZIP Library ...

Quick start!

How to do a GET request! 👍

unsigned int RX_PIN = 7;
unsigned int TX_PIN = 8;
unsigned int RST_PIN = 12;

const char BEARER[] PROGMEM = "gprs-service.com";

HTTP http(9600, RX_PIN, TX_PIN, RST_PIN);
http.connect(BEARER);

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

Serial.println(response);

http.disconnect();

How to do a POST request! 👍

unsigned int RX_PIN = 7;
unsigned int TX_PIN = 8;
unsigned int RST_PIN = 12;
const char BEARER[] PROGMEM = "gprs-service.com";

HTTP http(9600, RX_PIN, TX_PIN, RST_PIN);
http.connect(BEARER);

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

Serial.println(response);

http.disconnect();

How to do a FTP upload! 👍

unsigned int RX_PIN = 7;
unsigned int TX_PIN = 8;
unsigned int RST_PIN = 12;
const char BEARER[] PROGMEM = "gprs-service.com";
const char FTP_SERVER[] PROGMEM = "ftp.server";
const char FTP_USER[] PROGMEM = "user";
const char FTP_PASS[] PROGMEM = "pass";

FTP ftp(9600, RX_PIN, TX_PIN, RST_PIN);
ftp.putBegin(BEARER, "example.txt", FTP_SERVER, FTP_USER, FTP_PASS);
ftp.putWrite("hello!", sizeof("hello!"));
ftp.putEnd();

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

HTTP. 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).

Development

  • Lint: cppcheck --enable=all .

About

Arduino HTTP & FTP client for SIM800L/SIM800 boards to perform GET and POST requests to a JSON API as well as FTP uploads.

Topics

Resources

Stars

156 stars

Watchers

11 watching

Forks

Releases

Packages

Contributors

Languages