{"id":12923,"date":"2017-01-05T15:50:46","date_gmt":"2017-01-05T20:50:46","guid":{"rendered":"http:\/\/embedded-lab.com\/blog\/?p=12923"},"modified":"2017-01-06T09:17:04","modified_gmt":"2017-01-06T14:17:04","slug":"send-email-text-messages-using-esp8266","status":"publish","type":"post","link":"https:\/\/embedded-lab.com\/blog\/send-email-text-messages-using-esp8266\/","title":{"rendered":"How to send email and text messages using ESP8266"},"content":{"rendered":"<p>Earlier we looked at a method of <a href=\"http:\/\/embedded-lab.com\/blog\/post-data-google-sheets-using-esp8266\/\" target=\"_blank\"><strong>programming ESP8266 to\u00a0send sensor data directly to Google Sheets<\/strong><\/a> without using any third party modules. Now, we will expand that a little bit and learn to send an email as well as a text message (SMS) using ESP8266. In this demo, we will configure our ESP8266 to send an email and a text message when the\u00a0value of a variable (which could be a sensor output, or any other physical quantity) goes beyond a threshold limit.<\/p>\n<p>This is not entirely a new topic as there are similar tutorials available online\u00a0to show how to do this. This article particularly\u00a0focusses on just using the ESP8266 and Google environment to send email or a text message.<\/p>\n<div id=\"attachment_12925\" style=\"width: 763px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2017\/01\/SendTextAndEmailFromNodeMCU.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-12925\" class=\"size-full wp-image-12925\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2017\/01\/SendTextAndEmailFromNodeMCU.png\" alt=\"Send Text and Email from NodeMCU\" width=\"753\" height=\"413\" srcset=\"https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2017\/01\/SendTextAndEmailFromNodeMCU.png 753w, https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2017\/01\/SendTextAndEmailFromNodeMCU-580x318.png 580w\" sizes=\"auto, (max-width: 753px) 100vw, 753px\" \/><\/a><p id=\"caption-attachment-12925\" class=\"wp-caption-text\">Send Text and Email from NodeMCU<\/p><\/div>\n<p><!--more--><\/p>\n<h5>Hardware requirement:<\/h5>\n<p>To understand the concept, all we need is an ESP8266 module and a power supply for\u00a0it, usually\u00a0a USB cable. I am using a NodeMCU board for convenience. We do not need any sensors or other things. For illustration of the method, we will just generate a random number between certain intervals, and if the number\u00a0goes beyond what we have set for threshold limit, we would like to receive an email and\/or a text message.<\/p>\n<h5>Prepare a Google Sheets:<\/h5>\n<p>Just like in <a href=\"http:\/\/embedded-lab.com\/blog\/post-data-google-sheets-using-esp8266\/\" target=\"_blank\">pushing data to ESP8266 to Google Sheets<\/a>, we will create a new Google Sheet in a Google Drive. So, let\u2019s do the following:<br \/>\n1) Open up your Google Drive in a web browser and create a Google Sheets. You can call this file whatever you like. I called it \u2018SendEmailAndText_ESP8266\u2019.<br \/>\n2) From the Google Sheets that you just created, go to <strong>Tools &gt; Script editor&#8230;<\/strong><\/p>\n<div id=\"attachment_12924\" style=\"width: 577px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2017\/01\/GAS_Tools_ScriptEditor.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-12924\" class=\"size-full wp-image-12924\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2017\/01\/GAS_Tools_ScriptEditor.png\" alt=\"GAS &gt; Tools &gt; Script Editor\" width=\"567\" height=\"231\" \/><\/a><p id=\"caption-attachment-12924\" class=\"wp-caption-text\">GAS &gt; Tools &gt; Script Editor<\/p><\/div>\n<p>3) Give a name to the Script editor main file in the toolbar (whatever you like).<br \/>\n4) Paste the following code to the Code.gs file (assuming you haven\u2019t change the default file name). Again, this filename doesn\u2019t matter either.<\/p>\n<h5>Google Scripts Code:<\/h5>\n\n<div class=\"wp_syntax\"><table><tr><td class=\"code\"><pre class=\"javascript\" style=\"font-family:monospace;\"><span style=\"color: #006600; font-style: italic;\">\/\/ Created by: Akshaya Niraula<\/span>\n<span style=\"color: #006600; font-style: italic;\">\/\/ Date: 2016 December 15th.<\/span>\n&nbsp;\n<span style=\"color: #006600; font-style: italic;\">\/\/ Steps are valid as of 2016 December 15th.<\/span>\n<span style=\"color: #006600; font-style: italic;\">\/\/ 0) From Google spreadsheet, Tools &amp;gt; Script Editor...<\/span>\n<span style=\"color: #006600; font-style: italic;\">\/\/ 1) Write your code<\/span>\n<span style=\"color: #006600; font-style: italic;\">\/\/ 2) Save and give a meaningful name<\/span>\n<span style=\"color: #006600; font-style: italic;\">\/\/ 3) Run and make sure &quot;doGet&quot; is selected<\/span>\n<span style=\"color: #006600; font-style: italic;\">\/\/    You can set a method from Run menu<\/span>\n<span style=\"color: #006600; font-style: italic;\">\/\/ 4) When you run for the first time, it will ask <\/span>\n<span style=\"color: #006600; font-style: italic;\">\/\/    for the permission. You must allow it.<\/span>\n<span style=\"color: #006600; font-style: italic;\">\/\/    Make sure everything is working as it should.<\/span>\n<span style=\"color: #006600; font-style: italic;\">\/\/ 5) From Publish menu &amp;gt; Deploy as Web App...<\/span>\n<span style=\"color: #006600; font-style: italic;\">\/\/    Select a new version every time it's published<\/span>\n<span style=\"color: #006600; font-style: italic;\">\/\/    Type comments next to the version<\/span>\n<span style=\"color: #006600; font-style: italic;\">\/\/    Execute as: &quot;Me (your email address)&quot;<\/span>\n<span style=\"color: #006600; font-style: italic;\">\/\/    MUST: Select &quot;Anyone, even anonymous&quot; on &quot;Who has access to this script&quot;<\/span>\n<span style=\"color: #006600; font-style: italic;\">\/\/    For the first time it will give you some prompt, accept it.<\/span>\n<span style=\"color: #006600; font-style: italic;\">\/\/    You will need the given information (url) later. This doesn't change, ever!<\/span>\n&nbsp;\n&nbsp;\n<span style=\"color: #000066; font-weight: bold;\">var<\/span> number <span style=\"color: #339933;\">=<\/span> <span style=\"color: #3366CC;\">&quot;8001239999&quot;<\/span><span style=\"color: #339933;\">;<\/span> <span style=\"color: #006600; font-style: italic;\">\/\/ your phone number <\/span>\n<span style=\"color: #000066; font-weight: bold;\">var<\/span> domain <span style=\"color: #339933;\">=<\/span> <span style=\"color: #3366CC;\">&quot;tmomail.net&quot;<\/span><span style=\"color: #339933;\">;<\/span> <span style=\"color: #006600; font-style: italic;\">\/\/ You may find your domain for you carrier at: http:\/\/www.emailtextmessages.com\/<\/span>\n<span style=\"color: #000066; font-weight: bold;\">var<\/span> toEmail <span style=\"color: #339933;\">=<\/span> <span style=\"color: #3366CC;\">&quot;YourOrFriendsEmail@gmail.com&quot;<\/span><span style=\"color: #339933;\">;<\/span>\n&nbsp;\n<span style=\"color: #000066; font-weight: bold;\">function<\/span> doGet<span style=\"color: #009900;\">&#40;<\/span>e<span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #009900;\">&#123;<\/span>\n  Logger.<span style=\"color: #660066;\">log<\/span><span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #3366CC;\">&quot;--- doGet ---&quot;<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n&nbsp;\n  <span style=\"color: #006600; font-style: italic;\">\/\/ for debugging<\/span>\n  <span style=\"color: #000066; font-weight: bold;\">if<\/span> <span style=\"color: #009900;\">&#40;<\/span>e <span style=\"color: #339933;\">==<\/span> <span style=\"color: #003366; font-weight: bold;\">null<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #009900;\">&#123;<\/span>e<span style=\"color: #339933;\">=<\/span><span style=\"color: #009900;\">&#123;<\/span><span style=\"color: #009900;\">&#125;<\/span><span style=\"color: #339933;\">;<\/span> e.<span style=\"color: #660066;\">parameters<\/span> <span style=\"color: #339933;\">=<\/span> <span style=\"color: #009900;\">&#123;<\/span>value<span style=\"color: #339933;\">:<\/span><span style=\"color: #3366CC;\">&quot;-1&quot;<\/span><span style=\"color: #009900;\">&#125;<\/span><span style=\"color: #339933;\">;<\/span><span style=\"color: #009900;\">&#125;<\/span>\n&nbsp;\n  <span style=\"color: #000066; font-weight: bold;\">try<\/span><span style=\"color: #009900;\">&#123;<\/span>\n    <span style=\"color: #006600; font-style: italic;\">\/\/ get the values from parameters to local var<\/span>\n    <span style=\"color: #000066; font-weight: bold;\">var<\/span> value <span style=\"color: #339933;\">=<\/span> e.<span style=\"color: #660066;\">parameters<\/span>.<span style=\"color: #660066;\">value<\/span><span style=\"color: #339933;\">;<\/span>\n    <span style=\"color: #000066; font-weight: bold;\">var<\/span> phoneEmail <span style=\"color: #339933;\">=<\/span> number <span style=\"color: #339933;\">+<\/span> <span style=\"color: #3366CC;\">&quot;@&quot;<\/span> <span style=\"color: #339933;\">+<\/span> domain<span style=\"color: #339933;\">;<\/span>\n&nbsp;\n    <span style=\"color: #006600; font-style: italic;\">\/\/ Send Text Message (SMS)<\/span>\n    send_Email<span style=\"color: #009900;\">&#40;<\/span>phoneEmail<span style=\"color: #339933;\">,<\/span> <span style=\"color: #3366CC;\">&quot;NodeMCU here, your sensor went beyond your threshold. Sensor reported: &quot;<\/span> <span style=\"color: #339933;\">+<\/span> value <span style=\"color: #339933;\">+<\/span> <span style=\"color: #3366CC;\">&quot; on:&quot;<\/span> <span style=\"color: #339933;\">+<\/span> <span style=\"color: #000066; font-weight: bold;\">new<\/span> <span style=\"\">Date<\/span><span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span> \n&nbsp;\n    <span style=\"color: #006600; font-style: italic;\">\/\/ Send Email<\/span>\n    <span style=\"color: #000066; font-weight: bold;\">var<\/span> message <span style=\"color: #339933;\">=<\/span> <span style=\"color: #3366CC;\">&quot;&lt;b&gt;Dear User,&lt;\/b&gt;\n&nbsp;\nYour equipment has reached it's threshold value. It just reported a value of &quot;<\/span> <span style=\"color: #339933;\">+<\/span> value <span style=\"color: #339933;\">+<\/span> <span style=\"color: #3366CC;\">&quot;. Please take a necessary action.\n&quot;<\/span><span style=\"color: #339933;\">;<\/span>\n    message <span style=\"color: #339933;\">+=<\/span> <span style=\"color: #3366CC;\">&quot;As a valued customer, we have sent you a text message also. \n&nbsp;\n&quot;<\/span><span style=\"color: #339933;\">;<\/span>\n    message <span style=\"color: #339933;\">+=<\/span> <span style=\"color: #3366CC;\">&quot;To learn more about this email, please click on the link below: \n&quot;<\/span><span style=\"color: #339933;\">;<\/span>\n    message <span style=\"color: #339933;\">+=<\/span> <span style=\"color: #3366CC;\">&quot;&lt;a href=&quot;<\/span>http<span style=\"color: #339933;\">:<\/span><span style=\"color: #006600; font-style: italic;\">\/\/www.embedded-lab.com\/&quot; target=&quot;new&quot;&gt;www.Embedded-Lab.com&lt;\/a&gt;<\/span>\n&nbsp;\n&nbsp;\n<span style=\"color: #3366CC;\">&quot;;\n    message += &quot;<\/span>Sincerely<span style=\"color: #339933;\">,<\/span>\n<span style=\"color: #339933;\">&lt;<\/span>b<span style=\"color: #339933;\">&gt;<\/span>NodeMCU ESP8266<span style=\"color: #339933;\">&lt;\/<\/span>b<span style=\"color: #339933;\">&gt;<\/span><span style=\"color: #3366CC;\">&quot;;\n&nbsp;\n    send_Email(toEmail, message)\n&nbsp;\n    return ContentService.createTextOutput(&quot;<\/span>Things went successfully.<span style=\"color: #3366CC;\">&quot;);\n  }  \n   catch(error) {\n    Logger.log(JSON.stringify(error));\n    return ContentService.createTextOutput(&quot;<\/span>oops....<span style=\"color: #3366CC;\">&quot; + error.message \n                                            + &quot;<\/span>\\n<span style=\"color: #3366CC;\">&quot; + new Date() \n                                            + &quot;<\/span>\\nnumber<span style=\"color: #339933;\">:<\/span> <span style=\"color: #3366CC;\">&quot; + number +\n                                            + &quot;<\/span>\\ndomain<span style=\"color: #339933;\">:<\/span> <span style=\"color: #3366CC;\">&quot; + domain);\n  }\n&nbsp;\n}\n&nbsp;\nfunction send_Email(address, message){\n&nbsp;\n  MailApp.sendEmail({\n          &quot;<\/span>to<span style=\"color: #3366CC;\">&quot;: address,\n     &quot;<\/span>subject<span style=\"color: #3366CC;\">&quot;: &quot;<\/span>Threshold reached <span style=\"color: #339933;\">-<\/span> ESP8266<span style=\"color: #3366CC;\">&quot;,\n    &quot;<\/span>htmlBody<span style=\"color: #3366CC;\">&quot;: message      \n   });\n&nbsp;\n  Logger.log(&quot;<\/span>send_textMessage<span style=\"color: #339933;\">:<\/span> <span style=\"color: #3366CC;\">&quot; + &quot;<\/span>Email sent to<span style=\"color: #339933;\">:<\/span> <span style=\"color: #3366CC;\">&quot; + address);\n}<\/span><\/pre><\/td><\/tr><\/table><\/div>\n\n<h5><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2017\/01\/GASCode.txt\" target=\"_blank\">Download Google App Script Code<\/a><\/h5>\n<h5>Test the progress:<\/h5>\n<p>As shown in the image below, select doGet and click on bug icon to debug your code. If you followed the steps properly, you should have received a text message and an email from you gmail account.<\/p>\n<p><strong>Please note<\/strong> Google will need your permissions to send email on your behalf so when Google asks for the permission, you must provide it.<\/p>\n<div id=\"attachment_12926\" style=\"width: 381px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2017\/01\/GAS_Debug_DoGet.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-12926\" class=\"size-full wp-image-12926\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2017\/01\/GAS_Debug_DoGet.png\" alt=\"GAS &gt; Debug &gt; DoGet\" width=\"371\" height=\"166\" \/><\/a><p id=\"caption-attachment-12926\" class=\"wp-caption-text\">GAS &gt; Debug &gt; DoGet<\/p><\/div>\n<p>If you didn\u2019t receive a text message and\/or an email, please double check your steps. If you did receive then let\u2019s publish our work so that we can get a URL which we can use in NodeMCU. To publish, click on <strong>Publish &gt; Deploy as web app\u2026<\/strong><\/p>\n<div id=\"attachment_12929\" style=\"width: 428px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2017\/01\/GAS_Publish_Menu.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-12929\" class=\"size-full wp-image-12929\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2017\/01\/GAS_Publish_Menu.png\" alt=\"GAS &gt; Publish menu\" width=\"418\" height=\"222\" \/><\/a><p id=\"caption-attachment-12929\" class=\"wp-caption-text\">GAS &gt; Publish menu<\/p><\/div>\n<p>Above action will show the following window. Make sure to select all the three steps as shown in the image below.<\/p>\n<div id=\"attachment_12927\" style=\"width: 460px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2017\/01\/GAS_Deploy_as_web_app.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-12927\" class=\"size-full wp-image-12927\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2017\/01\/GAS_Deploy_as_web_app.png\" alt=\"GAS &gt; Deploy as Web App\" width=\"450\" height=\"558\" \/><\/a><p id=\"caption-attachment-12927\" class=\"wp-caption-text\">GAS &gt; Deploy as Web App<\/p><\/div>\n<p>When you click on <strong>Update<\/strong> or <strong>Publish<\/strong>, you will see a box as shown below. From this box, copy the given address. I usually save this address back into Google Script for future use. We will need this address in NodeMCU\/ESP8266 code.<\/p>\n<p><span style=\"color: #ff0000;\">Note<\/span>: we will call the text between \/s\/ and \/exec as <strong>GScriptID<\/strong>. This information is required in NodeMCU code.<\/p>\n<div id=\"attachment_12928\" style=\"width: 459px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2017\/01\/GAS_Deploy_as_web_app_result.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-12928\" class=\"size-full wp-image-12928\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2017\/01\/GAS_Deploy_as_web_app_result.png\" alt=\"GAS &gt; Deploy as web app &gt; Result\" width=\"449\" height=\"267\" \/><\/a><p id=\"caption-attachment-12928\" class=\"wp-caption-text\">GAS &gt; Deploy as web app &gt; Result<\/p><\/div>\n<p>Grab the URL from above box and append the \u201c?value=-1\u201d to it, it will look something like this:<br \/>\nhttps:\/\/script.google.com\/macros\/s\/&#8212;YourGScriptIDGoesHere&#8212;\/exec?value=-1. Now paste this URL to your browser&#8217;s address and press enter. In a few seconds you should receive an email and a text message.<\/p>\n<h5>NodeMCU \/ ESP8266 Code:<\/h5>\n<p>Please make sure to grab the library file that helps us redirect to the URL that we need. This process has been explained in <a href=\"http:\/\/embedded-lab.com\/blog\/post-data-google-sheets-using-esp8266\/\" target=\"_blank\">How To Post Data To Google Sheets Using Esp8266<\/a>.<\/p>\n<p><span class=\"anir_code_comment\">\/\/ BY: Akshaya Niraula<\/span> <br \/>\n<span class=\"anir_code_comment\">\/\/ ON: Jan 4, 2017<\/span> <br \/>\n<span class=\"anir_code_comment\">\/\/ AT: <\/span><u><span class=\"anir_code_comment\">http:\/\/www.embedded-lab.com\/<\/span><\/u><span class=\"anir_code_comment\"><\/span> <\/p>\n<p><span class=\"anir_code_define\">#include<\/span> <span class=\"anir_code_comment\">&lt;<\/span><span class=\"anir_code_methods\">ESP8266WiFi<\/span><span class=\"anir_code_comment\">.<\/span><span class=\"anir_code_braces\">h<\/span><span class=\"anir_code_comment\">&gt;<\/span> <br \/>\n<span class=\"anir_code_define\">#include<\/span> <span class=\"anir_code_string\">&#8220;HTTPSRedirect.h&#8221;<\/span> <\/p>\n<p><span class=\"anir_code_modifiers\">const<\/span> <span class=\"anir_code_modifiers\">char<\/span><span class=\"anir_code_comment\">*<\/span> <span class=\"anir_code_braces\">ssid<\/span> <span class=\"anir_code_comment\">=<\/span> <span class=\"anir_code_string\">&#8220;&#8211;Your SSID&#8211;&#8220;<\/span><span class=\"anir_code_braces\">;<\/span> <br \/>\n<span class=\"anir_code_modifiers\">const<\/span> <span class=\"anir_code_modifiers\">char<\/span><span class=\"anir_code_comment\">*<\/span> <span class=\"anir_code_braces\">password<\/span> <span class=\"anir_code_comment\">=<\/span> <span class=\"anir_code_string\">&#8220;&#8211;Your Password&#8211;&#8220;<\/span><span class=\"anir_code_braces\">;<\/span> <\/p>\n<p><span class=\"anir_code_comment\">\/\/ The ID below comes from URL <\/span> <br \/>\n<span class=\"anir_code_comment\">\/\/ after publishing Google Script as Web App.<\/span> <br \/>\n<span class=\"anir_code_modifiers\">const<\/span> <span class=\"anir_code_modifiers\">char<\/span> <span class=\"anir_code_comment\">*<\/span><span class=\"anir_code_braces\">GScriptId<\/span> <span class=\"anir_code_comment\">=<\/span> <span class=\"anir_code_string\">&#8220;&#8211;Your GScriptId&#8211;&#8220;<\/span><span class=\"anir_code_braces\">;<\/span> <\/p>\n<p>\n<span class=\"anir_code_modifiers\">const<\/span> <span class=\"anir_code_modifiers\">char<\/span><span class=\"anir_code_comment\">*<\/span> <span class=\"anir_code_braces\">host<\/span> <span class=\"anir_code_comment\">=<\/span> <span class=\"anir_code_string\">&#8220;script.google.com&#8221;<\/span><span class=\"anir_code_braces\">;<\/span> <br \/>\n<span class=\"anir_code_modifiers\">const<\/span> <span class=\"anir_code_modifiers\">char<\/span><span class=\"anir_code_comment\">*<\/span> <span class=\"anir_code_braces\">googleRedirHost<\/span> <span class=\"anir_code_comment\">=<\/span> <span class=\"anir_code_string\">&#8220;script.googleusercontent.com&#8221;<\/span><span class=\"anir_code_braces\">;<\/span> <\/p>\n<p><span class=\"anir_code_modifiers\">const<\/span> <span class=\"anir_code_modifiers\">int<\/span> <span class=\"anir_code_braces\">httpsPort<\/span> <span class=\"anir_code_comment\">=<\/span> &nbsp;&nbsp;&nbsp;&nbsp;<span class=\"anir_code_braces\">443<\/span><span class=\"anir_code_braces\">;<\/span> <br \/>\n<span class=\"anir_code_braces\">HTTPSRedirect<\/span> <span class=\"anir_code_methods\">client<\/span><span class=\"anir_code_braces\">(<\/span><span class=\"anir_code_braces\">httpsPort<\/span><span class=\"anir_code_braces\">)<\/span><span class=\"anir_code_braces\">;<\/span> <\/p>\n<p><span class=\"anir_code_comment\">\/\/ Prepare the url (without the varying data)<\/span> <br \/>\n<span class=\"anir_code_modifiers\">String<\/span> <span class=\"anir_code_braces\">url<\/span> <span class=\"anir_code_comment\">=<\/span> <span class=\"anir_code_modifiers\">String<\/span><span class=\"anir_code_braces\">(<\/span><span class=\"anir_code_string\">&#8220;\/macros\/s\/&#8221;<\/span><span class=\"anir_code_braces\">)<\/span> <span class=\"anir_code_comment\">+<\/span> <span class=\"anir_code_braces\">GScriptId<\/span> <span class=\"anir_code_comment\">+<\/span> <span class=\"anir_code_string\">&#8220;\/exec?&#8221;<\/span><span class=\"anir_code_braces\">;<\/span> <\/p>\n<p><span class=\"anir_code_modifiers\">const<\/span> <span class=\"anir_code_modifiers\">char<\/span><span class=\"anir_code_comment\">*<\/span> <span class=\"anir_code_braces\">fingerprint<\/span> <span class=\"anir_code_comment\">=<\/span> <span class=\"anir_code_string\">&#8220;F0 5C 74 77 3F 6B 25 D7 3B 66 4D 43 2F 7E BC 5B E9 28 86 AD&#8221;<\/span><span class=\"anir_code_braces\">;<\/span> <\/p>\n<p><span class=\"anir_code_modifiers\">void<\/span> <span class=\"anir_code_define\">setup<\/span><span class=\"anir_code_braces\">(<\/span><span class=\"anir_code_braces\">)<\/span> <span class=\"anir_code_braces\">{<\/span> <br \/>\n &nbsp;&nbsp;&nbsp;&nbsp;<b><span class=\"anir_code_methods\">Serial<\/span><\/b><span class=\"anir_code_comment\">.<\/span><span class=\"anir_code_methods\">begin<\/span><span class=\"anir_code_braces\">(<\/span><span class=\"anir_code_braces\">115200<\/span><span class=\"anir_code_braces\">)<\/span><span class=\"anir_code_braces\">;<\/span> <br \/>\n &nbsp;&nbsp;&nbsp;&nbsp;<b><span class=\"anir_code_methods\">Serial<\/span><\/b><span class=\"anir_code_comment\">.<\/span><span class=\"anir_code_methods\">println<\/span><span class=\"anir_code_braces\">(<\/span><span class=\"anir_code_string\">&#8220;Connecting to wifi: &#8220;<\/span><span class=\"anir_code_braces\">)<\/span><span class=\"anir_code_braces\">;<\/span> <br \/>\n &nbsp;&nbsp;&nbsp;&nbsp;<b><span class=\"anir_code_methods\">Serial<\/span><\/b><span class=\"anir_code_comment\">.<\/span><span class=\"anir_code_methods\">println<\/span><span class=\"anir_code_braces\">(<\/span><span class=\"anir_code_braces\">ssid<\/span><span class=\"anir_code_braces\">)<\/span><span class=\"anir_code_braces\">;<\/span> <br \/>\n &nbsp;&nbsp;&nbsp;&nbsp;<b><span class=\"anir_code_methods\">Serial<\/span><\/b><span class=\"anir_code_comment\">.<\/span><span class=\"anir_code_methods\">flush<\/span><span class=\"anir_code_braces\">(<\/span><span class=\"anir_code_braces\">)<\/span><span class=\"anir_code_braces\">;<\/span> <\/p>\n<p> &nbsp;&nbsp;&nbsp;&nbsp;<b><span class=\"anir_code_methods\">WiFi<\/span><\/b><span class=\"anir_code_comment\">.<\/span><span class=\"anir_code_methods\">begin<\/span><span class=\"anir_code_braces\">(<\/span><span class=\"anir_code_braces\">ssid<\/span><span class=\"anir_code_comment\">,<\/span> <span class=\"anir_code_braces\">password<\/span><span class=\"anir_code_braces\">)<\/span><span class=\"anir_code_braces\">;<\/span> <br \/>\n &nbsp;&nbsp;&nbsp;&nbsp;<span class=\"anir_code_define\">while<\/span> <span class=\"anir_code_braces\">(<\/span><b><span class=\"anir_code_methods\">WiFi<\/span><\/b><span class=\"anir_code_comment\">.<\/span><span class=\"anir_code_methods\">status<\/span><span class=\"anir_code_braces\">(<\/span><span class=\"anir_code_braces\">)<\/span> <span class=\"anir_code_comment\">!=<\/span> <span class=\"anir_code_braces\">WL_CONNECTED<\/span><span class=\"anir_code_braces\">)<\/span> <span class=\"anir_code_braces\">{<\/span> <br \/>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"anir_code_methods\">delay<\/span><span class=\"anir_code_braces\">(<\/span><span class=\"anir_code_braces\">500<\/span><span class=\"anir_code_braces\">)<\/span><span class=\"anir_code_braces\">;<\/span> <br \/>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<b><span class=\"anir_code_methods\">Serial<\/span><\/b><span class=\"anir_code_comment\">.<\/span><span class=\"anir_code_methods\">print<\/span><span class=\"anir_code_braces\">(<\/span><span class=\"anir_code_string\">&#8220;.&#8221;<\/span><span class=\"anir_code_braces\">)<\/span><span class=\"anir_code_braces\">;<\/span> <br \/>\n &nbsp;&nbsp;&nbsp;&nbsp;<span class=\"anir_code_braces\">}<\/span> <br \/>\n &nbsp;&nbsp;&nbsp;&nbsp;<b><span class=\"anir_code_methods\">Serial<\/span><\/b><span class=\"anir_code_comment\">.<\/span><span class=\"anir_code_methods\">println<\/span><span class=\"anir_code_braces\">(<\/span><span class=\"anir_code_string\">&#8221; IP address: &#8220;<\/span><span class=\"anir_code_braces\">)<\/span><span class=\"anir_code_braces\">;<\/span> <br \/>\n &nbsp;&nbsp;&nbsp;&nbsp;<b><span class=\"anir_code_methods\">Serial<\/span><\/b><span class=\"anir_code_comment\">.<\/span><span class=\"anir_code_methods\">println<\/span><span class=\"anir_code_braces\">(<\/span><b><span class=\"anir_code_methods\">WiFi<\/span><\/b><span class=\"anir_code_comment\">.<\/span><span class=\"anir_code_methods\">localIP<\/span><span class=\"anir_code_braces\">(<\/span><span class=\"anir_code_braces\">)<\/span><span class=\"anir_code_braces\">)<\/span><span class=\"anir_code_braces\">;<\/span> <\/p>\n<p> &nbsp;&nbsp;&nbsp;&nbsp; <br \/>\n &nbsp;&nbsp;&nbsp;&nbsp;<b><span class=\"anir_code_methods\">Serial<\/span><\/b><span class=\"anir_code_comment\">.<\/span><span class=\"anir_code_methods\">print<\/span><span class=\"anir_code_braces\">(<\/span><span class=\"anir_code_modifiers\">String<\/span><span class=\"anir_code_braces\">(<\/span><span class=\"anir_code_string\">&#8220;Connecting to &#8220;<\/span><span class=\"anir_code_braces\">)<\/span><span class=\"anir_code_braces\">)<\/span><span class=\"anir_code_braces\">;<\/span> <br \/>\n &nbsp;&nbsp;&nbsp;&nbsp;<b><span class=\"anir_code_methods\">Serial<\/span><\/b><span class=\"anir_code_comment\">.<\/span><span class=\"anir_code_methods\">println<\/span><span class=\"anir_code_braces\">(<\/span><span class=\"anir_code_braces\">host<\/span><span class=\"anir_code_braces\">)<\/span><span class=\"anir_code_braces\">;<\/span> <\/p>\n<p> &nbsp;&nbsp;&nbsp;&nbsp;<span class=\"anir_code_modifiers\">bool<\/span> <span class=\"anir_code_braces\">flag<\/span> <span class=\"anir_code_comment\">=<\/span> <span class=\"anir_code_modifiers\">false<\/span><span class=\"anir_code_braces\">;<\/span> <br \/>\n &nbsp;&nbsp;&nbsp;&nbsp;<span class=\"anir_code_define\">for<\/span> <span class=\"anir_code_braces\">(<\/span><span class=\"anir_code_modifiers\">int<\/span> <span class=\"anir_code_braces\">i<\/span><span class=\"anir_code_comment\">=<\/span><span class=\"anir_code_braces\">0<\/span><span class=\"anir_code_braces\">;<\/span> <span class=\"anir_code_braces\">i<\/span><span class=\"anir_code_comment\">&lt;<\/span><span class=\"anir_code_braces\">5<\/span><span class=\"anir_code_braces\">;<\/span> <span class=\"anir_code_braces\">i<\/span><span class=\"anir_code_comment\">++<\/span><span class=\"anir_code_braces\">)<\/span><span class=\"anir_code_braces\">{<\/span> <br \/>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"anir_code_modifiers\">int<\/span> <span class=\"anir_code_braces\">retval<\/span> <span class=\"anir_code_comment\">=<\/span> <span class=\"anir_code_methods\">client<\/span><span class=\"anir_code_comment\">.<\/span><span class=\"anir_code_methods\">connect<\/span><span class=\"anir_code_braces\">(<\/span><span class=\"anir_code_braces\">host<\/span><span class=\"anir_code_comment\">,<\/span> <span class=\"anir_code_braces\">httpsPort<\/span><span class=\"anir_code_braces\">)<\/span><span class=\"anir_code_braces\">;<\/span> <br \/>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"anir_code_define\">if<\/span> <span class=\"anir_code_braces\">(<\/span><span class=\"anir_code_braces\">retval<\/span> <span class=\"anir_code_comment\">==<\/span> <span class=\"anir_code_braces\">1<\/span><span class=\"anir_code_braces\">)<\/span> <span class=\"anir_code_braces\">{<\/span> <br \/>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"anir_code_braces\">flag<\/span> <span class=\"anir_code_comment\">=<\/span> <span class=\"anir_code_modifiers\">true<\/span><span class=\"anir_code_braces\">;<\/span> <br \/>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"anir_code_define\">break<\/span><span class=\"anir_code_braces\">;<\/span> <br \/>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"anir_code_braces\">}<\/span> <br \/>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"anir_code_define\">else<\/span> <br \/>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<b><span class=\"anir_code_methods\">Serial<\/span><\/b><span class=\"anir_code_comment\">.<\/span><span class=\"anir_code_methods\">println<\/span><span class=\"anir_code_braces\">(<\/span><span class=\"anir_code_string\">&#8220;Connection failed. Retrying&#8230;&#8221;<\/span><span class=\"anir_code_braces\">)<\/span><span class=\"anir_code_braces\">;<\/span> <br \/>\n &nbsp;&nbsp;&nbsp;&nbsp;<span class=\"anir_code_braces\">}<\/span> <\/p>\n<p> &nbsp;&nbsp;&nbsp;&nbsp;<span class=\"anir_code_comment\">\/\/ Connection Status, 1 = Connected, 0 is not.<\/span> <br \/>\n &nbsp;&nbsp;&nbsp;&nbsp;<b><span class=\"anir_code_methods\">Serial<\/span><\/b><span class=\"anir_code_comment\">.<\/span><span class=\"anir_code_methods\">println<\/span><span class=\"anir_code_braces\">(<\/span><span class=\"anir_code_string\">&#8220;Connection Status: &#8220;<\/span> <span class=\"anir_code_comment\">+<\/span> <span class=\"anir_code_modifiers\">String<\/span><span class=\"anir_code_braces\">(<\/span><span class=\"anir_code_methods\">client<\/span><span class=\"anir_code_comment\">.<\/span><span class=\"anir_code_methods\">connected<\/span><span class=\"anir_code_braces\">(<\/span><span class=\"anir_code_braces\">)<\/span><span class=\"anir_code_braces\">)<\/span><span class=\"anir_code_braces\">)<\/span><span class=\"anir_code_braces\">;<\/span> <br \/>\n &nbsp;&nbsp;&nbsp;&nbsp;<b><span class=\"anir_code_methods\">Serial<\/span><\/b><span class=\"anir_code_comment\">.<\/span><span class=\"anir_code_methods\">flush<\/span><span class=\"anir_code_braces\">(<\/span><span class=\"anir_code_braces\">)<\/span><span class=\"anir_code_braces\">;<\/span> <br \/>\n &nbsp;&nbsp;&nbsp;&nbsp; <br \/>\n &nbsp;&nbsp;&nbsp;&nbsp;<span class=\"anir_code_define\">if<\/span> <span class=\"anir_code_braces\">(<\/span><span class=\"anir_code_comment\">!<\/span><span class=\"anir_code_braces\">flag<\/span><span class=\"anir_code_braces\">)<\/span><span class=\"anir_code_braces\">{<\/span> <br \/>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<b><span class=\"anir_code_methods\">Serial<\/span><\/b><span class=\"anir_code_comment\">.<\/span><span class=\"anir_code_methods\">print<\/span><span class=\"anir_code_braces\">(<\/span><span class=\"anir_code_string\">&#8220;Could not connect to server: &#8220;<\/span><span class=\"anir_code_braces\">)<\/span><span class=\"anir_code_braces\">;<\/span> <br \/>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<b><span class=\"anir_code_methods\">Serial<\/span><\/b><span class=\"anir_code_comment\">.<\/span><span class=\"anir_code_methods\">println<\/span><span class=\"anir_code_braces\">(<\/span><span class=\"anir_code_braces\">host<\/span><span class=\"anir_code_braces\">)<\/span><span class=\"anir_code_braces\">;<\/span> <br \/>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<b><span class=\"anir_code_methods\">Serial<\/span><\/b><span class=\"anir_code_comment\">.<\/span><span class=\"anir_code_methods\">println<\/span><span class=\"anir_code_braces\">(<\/span><span class=\"anir_code_string\">&#8220;Exiting&#8230;&#8221;<\/span><span class=\"anir_code_braces\">)<\/span><span class=\"anir_code_braces\">;<\/span> <br \/>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<b><span class=\"anir_code_methods\">Serial<\/span><\/b><span class=\"anir_code_comment\">.<\/span><span class=\"anir_code_methods\">flush<\/span><span class=\"anir_code_braces\">(<\/span><span class=\"anir_code_braces\">)<\/span><span class=\"anir_code_braces\">;<\/span> <br \/>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"anir_code_define\">return<\/span><span class=\"anir_code_braces\">;<\/span> <br \/>\n &nbsp;&nbsp;&nbsp;&nbsp;<span class=\"anir_code_braces\">}<\/span> <\/p>\n<p> &nbsp;&nbsp;&nbsp;&nbsp;<span class=\"anir_code_comment\">\/\/ Data will still be pushed even certification don&#8217;t match.<\/span> <br \/>\n &nbsp;&nbsp;&nbsp;&nbsp;<span class=\"anir_code_define\">if<\/span> <span class=\"anir_code_braces\">(<\/span><span class=\"anir_code_methods\">client<\/span><span class=\"anir_code_comment\">.<\/span><span class=\"anir_code_braces\">verify<\/span><span class=\"anir_code_braces\">(<\/span><span class=\"anir_code_braces\">fingerprint<\/span><span class=\"anir_code_comment\">,<\/span> <span class=\"anir_code_braces\">host<\/span><span class=\"anir_code_braces\">)<\/span><span class=\"anir_code_braces\">)<\/span> <span class=\"anir_code_braces\">{<\/span> <br \/>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<b><span class=\"anir_code_methods\">Serial<\/span><\/b><span class=\"anir_code_comment\">.<\/span><span class=\"anir_code_methods\">println<\/span><span class=\"anir_code_braces\">(<\/span><span class=\"anir_code_string\">&#8220;Certificate match.&#8221;<\/span><span class=\"anir_code_braces\">)<\/span><span class=\"anir_code_braces\">;<\/span> <br \/>\n &nbsp;&nbsp;&nbsp;&nbsp;<span class=\"anir_code_braces\">}<\/span> <span class=\"anir_code_define\">else<\/span> <span class=\"anir_code_braces\">{<\/span> <br \/>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<b><span class=\"anir_code_methods\">Serial<\/span><\/b><span class=\"anir_code_comment\">.<\/span><span class=\"anir_code_methods\">println<\/span><span class=\"anir_code_braces\">(<\/span><span class=\"anir_code_string\">&#8220;Certificate mis-match&#8221;<\/span><span class=\"anir_code_braces\">)<\/span><span class=\"anir_code_braces\">;<\/span> <br \/>\n &nbsp;&nbsp;&nbsp;&nbsp;<span class=\"anir_code_braces\">}<\/span> <br \/>\n<span class=\"anir_code_braces\">}<\/span> <\/p>\n<p><span class=\"anir_code_comment\">\/\/ This is the main method where data gets pushed to the Google sheet<\/span> <br \/>\n<span class=\"anir_code_modifiers\">void<\/span> <span class=\"anir_code_braces\">sendValueToGoogle<\/span><span class=\"anir_code_braces\">(<\/span><span class=\"anir_code_modifiers\">String<\/span> <span class=\"anir_code_braces\">value<\/span><span class=\"anir_code_braces\">)<\/span><span class=\"anir_code_braces\">{<\/span> <br \/>\n &nbsp;&nbsp;&nbsp;&nbsp;<span class=\"anir_code_define\">if<\/span> <span class=\"anir_code_braces\">(<\/span><span class=\"anir_code_comment\">!<\/span><span class=\"anir_code_methods\">client<\/span><span class=\"anir_code_comment\">.<\/span><span class=\"anir_code_methods\">connected<\/span><span class=\"anir_code_braces\">(<\/span><span class=\"anir_code_braces\">)<\/span><span class=\"anir_code_braces\">)<\/span><span class=\"anir_code_braces\">{<\/span> <br \/>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<b><span class=\"anir_code_methods\">Serial<\/span><\/b><span class=\"anir_code_comment\">.<\/span><span class=\"anir_code_methods\">println<\/span><span class=\"anir_code_braces\">(<\/span><span class=\"anir_code_string\">&#8220;Connecting to client again&#8230;&#8221;<\/span><span class=\"anir_code_braces\">)<\/span><span class=\"anir_code_braces\">;<\/span>  <br \/>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"anir_code_methods\">client<\/span><span class=\"anir_code_comment\">.<\/span><span class=\"anir_code_methods\">connect<\/span><span class=\"anir_code_braces\">(<\/span><span class=\"anir_code_braces\">host<\/span><span class=\"anir_code_comment\">,<\/span> <span class=\"anir_code_braces\">httpsPort<\/span><span class=\"anir_code_braces\">)<\/span><span class=\"anir_code_braces\">;<\/span> <br \/>\n &nbsp;&nbsp;&nbsp;&nbsp;<span class=\"anir_code_braces\">}<\/span> <br \/>\n &nbsp;&nbsp;&nbsp;&nbsp;<span class=\"anir_code_modifiers\">String<\/span> <span class=\"anir_code_braces\">urlFinal<\/span> <span class=\"anir_code_comment\">=<\/span> <span class=\"anir_code_braces\">url<\/span> <span class=\"anir_code_comment\">+<\/span> <span class=\"anir_code_string\">&#8220;value=&#8221;<\/span> <span class=\"anir_code_comment\">+<\/span> <span class=\"anir_code_braces\">value<\/span><span class=\"anir_code_braces\">;<\/span> <br \/>\n &nbsp;&nbsp;&nbsp;&nbsp;<span class=\"anir_code_methods\">client<\/span><span class=\"anir_code_comment\">.<\/span><span class=\"anir_code_braces\">printRedir<\/span><span class=\"anir_code_braces\">(<\/span><span class=\"anir_code_braces\">urlFinal<\/span><span class=\"anir_code_comment\">,<\/span> <span class=\"anir_code_braces\">host<\/span><span class=\"anir_code_comment\">,<\/span> <span class=\"anir_code_braces\">googleRedirHost<\/span><span class=\"anir_code_braces\">)<\/span><span class=\"anir_code_braces\">;<\/span> <br \/>\n<span class=\"anir_code_braces\">}<\/span> <\/p>\n<p><span class=\"anir_code_comment\">\/\/ Continue pushing data at a given interval<\/span> <br \/>\n<span class=\"anir_code_modifiers\">void<\/span> <span class=\"anir_code_define\">loop<\/span><span class=\"anir_code_braces\">(<\/span><span class=\"anir_code_braces\">)<\/span> <span class=\"anir_code_braces\">{<\/span> <\/p>\n<p> &nbsp;&nbsp;&nbsp;&nbsp;<span class=\"anir_code_comment\">\/\/ Here you will have your main code<\/span> <br \/>\n &nbsp;&nbsp;&nbsp;&nbsp;<span class=\"anir_code_comment\">\/\/ To demonstrate the concept we are generating a random number<\/span> <br \/>\n &nbsp;&nbsp;&nbsp;&nbsp;<span class=\"anir_code_modifiers\">long<\/span> <span class=\"anir_code_braces\">randomValue<\/span> <span class=\"anir_code_comment\">=<\/span> <span class=\"anir_code_methods\">random<\/span><span class=\"anir_code_braces\">(<\/span><span class=\"anir_code_braces\">10<\/span><span class=\"anir_code_comment\">,<\/span> <span class=\"anir_code_braces\">20<\/span><span class=\"anir_code_braces\">)<\/span><span class=\"anir_code_braces\">;<\/span> <\/p>\n<p> &nbsp;&nbsp;&nbsp;&nbsp;<span class=\"anir_code_comment\">\/\/ Our lower threshold is 12 and upper threshold is 18<\/span> <br \/>\n &nbsp;&nbsp;&nbsp;&nbsp;<span class=\"anir_code_comment\">\/\/ when given vlaue goes below lower or above upper the threshold<\/span> <br \/>\n &nbsp;&nbsp;&nbsp;&nbsp;<span class=\"anir_code_comment\">\/\/ we would like to send information to GAS for email and text message<\/span> <br \/>\n &nbsp;&nbsp;&nbsp;&nbsp;<span class=\"anir_code_define\">if<\/span> <span class=\"anir_code_braces\">(<\/span><span class=\"anir_code_braces\">randomValue<\/span> <span class=\"anir_code_comment\">&lt;<\/span> <span class=\"anir_code_braces\">12<\/span> <span class=\"anir_code_comment\">||<\/span> <span class=\"anir_code_braces\">randomValue<\/span> <span class=\"anir_code_comment\">&gt;<\/span> <span class=\"anir_code_braces\">18<\/span><span class=\"anir_code_braces\">)<\/span> <span class=\"anir_code_braces\">{<\/span> <br \/>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<b><span class=\"anir_code_methods\">Serial<\/span><\/b><span class=\"anir_code_comment\">.<\/span><span class=\"anir_code_methods\">println<\/span><span class=\"anir_code_braces\">(<\/span><span class=\"anir_code_string\">&#8220;Random value outside the threshold: &#8220;<\/span> <span class=\"anir_code_comment\">+<\/span> <span class=\"anir_code_modifiers\">String<\/span><span class=\"anir_code_braces\">(<\/span><span class=\"anir_code_braces\">randomValue<\/span><span class=\"anir_code_braces\">)<\/span><span class=\"anir_code_braces\">)<\/span><span class=\"anir_code_braces\">;<\/span> <br \/>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"anir_code_braces\">sendValueToGoogle<\/span><span class=\"anir_code_braces\">(<\/span><span class=\"anir_code_modifiers\">String<\/span><span class=\"anir_code_braces\">(<\/span><span class=\"anir_code_braces\">randomValue<\/span><span class=\"anir_code_braces\">)<\/span><span class=\"anir_code_braces\">)<\/span><span class=\"anir_code_braces\">;<\/span>  <br \/>\n &nbsp;&nbsp;&nbsp;&nbsp;<span class=\"anir_code_braces\">}<\/span> <br \/>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br \/>\n &nbsp;&nbsp;&nbsp;&nbsp;<span class=\"anir_code_methods\">delay<\/span> <span class=\"anir_code_braces\">(<\/span><span class=\"anir_code_braces\">10000<\/span><span class=\"anir_code_braces\">)<\/span><span class=\"anir_code_braces\">;<\/span> <span class=\"anir_code_comment\">\/\/ wait 10 sec<\/span> <br \/>\n<span class=\"anir_code_braces\">}<\/span> <\/p>\n<h5><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2017\/01\/SendEmailAndText.zip\" target=\"_blank\">Download Arduino .ino code file<\/a><\/h5>\n","protected":false},"excerpt":{"rendered":"<p>Earlier we looked at a method of programming ESP8266 to\u00a0send sensor data directly to Google Sheets without using any third party modules. Now, we will expand that a little bit and learn to send an email as well as a text message (SMS) using ESP8266. In this demo, we will configure our ESP8266 to send an email and a text message when the\u00a0value of a variable (which could be a sensor output, or any other physical quantity) goes beyond a threshold limit. This is not entirely a new topic as there are similar tutorials available online\u00a0to show how to do<\/p>\n","protected":false},"author":4,"featured_media":12925,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1044,1464,1466],"tags":[1600,1598,1599],"class_list":["post-12923","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-esp8266","category-featured","category-tutorials","tag-esp8266-email","tag-esp8266-sms","tag-nodemcu-google"],"_links":{"self":[{"href":"https:\/\/embedded-lab.com\/blog\/wp-json\/wp\/v2\/posts\/12923","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/embedded-lab.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/embedded-lab.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/embedded-lab.com\/blog\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/embedded-lab.com\/blog\/wp-json\/wp\/v2\/comments?post=12923"}],"version-history":[{"count":11,"href":"https:\/\/embedded-lab.com\/blog\/wp-json\/wp\/v2\/posts\/12923\/revisions"}],"predecessor-version":[{"id":12944,"href":"https:\/\/embedded-lab.com\/blog\/wp-json\/wp\/v2\/posts\/12923\/revisions\/12944"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/embedded-lab.com\/blog\/wp-json\/wp\/v2\/media\/12925"}],"wp:attachment":[{"href":"https:\/\/embedded-lab.com\/blog\/wp-json\/wp\/v2\/media?parent=12923"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/embedded-lab.com\/blog\/wp-json\/wp\/v2\/categories?post=12923"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/embedded-lab.com\/blog\/wp-json\/wp\/v2\/tags?post=12923"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}