Home / Projects / Arduino Projects / Sending Data via SIM800L GPRS to ThingSpeak

Sending Data via SIM800L GPRS to ThingSpeak

This project demonstrates how to send data to ThingSpeak using a SIM800L breakout board. The data will be coming from a BMP085 atmospheric pressure sensor and will be using the SIM800L GPRS connection to publish this data to ThingSpeak.

Setting up ThingSpeak

First, you need to sign-up for a free account on ThingSpeak. After successfully signing-up, you will be prompted to create a channel. Here is a screenshot of the channel I created:

ThingSpeak Example Channel

Here I only have one field named Atmospheric Pressure. You can have up to 8 fields.

Once the channel is created, go to the API keys tab:

ThingSpeak API Keys

On the lower right, you have the API requests fields. Copy the URL for “Update a Channel Feed”. For example, mine is:

This is the url used to update data on the channel. The last value on the url is the value to be sent to the channel. Here it says zero.

You can paste the url above on your browser and change the last number. For example, I paste this url:

When I go see the Private View tab, the chart has now been updated:

ThingSpeak Updated Chart

Using Putty for Testing

Of course, we will not be using a browser to update the channel on ThingSpeak. We need to create HTTP requests via GPRS. But before that, we must know the correct HTTP request. For that we can simulate using Putty.

Open Putty, select Raw connection type and use api.thingspeak.com for Host Name and 80 for Port:

Putty ThingSpeak Settings

Open the session and type the following:

Press enter three times; The Putty terminal window should close itself.

After that, check the Private View tab again on ThingSpeak. The chart should now be updated:

ThingSpeak Updated Chart with Putty

The line drops from 100 to almost 0. This is because the data value written using Putty is 2.8.

Sending Data via GPRS Connection with SIM800L

Now that we’ve confirmed that the HTTP request works, we start using an Arduino and SIM800L. I will still be using Adafruit’s FONA library just like my other SIM800L articles. Also, since I’m using the BMP085, I used Adafruit’s library as detailed in my BMP085 tutorial.

Wiring Diagram

This is how I connected the Arduino, SIM800L and BMP085:

SIM800L GND 3.7V GND / Arduino GND
BMP085 VCC Arduino 3.3V
BMP085 GND Arduino GND
Arduino 5V 3.7V BAT+

Here’s the Fritzing diagram:

SIM800L ThingSpeak Fritzing Diagram

Arduino Sketch:

The sketch follows a specific sequence to be able to send data to ThingSpeak successfully. First, the SIM800L must be turned on. This is checked here:
If the SIM800L is not connected, the sketch goes to the while(1) loop and will not proceed.

Next, we check if the BMP085 is connected:

Similarly, the sketch will not continue down if there is no BMP085 connected.

Next, we must make sure the SIM800L is connected to the network. I created a loop that checks the network status until it is registered to the home network:

When the SIM800L is now connected to the home network, it’s time to turn on GPRS:

Again, this is looped to make sure that GPRS is on before proceeding.

Inside the loop() function, the pressure data is read and then converted to char array:

The dtostrf() function accepts the double number, whole number precision, fraction precision and the char array to which the converted value is stored.

Next, the pressure value is concatenated to the API URL:

To make an HTTP request, we use the HTTP_GET_start function:

The http_cmd is a char array that contains the API URL and the pressure value. Statuscode is an integer that stores the server response and length is the length of the response. I placed this function inside a loop:

The string Success! Is printed on the serial monitor when a status code of 200 is received, which is the OK status.

The project continues to send data to the ThingSpeak server unless the GPRS connection is cut off.

Here’s a video of the project:

I hope this project is useful to you! Please drop a comment below!

Check Also

SIM800L Network Test Actual Setup

SIM800L Network Test Project | Troubleshooting

I made this project because it seems a lot of people are having trouble with …


  1. Can i use SIM900A gsm module instead of sim 800L module and what are the changes which i have to do regarding this.Please reply as soon as possible

  2. please make tutorial subscribe data from io adafruit via gprs connection sim 800L please sir 🙁

  3. Thank you so much, It's been helpful.

  4. if i use SIM 800L can i still send the data to web server ??

  5. Bruno Lo Frano Machado

    Can i send more than one variable to the thingspeak? How it will works?



  6. When I put APN name, user, password, etc. for the company of SIM card?

  7. Hello there Roland. Nice tutorial. I wanted to ask how did you add the APN of your SIM card. Did you add it in the adafruit fona library. Will appreciate your response

  8. Very very useful tutorial!

  9. So this here is a typical fraud. How you send data from 5 v uart to 3.3 v uart? if you go on sim800 l datasheet you will se that it only receives 3.3 v uart communication. Its more than miracle how you achieved that.

    • Hi,

      There's no miracle actually. If you looked at my diagram, you'll see that I'm using a 3.7 V battery, so the Arduino here is not really producing 5V out of its UART.

Leave a Reply

Your email address will not be published. Required fields are marked *