It is extremely handy to ship sensor knowledge to a Google Sheets spreadsheet utilizing NodeMCU firmware over the Web. This may be achieved with a Google script, and it has the benefit that it prices nothing, in contrast to many cloud storage options.

As a part of this text, we present you a easy mission to ship temperature measurements utilizing an ESP8266 and a DHT11 temperature and humidity sensor.

Customise your Google Web page

First, it is advisable to create a brand new spreadsheet. Log in to your Google Account, go to My Drive and open a clean spreadsheet.

Copy the URL key on your desk. Give your desk an intuitive title. Go to the script editor beneath the Instruments menu.

writing editor

Give your script a reputation (make it intuitive once more, particularly for those who’re engaged on a number of initiatives). Use this script and duplicate and paste it into the Google Script editor.

script editor code

Paste the URL key from the saved desk beneath the spreadsheet string of the spreadsheet.

Save the font and implement it as an software. You can find this feature within the mailing checklist. Arrange the deployment choices in order that the spreadsheet works accurately.

  1. Save the ‘Present Net Utility URL’.
  2. Save the mission model as new for all variations of the script (this may permit Google to replace any modifications you might make sooner or later).
  3. Add the next time period “I (your Gmail tackle)” within the Utility as export subject.
  4. Within the “Who has entry to the applying” subject, add the next line to “anybody, even anonymously.”

Code for establishing ESP8266 and DHT11 sensors

Here is what it is advisable to obtain when connecting the ESP8266 to the DHT11 sensor:

#contains “ESP8266WiFi.h”

#contains “DHT.h”

#outline DHTPIN 2 // to which digital pen are you linked

// pin2 to D4 on esp board

// Delete the remark within the code for the kind of DHT sensor you might be utilizing.

#outline DHTTYPE DHT11 // DHT 11

// #outline DHTTYPE DHT21 // DHT 21

// #outline DHTTYPE DHT22 // DHT 22


const char WEBSITE[] = “”; // the PushingBox API server

const String devid = “constPushingbox // System ID

const char * MY_SSID = “

const char * MY_PWD = ““;

hole setup ()


Serial.start (115200);

dht.start ();

Serial.print (“Join” + * MY_SSID);

WiFi.start (MY_SSID, MY_PWD);

Serial.println (“go in wl join”);

whereas (WiFi.standing ()! = WL_CONNECTED) // isn’t linked, .. ready to attach


delay (1000);

Serial.print (“.”);


Serial.println (“wl join”);

Serial.println (“”);

Serial.println (“Settle for credentials! Related to wifi n”);

Serial.println (“”);


void loop ()


// Let extra time move between lectures

// google pores and skin fill, to forestall you from exceeding the variety of free requests from PushingBox

delay (10000); // 10 seconds, (sampling fee versus service name quota)

float humidityData = dht.readHumidity ();

// Learn temperature as Celsius (default)

float cellData = dht.readTemperature ();

// Learn temperature as Fahrenheit (isFahrenheit = true)

float fehrData = dht.readTemperature (the place);

// Examine failed readings early (to attempt once more).

as (isnan (humidity knowledge) || isnan (celData) || isnan (fehrData))


Serial.println (“Can not learn DHT sensor!”);



// Calculate warmth index in Celsius (isFahreheit = false)

float hicData = dht.computeHeatIndex (cellData, humidityData, false);

// Calculate the warmth index in Fahrenheit (default)

float hifData = dht.computeHeatIndex (fehrData, humidityData);

// Press Serial monitor or Terminal of your chocice on 115200 Baud

Serial.print (“Humidity:”);

Serial.print (humidity knowledge);

Serial.print (“% t”);

Serial.print (“Temperature in Cell:”);

Serial.print (celData);

Serial.print (“* C”);

Serial.print (“Temperature in Fehr:”);

Serial.print (fehrData);

Serial.print (“* F t”);

Serial.print (“Warmth Index in Cell:”);

Serial.print (hicData);

Serial.print (“* C”);

Serial.print (“Warmth Index in Fireplace:”);

Serial.print (hifData);

Serial.print (“* F n”);

WiFiClient consumer; // Instantaneous WiFi object

// Launch or API service utilizing our WiFi consumer by PushingBox

as (consumer.join (WEBSITE, 80))


consumer.print (“GET / pushingbox? devid =” + devid

+ “& HumidityData =” + (string) humidity knowledge

+ “& CelData =” + (string) celData

+ “& FehrData =” + (String) fehrData

+ “& HicData =” + (string) hicData

+ “& HifData =” + (string) hifData


consumer.println (“HTTP / 1.1 ″”);

consumer.print (“Host:”);

consumer.println (WEBSITE);

consumer.println (“Consumer Agent: ESP8266 / 1.0”);

consumer.println (“connection: shut”);

consumer.println ();



Google Utility Script Pattern Code

Right here is the code it is advisable to create a readable script to switch your sensor knowledge.

GET REQUEST REQUEST: celData = data_here

HumidityDat, celData, fehrData, hicData, hifData (GScript, PushingBox and Arduino variables within the order wherein it is advisable to write them)

Operate doGet (e) {

Logger.log (JSON.stringify (e)); // that is to see the parameters

Var consequence = ‘Okay’;

Axis (e.parameter == undefined) {

End result = ‘No parameters’;


In any other case {

Var id = ‘

Var sheet = SpreadsheetApp.openById (id) .getActivesheet ();

Var newRow = sheet.getLastRow () + 1;

The place rowData = [];

// var waktu = new Date () ‘

rowData[0] = new date (); // for timestamp in column A

vir (var param in e.parameter) {

logger.log (‘in for loop, param =’ + param);

var worth = stripQuotes (e.parameter[param]);

change (parameter) {

case ‘humidity knowledge’: // parameter

rowData[1] = worth; // Worth in column B


case ‘celData’;

rowData[2] = worth;


case ‘fehrData’:

rowData[3] = worth;


case ‘hicData’:

rowData[4] = worth;


case ‘hifData’:

rowData[5] = worth;



consequence = “unsupported parameter”;


Logger.log (JSON.stringify (rowData));

Var newRange = sheet.getRange (newRow, 1, 1, rowData.size);

newRange.setValues ​​([rowData]);


Return ContentService.createTextOutput (consequence);


Operate stripQuotes (worth) [‘

Arrange PushingBox

This service acts as an middleman between your DHT sensor knowledge and Google Pages. Utilizing the PushingBox API, you possibly can change HTTP knowledge into HTTPS-encrypted knowledge that Google acknowledges.

Be aware that PushingBox limits you to 1000 requests per day. Nevertheless, it saves a number of work and experience wanted to create a customized encryption algorithm to which Google will reply.

  1. Create a PushingBox account for those who don’t have one but.
  2. Use the Gmail tackle you additionally use for the NodeMCU sensor knowledge mission.
  3. Go to My Companies.
  4. Add a brand new service with the Add service choice.
  5. Scroll right down to the final choice referred to as CustomURL. Set up your personal service!
  6. Fill within the fields that require the title, URL and technique.
  7. Choose GET as the strategy.
  8. Use the URL for the URL that begins with “ …” from the URL generated when the Google Scrip tackle was generated.
  9. Submit the service and go to My Scriptures.
  10. Enter an intuitive title and click on the Add button.
  11. Add an motion when prompted on the display.
  12. Modify the GET technique by compiling the names for every variable. This step will probably be completely different relying on what number of sensors you file and what they file.

Gear setup

If you’re utilizing a DHT sensor together with your ESP8266, it is best to cost the system with 5V as an alternative of three.3V. Decrease voltage might not provide the appropriate measurements.

Join pins 2 and D4 on the ESP8266.

Organising the software program

This setup works with the Arduino IDE, ideally a model newer than 1.6.4. It additionally signifies that you need to load some libraries in your system.

Libraries may be discovered on the following hyperlinks:

  1. hhtps: //github.comesp8266/Arduino/tree/master/libraries/ESP8266WiFi

The following step is to add the Arduino sketch and set it up on your mission and your system. There are solely three related fields that it is advisable to format and configure on your mission:

  1. Wi-Fi community.
  2. Wi-Fi password.
  3. The PushingBox identifier.

How do you are feeling about knowledge switch by NodeMCU?

There are extra methods to do that and plenty of varieties of sensors that you need to use to switch knowledge together with your ESP8266 with NodeMCU firmware on to Google Sheets or different cloud platforms.

Do you favor to jot down your personal scripts and code to personalize your initiatives, or do you search the Web for verified scripts on github and different platforms and customise from there? Tell us your favourite code and script assets and mixtures of ESP8266 and sensors within the feedback part beneath.