{"id":27018,"date":"2023-10-31T11:51:06","date_gmt":"2023-10-31T11:51:06","guid":{"rendered":"https:\/\/electropeak.com\/learn\/?p=27018"},"modified":"2023-12-09T04:33:37","modified_gmt":"2023-12-09T04:33:37","slug":"sending-data-from-esp32-or-esp8266-to-google-sheets-2-methods","status":"publish","type":"post","link":"https:\/\/electropeak.com\/learn\/sending-data-from-esp32-or-esp8266-to-google-sheets-2-methods\/","title":{"rendered":"Sending Data from ESP32 or ESP8266 to Google Sheets [2 Methods]"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"27018\" class=\"elementor elementor-27018\" data-elementor-post-type=\"post\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-d9e67b0 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"d9e67b0\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-1c7b4016\" data-id=\"1c7b4016\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-6bbbb7a1 elementor-widget elementor-widget-heading\" data-id=\"6bbbb7a1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Introduction<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ab6fd52 elementor-widget elementor-widget-text-editor\" data-id=\"ab6fd52\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Are you tired of manually logging data from your ESP32? Would you like to automate the process? Well, the good news is that it\u2019s very simple. In this article, we will cover a comprehensive, step-by-step process on how to send data from either an ESP32 or ESP8266 to Google Sheets.<br \/>Esp32 is a powerful microcontroller capable of connecting to WiFi, different devices, and sensors. To effectively collect data from other devices and manage it, you need an intelligent system that can store a significant amount of data while allowing for remote control and management. <br \/>This is where Google Sheets comes in handy as a free, popular, and above all, reliable service. This platform offers many features and interacts well with other Google Services via APIs. <\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4f7278c3 elementor-widget elementor-widget-heading\" data-id=\"4f7278c3\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Benefits of Data Logging to Google Sheets<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-68689ea elementor-widget elementor-widget-text-editor\" data-id=\"68689ea\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>By logging data to Google Sheets, you can easily access it from anywhere.<\/p><p><strong>Here are some benefits of using Google Sheets for logging ESP32 data<\/strong>:<\/p><ul><li>Simplicity (no need for external services)<\/li><li>Easy data collection and analysis using available functions<\/li><li>Accessible data from any device connected to the Internet<\/li><li>Formatted data for improved readability and analysis<\/li><\/ul><p>In this project, we use ESP32 for communicating with Google Sheets, sending and reading data.<br \/>You can also use ESP8266, as all steps remain the same.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5ea1477d elementor-widget elementor-widget-image\" data-id=\"5ea1477d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img fetchpriority=\"high\" decoding=\"async\" width=\"1140\" height=\"713\" src=\"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2023\/09\/Esp32-Google-Sheets-intro-1200x750.jpg\" class=\"attachment-large size-large wp-image-27658\" alt=\"Logging Data from ESP32 to Google Sheets\" srcset=\"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2023\/09\/Esp32-Google-Sheets-intro-600x375.jpg 600w, https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2023\/09\/Esp32-Google-Sheets-intro-768x480.jpg 768w\" sizes=\"(max-width: 1140px) 100vw, 1140px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-16264c7a elementor-widget elementor-widget-heading\" data-id=\"16264c7a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">What You Will Learn<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1b16136 elementor-widget elementor-widget-text-editor\" data-id=\"1b16136\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>\u2022 Using \u201cGoogle Sheets API\u201d and \u201cGoogle Apps Script\u201d to send data from ESP32<br \/>\u2022 Creating files in Google Sheets by ESP32<br \/>\u2022 Logging data to Google Sheets or reading it by ESP32<br \/>\u2022 Formatting text and using functions in Google Sheets<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-64ef097c elementor-widget elementor-widget-heading\" data-id=\"64ef097c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Methods of Logging Data from ESP32 to Google Sheets<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5c36e0b9 elementor-widget elementor-widget-text-editor\" data-id=\"5c36e0b9\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>There are different methods available to exchange data between ESP32 and Google Sheets. We will introduce three of them.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1532737c elementor-widget elementor-widget-heading\" data-id=\"1532737c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">1- Send ESP32 Data Using Google Apps Script<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5100f1a8 elementor-widget elementor-widget-text-editor\" data-id=\"5100f1a8\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>In this method, all you need is a Google account: Just do some simple settings and enter a \u201cscript\u201d in Google Sheets. This enables communication between a device connected to the internet (such as ESP32) and Google Sheets. <br \/><strong>The Benefit of this method<\/strong>: when loading data into your Google Sheets, you only need to open one URL with a specified format on ESP32. <\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7e0107ff elementor-widget elementor-widget-image\" data-id=\"7e0107ff\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"1140\" height=\"713\" src=\"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2023\/09\/Esp32-Google-Sheets-script-method-1200x750.jpg\" class=\"attachment-large size-large wp-image-27659\" alt=\"ESP32 to Google Sheets (Script Method)\" srcset=\"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2023\/09\/Esp32-Google-Sheets-script-method-600x375.jpg 600w, https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2023\/09\/Esp32-Google-Sheets-script-method-768x480.jpg 768w\" sizes=\"(max-width: 1140px) 100vw, 1140px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3e0c791f elementor-widget elementor-widget-heading\" data-id=\"3e0c791f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">2- Send ESP32 Data Using Google Sheets API<span style=\"letter-spacing: 0px\"><\/span><br><\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5982662f elementor-widget elementor-widget-text-editor\" data-id=\"5982662f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>With the Google Sheets API, there is no need to write additional code outside the Arduino IDE. You can simply send data from ESP32 to Google Sheets by configuring some simple settings in your Google account. <br \/>Here, since Google Sheets API is used directly, you have access to all its features, including practical functions. In addition, it\u2019s very simple to send and receive data. <br \/>This method is also more reliable compared to external services because the data is sent directly. <\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4b2013b0 elementor-widget elementor-widget-image\" data-id=\"4b2013b0\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"1140\" height=\"713\" src=\"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2023\/09\/ESP32-Google-Sheets-API-method-1200x750.jpg\" class=\"attachment-large size-large wp-image-27660\" alt=\"ESP32 to Google Sheets (API Method)\" srcset=\"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2023\/09\/ESP32-Google-Sheets-API-method-600x375.jpg 600w, https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2023\/09\/ESP32-Google-Sheets-API-method-768x480.jpg 768w\" sizes=\"(max-width: 1140px) 100vw, 1140px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-21448d6a elementor-widget elementor-widget-heading\" data-id=\"21448d6a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">3- Send ESP32 Data Using IFTTT<span style=\"letter-spacing: 0px\"><\/span><br><\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-9f26868 elementor-widget elementor-widget-text-editor\" data-id=\"9f26868\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>In the third method, ESP32 connects to a secondary web service to communicate with Google Sheets. In this service, the data sent by the microcontroller is stored in the desired Sheet. <br \/>IFTTT is one of these secondary services. The advantage of this method, compared to the other two, is that you can communicate with several web-based software at the same time. <\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-bd7ac1a elementor-widget elementor-widget-image\" data-id=\"bd7ac1a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"1140\" height=\"713\" src=\"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2023\/09\/ESP32-Google-sheets-IFTTT-method-1200x750.jpg\" class=\"attachment-large size-large wp-image-27664\" alt=\"ESP32 to Google Sheets (IFTT Method)\" srcset=\"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2023\/09\/ESP32-Google-sheets-IFTTT-method-600x375.jpg 600w, https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2023\/09\/ESP32-Google-sheets-IFTTT-method-768x480.jpg 768w\" sizes=\"(max-width: 1140px) 100vw, 1140px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4a96ab27 elementor-alert-info elementor-widget elementor-widget-alert\" data-id=\"4a96ab27\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"alert.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-alert\" role=\"alert\">\n\n\t\t\t\t\t\t<span class=\"elementor-alert-title\">Tip:<\/span>\n\t\t\t\n\t\t\t\t\t\t<span class=\"elementor-alert-description\">We will only cover two of these methods: Google Apps Script and Google Sheets API. But feel free to choose any method that suits your needs. <\/span>\n\t\t\t\n\t\t\t\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-55f30dd0 elementor-widget elementor-widget-heading\" data-id=\"55f30dd0\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Required Materials<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-86a37fe elementor-widget elementor-widget-image\" data-id=\"86a37fe\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"1140\" height=\"713\" src=\"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2023\/09\/Esp32-Google-Sheets-required-parts-1200x750.jpg\" class=\"attachment-large size-large wp-image-27668\" alt=\"\" srcset=\"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2023\/09\/Esp32-Google-Sheets-required-parts-600x375.jpg 600w, https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2023\/09\/Esp32-Google-Sheets-required-parts-768x480.jpg 768w\" sizes=\"(max-width: 1140px) 100vw, 1140px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-457eaca5 elementor-widget elementor-widget-heading\" data-id=\"457eaca5\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Hardware Components<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-715604ac elementor-widget elementor-widget-html\" data-id=\"715604ac\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"table-2\">\r\n<table width=\"100%\" class=\"zebra\">\r\n<tbody>\r\n\r\n<tr>\r\n\t<td width=\"70%\"> ESP32-WROOM**\r\n\r\n<\/td>\r\n\t<td class=\"center\" width=\"10%\">\u00d7<\/td>\r\n    <td class=\"center\" width=\"10%\">1<\/td>\r\n\t<td class=\"center\" width=\"10%\"><a href=\"https:\/\/electropeak.com\/esp32-development-board-equipped-with-wroom-32u\r\n\" target=\"_blank\"><i class=\"fa fa-shopping-cart\" style=\"\"><\/i><\/a><\/td>\r\n<\/tr>\r\n<tr>\r\n\t<td width=\"70%\"> MQ-9 Carbon Monoxide & Flammable Gas Sensor Module***\r\n<\/td>\r\n\t<td class=\"center\" width=\"10%\">\u00d7<\/td>\r\n    <td class=\"center\" width=\"10%\">1<\/td>\r\n\t<td class=\"center\" width=\"10%\"><a href=\"https:\/\/electropeak.com\/mq-9-gas-sensor-1  \r\n\" target=\"_blank\"><i class=\"fa fa-shopping-cart\" style=\"\"><\/i><\/a><\/td>\r\n<\/tr>\r\n<tr>\r\n\t<td width=\"70%\"> MCU-680 BME680 Temperature Humidity Pressure Sensor Module***\r\n\r\n<\/td>\r\n\t<td class=\"center\" width=\"10%\">\u00d7<\/td>\r\n    <td class=\"center\" width=\"10%\">1<\/td>\r\n\t<td class=\"center\" width=\"10%\"><a href=\"https:\/\/electropeak.com\/mcu-680-bme680-bosch-temperature-and-humidity-pressure-sensor\r\n\" target=\"_blank\"><i class=\"fa fa-shopping-cart\" style=\"\"><\/i><\/a><\/td>\r\n<\/tr>\r\n<tr>\r\n\t<td width=\"70%\"> Female-to-Female Jumper Wire\r\n<\/td>\r\n\t<td class=\"center\" width=\"10%\">\u00d7<\/td>\r\n    <td class=\"center\" width=\"10%\">1<\/td>\r\n\t<td class=\"center\" width=\"10%\"><a href=\"https:\/\/electropeak.com\/21cm-40p-female-to-female-jumper-wire\r\n\" target=\"_blank\"><i class=\"fa fa-shopping-cart\" style=\"\"><\/i><\/a><\/td>\r\n<\/tr>\r\n\r\n<\/tbody>\r\n<\/table>\r\n<\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-46d33fbb elementor-widget elementor-widget-text-editor\" data-id=\"46d33fbb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><strong>**<\/strong>: As mentioned, you can use all kinds of ESP32 or ESP8266 boards. <br \/><strong>***<\/strong>: In this tutorial, we have logged sensor data from MQ9 and BME680 to Google Sheets. You can use any other sensor according to your project.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-60588a76 elementor-widget elementor-widget-heading\" data-id=\"60588a76\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Software<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-295f23ff elementor-widget elementor-widget-html\" data-id=\"295f23ff\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"table-2\">\r\n<table width=\"100%\" class=\"zebra\">\r\n<tbody>\r\n\r\n<tr>\r\n\t<td width=\"90%\">Arduino IDE<\/td>\r\n\t<td class=\"center\" width=\"10%\"><a href=\"https:\/\/www.arduino.cc\/en\/Main\/Software\" target=\"_blank\"><i class=\"fa fa-info\" style=\"\"><\/i><\/a><\/td>\r\n<\/tr>\r\n\r\n\r\n<\/tbody>\r\n<\/table>\r\n<\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2ecf5548 elementor-widget elementor-widget-heading\" data-id=\"2ecf5548\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Method 1: Logging Data from ESP32 to Google Sheets using Google Sheets API<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ec4746e elementor-widget elementor-widget-heading\" data-id=\"ec4746e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Step 1: Preparing Google Sheets<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3f67325e elementor-widget elementor-widget-text-editor\" data-id=\"3f67325e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Create a \u201cService Account Private Key\u201d for yourself and enable both the \u201cGoogle Sheets API\u201d and \u201cGoogle Drive API.\u201d <br \/>First, sign in to your Google Account. <\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5bcc8005 elementor-alert-info elementor-widget elementor-widget-alert\" data-id=\"5bcc8005\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"alert.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-alert\" role=\"alert\">\n\n\t\t\t\t\t\t<span class=\"elementor-alert-title\">Tip:<\/span>\n\t\t\t\n\t\t\t\t\t\t<span class=\"elementor-alert-description\">If you plan to use your account for a long time\u2014without enabling the IP-changing software\u2014you may lose access to Google services.<br>It is recommended to regularly use IP-changing software if you plan on using it for a long time. If not possible, you can try the second method: \u201cGoogle Apps Scrip.\u201d<\/span>\n\t\t\t\n\t\t\t\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-40f8a7bd elementor-widget elementor-widget-heading\" data-id=\"40f8a7bd\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h4 class=\"elementor-heading-title elementor-size-default\">Enabling \u201cGoogle Sheets API\u201d and \u201cGoogle Drive API\u201d<\/h4>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-763ab24a elementor-widget elementor-widget-text-editor\" data-id=\"763ab24a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>To enable Google Sheets API, go to this <a href=\"https:\/\/console.cloud.google.com\/apis\/library\/sheets.googleapis.com\">link<\/a> and click on \u201cEnable.\u201d<br \/>Similarly, to enable Google Drive API, go to this <a href=\"https:\/\/console.cloud.google.com\/apis\/library\/drive.googleapis.com\">link<\/a> and click on \u201cEnable.\u201d<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-18b9f662 elementor-widget elementor-widget-heading\" data-id=\"18b9f662\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h4 class=\"elementor-heading-title elementor-size-default\">Creating a Service Account Private Key<\/h4>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-42200c61 elementor-widget elementor-widget-text-editor\" data-id=\"42200c61\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Open the<a href=\"https:\/\/console.cloud.google.com\/projectselector2\/iam-admin\/settings\"> Google Cloud Console<\/a> page and then follow the steps below: <br \/>1- Create a new project to have a Service Account.<br \/>2- Click on \u201cService Account\u201d (see the image below).<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1dbde36 elementor-widget elementor-widget-image\" data-id=\"1dbde36\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"1140\" height=\"713\" src=\"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2023\/09\/ESP32-google-Sheets-preparation-procedure1-1200x750.jpg\" class=\"attachment-large size-large wp-image-27672\" alt=\"ESP32 to Google Sheets (Preparation 1)\" srcset=\"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2023\/09\/ESP32-google-Sheets-preparation-procedure1-600x375.jpg 600w, https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2023\/09\/ESP32-google-Sheets-preparation-procedure1-768x480.jpg 768w\" sizes=\"(max-width: 1140px) 100vw, 1140px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2d0d0e69 elementor-widget elementor-widget-text-editor\" data-id=\"2d0d0e69\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>3- Click on \u201c+CREATE SERVICE ACCOUNT.\u201d<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-29b05db2 elementor-widget elementor-widget-image\" data-id=\"29b05db2\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"1140\" height=\"713\" src=\"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2023\/09\/ESP32-google-Sheets-preparation-procedure2-1200x750.jpg\" class=\"attachment-large size-large wp-image-27676\" alt=\"ESP32 to Google Sheets (Preparation 2)\" srcset=\"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2023\/09\/ESP32-google-Sheets-preparation-procedure2-600x375.jpg 600w, https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2023\/09\/ESP32-google-Sheets-preparation-procedure2-768x480.jpg 768w\" sizes=\"(max-width: 1140px) 100vw, 1140px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3c60ad1d elementor-widget elementor-widget-text-editor\" data-id=\"3c60ad1d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>4- Type in the name of the Service Account.<br \/>5- After choosing the name for Service Account, if the Service Account ID is not automatically completed or if you want to choose another name, modify it with your desired name. <br \/>6- Click on \u201cCreate and Continue.\u201d<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-22e2e162 elementor-widget elementor-widget-image\" data-id=\"22e2e162\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"1140\" height=\"713\" src=\"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2023\/09\/ESP32-google-Sheets-preparation-procedure3-1200x750.jpg\" class=\"attachment-large size-large wp-image-27680\" alt=\"ESP32 to Google Sheets (Preparation 3)\" srcset=\"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2023\/09\/ESP32-google-Sheets-preparation-procedure3-600x375.jpg 600w, https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2023\/09\/ESP32-google-Sheets-preparation-procedure3-768x480.jpg 768w\" sizes=\"(max-width: 1140px) 100vw, 1140px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-70270633 elementor-widget elementor-widget-text-editor\" data-id=\"70270633\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>7- Select the \u201cRole\u201d type (here: Owner).<br \/>8- Click \u201cContinue.\u201d<br \/>9- Finally, click \u201cDone.\u201d<br \/>10- Select the created Service Account.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-384ded1f elementor-widget elementor-widget-image\" data-id=\"384ded1f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"1140\" height=\"713\" src=\"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2023\/09\/ESP32-google-Sheets-preparation-procedure4-1200x750.jpg\" class=\"attachment-large size-large wp-image-27684\" alt=\"ESP32 to Google Sheets (Preparation 4)\" srcset=\"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2023\/09\/ESP32-google-Sheets-preparation-procedure4-600x375.jpg 600w, https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2023\/09\/ESP32-google-Sheets-preparation-procedure4-768x480.jpg 768w\" sizes=\"(max-width: 1140px) 100vw, 1140px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-575b77ed elementor-widget elementor-widget-text-editor\" data-id=\"575b77ed\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>11- Click on the \u201cKEYS\u201d button.<br \/>12- Click \u201cADD KEY.\u201d<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5dcf9cd elementor-widget elementor-widget-image\" data-id=\"5dcf9cd\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"1140\" height=\"713\" src=\"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2023\/09\/ESP32-google-Sheets-preparation-procedure5-1200x750.jpg\" class=\"attachment-large size-large wp-image-27688\" alt=\"ESP32 to Google Sheets (Preparation 5)\" srcset=\"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2023\/09\/ESP32-google-Sheets-preparation-procedure5-600x375.jpg 600w, https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2023\/09\/ESP32-google-Sheets-preparation-procedure5-768x480.jpg 768w\" sizes=\"(max-width: 1140px) 100vw, 1140px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4525dafa elementor-widget elementor-widget-text-editor\" data-id=\"4525dafa\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>13- Select \u201cJSON\u201d (for the Key Type) and click \u201cCreate.\u201d<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5e05d39d elementor-widget elementor-widget-image\" data-id=\"5e05d39d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"1140\" height=\"713\" src=\"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2023\/09\/ESP32-google-Sheets-preparation-procedure6-1200x750.jpg\" class=\"attachment-large size-large wp-image-27692\" alt=\"ESP32 to Google Sheets (Preparation 6)\" srcset=\"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2023\/09\/ESP32-google-Sheets-preparation-procedure6-600x375.jpg 600w, https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2023\/09\/ESP32-google-Sheets-preparation-procedure6-768x480.jpg 768w\" sizes=\"(max-width: 1140px) 100vw, 1140px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6c39264d elementor-widget elementor-widget-text-editor\" data-id=\"6c39264d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>14- (You have now successfully created your private key and it will be downloaded automatically). Click \u201cClose.\u201d<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-51bb177a elementor-alert-info elementor-widget elementor-widget-alert\" data-id=\"51bb177a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"alert.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-alert\" role=\"alert\">\n\n\t\t\t\t\t\t<span class=\"elementor-alert-title\">Tip:<\/span>\n\t\t\t\n\t\t\t\t\t\t<span class=\"elementor-alert-description\">Steps 15 and 16 are for entering the Service Account details in your Arduino code. You can skip them if you want the library commands to read the \u201cService Account JSON Key\u201d file.<\/span>\n\t\t\t\n\t\t\t\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7f00dd0a elementor-widget elementor-widget-text-editor\" data-id=\"7f00dd0a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>15. Open the downloaded JSON file with text editing software. It will open a text similar to the following:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-550c027e elementor-widget elementor-widget-html\" data-id=\"550c027e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre class=\"line-numbers lang-arduino\"><code>{\r\n  \"type\": \"service_account\",\r\n  \"project_id\": \"...\",\r\n  \"private_key_id\": \"...\",\r\n  \"private_key\": \"-----BEGIN PRIVATE KEY-----\\n...\\n-----END PRIVATE KEY-----\\n\",\r\n  \"client_email\": \"...\",\r\n  \"client_id\": \"...\",\r\n  \"auth_uri\": \"https:\/\/accounts.google.com\/o\/oauth2\/auth\",\r\n  \"token_uri\": \"https:\/\/oauth2.googleapis.com\/token\",\r\n  \"auth_provider_x509_cert_url\": \"https:\/\/www.googleapis.com\/oauth2\/v1\/certs\",\r\n  \"client_x509_cert_url\": \"...\"\r\n}\r\n<\/code><\/pre>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7f5917d elementor-widget elementor-widget-text-editor\" data-id=\"7f5917d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Save &#8220;project_id,&#8221; &#8220;client_email,&#8221; &#8220;private_key_id,&#8221; and &#8220;private_key&#8221; mentioned in the code. You will need them for Arduino coding.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-719e9299 elementor-alert-success elementor-widget elementor-widget-alert\" data-id=\"719e9299\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"alert.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-alert\" role=\"alert\">\n\n\t\t\t\t\t\t<span class=\"elementor-alert-title\">Success!<\/span>\n\t\t\t\n\t\t\t\t\t\t<span class=\"elementor-alert-description\">You have successfully installed and configured Google Sheets!<\/span>\n\t\t\t\n\t\t\t\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-38a1b0b3 elementor-widget elementor-widget-heading\" data-id=\"38a1b0b3\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Step 2: Wiring<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-38490018 elementor-widget elementor-widget-text-editor\" data-id=\"38490018\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Connect the sensor&#8217;s VCC and GND pins to the corresponding pins on the ESP32 board (VIN and GND or 5V and GND) and the AO pin of the sensor to pin #34 of the ESP32 board. The type of ESP32 board does not change the wiring.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-54ae1201 elementor-widget elementor-widget-image\" data-id=\"54ae1201\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"1140\" height=\"713\" src=\"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2023\/09\/ESP32-google-Sheets-API-circuit-1200x750.jpg\" class=\"attachment-large size-large wp-image-27696\" alt=\"ESP32 to Google Sheets (API Circuit)\" srcset=\"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2023\/09\/ESP32-google-Sheets-API-circuit-600x375.jpg 600w, https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2023\/09\/ESP32-google-Sheets-API-circuit-768x480.jpg 768w\" sizes=\"(max-width: 1140px) 100vw, 1140px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-43b8a1f2 elementor-widget elementor-widget-heading\" data-id=\"43b8a1f2\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Step 3: Installing Library<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-63d4d874 elementor-widget elementor-widget-text-editor\" data-id=\"63d4d874\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>To start coding, you must first install the required library.<br \/>In Arduino IDE, go to Sketch-&gt;Include Library-&gt;Manage Libraries.<br \/>In the Library Manager window, search for &#8220;Sheet&#8221; and install &#8220;ESP Spreadsheet Client&#8221; from the options.<br \/>If you need more help installing the library, refer to this <a href=\"https:\/\/thecaferobot.com\/learn\/how-to-install-an-arduino-library\/\">link<\/a>.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-277324a4 elementor-widget elementor-widget-heading\" data-id=\"277324a4\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Step 4: Arduino Code (for Logging Data from ESP32 to Google Sheets)<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1d59f4eb elementor-widget elementor-widget-text-editor\" data-id=\"1d59f4eb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>After installing the library, create a new Arduino sketch and copy the following code into it.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-27085627 elementor-widget elementor-widget-html\" data-id=\"27085627\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre class=\"line-numbers lang-arduino\"><code>\/**\r\n Created by M.Merati\r\n\r\n Email: majid.merati.2012@gmail.com\r\n*\/\r\n\r\n\/\/ This example shows how to create the spreadsheet, update and read the values.\r\n\r\n#include &lt;Arduino.h&gt;\r\n#if defined(ESP32) || defined(ARDUINO_RASPBERRY_PI_PICO_W)\r\n#include &lt;WiFi.h&gt;\r\n#elif defined(ESP8266)\r\n#include &lt;ESP8266WiFi.h&gt;\r\n#endif\r\n#include &lt;ESP_Google_Sheet_Client.h&gt;\r\n#include &lt;stdlib.h&gt;\r\n#include \"time.h\"\r\nconst char* ntpServer = \"pool.ntp.org\";\r\nconst long gmtOffset_sec = 19800;\r\nconst int daylightOffset_sec = 0;\r\nint SensValue = 0;\r\n\r\n\/\/ For SD\/SD_MMC mounting helper\r\n#include &lt;GS_SDHelper.h&gt;\r\n\r\n#define WIFI_SSID \"Galaxy S20 FEDF80\"\r\n#define WIFI_PASSWORD \"kdbi8870\"\r\n\r\n#define PROJECT_ID \"logical-utility-388206\"\r\n\r\n\/\/ Service Account's client email\r\n#define CLIENT_EMAIL \"esp32test20230529@logical-utility-388206.iam.gserviceaccount.com\"\r\n\r\n\/\/ Your email to share access to spreadsheet\r\n#define USER_EMAIL \"majid.merati.2022@gmail.com\"\r\n\r\nchar numberArray[20];\r\n\r\n\/\/ Service Account's private key\r\nconst char PRIVATE_KEY[] PROGMEM = \"-----BEGIN PRIVATE KEY-----\\nMIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCbBLtWIEx2OmTI\\nzyNk53HtxjebDfGp0AcbAcC\/ztN6CTPYKKO7k1jGcKkSUMe7oWGr4lB\/QeS0XBFG\\nkzjS3LpIuTMlBtf4erf7fcFqCF5VlYYWwuprOmZe3hyYvlc8oBUIcgQvOA6xQcxW\\n0tJTAQXfT9g1IF3lRupZ6mCN1ILinxMQOA7zNLa7CLe2wq1hFX4kn8+YztHAiunp\\nR7EMhzZAL9rwR2VpWoFZj24TZpQzEYS1S7n3iD8d0Ip3mVmoNcYDe39I5+ZE8xe1\\nuqbc4Z5SzUe6RyytAMLL4tMAqDqvDTXtnD9Hw1f3DTymEWEFYjfjO3B6Pt90VLMG\\n48r7veZvAgMBAAECggEAO5XzCGT73woNCV8NhNCt6y6g2xneBV7wDEJ9O30drq\/w\\n3KqqXQSDQCu34VFppMagi3g\/ZtsGNQmanl0in3K2rBN8BESAKYPKSoIJIV+8GvuR\\nghhEERlulhKcPV4UnDoQO6HP1\/KdOydGiy0YKU2gWzkOq0UYsnOyywMbQAkqkj7n\\n5ELfR\/\/Leewx92zTiGrI4xns0sDm15rEYQvF8WQZeMFUblmJ+5FfuSK5hP0SaX4F\\nvv9cx34TteUm1sro+v65HYTjY8Ozcur+ZjiuSNuAx4vs7CmpUM3kAjIN2451H9ka\\ny3PY7I3bvFhy9tIHmQflFiokAFk3eH\/\/HavpmBnroQKBgQDKJYElbW1b9L+5RHK4\\nD8vRRbIgNVw1lcsBulwc4\/VyAUORd3V9JQwfGvGBKykTVvJ75USR9T49BIDBZeR+\\nfeO2RZtCaEXm5OtQgVM8p9GFUxhRk283CPf\/uZbMkNkXXCLefcVWCBr+6+2extUV\\nz+MMgghwFx4vjbJqe2RqFtA+vwKBgQDEURJ6zhKu7pJy1wNlPkfsnDwb2sbj\/UmG\\nmzA+9KEP9PQExxShRYBwyrsgGRB644kLtWv6tOTezib54SnWXAcVHXkkP1hWrw79\\nfWY9tgPldwvlT9KMXTiG6NBHDZD\/lwVtiMqulmKpXVr+AVSOp+t\/vzquvOO8MKl2\\nP5g5BvT0UQKBgQCX1S24uAWBIUd0V7Y3DB5R9KCDUrEMypMtnBWd2Zc85zgiJfEI\\na3A8WNd25r02eoMtjho\/602xNRWkrey\/Gb2U5Zller6uW9lnoYusrnxQQQauFyhc\\n1Q65dGORCWcWBa1nIl67bOEiAoF7VestM\/VdKro9vw98NlkBY+cbTEFkLwKBgHno\\nglpCR7XbrpOj05b2UwGqj2UYuXNwoUz2Z8JgdPgMu8+PtM7k8vqX2hX3mpVFYKAl\\nu\/UGii2VxPxdB3b21OsWz1hkAb5qnRtq2KevtMG06G0w4WWKqgSU5GmLEiS1qog3\\nbu11s7TKpSugtdqUihhdLtq9r4n4ifNFUIjxOgHRAoGAbMlZi6KtyuIqfpnOvYej\\nIO2SmKA85EBelrZCl2xKlIgGpLRITzfiQ5k+HH3ts22iw3ld+tBxpg82EX4Zuavj\\niM57EIf6hzLsh8eLpic85ziD6PV14PBQUECS1Bb14fMJ4k3rcGcNFo2o9tgjlu9R\\nKDx2yXeNgh\/pToM7GLvlIOg=\\n-----END PRIVATE KEY-----\\n\";\r\n\r\nbool taskComplete = false;\r\n\r\n#if defined(ARDUINO_RASPBERRY_PI_PICO_W)\r\nWiFiMulti multi;\r\n#endif\r\n\r\nvoid tokenStatusCallback(TokenInfo info);\r\n\r\nvoid setup()\r\n{\r\n\r\n Serial.begin(115200);\r\n Serial.println();\r\n Serial.println();\r\n\r\n#if defined(ESP32) || defined(ESP8266)\r\n WiFi.setAutoReconnect(true);\r\n#endif\r\n\r\n#if defined(ARDUINO_RASPBERRY_PI_PICO_W)\r\n multi.addAP(WIFI_SSID, WIFI_PASSWORD);\r\n multi.run();\r\n#else\r\n WiFi.begin(WIFI_SSID, WIFI_PASSWORD);\r\n#endif\r\n\r\n Serial.print(\"Connecting to Wi-Fi\");\r\n unsigned long ms = millis();\r\n while (WiFi.status() != WL_CONNECTED)\r\n {\r\n Serial.print(\".\");\r\n delay(300);\r\n#if defined(ARDUINO_RASPBERRY_PI_PICO_W)\r\n if (millis() - ms &gt; 10000)\r\n break;\r\n#endif\r\n }\r\n Serial.println();\r\n Serial.print(\"Connected with IP: \");\r\n Serial.println(WiFi.localIP());\r\n Serial.println();\r\n\r\n \/\/ Set the callback for Google API access token generation status (for debug only)\r\n GSheet.setTokenCallback(tokenStatusCallback);\r\n\r\n \/\/ The WiFi credentials are required for Pico W\r\n \/\/ due to it does not have reconnect feature.\r\n#if defined(ARDUINO_RASPBERRY_PI_PICO_W)\r\n GSheet.clearAP();\r\n GSheet.addAP(WIFI_SSID, WIFI_PASSWORD);\r\n#endif\r\n\r\n \/\/ Set the seconds to refresh the auth token before expire (60 to 3540, default is 300 seconds)\r\n GSheet.setPrerefreshSeconds(10 * 60);\r\n\r\n \/\/ Begin the access token generation for Google API authentication\r\n GSheet.begin(CLIENT_EMAIL, PROJECT_ID, PRIVATE_KEY);\r\n\r\n configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);\r\n}\r\n\r\nvoid loop()\r\n{\r\n \/\/ Call ready() repeatedly in loop for authentication checking and processing\r\n bool ready = GSheet.ready();\r\n\r\n if (ready &amp;&amp; !taskComplete)\r\n {\r\n FirebaseJson response;\r\n\r\n Serial.println(\"\\nCreate spreadsheet...\");\r\n Serial.println(\"------------------------\");\r\n\r\n FirebaseJson spreadsheet;\r\n spreadsheet.set(\"properties\/title\", \"Gas Sensor Data Log\");\r\n spreadsheet.set(\"sheets\/properties\/gridProperties\/rowCount\", 100 );\r\n spreadsheet.set(\"sheets\/properties\/gridProperties\/columnCount\", 2);\r\n\r\n String spreadsheetId, spreadsheetURL;\r\n bool success = false;\r\n\r\n \/\/ For Google Sheet API ref doc, go to https:\/\/developers.google.com\/sheets\/api\/reference\/rest\/v4\/spreadsheets\/create\r\n\r\n success = GSheet.create(&amp;response \/* returned response *\/, &amp;spreadsheet \/* spreadsheet object *\/, USER_EMAIL \/* your email that this spreadsheet shared to *\/);\r\n response.toString(Serial, true);\r\n Serial.println();\r\n \r\n\r\n if (success)\r\n {\r\n \/\/ Get the spreadsheet id from already created file.\r\n FirebaseJsonData result;\r\n response.get(result, FPSTR(\"spreadsheetId\")); \/\/ parse or deserialize the JSON response\r\n if (result.success)\r\n spreadsheetId = result.to&lt;const char *&gt;();\r\n\r\n \/\/ Get the spreadsheet URL.\r\n result.clear();\r\n response.get(result, FPSTR(\"spreadsheetUrl\")); \/\/ parse or deserialize the JSON response\r\n if (result.success)\r\n {\r\n spreadsheetURL = result.to&lt;const char *&gt;();\r\n Serial.println(\"\\nThe spreadsheet URL\");\r\n Serial.println(spreadsheetURL);\r\n }\r\n\r\n struct tm timeinfo;\r\n char timeStringBuff[50];\r\n String asString;\r\n char buffer[40];\r\n\r\n\r\n FirebaseJson valueRange;\r\n for (int counter = 0; counter &lt; 10; counter++)\r\n {\r\n Serial.println(\"\\nUpdate spreadsheet values...\");\r\n Serial.println(\"------------------------------\");\r\n if (!getLocalTime(&amp;timeinfo)) {\r\n Serial.println(\"Failed to obtain time\");\r\n return;\r\n }\r\n strftime(timeStringBuff, sizeof(timeStringBuff), \"%A, %B %d %Y %H:%M:%S\", &amp;timeinfo);\r\n asString = timeStringBuff;\r\n asString.replace(\" \", \"-\");\r\n SensValue = analogRead(34);\r\n itoa(SensValue, numberArray, 10);\r\n\r\n sprintf(buffer, \"values\/[%d]\/[1]\", counter);\r\n valueRange.set(buffer, numberArray);\r\n sprintf(buffer, \"values\/[%d]\/[0]\", counter);\r\n valueRange.set(buffer, asString);\r\n sprintf(buffer, \"Sheet1!A%d:B%d\", 1 + counter, 10 + counter);\r\n\r\n success = GSheet.values.update(&amp;response \/* returned response *\/, spreadsheetId \/* spreadsheet Id to update *\/, \"Sheet1!A1:B1000\" \/* range to update *\/, &amp;valueRange \/* data to update *\/);\r\n response.toString(Serial, true);\r\n Serial.println();\r\n \/\/valueRange.clear();\r\n delay(5000);\r\n }\r\n\r\n \/\/ For Google Sheet API ref doc, go to https:\/\/developers.google.com\/sheets\/api\/reference\/rest\/v4\/spreadsheets.values\/update\r\n\r\n if (success)\r\n {\r\n\r\n Serial.println(\"\\nGet spreadsheet values...\");\r\n Serial.println(\"------------------------------\");\r\n\r\n success = GSheet.values.get(&amp;response \/* returned response *\/, spreadsheetId \/* spreadsheet Id to read *\/, \"Sheet1!A1:B10\" \/* range to read *\/);\r\n response.toString(Serial, true);\r\n Serial.println();\r\n\r\n\r\n\r\n#if defined(ESP32) || defined(ESP8266)\r\n Serial.println(ESP.getFreeHeap());\r\n#elif defined(PICO_RP2040)\r\n Serial.println(rp2040.getFreeHeap());\r\n#endif\r\n }\r\n }\r\n\r\n taskComplete = true;\r\n }\r\n}\r\n\r\nvoid tokenStatusCallback(TokenInfo info)\r\n{\r\n if (info.status == esp_signer_token_status_error)\r\n {\r\n Serial.printf(\"Token info: type = %s, status = %s\\n\", GSheet.getTokenType(info).c_str(), GSheet.getTokenStatus(info).c_str());\r\n Serial.printf(\"Token error: %s\\n\", GSheet.getTokenError(info).c_str());\r\n }\r\n else\r\n {\r\n Serial.printf(\"Token info: type = %s, status = %s\\n\", GSheet.getTokenType(info).c_str(), GSheet.getTokenStatus(info).c_str());\r\n }\r\n}\r\n<\/code><\/pre>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-763d4f93 elementor-widget elementor-widget-heading\" data-id=\"763d4f93\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h4 class=\"elementor-heading-title elementor-size-default\">Code Cracking<\/h4>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-66f07e73 elementor-widget elementor-widget-text-editor\" data-id=\"66f07e73\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>First, we load the required libraries.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3fa49843 elementor-widget elementor-widget-html\" data-id=\"3fa49843\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre class=\"line-numbers lang-arduino\"><code>#include &lt;Arduino.h&gt;\r\n#if defined(ESP32) || defined(ARDUINO_RASPBERRY_PI_PICO_W)\r\n#include &lt;WiFi.h&gt;\r\n#elif defined(ESP8266)\r\n#include &lt;ESP8266WiFi.h&gt;\r\n#endif\r\n#include &lt;ESP_Google_Sheet_Client.h&gt;\r\n#include &lt;stdlib.h&gt;\r\n#include \"time.h\"\r\n<\/code><\/pre>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7114df54 elementor-widget elementor-widget-text-editor\" data-id=\"7114df54\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>The \u201cWiFi.h\u201d library is for a WiFi connection, and the \u201cESP_Google_Sheet_Client.h\u201d library is used to communicate with Google Sheets API.<br \/>Next, we introduce the WiFi specifications for the ESP32 microcontroller.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-557e62a elementor-widget elementor-widget-html\" data-id=\"557e62a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre class=\"line-numbers lang-arduino\"><code>#define WIFI_SSID \"**********\"\r\n#define WIFI_PASSWORD \"**********\"\r\n<\/code><\/pre>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-fd8f1d elementor-widget elementor-widget-text-editor\" data-id=\"fd8f1d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Below, you should enter the data obtained from steps 15 and 16 of the previous stage.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3b67b9ab elementor-widget elementor-widget-html\" data-id=\"3b67b9ab\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre class=\"line-numbers lang-arduino\"><code>#define PROJECT_ID \"**************\"\r\n\r\n\/\/ Service Account's client email\r\n#define CLIENT_EMAIL \"*******************\"\r\n\r\n\/\/ Your email to share access to spreadsheet\r\n#define USER_EMAIL \"************\"\r\n\r\nchar numberArray[20];\r\n\r\n\/\/ Service Account's private key\r\nconst char PRIVATE_KEY[] PROGMEM = **********************\"\";\r\n<\/code><\/pre>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-41572aeb elementor-widget elementor-widget-text-editor\" data-id=\"41572aeb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><strong>Setup() Function:<\/strong><br \/>Here, we first establish a serial communication to monitor the code\u2019s performance at different stages, and then, connect to the WiFi network specified in the code. If there are no errors, we will send the ESP32 IP address in the network through the serial port.<br \/>Finally, we connect ESP32 to the Google Sheets API service using the CLIENT_EMAIL, PROJECT_ID, and PRIVATE_KEY mentioned earlier in the code.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-79517b11 elementor-widget elementor-widget-html\" data-id=\"79517b11\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre class=\"line-numbers lang-arduino\"><code>void setup()\r\n{\r\n\r\n Serial.begin(115200);\r\n Serial.println();\r\n Serial.println();\r\n\r\n#if defined(ESP32) || defined(ESP8266)\r\n WiFi.setAutoReconnect(true);\r\n#endif\r\n\r\n#if defined(ARDUINO_RASPBERRY_PI_PICO_W)\r\n multi.addAP(WIFI_SSID, WIFI_PASSWORD);\r\n multi.run();\r\n#else\r\n WiFi.begin(WIFI_SSID, WIFI_PASSWORD);\r\n#endif\r\n\r\n Serial.print(\"Connecting to Wi-Fi\");\r\n unsigned long ms = millis();\r\n while (WiFi.status() != WL_CONNECTED)\r\n {\r\n Serial.print(\".\");\r\n delay(300);\r\n#if defined(ARDUINO_RASPBERRY_PI_PICO_W)\r\n if (millis() - ms &gt; 10000)\r\n break;\r\n#endif\r\n }\r\n Serial.println();\r\n Serial.print(\"Connected with IP: \");\r\n Serial.println(WiFi.localIP());\r\n Serial.println();\r\n \r\n \/\/ Set the callback for Google API access token generation status (for debug only)\r\n GSheet.setTokenCallback(tokenStatusCallback);\r\n\r\n \/\/ The WiFi credentials are required for Pico W\r\n \/\/ due to it does not have reconnect feature.\r\n#if defined(ARDUINO_RASPBERRY_PI_PICO_W)\r\n GSheet.clearAP();\r\n GSheet.addAP(WIFI_SSID, WIFI_PASSWORD);\r\n#endif\r\n\r\n \/\/ Set the seconds to refresh the auth token before expire (60 to 3540, default is 300 seconds)\r\n GSheet.setPrerefreshSeconds(10 * 60);\r\n\r\n \/\/ Begin the access token generation for Google API authentication\r\n GSheet.begin(CLIENT_EMAIL, PROJECT_ID, PRIVATE_KEY);\r\n\r\n configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);\r\n}\r\n<\/code><\/pre>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-29b75b12 elementor-widget elementor-widget-text-editor\" data-id=\"29b75b12\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><strong>Loop() Function:<\/strong><br \/>At the beginning of this function, we first check if ESP32 and Google Sheets are ready to communicate with each other.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5f458995 elementor-widget elementor-widget-html\" data-id=\"5f458995\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre class=\"line-numbers lang-arduino\"><code>bool ready = GSheet.ready();\r\n<\/code><\/pre>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5113f5e elementor-widget elementor-widget-text-editor\" data-id=\"5113f5e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Next, create an \u201cinstance\u201d for the \u201cresponse\u201d received from Google Sheets. And if the connection is ready, print the following text in the serial port.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-125313bb elementor-widget elementor-widget-html\" data-id=\"125313bb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre class=\"line-numbers lang-arduino\"><code>Serial.println(\"\\nCreate spreadsheet...\");\r\nSerial.println(\"------------------------\");\r\n<\/code><\/pre>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4c938ffa elementor-widget elementor-widget-text-editor\" data-id=\"4c938ffa\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>To perform various tasks in the Sheet, define an \u201cInstance\u201d as below:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-795fa0ec elementor-widget elementor-widget-html\" data-id=\"795fa0ec\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre class=\"line-numbers lang-arduino\"><code>FirebaseJson spreadsheet;\r\n<\/code><\/pre>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-275c7ed elementor-widget elementor-widget-text-editor\" data-id=\"275c7ed\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>In line 116, you can change the title of the created \u201cSheet\u201d file using the above instance. Also, in lines 117 and 118, you can define the desired number of rows and columns.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-18a7bd96 elementor-widget elementor-widget-html\" data-id=\"18a7bd96\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre class=\"line-numbers lang-arduino\"><code>spreadsheet.set(\"properties\/title\", \"Gas Sensor Data Log\");\r\nspreadsheet.set(\"sheets\/properties\/gridProperties\/rowCount\", 100 );\r\nspreadsheet.set(\"sheets\/properties\/gridProperties\/columnCount\", 2);\r\n<\/code><\/pre>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6a6ff585 elementor-widget elementor-widget-text-editor\" data-id=\"6a6ff585\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>To change other specifications such as Sheet name, ID, type (here: GRID), and the number of rows and columns, add the following code in line 120.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6603081 elementor-widget elementor-widget-html\" data-id=\"6603081\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre class=\"line-numbers lang-arduino\"><code>       spreadsheet.set(\"properties\/title\", \"ENTER YOUR FILE NAME HERE\");\r\n\r\n        spreadsheet.set(\"sheets\/properties\/title\", \"ENTER YOUR SHEET TITLE HERE\");\r\n        spreadsheet.set(\"sheets\/properties\/sheetId\", TYPE SHEET ID HERE (Ex. 1));\r\n        spreadsheet.set(\"sheets\/properties\/sheetType\", \u201cENTER SHEET TYPE HERE (Ex. \"GRID\")\u201d);\r\n        spreadsheet.set(\"sheets\/properties\/gridProperties\/rowCount\", ENTER SHEET ROW COUNT HERE (EX. 20) );\r\n        spreadsheet.set(\"sheets\/properties\/gridProperties\/columnCount\", ENTER SHEET COLUMN COUNT HERE (EX. 10));\r\n<\/code><\/pre>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3e5ef100 elementor-widget elementor-widget-text-editor\" data-id=\"3e5ef100\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>After choosing the file name, we create the file with the defined specifications by the code in line 126 and then print the response received from Google Sheets in the serial port.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3d26268a elementor-widget elementor-widget-html\" data-id=\"3d26268a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre class=\"line-numbers lang-arduino\"><code>    success = GSheet.create(&response \/* returned response *\/, &spreadsheet \/* spreadsheet object *\/, USER_EMAIL \/* your email that this spreadsheet shared to *\/);\r\n    response.toString(Serial, true);\r\n    Serial.println();\r\n<\/code><\/pre>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-75a001c0 elementor-widget elementor-widget-text-editor\" data-id=\"75a001c0\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>If the file is successfully created, we receive the \u201cspreadsheetId\u201d and \u201cspreadsheetUrl\u201d from Google Sheets and print them in the serial port.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7856a91f elementor-widget elementor-widget-html\" data-id=\"7856a91f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre class=\"line-numbers lang-arduino\"><code>response.get(result, FPSTR(\"spreadsheetId\")); \r\n if (result.success)\r\n spreadsheetId = result.to&lt;const char *&gt;();\r\n\r\n \/\/ Get the spreadsheet URL.\r\n result.clear();\r\n response.get(result, FPSTR(\"spreadsheetUrl\")); \r\n if (result.success)\r\n {\r\n spreadsheetURL = result.to&lt;const char *&gt;();\r\n Serial.println(\"\\nThe spreadsheet URL\");\r\n Serial.println(spreadsheetURL);\r\n }\r\n<\/code><\/pre>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-351ab5e0 elementor-widget elementor-widget-text-editor\" data-id=\"351ab5e0\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><strong>Logging Data from ESP32 to Google Sheets:<\/strong><br \/>Now you can insert the desired data in the created file. Specifically, we enter the analog output of the gas sensor into the code using ADC.<br \/>Alternatively, you can use any type of sensor output or other data (numbers or text) in the code to enter Google Sheets.<br \/>In the \u201cFor\u201d loop below, we first read the current system date and time, and then store the gas sensor output in the SensValue variable using ADC. We send these two data points in one row and two columns to Google Sheets, and finally, print the result of the data transmission in the serial port.<br \/>We repeat this process 10 times with a time interval of five seconds. <br \/>You can also change the sampling rate.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4457c809 elementor-widget elementor-widget-html\" data-id=\"4457c809\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre class=\"line-numbers lang-arduino\"><code>FirebaseJson valueRange;\r\n\r\n for (int counter = 0; counter &lt; 10; counter++)\r\n {\r\n Serial.println(\"\\nUpdate spreadsheet values...\");\r\n Serial.println(\"------------------------------\");\r\n if (!getLocalTime(&amp;timeinfo)) {\r\n Serial.println(\"Failed to obtain time\");\r\n return;\r\n }\r\n strftime(timeStringBuff, sizeof(timeStringBuff), \"%A, %B %d %Y %H:%M:%S\", &amp;timeinfo);\r\n asString = timeStringBuff;\r\n asString.replace(\" \", \"-\");\r\n SensValue = analogRead(34);\r\n itoa(SensValue, numberArray, 10);\r\n\r\n sprintf(buffer, \"values\/[%d]\/[1]\", counter);\r\n valueRange.set(buffer, numberArray);\r\n sprintf(buffer, \"values\/[%d]\/[0]\", counter);\r\n valueRange.set(buffer, asString);\r\n sprintf(buffer, \"Sheet1!A%d:B%d\", 1+counter,10+counter);\r\n\r\n success = GSheet.values.update(&amp;response \/* returned response *\/, spreadsheetId \/* spreadsheet Id to update *\/, \"Sheet1!A1:B1000\" \/* range to update *\/, &amp;valueRange \/* data to update *\/);\r\n response.toString(Serial, true);\r\n Serial.println();\r\n \/\/valueRange.clear();\r\n delay(5000);\r\n }\r\n<\/code><\/pre>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-724c8165 elementor-widget elementor-widget-text-editor\" data-id=\"724c8165\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>If the data is successfully sent, we proceed to the stage of receiving data from Google Sheets.<br \/><strong>Receiving Data from Google Sheets with ESP32:<\/strong><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-29ab1d19 elementor-widget elementor-widget-html\" data-id=\"29ab1d19\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre class=\"line-numbers lang-arduino\"><code>        success = GSheet.values.get(&response \/* returned response *\/, spreadsheetId \/* spreadsheet Id to read *\/, \"Sheet1!A1:B10\" \/* range to read *\/);\r\n        response.toString(Serial, true);\r\n        Serial.println();\r\n<\/code><\/pre>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4fd932dd elementor-widget elementor-widget-text-editor\" data-id=\"4fd932dd\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>In the above code, we retrieve data from cells A1 to B10 in Google Sheets. If successful, we display this data in the serial port.<br \/>If an error occurs in any step, we send an error message and its cause to the serial port.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-688bda58 elementor-widget elementor-widget-heading\" data-id=\"688bda58\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Step 5: Uploading Code to ESP32<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4e2bf4dd elementor-widget elementor-widget-text-editor\" data-id=\"4e2bf4dd\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Now, program the ESP32 board. By running the code on ESP32, a sheet file will be created (as shown in the image below.)<br \/>As you can see, the current system date and time are inserted in column A, while the gas sensor data is inserted in column B.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5bf81a70 elementor-widget elementor-widget-image\" data-id=\"5bf81a70\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"1140\" height=\"713\" src=\"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2023\/09\/ESP32-google-sheets-API-result1-1200x750.jpg\" class=\"attachment-large size-large wp-image-27700\" alt=\"ESP32 to Google Sheets (API Results 1)\" srcset=\"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2023\/09\/ESP32-google-sheets-API-result1-600x375.jpg 600w, https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2023\/09\/ESP32-google-sheets-API-result1-768x480.jpg 768w\" sizes=\"(max-width: 1140px) 100vw, 1140px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6502117f elementor-widget elementor-widget-text-editor\" data-id=\"6502117f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>After running the code, the values read by ESP32 from Google Sheets are displayed in the serial port as shown below.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-37ed418a elementor-widget elementor-widget-image\" data-id=\"37ed418a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"1140\" height=\"713\" src=\"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2023\/09\/ESP32-google-Sheets-API-result2-1200x750.jpg\" class=\"attachment-large size-large wp-image-27704\" alt=\"ESP32 to Google Sheets (API Results 2)\" srcset=\"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2023\/09\/ESP32-google-Sheets-API-result2-600x375.jpg 600w, https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2023\/09\/ESP32-google-Sheets-API-result2-768x480.jpg 768w\" sizes=\"(max-width: 1140px) 100vw, 1140px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7c6f61b7 elementor-widget elementor-widget-text-editor\" data-id=\"7c6f61b7\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>The key parts of the output printed in the serial port are as follows:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6d400b8d elementor-widget elementor-widget-html\" data-id=\"6d400b8d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre class=\"line-numbers lang-arduino\"><code>Connecting to Wi-Fi...\r\nConnected with IP: 192.168.***.***\r\n\r\nToken info: type = OAuth2.0 access token, status = on initializing\r\nToken info: type = OAuth2.0 access token, status = on signing\r\nToken info: type = OAuth2.0 access token, status = on exchange request\r\nToken info: type = OAuth2.0 access token, status = ready\r\n\r\nCreate spreadsheet...\r\n------------------------\r\n{\r\n \"spreadsheetId\": \"**********\",\r\n \"properties\": {\r\n \"title\": \"Gas Sensor Data Log\",\r\n \r\n \"spreadsheetUrl\": \"https:\/\/docs.google.com\/spreadsheets\/d\/1vIeFO58uNubRK0As6nr-iJrRRYMdxR2-NhkrHE0rihE\/edit\"\r\n}\r\n\r\nThe spreadsheet URL\r\nhttps:\/\/docs.google.com\/spreadsheets\/d\/1vIeFO58uNubRK0As6nr-iJrRRYMdxR2-NhkrHE0rihE\/edit\r\n\r\nUpdate spreadsheet values...\r\n------------------------------\r\n{\r\n \"spreadsheetId\": \"1vIeFO58uNubRK0As6nr-iJrRRYMdxR2-NhkrHE0rihE\",\r\n \"updatedRange\": \"Sheet1!A1:B1\",\r\n \"updatedRows\": 1,\r\n \"updatedColumns\": 2,\r\n \"updatedCells\": 2\r\n}\r\n\r\nUpdate spreadsheet values...\r\n------------------------------\r\n{\r\n \"spreadsheetId\": \"1vIeFO58uNubRK0As6nr-iJrRRYMdxR2-NhkrHE0rihE\",\r\n \"updatedRange\": \"Sheet1!A1:B2\",\r\n \"updatedRows\": 2,\r\n \"updatedColumns\": 2,\r\n \"updatedCells\": 4\r\n}\r\n\r\nUpdate spreadsheet values...\r\n------------------------------\r\n{\r\n \"spreadsheetId\": \"1vIeFO58uNubRK0As6nr-iJrRRYMdxR2-NhkrHE0rihE\",\r\n \"updatedRange\": \"Sheet1!A1:B3\",\r\n \"updatedRows\": 3,\r\n \"updatedColumns\": 2,\r\n \"updatedCells\": 6\r\n}\r\n\r\nUpdate spreadsheet values...\r\n------------------------------\r\n{\r\n \"spreadsheetId\": \"1vIeFO58uNubRK0As6nr-iJrRRYMdxR2-NhkrHE0rihE\",\r\n \"updatedRange\": \"Sheet1!A1:B4\",\r\n \"updatedRows\": 4,\r\n \"updatedColumns\": 2,\r\n \"updatedCells\": 8\r\n}\r\n\r\nUpdate spreadsheet values...\r\n------------------------------\r\n{\r\n \"spreadsheetId\": \"1vIeFO58uNubRK0As6nr-iJrRRYMdxR2-NhkrHE0rihE\",\r\n \"updatedRange\": \"Sheet1!A1:B5\",\r\n \"updatedRows\": 5,\r\n \"updatedColumns\": 2,\r\n \"updatedCells\": 10\r\n}\r\n\r\nUpdate spreadsheet values...\r\n------------------------------\r\n{\r\n \"spreadsheetId\": \"1vIeFO58uNubRK0As6nr-iJrRRYMdxR2-NhkrHE0rihE\",\r\n \"updatedRange\": \"Sheet1!A1:B6\",\r\n \"updatedRows\": 6,\r\n \"updatedColumns\": 2,\r\n \"updatedCells\": 12\r\n}\r\n\r\nUpdate spreadsheet values...\r\n------------------------------\r\n{\r\n \"spreadsheetId\": \"1vIeFO58uNubRK0As6nr-iJrRRYMdxR2-NhkrHE0rihE\",\r\n \"updatedRange\": \"Sheet1!A1:B7\",\r\n \"updatedRows\": 7,\r\n \"updatedColumns\": 2,\r\n \"updatedCells\": 14\r\n}\r\n\r\nUpdate spreadsheet values...\r\n------------------------------\r\n{\r\n \"spreadsheetId\": \"1vIeFO58uNubRK0As6nr-iJrRRYMdxR2-NhkrHE0rihE\",\r\n \"updatedRange\": \"Sheet1!A1:B8\",\r\n \"updatedRows\": 8,\r\n \"updatedColumns\": 2,\r\n \"updatedCells\": 16\r\n}\r\n\r\nUpdate spreadsheet values...\r\n------------------------------\r\n{\r\n \"spreadsheetId\": \"1vIeFO58uNubRK0As6nr-iJrRRYMdxR2-NhkrHE0rihE\",\r\n \"updatedRange\": \"Sheet1!A1:B9\",\r\n \"updatedRows\": 9,\r\n \"updatedColumns\": 2,\r\n \"updatedCells\": 18\r\n}\r\n\r\nUpdate spreadsheet values...\r\n------------------------------\r\n{\r\n \"spreadsheetId\": \"1vIeFO58uNubRK0As6nr-iJrRRYMdxR2-NhkrHE0rihE\",\r\n \"updatedRange\": \"Sheet1!A1:B10\",\r\n \"updatedRows\": 10,\r\n \"updatedColumns\": 2,\r\n \"updatedCells\": 20\r\n}\r\n\r\nGet spreadsheet values...\r\n------------------------------\r\n{\r\n \"range\": \"Sheet1!A1:B10\",\r\n \"majorDimension\": \"ROWS\",\r\n \"values\": [\r\n [\r\n \"Saturday,-June-10-2023-09:57:18\",\r\n \"462\"\r\n ],\r\n [\r\n \"Saturday,-June-10-2023-09:57:24\",\r\n \"462\"\r\n ],\r\n [\r\n \"Saturday,-June-10-2023-09:57:30\",\r\n \"439\"\r\n ],\r\n [\r\n \"Saturday,-June-10-2023-09:57:35\",\r\n \"432\"\r\n ],\r\n [\r\n \"Saturday,-June-10-2023-09:57:41\",\r\n \"427\"\r\n ],\r\n [\r\n \"Saturday,-June-10-2023-09:57:46\",\r\n \"421\"\r\n ],\r\n [\r\n \"Saturday,-June-10-2023-09:57:52\",\r\n \"421\"\r\n ],\r\n [\r\n \"Saturday,-June-10-2023-09:57:57\",\r\n \"419\"\r\n ],\r\n [\r\n \"Saturday,-June-10-2023-09:58:03\",\r\n \"403\"\r\n ],\r\n [\r\n \"Saturday,-June-10-2023-09:58:08\",\r\n \"414\"\r\n ]\r\n ]\r\n}\r\n193840\r\n<\/code><\/pre>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5304bbb0 elementor-alert-success elementor-widget elementor-widget-alert\" data-id=\"5304bbb0\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"alert.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-alert\" role=\"alert\">\n\n\t\t\t\t\t\t<span class=\"elementor-alert-title\">Success!<\/span>\n\t\t\t\n\t\t\t\t\t\t<span class=\"elementor-alert-description\">You have set up a data exchange system between ESP32 and Google Sheets!<\/span>\n\t\t\t\n\t\t\t\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-68660b6 elementor-widget elementor-widget-text-editor\" data-id=\"68660b6\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>To verify the values, compare the numbers entered in Google Sheets with those displayed in the serial monitor.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-38263f99 elementor-alert-info elementor-widget elementor-widget-alert\" data-id=\"38263f99\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"alert.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-alert\" role=\"alert\">\n\n\t\t\t\t\t\t<span class=\"elementor-alert-title\">Tip:<\/span>\n\t\t\t\n\t\t\t\t\t\t<span class=\"elementor-alert-description\">If you want to use a pre-prepared sheet file for reading or writing data, it is necessary to share that file with the email address of the \u201cService Account Client.\u201d<br>\nThe files created by the codes in this tutorial are automatically shared with your account.\n<\/span>\n\t\t\t\n\t\t\t\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2af84608 elementor-widget elementor-widget-heading\" data-id=\"2af84608\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Step 6: Google Sheets Functions<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1e89fe0e elementor-alert-info elementor-widget elementor-widget-alert\" data-id=\"1e89fe0e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"alert.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-alert\" role=\"alert\">\n\n\t\t\t\t\t\t<span class=\"elementor-alert-title\">Tip:<\/span>\n\t\t\t\n\t\t\t\t\t\t<span class=\"elementor-alert-description\">Similar to Excel, you can use various functions to create a sheet.<\/span>\n\t\t\t\n\t\t\t\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-748bba0d elementor-widget elementor-widget-text-editor\" data-id=\"748bba0d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>For example, the code below adds up the numbers in cells A1 to A5 and inserts the result in the cell located in the first row and second column.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-46d3aed4 elementor-widget elementor-widget-html\" data-id=\"46d3aed4\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre class=\"line-numbers lang-arduino\"><code>valueRange.set(\"values\/[0]\/[1]\", \"=SUM(A1:A5)\");\r\n<\/code><\/pre>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-123fcfa3 elementor-widget elementor-widget-text-editor\" data-id=\"123fcfa3\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Or to calculate the average of the same numbers, you can use the following code. The calculated number will be inserted in the cell located in the third row and second column.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-51d8703b elementor-widget elementor-widget-html\" data-id=\"51d8703b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre class=\"line-numbers lang-arduino\"><code>valueRange.set(\"values\/[2]\/[1]\", \"=AVERAGE(A1:A5)\");\r\n<\/code><\/pre>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-78001e98 elementor-widget elementor-widget-text-editor\" data-id=\"78001e98\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>To explore all the available functions in Google Sheets, open the file in your browser and navigate to the Insert -&gt; Function section (see the image below).<br \/>You can access all available Google Sheets files from this <a href=\"https:\/\/docs.google.com\/spreadsheets\/\">link<\/a>.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4c26ffff elementor-widget elementor-widget-image\" data-id=\"4c26ffff\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"1140\" height=\"713\" src=\"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2023\/09\/ESP32-google-sheets-Functions-1200x750.jpg\" class=\"attachment-large size-large wp-image-27708\" alt=\"ESP32 to Google Sheets (Functions)\" srcset=\"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2023\/09\/ESP32-google-sheets-Functions-600x375.jpg 600w, https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2023\/09\/ESP32-google-sheets-Functions-768x480.jpg 768w\" sizes=\"(max-width: 1140px) 100vw, 1140px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-410c839f elementor-widget elementor-widget-heading\" data-id=\"410c839f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Method 2: Logging Data from ESP32 to Google Sheets with Google Apps Script<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7fd12ba0 elementor-widget elementor-widget-text-editor\" data-id=\"7fd12ba0\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>In the second method, we use the BME680 temperature and humidity sensor instead of the MQ9 sensor.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-743a7e79 elementor-widget elementor-widget-heading\" data-id=\"743a7e79\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Step 1: Creating a Sheet<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1eb70dba elementor-widget elementor-widget-text-editor\" data-id=\"1eb70dba\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>First, we need to create a sheet: open Google Sheets, create a new sheet, and specify the file name and column titles.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3cebd01 elementor-widget elementor-widget-image\" data-id=\"3cebd01\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"1140\" height=\"713\" src=\"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2023\/09\/ESP32-google-sheets-FirstStep-1200x750.jpg\" class=\"attachment-large size-large wp-image-27712\" alt=\"ESP32 to Google Sheets (Creating a Sheet)\" srcset=\"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2023\/09\/ESP32-google-sheets-FirstStep-600x375.jpg 600w, https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2023\/09\/ESP32-google-sheets-FirstStep-768x480.jpg 768w\" sizes=\"(max-width: 1140px) 100vw, 1140px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2bac0878 elementor-widget elementor-widget-heading\" data-id=\"2bac0878\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Step 2: Creating a Script<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3f62c82c elementor-widget elementor-widget-text-editor\" data-id=\"3f62c82c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>1- Go to the menu bar and select \u201cExtensions,\u201d and then click on \u201cApps Script\u201d to open a new script.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3074e7f5 elementor-widget elementor-widget-image\" data-id=\"3074e7f5\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"1140\" height=\"713\" src=\"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2023\/09\/ESP32-google-sheets-ScriptProcedure1-1200x750.jpg\" class=\"attachment-large size-large wp-image-27716\" alt=\"ESP32 to Google Sheets (Creating a Script 1)\" srcset=\"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2023\/09\/ESP32-google-sheets-ScriptProcedure1-600x375.jpg 600w, https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2023\/09\/ESP32-google-sheets-ScriptProcedure1-768x480.jpg 768w\" sizes=\"(max-width: 1140px) 100vw, 1140px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-9910739 elementor-widget elementor-widget-text-editor\" data-id=\"9910739\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>2- Copy the following code into the opened page:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-540d2fe1 elementor-widget elementor-widget-html\" data-id=\"540d2fe1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre class=\"line-numbers lang-arduino\"><code>function doGet(e) { \r\nLogger.log( JSON.stringify(e) );\r\nvar result = 'Ok';\r\nif (e.parameter == 'undefined') {\r\nresult = 'No Parameters';\r\n}\r\nelse {\r\nvar sheet_id = '1Ffxy21v1vhflxuzJLBeuH0Y_nyqVw-DQq9pVF-66Xrc'; \/\/ Spreadsheet ID\r\nvar sheet = SpreadsheetApp.openById(sheet_id).getActiveSheet();\r\nvar newRow = sheet.getLastRow() + 1; \r\nvar rowData = [];\r\nvar Curr_Date = new Date();\r\nrowData[0] = Curr_Date; \r\nvar Curr_Time = Utilities.formatDate(Curr_Date, \"Asia\/Tehran\", 'HH:mm:ss');\r\nrowData[1] = Curr_Time; \r\nfor (var param in e.parameter) {\r\nLogger.log('In for loop, param=' + param);\r\nvar value = stripQuotes(e.parameter[param]);\r\nLogger.log(param + ':' + e.parameter[param]);\r\nswitch (param) {\r\ncase 'temperature':\r\nrowData[2] = value; \/\/ Temperature in column C\r\nresult = 'Temperature Written on column C'; \r\nbreak;\r\ncase 'humidity':\r\nrowData[3] = value; \/\/ Humidity in column D\r\nresult += ' ,Humidity Written on column D'; \r\nbreak; \r\ndefault:\r\nresult = \"unsupported parameter\";\r\n}\r\n}\r\nLogger.log(JSON.stringify(rowData));\r\nvar newRange = sheet.getRange(newRow, 1, 1, rowData.length);\r\nnewRange.setValues([rowData]);\r\n}\r\nreturn ContentService.createTextOutput(result);\r\n}\r\nfunction stripQuotes( value ) {\r\nreturn value.replace(\/^[\"']|['\"]$\/g, \"\");\r\n}\r\n<\/code><\/pre>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-44407ab1 elementor-widget elementor-widget-image\" data-id=\"44407ab1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"1140\" height=\"713\" src=\"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2023\/09\/ESP32-google-sheets-ScriptsProcedure2-1200x750.jpg\" class=\"attachment-large size-large wp-image-27720\" alt=\"ESP32 to Google Sheets (Creating a Script 2)\" srcset=\"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2023\/09\/ESP32-google-sheets-ScriptsProcedure2-600x375.jpg 600w, https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2023\/09\/ESP32-google-sheets-ScriptsProcedure2-768x480.jpg 768w\" sizes=\"(max-width: 1140px) 100vw, 1140px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-536e985f elementor-alert-warning elementor-widget elementor-widget-alert\" data-id=\"536e985f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"alert.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-alert\" role=\"alert\">\n\n\t\t\t\t\t\t<span class=\"elementor-alert-title\">Note:<\/span>\n\t\t\t\n\t\t\t\t\t\t<span class=\"elementor-alert-description\">Before copying the code, make sure to delete any content on the Script page.<\/span>\n\t\t\t\n\t\t\t\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-12583e72 elementor-widget elementor-widget-text-editor\" data-id=\"12583e72\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>3- Copy the sheet ID and paste it into the Script code (as shown in the image below).<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-259fd215 elementor-widget elementor-widget-image\" data-id=\"259fd215\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"1140\" height=\"713\" src=\"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2023\/09\/ESP32-google-sheets-ScriptsProcedure3-1200x750.jpg\" class=\"attachment-large size-large wp-image-27724\" alt=\"ESP32 to Google Sheets (Creating a Script 3)\" srcset=\"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2023\/09\/ESP32-google-sheets-ScriptsProcedure3-600x375.jpg 600w, https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2023\/09\/ESP32-google-sheets-ScriptsProcedure3-768x480.jpg 768w\" sizes=\"(max-width: 1140px) 100vw, 1140px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7562116 elementor-widget elementor-widget-text-editor\" data-id=\"7562116\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>4- Go to Save -&gt; Deploy -&gt; New deployment.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-102ff6f0 elementor-widget elementor-widget-image\" data-id=\"102ff6f0\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"1140\" height=\"713\" src=\"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2023\/09\/ESP32-google-sheets-ScriptsProcedure4-1200x750.jpg\" class=\"attachment-large size-large wp-image-27728\" alt=\"ESP32 to Google Sheets (Creating a Script 4)\" srcset=\"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2023\/09\/ESP32-google-sheets-ScriptsProcedure4-600x375.jpg 600w, https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2023\/09\/ESP32-google-sheets-ScriptsProcedure4-768x480.jpg 768w\" sizes=\"(max-width: 1140px) 100vw, 1140px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-52e96d14 elementor-widget elementor-widget-text-editor\" data-id=\"52e96d14\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>5- In the &#8220;Select type&#8221; section, click on &#8220;Web app.&#8221;<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-289d4ef3 elementor-widget elementor-widget-image\" data-id=\"289d4ef3\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"1140\" height=\"713\" src=\"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2023\/09\/ESP32-google-sheets-ScriptsProcedure5-1200x750.jpg\" class=\"attachment-large size-large wp-image-27732\" alt=\"ESP32 to Google Sheets (Creating a Script 5)\" srcset=\"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2023\/09\/ESP32-google-sheets-ScriptsProcedure5-600x375.jpg 600w, https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2023\/09\/ESP32-google-sheets-ScriptsProcedure5-768x480.jpg 768w\" sizes=\"(max-width: 1140px) 100vw, 1140px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-56a08d9b elementor-widget elementor-widget-text-editor\" data-id=\"56a08d9b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>6- Configure \u201cDescription\u201d and \u201cWho has access\u201d as shown in the image below, then click on \u201cDeploy\u201d (the \u201cDescription\u201d is optional).<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2dbe630c elementor-widget elementor-widget-image\" data-id=\"2dbe630c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"1140\" height=\"713\" src=\"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2023\/09\/ESP32-google-sheets-ScriptsProcedure6-1200x750.jpg\" class=\"attachment-large size-large wp-image-27736\" alt=\"ESP32 to Google Sheets (Creating a Script 6)\" srcset=\"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2023\/09\/ESP32-google-sheets-ScriptsProcedure6-600x375.jpg 600w, https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2023\/09\/ESP32-google-sheets-ScriptsProcedure6-768x480.jpg 768w\" sizes=\"(max-width: 1140px) 100vw, 1140px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3a2ad92e elementor-widget elementor-widget-text-editor\" data-id=\"3a2ad92e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>7- Click on \u201cAuthorize access\u201d to select your Google account.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-59455996 elementor-widget elementor-widget-image\" data-id=\"59455996\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"1140\" height=\"713\" src=\"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2023\/09\/ESP32-google-sheets-ScriptsProcedure7-1200x750.jpg\" class=\"attachment-large size-large wp-image-27743\" alt=\"ESP32 to Google Sheets (Creating a Script 7)\" srcset=\"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2023\/09\/ESP32-google-sheets-ScriptsProcedure7-600x375.jpg 600w, https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2023\/09\/ESP32-google-sheets-ScriptsProcedure7-768x480.jpg 768w\" sizes=\"(max-width: 1140px) 100vw, 1140px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4f2cc04c elementor-widget elementor-widget-image\" data-id=\"4f2cc04c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"1140\" height=\"713\" src=\"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2023\/09\/ESP32-google-sheets-ScriptsProcedure8-1200x750.jpg\" class=\"attachment-large size-large wp-image-27747\" alt=\"ESP32 to Google Sheets (Creating a Script 8)\" srcset=\"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2023\/09\/ESP32-google-sheets-ScriptsProcedure8-600x375.jpg 600w, https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2023\/09\/ESP32-google-sheets-ScriptsProcedure8-768x480.jpg 768w\" sizes=\"(max-width: 1140px) 100vw, 1140px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-636231f8 elementor-widget elementor-widget-text-editor\" data-id=\"636231f8\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>8- If you face the \u201cGoogle Hasn&#8217;t Verified This App\u201d error, click on \u201cAdvanced,\u201d select the \u201cunsafe\u201d option, and click on \u201cAllow.\u201d<br \/>9- You will see a \u201cDeployment ID\u201d and a \u201cWeb app URL.\u201d Copy and save the \u201cDeployment ID\u201d in a safe place.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-41101fef elementor-widget elementor-widget-image\" data-id=\"41101fef\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"1140\" height=\"713\" src=\"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2023\/09\/ESP32-google-sheets-ScriptsProcedure9-1200x750.jpg\" class=\"attachment-large size-large wp-image-27751\" alt=\"ESP32 to Google Sheets (Creating a Script 9)\" srcset=\"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2023\/09\/ESP32-google-sheets-ScriptsProcedure9-600x375.jpg 600w, https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2023\/09\/ESP32-google-sheets-ScriptsProcedure9-768x480.jpg 768w\" sizes=\"(max-width: 1140px) 100vw, 1140px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-43289ffb elementor-widget elementor-widget-heading\" data-id=\"43289ffb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h4 class=\"elementor-heading-title elementor-size-default\">Code Cracking<\/h4>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2cd2a02a elementor-widget elementor-widget-text-editor\" data-id=\"2cd2a02a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>We first copy and paste the desired Sheet ID. And in the next line, we allow the script page to access our Sheet using this ID.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-42466990 elementor-widget elementor-widget-html\" data-id=\"42466990\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre class=\"line-numbers lang-arduino\"><code>var sheet_id = '1Ffxy21v1vhflxuzJLBeuH0Y_nyqVw-DQq9pVF-66Xrc'; \/\/ Spreadsheet ID\r\nvar sheet = SpreadsheetApp.openById(sheet_id).getActiveSheet();\r\n<\/code><\/pre>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1aef8c5d elementor-widget elementor-widget-text-editor\" data-id=\"1aef8c5d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Next, we take the current date and store it in a variable, which is then inserted into column A of the desired Sheet. After that, we retrieve the desired region\u2019s time zone and save it in column B.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1aa610b4 elementor-widget elementor-widget-html\" data-id=\"1aa610b4\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre class=\"line-numbers lang-arduino\"><code>var Curr_Date = new Date();\r\nrowData[0] = Curr_Date; \r\nvar Curr_Time = Utilities.formatDate(Curr_Date, \"Asia\/China\", 'HH:mm:ss');\r\nrowData[1] = Curr_Time;\r\n<\/code><\/pre>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-74c8e092 elementor-widget elementor-widget-text-editor\" data-id=\"74c8e092\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Finally, we obtain the temperature and humidity variables from ESP32 and print them in columns C and D of the sheet.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-738b85cd elementor-widget elementor-widget-html\" data-id=\"738b85cd\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre class=\"line-numbers lang-arduino\"><code>case 'temperature':\r\nrowData[2] = value; \r\nresult = 'Temperature Written on column C'; \r\nbreak;\r\ncase 'humidity':\r\nrowData[3] = value; \r\nresult += ' ,Humidity Written on column D'; \r\nbreak;\r\n<\/code><\/pre>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-22366074 elementor-widget elementor-widget-heading\" data-id=\"22366074\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Step 3: Wiring<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-37981fbf elementor-widget elementor-widget-text-editor\" data-id=\"37981fbf\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Connect the wires as shown below.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-595bc73f elementor-widget elementor-widget-image\" data-id=\"595bc73f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"1140\" height=\"713\" src=\"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2023\/09\/ESP32-google-sheets-Scripts-Circuit-1200x750.jpg\" class=\"attachment-large size-large wp-image-27755\" alt=\"ESP32 to Google Sheets (Scripts Circuit)\" srcset=\"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2023\/09\/ESP32-google-sheets-Scripts-Circuit-600x375.jpg 600w, https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2023\/09\/ESP32-google-sheets-Scripts-Circuit-768x480.jpg 768w\" sizes=\"(max-width: 1140px) 100vw, 1140px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5e9ad47 elementor-widget elementor-widget-heading\" data-id=\"5e9ad47\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Step 4: Uploading Code on ESP32<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-10abee37 elementor-widget elementor-widget-text-editor\" data-id=\"10abee37\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Open the Arduino IDE software. After selecting the appropriate port and board, clear the entire page and replace it with the following code.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7d129b9c elementor-widget elementor-widget-html\" data-id=\"7d129b9c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre class=\"line-numbers lang-arduino\"><code>#if defined(ESP32) || defined(ARDUINO_RASPBERRY_PI_PICO_W)\r\n#include &lt;WiFi.h&gt;\r\n#elif defined(ESP8266)\r\n#include &lt;ESP8266WiFi.h&gt;\r\n#endif\r\n#include &lt;WiFiClientSecure.h&gt;\r\n#include &lt;Wire.h&gt;\r\n#include &lt;Adafruit_Sensor.h&gt;\r\n#include \"Adafruit_BME680.h\"\r\n#define SEALEVELPRESSURE_HPA (1013.25)\r\nAdafruit_BME680 bme; \/\/ I2C\r\n#define ON_Board_LED 2 \/\/--&gt; Defining an On Board LED, used for indicators when the process of connecting to a wifi router\r\nconst char* ssid = \"Caferobot\"; \/\/--&gt; Your wifi name or SSID.\r\nconst char* password = \"**********\"; \/\/--&gt; Your wifi password.\r\n\r\n\/\/----------------------------------------Host &amp; httpsPort\r\nconst char* host = \"script.google.com\";\r\nconst int httpsPort = 443;\r\n\/\/----------------------------------------\r\n\r\nWiFiClientSecure client; \/\/--&gt; Create a WiFiClientSecure object.\r\n\r\nString GAS_ID = \"AKfycbxGBAOSGsonYMhC44spCtQUwFCW3C-0P2NdZiAmrRFXMzpSB2DKD9cF8hL7F4QCRg7C\"; \/\/--&gt; spreadsheet script ID\r\n\r\nvoid setup() {\r\n \/\/ put your setup code here, to run once:\r\n Serial.begin(115200);\r\n delay(500);\r\n WiFi.begin(ssid, password); \/\/--&gt; Connect to your WiFi router\r\n Serial.println(\"\");\r\n pinMode(ON_Board_LED,OUTPUT); \/\/--&gt; On Board LED port Direction output\r\n digitalWrite(ON_Board_LED, HIGH); \/\/--&gt; Turn off Led On Board\r\n \/\/----------------------------------------Wait for connection\r\n Serial.print(\"Connecting\");\r\n while (WiFi.status() != WL_CONNECTED) {\r\n Serial.print(\".\");\r\n \/\/----------------------------------------Make the On Board Flashing LED on the process of connecting to the wifi router.\r\n digitalWrite(ON_Board_LED, LOW);\r\n delay(250);\r\n digitalWrite(ON_Board_LED, HIGH);\r\n delay(250);\r\n \/\/----------------------------------------\r\n }\r\n \/\/----------------------------------------\r\n digitalWrite(ON_Board_LED, HIGH); \/\/--&gt; Turn off the On Board LED when it is connected to the wifi router.\r\n Serial.println(\"\");\r\n Serial.print(\"Successfully connected to : \");\r\n Serial.println(ssid);\r\n Serial.print(\"IP address: \");\r\n Serial.println(WiFi.localIP());\r\n Serial.println();\r\n \/\/----------------------------------------\r\n\r\n while (!Serial);\r\n Serial.println(F(\"BME680 test\"));\r\n if (!bme.begin()) {\r\n Serial.println(\"Could not find a valid BME680 sensor, check wiring!\");\r\n while (1);\r\n }\r\n \/\/ Set up oversampling and filter initialization\r\n bme.setTemperatureOversampling(BME680_OS_8X);\r\n bme.setHumidityOversampling(BME680_OS_2X);\r\n bme.setPressureOversampling(BME680_OS_4X);\r\n bme.setIIRFilterSize(BME680_FILTER_SIZE_3);\r\n bme.setGasHeater(320, 150); \/\/ 320*C for 150 ms\r\n client.setInsecure();\r\n}\r\n\r\nvoid loop() {\r\n \/\/ Reading temperature or humidity takes about 250 milliseconds!\r\n \/\/ Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)\r\n if (! bme.performReading()) {\r\n Serial.println(\"Failed to perform reading :(\");\r\n return;\r\n }\r\n Serial.print(\"Temperature = \");\r\n Serial.print(bme.temperature);\r\n Serial.println(\" *C\");\r\n Serial.print(\"Pressure = \");\r\n Serial.print(bme.pressure \/ 100.0);\r\n Serial.println(\" hPa\");\r\n Serial.print(\"Humidity = \");\r\n Serial.print(bme.humidity);\r\n Serial.println(\" %\");\r\n Serial.print(\"Gas = \");\r\n Serial.print(bme.gas_resistance \/ 1000.0);\r\n Serial.println(\" KOhms\");\r\n\r\n Serial.print(\"Approx. Altitude = \");\r\n Serial.print(bme.readAltitude(SEALEVELPRESSURE_HPA));\r\n Serial.println(\" m\");\r\n Serial.println();\r\nint h = bme.humidity;\r\n float t = bme.temperature;\r\n sendData(t, h); \/\/--&gt; Calls the sendData Subroutine\r\n}\r\n\r\n\/\/ Subroutine for sending data to Google Sheets\r\nvoid sendData(float tem, int hum) {\r\n Serial.println(\"==========\");\r\n Serial.print(\"connecting to \");\r\n Serial.println(host); \r\n \/\/----------------------------------------Connect to Google host\r\n if (!client.connect(host, httpsPort)) {\r\n Serial.println(\"connection failed\");\r\n return;\r\n }\r\n \/\/----------------------------------------\r\n\r\n \/\/----------------------------------------Processing data and sending data\r\n String string_temperature = String(tem);\r\n \/\/ String string_temperature = String(tem, DEC); \r\n String string_humidity = String(hum, DEC); \r\n String url = \"\/macros\/s\/\" + GAS_ID + \"\/exec?temperature=\" + string_temperature + \"&amp;humidity=\" + string_humidity;\r\n Serial.print(\"requesting URL: \");\r\n Serial.println(url);\r\n\r\n client.print(String(\"GET \") + url + \" HTTP\/1.1\\r\\n\" +\r\n \"Host: \" + host + \"\\r\\n\" +\r\n \"User-Agent: BuildFailureDetectorESP32 \\r\\n\" +\r\n \"Connection: close\\r\\n\\r\\n\");\r\n\r\n Serial.println(\"request sent\");\r\n \/\/----------------------------------------\r\n\r\n \/\/----------------------------------------Checking whether the data was sent successfully or not\r\n while (client.connected()) {\r\n String line = client.readStringUntil('\\n');\r\n if (line == \"\\r\") {\r\n Serial.println(\"headers received\");\r\n break;\r\n }\r\n }\r\n String line = client.readStringUntil('\\n');\r\n if (line.startsWith(\"{\\\"state\\\":\\\"success\\\"\")) {\r\n Serial.println(\"ESP32 \/Arduino CI successfull!\");\r\n } else {\r\n Serial.println(\"ESP32 \/Arduino CI has failed\");\r\n }\r\n Serial.print(\"reply was : \");\r\n Serial.println(line);\r\n Serial.println(\"closing connection\");\r\n Serial.println(\"==========\");\r\n Serial.println();\r\n}\r\n<\/code><\/pre>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-38877237 elementor-widget elementor-widget-text-editor\" data-id=\"38877237\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>In the GAS_ID section, paste the Deployment ID that you previously saved. In addition, enter your information in the \u201cSSID\u201d and \u201cpassword\u201d sections and then upload the code.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-78daf7e9 elementor-widget elementor-widget-image\" data-id=\"78daf7e9\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"1140\" height=\"713\" src=\"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2023\/09\/ESP32-google-sheets-Code-1200x750.jpg\" class=\"attachment-large size-large wp-image-27759\" alt=\"ESP32 to Google Sheets (Code)\" srcset=\"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2023\/09\/ESP32-google-sheets-Code-600x375.jpg 600w, https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2023\/09\/ESP32-google-sheets-Code-768x480.jpg 768w\" sizes=\"(max-width: 1140px) 100vw, 1140px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3c9e28fb elementor-widget elementor-widget-text-editor\" data-id=\"3c9e28fb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Finally, get back to the created sheet to view the desired results, including temperature, humidity, time, and date. You can also monitor this data through the serial monitor window, as well as on mobile phones and within Google Sheets.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7aaa2bb7 elementor-widget elementor-widget-image\" data-id=\"7aaa2bb7\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2023\/09\/ESP32-google-sheets-ScriptResult.jpg\" data-elementor-open-lightbox=\"yes\" data-elementor-lightbox-title=\"ESP32-google-sheets-ScriptResult\" data-e-action-hash=\"#elementor-action%3Aaction%3Dlightbox%26settings%3DeyJpZCI6Mjc3NjMsInVybCI6Imh0dHBzOlwvXC9lbGVjdHJvcGVhay5jb21cL2xlYXJuXC93cC1jb250ZW50XC91cGxvYWRzXC8yMDIzXC8wOVwvRVNQMzItZ29vZ2xlLXNoZWV0cy1TY3JpcHRSZXN1bHQuanBnIn0%3D\">\n\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"1140\" height=\"713\" src=\"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2023\/09\/ESP32-google-sheets-ScriptResult-1200x750.jpg\" class=\"attachment-large size-large wp-image-27763\" alt=\"ESP32 to Google Sheets (Creating a Script - Result)\" srcset=\"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2023\/09\/ESP32-google-sheets-ScriptResult-600x375.jpg 600w, https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2023\/09\/ESP32-google-sheets-ScriptResult-768x480.jpg 768w\" sizes=\"(max-width: 1140px) 100vw, 1140px\" \/>\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3bedbc42 elementor-widget elementor-widget-heading\" data-id=\"3bedbc42\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h4 class=\"elementor-heading-title elementor-size-default\">Code Cracking<\/h4>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-24f24773 elementor-widget elementor-widget-text-editor\" data-id=\"24f24773\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Now, let\u2019s break down the Arduino code into different sections and briefly explain the purpose of each one.<\/p><p>First, we define the required libraries. Obviously, the libraries will change if you use other sensors.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5adf4656 elementor-widget elementor-widget-html\" data-id=\"5adf4656\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre class=\"line-numbers lang-arduino\"><code>#if defined(ESP32) || defined(ARDUINO_RASPBERRY_PI_PICO_W)\r\n#include &lt;WiFi.h&gt;\r\n#elif defined(ESP8266)\r\n#include &lt;ESP8266WiFi.h&gt;\r\n#endif\r\n#include &lt;WiFiClientSecure.h&gt;\r\n#include &lt;Wire.h&gt;\r\n#include &lt;Adafruit_Sensor.h&gt;\r\n#include \"Adafruit_BME680.h\"\r\n<\/code><\/pre>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-40f1cd7b elementor-widget elementor-widget-text-editor\" data-id=\"40f1cd7b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>In the lines below, you should enter the WiFi specifications so that ESP32 can connect to the WiFi network.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4c8a27cb elementor-widget elementor-widget-html\" data-id=\"4c8a27cb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre class=\"line-numbers lang-arduino\"><code>const char* ssid = \"ElectroPeak\"; \/\/--&gt; Your wifi name or SSID.\r\nconst char* password = \"**********\"; \/\/--&gt; Your wifi password.\r\n<\/code><\/pre>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6c378181 elementor-widget elementor-widget-text-editor\" data-id=\"6c378181\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Make sure to carefully replace the \u201cDeployment ID\u201d according to the procedure mentioned earlier.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-76e1d9c elementor-widget elementor-widget-html\" data-id=\"76e1d9c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre class=\"line-numbers lang-arduino\"><code>String GAS_ID = \"AKfycbxGBAOSGsonYMhC44spCtQUwFCW3C-0P2NdZiAmrRFXMzpSB2DKD9cF8hL7F4QCRg7C\"; \/\/--&gt; spreadsheet script ID\r\n<\/code><\/pre>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7c04a6b3 elementor-widget elementor-widget-text-editor\" data-id=\"7c04a6b3\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>ESP connects to the WiFi network we have specified.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-65824ade elementor-widget elementor-widget-html\" data-id=\"65824ade\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre class=\"line-numbers lang-arduino\"><code>WiFi.begin(ssid, password); \/\/--&gt; Connect to your WiFi router\r\n<\/code><\/pre>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7fa5f1b elementor-widget elementor-widget-text-editor\" data-id=\"7fa5f1b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>If the WiFi connection is made correctly, you will see the network name and IP in the Serial Monitor window.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-29e56333 elementor-widget elementor-widget-html\" data-id=\"29e56333\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre class=\"line-numbers lang-arduino\"><code>  Serial.println(\"\");\r\n  Serial.print(\"Successfully connected to : \");\r\n  Serial.println(ssid);\r\n  Serial.print(\"IP address: \");\r\n  Serial.println(WiFi.localIP());\r\n  Serial.println();\r\n<\/code><\/pre>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-399d54bb elementor-widget elementor-widget-text-editor\" data-id=\"399d54bb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Now, we measure temperature, air pressure, humidity, pollutant gases, and height above mean sea level, and print them in the serial monitor.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-15fb4774 elementor-widget elementor-widget-html\" data-id=\"15fb4774\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre class=\"line-numbers lang-arduino\"><code>  Serial.print(\"Temperature = \");\r\n  Serial.print(bme.temperature);\r\n  Serial.println(\" *C\");\r\n  Serial.print(\"Pressure = \");\r\n  Serial.print(bme.pressure \/ 100.0);\r\n  Serial.println(\" hPa\");\r\n  Serial.print(\"Humidity = \");\r\n  Serial.print(bme.humidity);\r\n  Serial.println(\" %\");\r\n  Serial.print(\"Gas = \");\r\n  Serial.print(bme.gas_resistance \/ 1000.0);\r\n  Serial.println(\" KOhms\");\r\n\r\n  Serial.print(\"Approx. Altitude = \");\r\n  Serial.print(bme.readAltitude(SEALEVELPRESSURE_HPA));\r\n  Serial.println(\" m\");\r\n<\/code><\/pre>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7b1c8ada elementor-widget elementor-widget-text-editor\" data-id=\"7b1c8ada\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Temperature and humidity are measured, stored in variables \u201ct\u201d and \u201ch,\u201d and then sent to Google Sheets by the \u201csendData\u201d function.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-74a5a24 elementor-widget elementor-widget-html\" data-id=\"74a5a24\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre class=\"line-numbers lang-arduino\"><code>float t = bme.temperature;\r\nint h = bme.humidity;\r\nsendData(t, h); \/\/--&gt; Calls the sendData Subroutine\r\n<\/code><\/pre>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3fff9246 elementor-widget elementor-widget-text-editor\" data-id=\"3fff9246\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>In the lines below\u2014which are related to the definition of the sendDate function\u2014first, the temperature and humidity variables are defined as strings. Next, the required URL is assigned to a variable. Finally, the desired data is sent to Google Sheets using the \u201cclient.print\u201d command.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3ba990f7 elementor-widget elementor-widget-html\" data-id=\"3ba990f7\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre class=\"line-numbers lang-arduino\"><code>String string_temperature = String(tem);\r\n String string_humidity = String(hum, DEC); \r\n String url = \"\/macros\/s\/\" + GAS_ID + \"\/exec?temperature=\" + string_temperature + \"&amp;humidity=\" + string_humidity;\r\n Serial.print(\"requesting URL: \");\r\n Serial.println(url);\r\n client.print(String(\"GET \") + url + \" HTTP\/1.1\\r\\n\" +\r\n \"Host: \" + host + \"\\r\\n\" +\r\n \"User-Agent: BuildFailureDetectorESP32 \\r\\n\" +\r\n \"Connection: close\\r\\n\\r\\n\");\r\n<\/code><\/pre>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4ec8945f elementor-widget elementor-widget-heading\" data-id=\"4ec8945f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">What\u2019s next?<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5e2ba379 elementor-widget elementor-widget-text-editor\" data-id=\"5e2ba379\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>In this tutorial, we have made a data exchange system between ESP32 and Google Sheets using the \u201cGoogle Sheets API\u201d and \u201cGoogle Apps Script\u201d methods. We have also stored the date and sensor data in the created sheet. <br \/>The created sheet can also handle various complex tasks, such as:<br \/>\u2022 Sending any written data to Google Sheets\u2014no matter what format. This data can come from sensor outputs or other modules. <br \/>\u2022 Creating a \u201cData Logger\u201d and analyzing its data by simply sending the sensor data to the desired sheet.<br \/>\u2022 Developing an IoT network management system by analyzing the available data. <\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Introduction Are you tired of manually logging data from your ESP32? Would you like to automate the process? Well, the good news is that it\u2019s very simple. In this article, we will cover a comprehensive, step-by-step process on how to send data from either an ESP32 or ESP8266 to Google Sheets. Esp32 is a powerful [&hellip;]<\/p>\n","protected":false},"author":29,"featured_media":27657,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[943],"tags":[4409,4798],"platform":[2732],"bytype":[1076],"difficulty":[1078],"related_products":[4839,4840],"class_list":["post-27018","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-iot","tag-data-logging","tag-google-sheets","platform-esp32","bytype-protips","difficulty-intermediate","related_products-esp32-boards","related_products-esp8266-boards"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.9 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>ESP32\/ESP8266: Send Data to Google Sheets [2 Methods]<\/title>\n<meta name=\"description\" content=\"Learn how to send data from ESP32 or ESP8266 to Google Sheets. ESP32 Data logging using Google Sheets API and Scripts illustrated guide.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/electropeak.com\/learn\/sending-data-from-esp32-or-esp8266-to-google-sheets-2-methods\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"ESP32\/ESP8266: Send Data to Google Sheets [2 Methods]\" \/>\n<meta property=\"og:description\" content=\"Learn how to send data from ESP32 or ESP8266 to Google Sheets. ESP32 Data logging using Google Sheets API and Scripts illustrated guide.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/electropeak.com\/learn\/sending-data-from-esp32-or-esp8266-to-google-sheets-2-methods\/\" \/>\n<meta property=\"og:site_name\" content=\"Electropeak\" \/>\n<meta property=\"article:published_time\" content=\"2023-10-31T11:51:06+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-12-09T04:33:37+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2023\/09\/poster333.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"900\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Majid Merati\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Majid Merati\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"28 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/electropeak.com\\\/learn\\\/sending-data-from-esp32-or-esp8266-to-google-sheets-2-methods\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/electropeak.com\\\/learn\\\/sending-data-from-esp32-or-esp8266-to-google-sheets-2-methods\\\/\"},\"author\":{\"name\":\"Majid Merati\",\"@id\":\"https:\\\/\\\/electropeak.com\\\/learn\\\/#\\\/schema\\\/person\\\/ebd7fbd005c83f7af94f8861f849b16b\"},\"headline\":\"Sending Data from ESP32 or ESP8266 to Google Sheets [2 Methods]\",\"datePublished\":\"2023-10-31T11:51:06+00:00\",\"dateModified\":\"2023-12-09T04:33:37+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/electropeak.com\\\/learn\\\/sending-data-from-esp32-or-esp8266-to-google-sheets-2-methods\\\/\"},\"wordCount\":2577,\"commentCount\":1,\"publisher\":{\"@id\":\"https:\\\/\\\/electropeak.com\\\/learn\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/electropeak.com\\\/learn\\\/sending-data-from-esp32-or-esp8266-to-google-sheets-2-methods\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/electropeak.com\\\/learn\\\/wp-content\\\/uploads\\\/2023\\\/09\\\/poster333.jpg\",\"keywords\":[\"Data Logging\",\"Google Sheets\"],\"articleSection\":[\"Internet of Things\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/electropeak.com\\\/learn\\\/sending-data-from-esp32-or-esp8266-to-google-sheets-2-methods\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/electropeak.com\\\/learn\\\/sending-data-from-esp32-or-esp8266-to-google-sheets-2-methods\\\/\",\"url\":\"https:\\\/\\\/electropeak.com\\\/learn\\\/sending-data-from-esp32-or-esp8266-to-google-sheets-2-methods\\\/\",\"name\":\"ESP32\\\/ESP8266: Send Data to Google Sheets [2 Methods]\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/electropeak.com\\\/learn\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/electropeak.com\\\/learn\\\/sending-data-from-esp32-or-esp8266-to-google-sheets-2-methods\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/electropeak.com\\\/learn\\\/sending-data-from-esp32-or-esp8266-to-google-sheets-2-methods\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/electropeak.com\\\/learn\\\/wp-content\\\/uploads\\\/2023\\\/09\\\/poster333.jpg\",\"datePublished\":\"2023-10-31T11:51:06+00:00\",\"dateModified\":\"2023-12-09T04:33:37+00:00\",\"description\":\"Learn how to send data from ESP32 or ESP8266 to Google Sheets. ESP32 Data logging using Google Sheets API and Scripts illustrated guide.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/electropeak.com\\\/learn\\\/sending-data-from-esp32-or-esp8266-to-google-sheets-2-methods\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/electropeak.com\\\/learn\\\/sending-data-from-esp32-or-esp8266-to-google-sheets-2-methods\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/electropeak.com\\\/learn\\\/sending-data-from-esp32-or-esp8266-to-google-sheets-2-methods\\\/#primaryimage\",\"url\":\"https:\\\/\\\/electropeak.com\\\/learn\\\/wp-content\\\/uploads\\\/2023\\\/09\\\/poster333.jpg\",\"contentUrl\":\"https:\\\/\\\/electropeak.com\\\/learn\\\/wp-content\\\/uploads\\\/2023\\\/09\\\/poster333.jpg\",\"width\":1200,\"height\":900},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/electropeak.com\\\/learn\\\/sending-data-from-esp32-or-esp8266-to-google-sheets-2-methods\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/electropeak.com\\\/learn\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Sending Data from ESP32 or ESP8266 to Google Sheets [2 Methods]\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/electropeak.com\\\/learn\\\/#website\",\"url\":\"https:\\\/\\\/electropeak.com\\\/learn\\\/\",\"name\":\"Electropeak\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/electropeak.com\\\/learn\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/electropeak.com\\\/learn\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/electropeak.com\\\/learn\\\/#organization\",\"name\":\"ElectroPeak\",\"url\":\"https:\\\/\\\/electropeak.com\\\/learn\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/electropeak.com\\\/learn\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/electropeak.com\\\/learn\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/logo-electropeak-v3-square.png\",\"contentUrl\":\"https:\\\/\\\/electropeak.com\\\/learn\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/logo-electropeak-v3-square.png\",\"width\":620,\"height\":620,\"caption\":\"ElectroPeak\"},\"image\":{\"@id\":\"https:\\\/\\\/electropeak.com\\\/learn\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/electropeak.com\\\/learn\\\/#\\\/schema\\\/person\\\/ebd7fbd005c83f7af94f8861f849b16b\",\"name\":\"Majid Merati\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/c558a3e86b1bb10e3033adfe2f5a248fc427c4f9826143da1e08e6be95e920e9?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/c558a3e86b1bb10e3033adfe2f5a248fc427c4f9826143da1e08e6be95e920e9?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/c558a3e86b1bb10e3033adfe2f5a248fc427c4f9826143da1e08e6be95e920e9?s=96&d=mm&r=g\",\"caption\":\"Majid Merati\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"ESP32\/ESP8266: Send Data to Google Sheets [2 Methods]","description":"Learn how to send data from ESP32 or ESP8266 to Google Sheets. ESP32 Data logging using Google Sheets API and Scripts illustrated guide.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/electropeak.com\/learn\/sending-data-from-esp32-or-esp8266-to-google-sheets-2-methods\/","og_locale":"en_US","og_type":"article","og_title":"ESP32\/ESP8266: Send Data to Google Sheets [2 Methods]","og_description":"Learn how to send data from ESP32 or ESP8266 to Google Sheets. ESP32 Data logging using Google Sheets API and Scripts illustrated guide.","og_url":"https:\/\/electropeak.com\/learn\/sending-data-from-esp32-or-esp8266-to-google-sheets-2-methods\/","og_site_name":"Electropeak","article_published_time":"2023-10-31T11:51:06+00:00","article_modified_time":"2023-12-09T04:33:37+00:00","og_image":[{"width":1200,"height":900,"url":"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2023\/09\/poster333.jpg","type":"image\/jpeg"}],"author":"Majid Merati","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Majid Merati","Est. reading time":"28 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/electropeak.com\/learn\/sending-data-from-esp32-or-esp8266-to-google-sheets-2-methods\/#article","isPartOf":{"@id":"https:\/\/electropeak.com\/learn\/sending-data-from-esp32-or-esp8266-to-google-sheets-2-methods\/"},"author":{"name":"Majid Merati","@id":"https:\/\/electropeak.com\/learn\/#\/schema\/person\/ebd7fbd005c83f7af94f8861f849b16b"},"headline":"Sending Data from ESP32 or ESP8266 to Google Sheets [2 Methods]","datePublished":"2023-10-31T11:51:06+00:00","dateModified":"2023-12-09T04:33:37+00:00","mainEntityOfPage":{"@id":"https:\/\/electropeak.com\/learn\/sending-data-from-esp32-or-esp8266-to-google-sheets-2-methods\/"},"wordCount":2577,"commentCount":1,"publisher":{"@id":"https:\/\/electropeak.com\/learn\/#organization"},"image":{"@id":"https:\/\/electropeak.com\/learn\/sending-data-from-esp32-or-esp8266-to-google-sheets-2-methods\/#primaryimage"},"thumbnailUrl":"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2023\/09\/poster333.jpg","keywords":["Data Logging","Google Sheets"],"articleSection":["Internet of Things"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/electropeak.com\/learn\/sending-data-from-esp32-or-esp8266-to-google-sheets-2-methods\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/electropeak.com\/learn\/sending-data-from-esp32-or-esp8266-to-google-sheets-2-methods\/","url":"https:\/\/electropeak.com\/learn\/sending-data-from-esp32-or-esp8266-to-google-sheets-2-methods\/","name":"ESP32\/ESP8266: Send Data to Google Sheets [2 Methods]","isPartOf":{"@id":"https:\/\/electropeak.com\/learn\/#website"},"primaryImageOfPage":{"@id":"https:\/\/electropeak.com\/learn\/sending-data-from-esp32-or-esp8266-to-google-sheets-2-methods\/#primaryimage"},"image":{"@id":"https:\/\/electropeak.com\/learn\/sending-data-from-esp32-or-esp8266-to-google-sheets-2-methods\/#primaryimage"},"thumbnailUrl":"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2023\/09\/poster333.jpg","datePublished":"2023-10-31T11:51:06+00:00","dateModified":"2023-12-09T04:33:37+00:00","description":"Learn how to send data from ESP32 or ESP8266 to Google Sheets. ESP32 Data logging using Google Sheets API and Scripts illustrated guide.","breadcrumb":{"@id":"https:\/\/electropeak.com\/learn\/sending-data-from-esp32-or-esp8266-to-google-sheets-2-methods\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/electropeak.com\/learn\/sending-data-from-esp32-or-esp8266-to-google-sheets-2-methods\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/electropeak.com\/learn\/sending-data-from-esp32-or-esp8266-to-google-sheets-2-methods\/#primaryimage","url":"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2023\/09\/poster333.jpg","contentUrl":"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2023\/09\/poster333.jpg","width":1200,"height":900},{"@type":"BreadcrumbList","@id":"https:\/\/electropeak.com\/learn\/sending-data-from-esp32-or-esp8266-to-google-sheets-2-methods\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/electropeak.com\/learn\/"},{"@type":"ListItem","position":2,"name":"Sending Data from ESP32 or ESP8266 to Google Sheets [2 Methods]"}]},{"@type":"WebSite","@id":"https:\/\/electropeak.com\/learn\/#website","url":"https:\/\/electropeak.com\/learn\/","name":"Electropeak","description":"","publisher":{"@id":"https:\/\/electropeak.com\/learn\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/electropeak.com\/learn\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/electropeak.com\/learn\/#organization","name":"ElectroPeak","url":"https:\/\/electropeak.com\/learn\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/electropeak.com\/learn\/#\/schema\/logo\/image\/","url":"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2026\/07\/logo-electropeak-v3-square.png","contentUrl":"https:\/\/electropeak.com\/learn\/wp-content\/uploads\/2026\/07\/logo-electropeak-v3-square.png","width":620,"height":620,"caption":"ElectroPeak"},"image":{"@id":"https:\/\/electropeak.com\/learn\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/electropeak.com\/learn\/#\/schema\/person\/ebd7fbd005c83f7af94f8861f849b16b","name":"Majid Merati","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/c558a3e86b1bb10e3033adfe2f5a248fc427c4f9826143da1e08e6be95e920e9?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/c558a3e86b1bb10e3033adfe2f5a248fc427c4f9826143da1e08e6be95e920e9?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/c558a3e86b1bb10e3033adfe2f5a248fc427c4f9826143da1e08e6be95e920e9?s=96&d=mm&r=g","caption":"Majid Merati"}}]}},"_links":{"self":[{"href":"https:\/\/electropeak.com\/learn\/wp-json\/wp\/v2\/posts\/27018","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/electropeak.com\/learn\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/electropeak.com\/learn\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/electropeak.com\/learn\/wp-json\/wp\/v2\/users\/29"}],"replies":[{"embeddable":true,"href":"https:\/\/electropeak.com\/learn\/wp-json\/wp\/v2\/comments?post=27018"}],"version-history":[{"count":128,"href":"https:\/\/electropeak.com\/learn\/wp-json\/wp\/v2\/posts\/27018\/revisions"}],"predecessor-version":[{"id":27989,"href":"https:\/\/electropeak.com\/learn\/wp-json\/wp\/v2\/posts\/27018\/revisions\/27989"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/electropeak.com\/learn\/wp-json\/wp\/v2\/media\/27657"}],"wp:attachment":[{"href":"https:\/\/electropeak.com\/learn\/wp-json\/wp\/v2\/media?parent=27018"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/electropeak.com\/learn\/wp-json\/wp\/v2\/categories?post=27018"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/electropeak.com\/learn\/wp-json\/wp\/v2\/tags?post=27018"},{"taxonomy":"platform","embeddable":true,"href":"https:\/\/electropeak.com\/learn\/wp-json\/wp\/v2\/platform?post=27018"},{"taxonomy":"bytype","embeddable":true,"href":"https:\/\/electropeak.com\/learn\/wp-json\/wp\/v2\/bytype?post=27018"},{"taxonomy":"difficulty","embeddable":true,"href":"https:\/\/electropeak.com\/learn\/wp-json\/wp\/v2\/difficulty?post=27018"},{"taxonomy":"related_products","embeddable":true,"href":"https:\/\/electropeak.com\/learn\/wp-json\/wp\/v2\/related_products?post=27018"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}