{"id":13228,"date":"2017-02-26T15:54:44","date_gmt":"2017-02-26T20:54:44","guid":{"rendered":"http:\/\/embedded-lab.com\/blog\/?p=13228"},"modified":"2023-04-05T23:19:33","modified_gmt":"2023-04-06T03:19:33","slug":"heart-rate-monitoring-internet-using-esp8266","status":"publish","type":"post","link":"https:\/\/embedded-lab.com\/blog\/heart-rate-monitoring-internet-using-esp8266\/","title":{"rendered":"Heart rate monitoring over the internet using ESP8266"},"content":{"rendered":"<p>With the rapid development and maturing of internet-of-things (IoT)\u00a0technology, the IoT-driven smart sensors and systems are\u00a0changing business in multiple\u00a0industries. In healthcare industry, it is gaining more attention lately because of its immense potential in\u00a0reducing the cost of tracking health information, as well as in\u00a0providing health care to people who were not able to receive it before. This project describes a simple remote heart rate monitoring system based on the ESP8266 platform and the <strong><a href=\"http:\/\/embedded-lab.com\/blog\/introducing-easy-pulse-plugin-breadboard-friendly-arduinochipkit-compatible-pulse-sensor\/\" target=\"_blank\" rel=\"noopener noreferrer\">Easy Pulse Plugin sensor<\/a><\/strong> module. The ESP8266 reads in the analog photoplethysmograph (PPG) output from the Easy Pulse sensor, computes the heart beat rate in real time, and post it to a Google spreadsheet for remote access. A TFT LCD is also installed to display the PPG waveform and pulse rate locally.<\/p>\n<div id=\"attachment_13231\" style=\"width: 1034px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2017\/02\/pulse3.jpg\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-13231\" class=\"size-full wp-image-13231\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2017\/02\/pulse3.jpg\" alt=\"Pulse meter\" width=\"1024\" height=\"646\" srcset=\"https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2017\/02\/pulse3.jpg 1024w, https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2017\/02\/pulse3-580x366.jpg 580w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><p id=\"caption-attachment-13231\" class=\"wp-caption-text\">IoT enabled pulse meter<\/p><\/div>\n<h4>Hardware<\/h4>\n<p>For just the IoT capability of this project, you only need an ESP8266 module and the <a href=\"http:\/\/embedded-lab.com\/blog\/introducing-easy-pulse-plugin-breadboard-friendly-arduinochipkit-compatible-pulse-sensor\/\" target=\"_blank\" rel=\"noopener noreferrer\">Easy Pulse Plugin<\/a> sensor. If you like to display the PPG waveform and pulse rate\u00a0locally, you will also need an ILI9341-based TFT LCD. You would also need to read\u00a0my <strong><a href=\"http:\/\/embedded-lab.com\/blog\/tutorial-7-esp8266-ili9341-tft-lcd\/\" target=\"_blank\" rel=\"noopener noreferrer\">Tutorial 7<\/a><\/strong> on how to use an ILI9341 TFT display with ESP8266. For illustration of this project, I am using <strong><a href=\"http:\/\/embedded-lab.com\/blog\/easyesp-1-rapid-prototyping-development-board-esp8266\/\" target=\"_blank\" rel=\"noopener noreferrer\">EasyESP-1 board<\/a><\/strong>. But you can do this with NodeMCU or any other ESP8266 breakout board that has adequate GPIOs to drive the TFT and access to the ESP8266 analog input.<\/p>\n<p><em><strong>Hardware required:<\/strong><\/em><\/p>\n<ul>\n<li><strong><a href=\"http:\/\/embedded-lab.com\/blog\/easyesp-1-rapid-prototyping-development-board-esp8266\/\" target=\"_blank\" rel=\"noopener noreferrer\">EasyESP-1 board<\/a><\/strong><\/li>\n<li><strong><a href=\"https:\/\/www.elecrow.com\/ep3350cde.html\" target=\"_blank\" rel=\"noopener noreferrer\">Easy Pulse Plugin<\/a><\/strong><\/li>\n<li><strong>2.2&#8243; ILI9341 based TFT display<\/strong> from eBay or Aliexpress<\/li>\n<li><strong>Some jumper wires for breadboarding<\/strong><\/li>\n<\/ul>\n<h5><em><strong>Easy Pulse sensor setup<\/strong><\/em><\/h5>\n<p><strong><a href=\"http:\/\/embedded-lab.com\/blog\/introducing-easy-pulse-plugin-breadboard-friendly-arduinochipkit-compatible-pulse-sensor\/\" target=\"_blank\" rel=\"noopener noreferrer\">Easy Pulse Plugin<\/a><\/strong>\u00a0operates on the principle of Photoplethysmography, which is an optical technique of sensing blood volume changes in tissues by illuminating the skin surface with a light source and measuring the reflected or transmitted light using a photodetector. The photodetector output contains the cardiovascular pulse wave, which is synchronized with the beating of the heart. Easy Pulse Plugin provides all necessary instrumentation and amplification on board to detect the cardiovascular pulse signal from the fingertip. The most important characteristics of Easy Pulse Plugin is that it can be easily plugged into the left headers of Arduino Uno (or its compatible clone) board for easy interfacing, and the analog pulse signal can be fed to either A0 or A1 analog input through a 2-pin jumper selection. It can also be plugged into a breadboard for prototyping with other microcontroller platforms. You can buy this sensor at our <strong><a href=\"https:\/\/www.tindie.com\/products\/rajbex\/easy-pulse-plugin-an-arduino-pulse-sensor\/\" target=\"_blank\" rel=\"noopener noreferrer\">Tindie Store<\/a><\/strong>\u00a0as well as from <strong><a href=\"https:\/\/www.elecrow.com\/ep3350cde.html\" target=\"_blank\" rel=\"noopener noreferrer\">Elecrow<\/a><\/strong>\u00a0with worldwide shipping.<\/p>\n<p>For this project, the jumper settings of Easy Pulse module are as follows (also see the following picture).<\/p>\n<ul>\n<li>JP1 is set to 3.3V, which means the analog PPG output swing range is 3.3V max.<\/li>\n<li>JP2 is set to A0, which means the analog PPG signal is available at A0 pin.<\/li>\n<\/ul>\n<div id=\"attachment_13263\" style=\"width: 810px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2017\/02\/P_20170226_121255.jpg\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-13263\" class=\"size-full wp-image-13263\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2017\/02\/P_20170226_121255.jpg\" alt=\"JP1 and JP2 shunt jumper settings for this project. The PPG signal is available at A0 header pin.\" width=\"800\" height=\"555\" srcset=\"https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2017\/02\/P_20170226_121255.jpg 800w, https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2017\/02\/P_20170226_121255-580x402.jpg 580w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><\/a><p id=\"caption-attachment-13263\" class=\"wp-caption-text\">JP1 and JP2 shunt jumper settings for this project. The PPG signal is available at A0 header pin.<\/p><\/div>\n<p>The Easy Pulse Plugin module is plugged into the breadboard area of EasyESP-1 board. The 3.3V, GND, and A0 pins are connected to the 3.3V, GND, and AN header pins of EasyESP-1 board, respectively. The TFT LCD connections are same as described in <strong><a href=\"http:\/\/embedded-lab.com\/blog\/tutorial-7-esp8266-ili9341-tft-lcd\/\" target=\"_blank\" rel=\"noopener noreferrer\">Tutorial 7<\/a><\/strong>, and are also shown below.<\/p>\n<div id=\"attachment_13206\" style=\"width: 1270px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2017\/02\/pinconnections.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-13206\" class=\"size-full wp-image-13206\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2017\/02\/pinconnections.png\" alt=\"Connections between ILI9341 SPI TFT module and EasyESP-1\" width=\"1260\" height=\"776\" srcset=\"https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2017\/02\/pinconnections.png 1260w, https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2017\/02\/pinconnections-580x357.png 580w, https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2017\/02\/pinconnections-1024x631.png 1024w\" sizes=\"auto, (max-width: 1260px) 100vw, 1260px\" \/><\/a><p id=\"caption-attachment-13206\" class=\"wp-caption-text\">Connections between ILI9341 SPI TFT module and EasyESP-1<\/p><\/div>\n<div id=\"attachment_13229\" style=\"width: 810px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2017\/02\/pulse1.jpg\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-13229\" class=\"wp-image-13229 size-full\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2017\/02\/pulse1.jpg\" alt=\"pulse1\" width=\"800\" height=\"793\" srcset=\"https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2017\/02\/pulse1.jpg 800w, https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2017\/02\/pulse1-150x150.jpg 150w, https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2017\/02\/pulse1-580x575.jpg 580w, https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2017\/02\/pulse1-90x90.jpg 90w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><\/a><p id=\"caption-attachment-13229\" class=\"wp-caption-text\">Complete project hardware setup<\/p><\/div>\n<h4><strong>Software<\/strong><\/h4>\n<p>There are two parts of the software for this project. The first part involves writing the firmware for ESP8266 using Arduino IDE. This part covers analyzing the Easy Pulse sensor output, processing the PPG signal to compute the heart beat rate, displaying it on the local TFT display, and connecting to a Google script to post the heart beat rate to a spreadsheet over the internet. Posting the data to a Google spreadsheet follows the same technique as described by <strong>Anir<\/strong> in <strong><a href=\"http:\/\/embedded-lab.com\/blog\/post-data-google-sheets-using-esp8266\/\" target=\"_blank\" rel=\"noopener noreferrer\">this tutorial<\/a><\/strong>. The second part of the software development involves writing the Google script that will receive the heart beat rate from ESP8266 and post it on a Google spreadsheet.<\/p>\n<p>The ESP8266 software\u00a0written in Arduino IDE can be downloaded from the following link.<\/p>\n<p><strong><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2017\/02\/EasyPulseDemo_1.zip\">Download ESP8266 Arduino Code<\/a><\/strong><\/p>\n<p>You need to install the following Arduino libraries prior to compile the above code.<\/p>\n<p><strong><a href=\"https:\/\/github.com\/Bodmer\/TFT_ILI9341_ESP\" target=\"_blank\" rel=\"noopener noreferrer\">TFT ILI9341 ESP<\/a><\/strong>\u00a0library<\/p>\n<p><strong><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2016\/11\/HTTPSRedirect1.zip\">HTTPSRedirect <\/a><\/strong>library from Sujay Phadke<\/p>\n<p>Read <strong><a href=\"http:\/\/embedded-lab.com\/blog\/post-data-google-sheets-using-esp8266\/\" target=\"_blank\" rel=\"noopener noreferrer\">HOW TO POST DATA TO GOOGLE SHEETS USING ESP8266<\/a><\/strong> for more details on HTTPSRedirect library.<\/p>\n<p>The ESP8266 digitizes the analog PPG signal using the ADC input channel. The sampling rate is 5 milliseconds. It acquires 600 samples at a time (in 3 seconds) and computes the instantaneous\u00a0heart beat or pulse rate by detecting three consecutive peaks in the PPG waveform. The details of this algorithm of computing the heart beat rate is described in my <strong><a href=\"http:\/\/embedded-lab.com\/blog\/arduino-heart-rate-meter-seven-segment-led-display\/\" target=\"_blank\" rel=\"noopener noreferrer\">previous project<\/a><\/strong>. The PPG waveform and so computed pulse rate are displayed on the TFT LCD. In order for the ESP8266 to post the data to Google sheet, you need to make the following changes to the ESP8266 program.<\/p>\n<ol>\n<li>Update the <em><strong>ssid<\/strong><\/em> and <em><strong>password<\/strong><\/em>\u00a0in the code to match to your WiFi network.<\/li>\n<li>Also, you will also need to update\u00a0the\u00a0<em><strong>*GScriptId<\/strong>,<\/em>\u00a0which can only be obtained after publishing the required Google App Scripts, which is discussed below. So, you can&#8217;t upload this code to your ESP8266 until you have your GScriptId ready.<\/li>\n<\/ol>\n<pre>const char* ssid = \"Your SSID\"; \nconst char* password = \"Your Password\";\nconst char *GScriptId = \"Your GScriptid\";<\/pre>\n<h5>Google scripts<\/h5>\n<p>Next step is to prepare a spread sheet in your Google drive and create a Google App script to access it via URL. First, create a Google spreadsheet in your\u00a0Google Drive and name it something, say <strong>IoTPulseDemo<\/strong>. Rename the current\/active sheet to\u00a0<strong>DataLogger<\/strong>. From the URL address bar of the sheet, copy the string between d\/ and \/edit and save it somewhere. This is your spreadsheet\u2019s unique sharing key, which will be needed in the Google Apps scripts later.\u00a0In the <strong>DataLogger <\/strong>sheet, type\u00a0<strong>ID, Time, and Value<\/strong> in <strong>A1, B1, and C1 <\/strong>cells, respectively. See the screenshot posted below.<\/p>\n<div id=\"attachment_13268\" style=\"width: 810px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2017\/02\/spreadsheet.jpg\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-13268\" class=\"size-full wp-image-13268\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2017\/02\/spreadsheet.jpg\" alt=\"Preparing the spreadsheet\" width=\"800\" height=\"477\" srcset=\"https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2017\/02\/spreadsheet.jpg 800w, https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2017\/02\/spreadsheet-580x346.jpg 580w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><\/a><p id=\"caption-attachment-13268\" class=\"wp-caption-text\">Preparing the spreadsheet<\/p><\/div>\n<p>Next, to create a Google App Scripts, go to <strong>Tools &gt; Script Editor<\/strong> from the Google Sheets. The Script Editor opens in a new tab. Then copy\u00a0the Google App Script code from the following .txt file and paste it there. The code or script can be saved under any name.<\/p>\n<p><strong><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2017\/02\/GoogleScript_EasyPulseIoT.txt\">Download Google App Script<\/a><\/strong><\/p>\n<p>It is important that the sheet name in the script should\u00a0match to that\u00a0you want to be populated.<\/p>\n<div class=\"wp_syntax\">\n<table>\n<tbody>\n<tr>\n<td class=\"code\">\n<pre class=\"javascript\">    var dataLoggerSheet = ss.getSheetByName(\"DataLogger\");<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>Similarly, you would also need to edit the spreadsheet sharing key in the script\u00a0to match with yours (one you copied from the spreadsheet URL earlier).<\/p>\n<div class=\"wp_syntax\">\n<table>\n<tbody>\n<tr>\n<td class=\"code\">\n<pre class=\"javascript\">var ss = SpreadsheetApp.openByUrl(\"https:\/\/docs.google.com\/spreadsheets\/d\/---Your-Google-Sheet-ID--Goes-Here---\/edit\");<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<h5>Deploy the contents as Web app<\/h5>\n<p>Next step is to\u00a0publish the script so that it is accessible through\u00a0an URL. In order to do that, select\u00a0<strong>Publish &gt; Deploy as Web App<\/strong>\u00a0from your gscript editor window. Make sure you allow the access to the app to &#8220;<strong>Anyone, even anonymous<\/strong>&#8220;, as shown below.<\/p>\n<div id=\"attachment_13273\" style=\"width: 810px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2017\/02\/Deploy1.jpg\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-13273\" class=\"size-full wp-image-13273\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2017\/02\/Deploy1.jpg\" alt=\"Deploy\" width=\"800\" height=\"597\" srcset=\"https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2017\/02\/Deploy1.jpg 800w, https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2017\/02\/Deploy1-580x433.jpg 580w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><\/a><p id=\"caption-attachment-13273\" class=\"wp-caption-text\">Deploying the script as Web App<\/p><\/div>\n<p><strong>Note: <\/strong>Whenever you modify your code, you have to create a \u201cNew\u201d Project version and publish it otherwise you will still be hitting the same old code.<\/p>\n<p>Copy the <em><strong>Current web app URL<\/strong><\/em> and save\u00a0it somewhere as we will need it for extracting the <strong>GScriptID<\/strong>. The web app URL would look like this:<\/p>\n<p>https:\/\/script.google.com\/macros\/s\/AKfycbwULslNgkwvNQfKcsXJPVygL9uO\/exec<\/p>\n<p>The string between <strong>s\/<\/strong> and <strong>\/exec<\/strong>\u00a0is your\u00a0<strong>GScriptID<\/strong>. Copy this\u00a0<strong>GScriptID <\/strong>and paste it to\u00a0your ESP8266 Arduino code,<\/p>\n<pre>const char *GScriptId = \"paste here\";<\/pre>\n<p>Now your ESP8266 code is complete and can be uploaded to the ESP8266 module.<\/p>\n<p>During script publishing, Google will ask to grant some of the permissions and you need\u00a0to allow those.<\/p>\n<h4>Output<\/h4>\n<p>After uploading the firmware to ESP8266 and publishing the Web App,\u00a0the heart rate monitoring project is ready to run. Wear the pulse sensor on the tip of your index finger and power the EasyESP-1 board. In the beginning, the ESP8266 runs the setup program that performs TFT LCD initializing and connecting to your WiFi\u00a0network. You can open a serial monitor window on the Arduino IDE to check the progress. After the setup is complete, you will see a PPG waveform derived from 600 analog samples displayed on the TFT screen. The pulse rate in BPM is also shown. The ESP8266 accesses the Google App script via URL using the <strong>GScriptID<\/strong> to send the pulse rate. The Google script then posts the pulse rate and time stamp to <strong>DataLogger<\/strong> spreadsheet. If you open the spreadsheet on your Google drive, you will see it populated continuously as the ESP8266 sends the data.<\/p>\n<div id=\"attachment_13230\" style=\"width: 810px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2017\/02\/Pulse2.jpg\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-13230\" class=\"wp-image-13230 size-full\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2017\/02\/Pulse2.jpg\" alt=\"Pulse2\" width=\"800\" height=\"473\" srcset=\"https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2017\/02\/Pulse2.jpg 800w, https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2017\/02\/Pulse2-580x343.jpg 580w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><\/a><p id=\"caption-attachment-13230\" class=\"wp-caption-text\">Local display of PPG waveform and pulse rate<\/p><\/div>\n<div id=\"attachment_13277\" style=\"width: 610px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2017\/02\/sheet1.jpg\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-13277\" class=\"size-full wp-image-13277\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2017\/02\/sheet1.jpg\" alt=\"DataLogger sheet populates with pulse rate data and time stamp\" width=\"600\" height=\"910\" srcset=\"https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2017\/02\/sheet1.jpg 600w, https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2017\/02\/sheet1-429x650.jpg 429w\" sizes=\"auto, (max-width: 600px) 100vw, 600px\" \/><\/a><p id=\"caption-attachment-13277\" class=\"wp-caption-text\">DataLogger sheet populates with pulse rate data and time stamp<\/p><\/div>\n<p>You can also use Google sheet chart feature to visualize the pulse rate variation over time.<\/p>\n<div id=\"attachment_13278\" style=\"width: 910px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2017\/02\/schart.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-13278\" class=\"size-full wp-image-13278\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2017\/02\/schart.png\" alt=\"Pulse rate tracking over time\" width=\"900\" height=\"472\" srcset=\"https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2017\/02\/schart.png 900w, https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2017\/02\/schart-580x304.png 580w\" sizes=\"auto, (max-width: 900px) 100vw, 900px\" \/><\/a><p id=\"caption-attachment-13278\" class=\"wp-caption-text\">Pulse rate tracking over time<\/p><\/div>\n","protected":false},"excerpt":{"rendered":"<p>With the rapid development and maturing of internet-of-things (IoT)\u00a0technology, the IoT-driven smart sensors and systems are\u00a0changing business in multiple\u00a0industries. In healthcare industry, it is gaining more attention lately because of its immense potential in\u00a0reducing the cost of tracking health information, as well as in\u00a0providing health care to people who were not able to receive it before. This project describes a simple remote heart rate monitoring system based on the ESP8266 platform and the Easy Pulse Plugin sensor module. The ESP8266 reads in the analog photoplethysmograph (PPG) output from the Easy Pulse sensor, computes the heart beat rate in real time,<\/p>\n","protected":false},"author":1,"featured_media":13231,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1603,1044,1464,958,1467],"tags":[1637,1636],"class_list":["post-13228","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-esp8266-tutorials","category-esp8266","category-featured","category-internet-of-things","category-projects","tag-esp8266-heart-rate-meter","tag-iot-pulse-monitor"],"_links":{"self":[{"href":"https:\/\/embedded-lab.com\/blog\/wp-json\/wp\/v2\/posts\/13228","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\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/embedded-lab.com\/blog\/wp-json\/wp\/v2\/comments?post=13228"}],"version-history":[{"count":23,"href":"https:\/\/embedded-lab.com\/blog\/wp-json\/wp\/v2\/posts\/13228\/revisions"}],"predecessor-version":[{"id":15127,"href":"https:\/\/embedded-lab.com\/blog\/wp-json\/wp\/v2\/posts\/13228\/revisions\/15127"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/embedded-lab.com\/blog\/wp-json\/wp\/v2\/media\/13231"}],"wp:attachment":[{"href":"https:\/\/embedded-lab.com\/blog\/wp-json\/wp\/v2\/media?parent=13228"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/embedded-lab.com\/blog\/wp-json\/wp\/v2\/categories?post=13228"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/embedded-lab.com\/blog\/wp-json\/wp\/v2\/tags?post=13228"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}