{"id":98167,"date":"2020-07-25T09:48:59","date_gmt":"2020-07-25T09:48:59","guid":{"rendered":"https:\/\/randomnerdtutorials.com\/?p=98167"},"modified":"2020-07-28T09:36:19","modified_gmt":"2020-07-28T09:36:19","slug":"bme680-sensor-arduino-gas-temperature-humidity-pressure","status":"publish","type":"post","link":"https:\/\/randomnerdtutorials.com\/bme680-sensor-arduino-gas-temperature-humidity-pressure\/","title":{"rendered":"Guide for BME680 Environmental Sensor with Arduino (Gas, Temperature, Humidity, Pressure)"},"content":{"rendered":"\n<p>The BME680 is an environmental digital sensor that measures gas, pressure, humidity and temperature. In this guide you&#8217;ll learn how to use the BME680 sensor module with the Arduino board. The sensor communicates with a microcontroller using I2C or SPI communication protocols.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><img data-recalc-dims=\"1\" fetchpriority=\"high\" decoding=\"async\" width=\"1200\" height=\"675\" src=\"https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2020\/07\/Arduino-Board-BME680-Gas-sensor-humidity-barometric-pressure-ambient-temperature-gas-air-quality-Arduino-IDE.jpg?resize=1200%2C675&#038;quality=100&#038;strip=all&#038;ssl=1\" alt=\"Arduino Board BME680 Gas sensor humidity barometric pressure ambient temperature gas air quality Arduino IDE\" class=\"wp-image-98140\" srcset=\"https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2020\/07\/Arduino-Board-BME680-Gas-sensor-humidity-barometric-pressure-ambient-temperature-gas-air-quality-Arduino-IDE.jpg?w=1280&amp;quality=100&amp;strip=all&amp;ssl=1 1280w, https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2020\/07\/Arduino-Board-BME680-Gas-sensor-humidity-barometric-pressure-ambient-temperature-gas-air-quality-Arduino-IDE.jpg?resize=300%2C169&amp;quality=100&amp;strip=all&amp;ssl=1 300w, https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2020\/07\/Arduino-Board-BME680-Gas-sensor-humidity-barometric-pressure-ambient-temperature-gas-air-quality-Arduino-IDE.jpg?resize=1024%2C576&amp;quality=100&amp;strip=all&amp;ssl=1 1024w, https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2020\/07\/Arduino-Board-BME680-Gas-sensor-humidity-barometric-pressure-ambient-temperature-gas-air-quality-Arduino-IDE.jpg?resize=768%2C432&amp;quality=100&amp;strip=all&amp;ssl=1 768w\" sizes=\"(max-width: 1200px) 100vw, 1200px\" \/><\/figure><\/div>\n\n\n\n<p>You&#8217;ll learn how to wire the sensor to the Arduino board, install the required libraries and use a simple sketch to display the sensor readings in the Serial Monitor.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Introducing BME680 Environmental Sensor Module<\/h2>\n\n\n\n<p>The BME680 is an environmental sensor that combines gas, pressure, humidity and temperature sensors. The gas sensor can detect a broad range of gases like volatile organic compounds (VOC). For this reason, the BME680 can be used in indoor air quality control.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><img data-recalc-dims=\"1\" decoding=\"async\" width=\"750\" height=\"422\" src=\"https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2020\/07\/BME680-Gas-sensor-humidity-barometric-pressure-ambient-temperature-gas-air-quality-front.jpg?resize=750%2C422&#038;quality=100&#038;strip=all&#038;ssl=1\" alt=\"BME680 Gas sensor humidity barometric pressure ambient temperature gas air quality front\" class=\"wp-image-98118\" srcset=\"https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2020\/07\/BME680-Gas-sensor-humidity-barometric-pressure-ambient-temperature-gas-air-quality-front.jpg?w=750&amp;quality=100&amp;strip=all&amp;ssl=1 750w, https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2020\/07\/BME680-Gas-sensor-humidity-barometric-pressure-ambient-temperature-gas-air-quality-front.jpg?resize=300%2C169&amp;quality=100&amp;strip=all&amp;ssl=1 300w\" sizes=\"(max-width: 750px) 100vw, 750px\" \/><\/figure><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">BME680 Measurements<\/h3>\n\n\n\n<p>The BME680 is a 4-in-1 digital sensor that measures:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Temperature<\/li><li>Humidity<\/li><li>Barometric pressure<\/li><li>Gas: Volatile Organic Compounds (VOC) like ethanol and carbon monoxide<\/li><\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Gas Sensor<\/h3>\n\n\n\n<p>The BME680 contains a MOX (Metal-oxide) sensor that detects VOCs in the air. This sensor gives you a qualitative idea of the<strong> sum of VOCs\/contaminants<\/strong> in the surrounding air &#8211; <strong>it is not specific<\/strong> for a specific gas molecule.<\/p>\n\n\n\n<p>MOX sensors are composed of a metal-oxide surface, a sensing chip to measure changes in conductivity, and a heater. It detects VOCs by adsorption of oxygen molecules on its sensitive layer. The BME680 reacts to most VOCs polluting indoor air (except CO2). <\/p>\n\n\n\n<p>When the sensor comes into contact with the reducing gases, the oxygen molecules react and increase the conductivity across the surface. As a raw signal, the BME680 outputs resistance values. These values change due to variations in VOC concentrations:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><img data-recalc-dims=\"1\" decoding=\"async\" width=\"1112\" height=\"726\" src=\"https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2020\/07\/BME680-Gas-Sensor-Resistance-How-It-Works.jpg?resize=1112%2C726&#038;quality=100&#038;strip=all&#038;ssl=1\" alt=\"BME680 Gas Environmental Air Quality Sensor Resistance How It Works\" class=\"wp-image-98136\" srcset=\"https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2020\/07\/BME680-Gas-Sensor-Resistance-How-It-Works.jpg?w=1112&amp;quality=100&amp;strip=all&amp;ssl=1 1112w, https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2020\/07\/BME680-Gas-Sensor-Resistance-How-It-Works.jpg?resize=300%2C196&amp;quality=100&amp;strip=all&amp;ssl=1 300w, https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2020\/07\/BME680-Gas-Sensor-Resistance-How-It-Works.jpg?resize=1024%2C669&amp;quality=100&amp;strip=all&amp;ssl=1 1024w, https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2020\/07\/BME680-Gas-Sensor-Resistance-How-It-Works.jpg?resize=768%2C501&amp;quality=100&amp;strip=all&amp;ssl=1 768w\" sizes=\"(max-width: 1112px) 100vw, 1112px\" \/><\/figure><\/div>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Higher <\/strong>concentration of VOCs \u00bb <strong>Lower <\/strong>resistance<\/li><li><strong>Lower <\/strong>concentration of VOCs \u00bb <strong>Higher <\/strong>resistance<\/li><\/ul>\n\n\n\n<p>The reactions that occur on the sensor surface (thus, the resistance) are influenced by parameters other than VOC concentration like temperature and humidity.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Relevant Information Regarding Gas Sensor<\/h3>\n\n\n\n<p>The gas sensor gives you a qualitative idea of VOCs gasses in the surrounding air. So, you can get trends, compare your results and see if the air quality is increasing or decreasing. To get precise measurements, you need to calibrate the sensor against knows sources and build a calibration curve.<\/p>\n\n\n\n<p>When you first get the sensor, it is recommended to run it for 48 hours after start collecting &#8220;real&#8221; data. After that, it is also recommend to run the sensor for 30 minutes before getting a gas reading.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">BME680 Accuracy<\/h3>\n\n\n\n<p>Here&#8217;s the accuracy of the temperature, humidity and pressure sensors of the BME680:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td><strong>Sensor<\/strong><\/td><td><strong>Accuracy<\/strong><\/td><\/tr><tr><td>Temperature<\/td><td>+\/- 1.0 \u00baC<\/td><\/tr><tr><td>Humidity<\/td><td>+\/- 3 %<\/td><\/tr><tr><td>Pressure<\/td><td>+\/- 1 hPa<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">BME680 Operation Range<\/h3>\n\n\n\n<p>The following table shows the operation range for the temperature, humidity and pressure sensors for the BME680.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td><strong>Sensor<\/strong><\/td><td><strong>Operation <\/strong>Range<\/td><\/tr><tr><td>Temperature<\/td><td>-40 to 85 \u00baC<\/td><\/tr><tr><td>Humidity<\/td><td>0 to 100 %<\/td><\/tr><tr><td>Pressure<\/td><td>300 to 1100 hPa<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">BME680 Pinout<\/h3>\n\n\n\n<p>Here&#8217;s the BME680 Pinout:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td><strong>VCC<\/strong><\/td><td>Powers the sensor<\/td><\/tr><tr><td><strong>GND<\/strong><\/td><td>Common GND<\/td><\/tr><tr><td><strong>SCL<\/strong><\/td><td>SCL pin for I2C communication<br>SCK pin for SPI communication<\/td><\/tr><tr><td><strong>SDA<\/strong><\/td><td>SDA pin for I2C communication<br>SDI (MOSI) pin for SPI communication<\/td><\/tr><tr><td><strong>SDO<\/strong><\/td><td>SDO (MISO) pin for SPI communication<\/td><\/tr><tr><td><strong>CS<\/strong><\/td><td>Chip select pin for SPI communication<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">BME680 Interface<\/h3>\n\n\n\n<p>The BME680 supports I2C and SPI Interfaces.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"750\" height=\"422\" src=\"https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2020\/07\/BME680-Gas-sensor-humidity-barometric-pressure-ambient-temperature-gas-air-quality-back.jpg?resize=750%2C422&#038;quality=100&#038;strip=all&#038;ssl=1\" alt=\"BME680 Gas sensor humidity barometric pressure ambient temperature gas air quality back\" class=\"wp-image-98119\" srcset=\"https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2020\/07\/BME680-Gas-sensor-humidity-barometric-pressure-ambient-temperature-gas-air-quality-back.jpg?w=750&amp;quality=100&amp;strip=all&amp;ssl=1 750w, https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2020\/07\/BME680-Gas-sensor-humidity-barometric-pressure-ambient-temperature-gas-air-quality-back.jpg?resize=300%2C169&amp;quality=100&amp;strip=all&amp;ssl=1 300w\" sizes=\"(max-width: 750px) 100vw, 750px\" \/><\/figure><\/div>\n\n\n\n<h4 class=\"wp-block-heading\">BME680 I2C<\/h4>\n\n\n\n<p>To use I2C communication protocol, use the following pins:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td><strong>BME680<\/strong><\/td><td><strong>Arduino<\/strong><\/td><\/tr><tr><td>SCL<\/td><td><span class=\"rnthl rntcyellow\">A5<\/span><\/td><\/tr><tr><td>SDA<\/td><td><span class=\"rnthl rntclgray\">A4<\/span><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\">BME680 SPI<\/h4>\n\n\n\n<p>To use SPI communication protocol, use the following pins:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td><strong>BME680<\/strong><\/td><td><strong>Arduino<\/strong><\/td><\/tr><tr><td>SCL (SCK SPI Clock)<\/td><td><span class=\"rnthl rntclblue\">D13<\/span> <\/td><\/tr><tr><td>SDA (SDI MOSI)<\/td><td><span class=\"rnthl rntcgreen\">D11<\/span> <\/td><\/tr><tr><td>SDO (MISO)<\/td><td><span class=\"rnthl rntcyellow\">D12<\/span> <\/td><\/tr><tr><td>CS (Chip Select)<\/td><td><span class=\"rnthl rntclgray\">D10<\/span> <\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Parts Required<\/h2>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"750\" height=\"422\" src=\"https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2020\/07\/Arduino-Board-BME680-Gas-sensor-circuit-wiring-diagram-schematics.jpg?resize=750%2C422&#038;quality=100&#038;strip=all&#038;ssl=1\" alt=\"Arduino Board BME680 Gas sensor circuit wiring diagram schematics\" class=\"wp-image-98139\" srcset=\"https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2020\/07\/Arduino-Board-BME680-Gas-sensor-circuit-wiring-diagram-schematics.jpg?w=750&amp;quality=100&amp;strip=all&amp;ssl=1 750w, https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2020\/07\/Arduino-Board-BME680-Gas-sensor-circuit-wiring-diagram-schematics.jpg?resize=300%2C169&amp;quality=100&amp;strip=all&amp;ssl=1 300w\" sizes=\"(max-width: 750px) 100vw, 750px\" \/><\/figure><\/div>\n\n\n\n<p>To complete this tutorial you need the following parts:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><a rel=\"noreferrer noopener\" href=\"https:\/\/makeradvisor.com\/tools\/bme680-gas-sensor-module\/\" target=\"_blank\">BME680 sensor module<\/a><\/li><li><a rel=\"noreferrer noopener\" href=\"https:\/\/makeradvisor.com\/tools\/compatible-arduino-uno-r3-board\/\" target=\"_blank\">Arduino Uno<\/a> &#8211; read <a rel=\"noreferrer noopener\" href=\"https:\/\/makeradvisor.com\/best-arduino-starter-kits\/\" target=\"_blank\">Best Arduino Starter Kits<\/a><\/li><li><a rel=\"noreferrer noopener\" href=\"https:\/\/makeradvisor.com\/tools\/mb-102-solderless-breadboard-830-points\/\" target=\"_blank\">Breadboard<\/a><\/li><li><a rel=\"noreferrer noopener\" href=\"https:\/\/makeradvisor.com\/tools\/jumper-wires-kit-120-pieces\/\" target=\"_blank\">Jumper wires<\/a><\/li><\/ul>\n\n\n<p>You can use the preceding links or go directly to <a href=\"https:\/\/makeradvisor.com\/tools\/?utm_source=rnt&utm_medium=post&utm_campaign=post\" target=\"_blank\">MakerAdvisor.com\/tools<\/a> to find all the parts for your projects at the best price!<\/p><p style=\"text-align:center;\"><a href=\"https:\/\/makeradvisor.com\/tools\/?utm_source=rnt&utm_medium=post&utm_campaign=post\" target=\"_blank\"><img data-recalc-dims=\"1\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2017\/10\/header-200.png?w=1200&#038;quality=100&#038;strip=all&#038;ssl=1\"><\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Schematic &#8211; Arduino with BME680<\/h2>\n\n\n\n<p>The BME680 can communicate using I2C or SPI communication protocols.<\/p>\n\n\n\n<p><strong>Arduino with BME680 using I2C<\/strong><\/p>\n\n\n\n<p>Follow the next schematic diagram to wire the BME680 to the Arduino using the I2C pins.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full is-resized\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2020\/07\/Arduino-BME680-Environmental-Sensor-Wiring-Diagram-I2C.png?resize=596%2C777&#038;quality=100&#038;strip=all&#038;ssl=1\" alt=\"Arduino BME680 Environmental Sensor Wiring Circuit Diagram I2C communication\" class=\"wp-image-98164\" width=\"596\" height=\"777\" srcset=\"https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2020\/07\/Arduino-BME680-Environmental-Sensor-Wiring-Diagram-I2C.png?w=795&amp;quality=100&amp;strip=all&amp;ssl=1 795w, https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2020\/07\/Arduino-BME680-Environmental-Sensor-Wiring-Diagram-I2C.png?resize=230%2C300&amp;quality=100&amp;strip=all&amp;ssl=1 230w, https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2020\/07\/Arduino-BME680-Environmental-Sensor-Wiring-Diagram-I2C.png?resize=786%2C1024&amp;quality=100&amp;strip=all&amp;ssl=1 786w, https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2020\/07\/Arduino-BME680-Environmental-Sensor-Wiring-Diagram-I2C.png?resize=768%2C1001&amp;quality=100&amp;strip=all&amp;ssl=1 768w\" sizes=\"(max-width: 596px) 100vw, 596px\" \/><\/figure><\/div>\n\n\n\n<p><strong>Arduino with BME680 using SPI<\/strong><\/p>\n\n\n\n<p>Alternatively, you may want to use SPI communication protocol instead. In that case, follow the next schematic diagram to wire the BME680 to the Arduino using the SPI pins.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full is-resized\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2020\/07\/Arduino_BME680_Wiring_Diagram_SPI.png?resize=905%2C644&#038;quality=100&#038;strip=all&#038;ssl=1\" alt=\"Arduino BME680 Wiring Diagram Circuit SPI communication\" class=\"wp-image-98163\" width=\"905\" height=\"644\" srcset=\"https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2020\/07\/Arduino_BME680_Wiring_Diagram_SPI.png?w=1206&amp;quality=100&amp;strip=all&amp;ssl=1 1206w, https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2020\/07\/Arduino_BME680_Wiring_Diagram_SPI.png?resize=300%2C213&amp;quality=100&amp;strip=all&amp;ssl=1 300w, https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2020\/07\/Arduino_BME680_Wiring_Diagram_SPI.png?resize=1024%2C729&amp;quality=100&amp;strip=all&amp;ssl=1 1024w, https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2020\/07\/Arduino_BME680_Wiring_Diagram_SPI.png?resize=768%2C546&amp;quality=100&amp;strip=all&amp;ssl=1 768w\" sizes=\"(max-width: 905px) 100vw, 905px\" \/><\/figure><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Installing the BME680 Library<\/h2>\n\n\n\n<p>To get readings from the BME680 sensor module we&#8217;ll use the&nbsp;<a href=\"https:\/\/github.com\/adafruit\/Adafruit_BME680\" target=\"_blank\" rel=\"noreferrer noopener\">Adafruit_BME680 library<\/a>. Follow the next steps to install the library in your Arduino IDE:<\/p>\n\n\n\n<p>Open your Arduino IDE and go to&nbsp;<strong>Sketch&nbsp;<\/strong>&gt;&nbsp;<strong>Include Library<\/strong>&nbsp;&gt;&nbsp;<strong>Manage Libraries<\/strong>. The Library Manager should open.<\/p>\n\n\n\n<p>Search for \u201c<strong>adafruit bme680<\/strong>&nbsp;\u201d on the Search box and install the library.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"786\" height=\"443\" src=\"https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2020\/07\/Install-BM6280-Adafruit-Library-Arduino-IDE.png?resize=786%2C443&#038;quality=100&#038;strip=all&#038;ssl=1\" alt=\"Install BM6280 Adafruit Library Arduino IDE Library Manager\" class=\"wp-image-98108\" srcset=\"https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2020\/07\/Install-BM6280-Adafruit-Library-Arduino-IDE.png?w=786&amp;quality=100&amp;strip=all&amp;ssl=1 786w, https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2020\/07\/Install-BM6280-Adafruit-Library-Arduino-IDE.png?resize=300%2C169&amp;quality=100&amp;strip=all&amp;ssl=1 300w, https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2020\/07\/Install-BM6280-Adafruit-Library-Arduino-IDE.png?resize=768%2C433&amp;quality=100&amp;strip=all&amp;ssl=1 768w\" sizes=\"(max-width: 786px) 100vw, 786px\" \/><\/figure><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Installing the Adafruit_Sensor Library<\/h3>\n\n\n\n<p>To use the BME680 library, you also need to install the&nbsp;<a rel=\"noreferrer noopener\" href=\"https:\/\/github.com\/adafruit\/Adafruit_Sensor\" target=\"_blank\">Adafruit_Sensor library<\/a>. Follow the next steps to install the library in your Arduino IDE:<\/p>\n\n\n\n<p>Go to&nbsp;<strong>Sketch&nbsp;<\/strong>&gt;&nbsp;<strong>Include Library<\/strong>&nbsp;&gt;&nbsp;<strong>Manage Libraries<\/strong>&nbsp;and type \u201c<strong>Adafruit Unified Sensor<\/strong>\u201d in the search box. Scroll all the way down to find the library and install it.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"750\" height=\"422\" src=\"https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2019\/04\/adafruit_unified_sensor_library.png?resize=750%2C422&#038;quality=100&#038;strip=all&#038;ssl=1\" alt=\"Installing Adafruit Unified Sensor Driver library\" class=\"wp-image-84295\" srcset=\"https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2019\/04\/adafruit_unified_sensor_library.png?w=750&amp;quality=100&amp;strip=all&amp;ssl=1 750w, https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2019\/04\/adafruit_unified_sensor_library.png?resize=300%2C169&amp;quality=100&amp;strip=all&amp;ssl=1 300w\" sizes=\"(max-width: 750px) 100vw, 750px\" \/><\/figure><\/div>\n\n\n\n<p>After installing the libraries, restart your Arduino IDE.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Code Arduino &#8211; Reading BME680 Gas, Pressure, Humidity and Temperature<\/h2>\n\n\n\n<p>To read gas, pressure, temperature, and humidity we\u2019ll use a sketch example from the library.<\/p>\n\n\n\n<p>After installing the BME680 library, and the Adafruit_Sensor library, open the Arduino IDE and, go to&nbsp;<strong>File<\/strong>&nbsp;&gt;&nbsp;<strong>Examples<\/strong>&nbsp;&gt;&nbsp;<strong>Adafruit BME680 Library<\/strong>&nbsp;&gt;&nbsp;<strong>bme680async<\/strong>.<\/p>\n\n\n<pre style=\"max-height: 40em; margin-bottom: 20px;\"><code class=\"language-c\">\/***\n  Read Our Complete Guide: https:\/\/RandomNerdTutorials.com\/bme680-sensor-arduino-gas-temperature-humidity-pressure\/\n  \n  Designed specifically to work with the Adafruit BME680 Breakout ----&gt; http:\/\/www.adafruit.com\/products\/3660 These sensors use I2C or SPI to communicate, 2 or 4 pins are required to interface. Adafruit invests time and resources providing this open source code, please support Adafruit and open-source hardware by purchasing products from Adafruit! Written by Limor Fried &amp; Kevin Townsend for Adafruit Industries. BSD license, all text above must be included in any redistribution\n ***\/\n\n#include &lt;Wire.h&gt;\n#include &lt;SPI.h&gt;\n#include &lt;Adafruit_Sensor.h&gt;\n#include &quot;Adafruit_BME680.h&quot;\n\n\/*#define BME_SCK 13\n#define BME_MISO 12\n#define BME_MOSI 11\n#define BME_CS 10*\/\n\n#define SEALEVELPRESSURE_HPA (1013.25)\n\nAdafruit_BME680 bme; \/\/ I2C\n\/\/Adafruit_BME680 bme(BME_CS); \/\/ hardware SPI\n\/\/Adafruit_BME680 bme(BME_CS, BME_MOSI, BME_MISO, BME_SCK);\n\nvoid setup() {\n  Serial.begin(115200);\n  while (!Serial);\n  Serial.println(F(&quot;BME680 async test&quot;));\n\n  if (!bme.begin()) {\n    Serial.println(F(&quot;Could not find a valid BME680 sensor, check wiring!&quot;));\n    while (1);\n  }\n\n  \/\/ Set up oversampling and filter initialization\n  bme.setTemperatureOversampling(BME680_OS_8X);\n  bme.setHumidityOversampling(BME680_OS_2X);\n  bme.setPressureOversampling(BME680_OS_4X);\n  bme.setIIRFilterSize(BME680_FILTER_SIZE_3);\n  bme.setGasHeater(320, 150); \/\/ 320*C for 150 ms\n}\n\nvoid loop() {\n  \/\/ Tell BME680 to begin measurement.\n  unsigned long endTime = bme.beginReading();\n  if (endTime == 0) {\n    Serial.println(F(&quot;Failed to begin reading :(&quot;));\n    return;\n  }\n  Serial.print(F(&quot;Reading started at &quot;));\n  Serial.print(millis());\n  Serial.print(F(&quot; and will finish at &quot;));\n  Serial.println(endTime);\n\n  Serial.println(F(&quot;You can do other work during BME680 measurement.&quot;));\n  delay(50); \/\/ This represents parallel work.\n  \/\/ There's no need to delay() until millis() &gt;= endTime: bme.endReading()\n  \/\/ takes care of that. It's okay for parallel work to take longer than\n  \/\/ BME680's measurement time.\n\n  \/\/ Obtain measurement results from BME680. Note that this operation isn't\n  \/\/ instantaneous even if milli() &gt;= endTime due to I2C\/SPI latency.\n  if (!bme.endReading()) {\n    Serial.println(F(&quot;Failed to complete reading :(&quot;));\n    return;\n  }\n  Serial.print(F(&quot;Reading completed at &quot;));\n  Serial.println(millis());\n\n  Serial.print(F(&quot;Temperature = &quot;));\n  Serial.print(bme.temperature);\n  Serial.println(F(&quot; *C&quot;));\n\n  Serial.print(F(&quot;Pressure = &quot;));\n  Serial.print(bme.pressure \/ 100.0);\n  Serial.println(F(&quot; hPa&quot;));\n\n  Serial.print(F(&quot;Humidity = &quot;));\n  Serial.print(bme.humidity);\n  Serial.println(F(&quot; %&quot;));\n\n  Serial.print(F(&quot;Gas = &quot;));\n  Serial.print(bme.gas_resistance \/ 1000.0);\n  Serial.println(F(&quot; KOhms&quot;));\n\n  Serial.print(F(&quot;Approx. Altitude = &quot;));\n  Serial.print(bme.readAltitude(SEALEVELPRESSURE_HPA));\n  Serial.println(F(&quot; m&quot;));\n\n  Serial.println();\n  delay(2000);\n}\n<\/code><\/pre>\n\t<p style=\"text-align:center\"><a class=\"rntwhite\" href=\"https:\/\/github.com\/RuiSantosdotme\/Random-Nerd-Tutorials\/raw\/master\/Projects\/Arduino\/Arduino_BME680.ino\" target=\"_blank\">View raw code<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">How the Code Works<\/h2>\n\n\n\n<p>Continue reading this section to learn how the code works, or skip to the <a href=\"#demonstration\">Demonstration <\/a>section.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Libraries<\/h3>\n\n\n\n<p>The code starts by including the needed libraries: the <span class=\"rnthl rntliteral\">wire<\/span> library to use I2C, the <span class=\"rnthl rntliteral\">SPI<\/span> library (if you want to use SPI instead of I2C), the <span class=\"rnthl rntliteral\">Adafruit_Sensor<\/span> and <span class=\"rnthl rntliteral\">Adafruit_BME680<\/span> libraries to interface with the BME680 sensor.<\/p>\n\n\n\n<pre class=\"wp-block-code language-c\"><code>#include &lt;Wire.h>\n#include &lt;SPI.h>\n#include &lt;Adafruit_Sensor.h>\n#include \"Adafruit_BME680.h\"<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">SPI communication<\/h3>\n\n\n\n<p>We prefer to use I2C communication protocol with the sensor. However, the code is prepared if you want to use SPI. You just need to uncomment the following lines of code that define the SPI pins.<\/p>\n\n\n\n<pre class=\"wp-block-code language-c\"><code>\/*#define BME_SCK 13\n#define BME_MISO 12\n#define BME_MOSI 11\n#define BME_CS 10*\/<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Sea level pressure<\/h3>\n\n\n\n<p>A variable called <span class=\"rnthl rntliteral\">SEALEVELPRESSURE_HPA<\/span> is created.<\/p>\n\n\n\n<pre class=\"wp-block-code language-c\"><code>#define SEALEVELPRESSURE_HPA (1013.25)<\/code><\/pre>\n\n\n\n<p>This variable saves the pressure at the sea level in hectopascal (is equivalent to milibar). This variable is used to estimate the altitude for a given pressure by comparing it with the sea level pressure. This example uses the default value, but for accurate results, replace the value with the current sea level pressure at your location.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">I2C<\/h3>\n\n\n\n<p>This example uses I2C communication protocol by default. The following line creates an <span class=\"rnthl rntliteral\">Adafruit_BME680<\/span> object called <span class=\"rnthl rntliteral\">bme<\/span> on the Arduino I2C pins: <span class=\"rnthl rntcyellow\">D5<\/span> (SCL), <span class=\"rnthl rntclgray\">D4<\/span> (SDA).<\/p>\n\n\n\n<pre class=\"wp-block-code language-c\"><code>Adafruit_BME680 bme; \/\/ I2C<\/code><\/pre>\n\n\n\n<p>To use SPI, you need to comment this previous line and uncomment the following line.<\/p>\n\n\n\n<pre class=\"wp-block-code language-c\"><code>\/\/Adafruit_BME680 bme(BME_CS, BME_MOSI, BME_MISO, BME_SCK); \/\/ software SPI<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">setup()<\/h3>\n\n\n\n<p>In the <span class=\"rnthl rntliteral\">setup()<\/span> start a serial communication.<\/p>\n\n\n\n<pre class=\"wp-block-code language-c\"><code>Serial.begin(115200);<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">Init BME680 Sensor<\/h4>\n\n\n\n<p>Initialize the BME680 sensor:<\/p>\n\n\n\n<pre class=\"wp-block-code language-c\"><code>if (!bme.begin()) {\n  Serial.println(F(\"Could not find a valid BME680 sensor, check wiring!\"));\n  while (1);\n}<\/code><\/pre>\n\n\n\n<p>Set up the following parameters (oversampling, filter and gas heater) for the sensor.<\/p>\n\n\n\n<pre class=\"wp-block-code language-c\"><code>\/\/ Set up oversampling and filter initialization\nbme.setTemperatureOversampling(BME680_OS_8X);\nbme.setHumidityOversampling(BME680_OS_2X);\nbme.setPressureOversampling(BME680_OS_4X);\nbme.setIIRFilterSize(BME680_FILTER_SIZE_3);\nbme.setGasHeater(320, 150); \/\/ 320*C for 150 ms<\/code><\/pre>\n\n\n\n<p>To increase the resolution of the raw sensor data, it supports oversampling. We&#8217;ll use the default oversampling parameters, but you can change them.<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><span class=\"rnthl rntliteral\">setTemperatureOversampling()<\/span>: set temperature oversampling.<\/li><li><span class=\"rnthl rntliteral\">setHumidityOversampling()<\/span>: set humidity oversampling.<\/li><li><span class=\"rnthl rntliteral\">setPressureOversampling()<\/span>: set pressure oversampling.<\/li><\/ul>\n\n\n\n<p>These methods can accepts one of the following parameters:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><span class=\"rnthl rntliteral\">BME680_OS_NONE<\/span>: turn off reading;<\/li><li><span class=\"rnthl rntliteral\">BME680_OS_1X<\/span><\/li><li><span class=\"rnthl rntliteral\">BME680_OS_2X<\/span><\/li><li><span class=\"rnthl rntliteral\">BME680_OS_4X<\/span><\/li><li><span class=\"rnthl rntliteral\">BME680_OS_8X<\/span><\/li><li><span class=\"rnthl rntliteral\">BME680_OS_16X<\/span><\/li><\/ul>\n\n\n\n<p>The BME680 sensor integrates an internal IIR filter to reduce short-term changes in sensor output values caused by external disturbances. The <span class=\"rnthl rntliteral\">setIIRFilterSize()<\/span> method sets the IIR filter. It accepts the filter size as a parameter:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><span class=\"rnthl rntliteral\">BME680_FILTER_SIZE_0<\/span> (no filtering)<\/li><li><span class=\"rnthl rntliteral\">BME680_FILTER_SIZE_1<\/span><\/li><li><span class=\"rnthl rntliteral\">BME680_FILTER_SIZE_3<\/span><\/li><li><span class=\"rnthl rntliteral\">BME680_FILTER_SIZE_7<\/span> <\/li><li><span class=\"rnthl rntliteral\">BME680_FILTER_SIZE_15<\/span> <\/li><li><span class=\"rnthl rntliteral\">BME680_FILTER_SIZE_31<\/span><\/li><li><span class=\"rnthl rntliteral\">BME680_FILTER_SIZE_63<\/span><\/li><li><span class=\"rnthl rntliteral\">BME680_FILTER_SIZE_127<\/span><\/li><\/ul>\n\n\n\n<p>The gas sensor integrates a heater. Set the heater profile using the <span class=\"rnthl rntliteral\">setGasHeater()<\/span> method that accepts as arguments:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>the heater temperature (in degrees Centigrade) <\/li><li>the time the heater should be on (in milliseconds)<\/li><\/ul>\n\n\n\n<p>We&#8217;ll use the default settings: 320 \u00baC for 150 ms.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">loop()<\/h3>\n\n\n\n<p>In the <span class=\"rnthl rntliteral\">loop()<\/span>, we&#8217;ll get measurements from the BME680 sensor.<\/p>\n\n\n\n<p>First, tell the sensor to start an asynchronous reading with <span class=\"rnthl rntliteral\">bme.beginReading()<\/span>. This returns the time when the reading would be ready. <\/p>\n\n\n\n<pre class=\"wp-block-code language-c\"><code>\/\/ Tell BME680 to begin measurement.\nunsigned long endTime = bme.beginReading();\nif (endTime == 0) {\n  Serial.println(F(\"Failed to begin reading :(\"));\n  return;\n}\nSerial.print(F(\"Reading started at \"));\nSerial.print(millis());\nSerial.print(F(\" and will finish at \"));\nSerial.println(endTime);<\/code><\/pre>\n\n\n\n<p>Then, call the <span class=\"rnthl rntliteral\">endReading()<\/span> method to end an asynchronous reading. If the asynchronous reading is still in progress, block until it ends.<\/p>\n\n\n\n<pre class=\"wp-block-code language-c\"><code>if (!bme.endReading()) {\n  Serial.println(F(\"Failed to complete reading :(\"));\n  return;\n}<\/code><\/pre>\n\n\n\n<p>After this, we can get the readings as follows:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><span class=\"rnthl rntliteral\">bme.temperature<\/span>: returns temperature reading<\/li><li><span class=\"rnthl rntliteral\">bme.pressure<\/span>: returns pressure reading<\/li><li><span class=\"rnthl rntliteral\">bme.humidity<\/span>: returns humidity reading<\/li><li><span class=\"rnthl rntliteral\">bme.gas_resistance<\/span>: returns gas resistance<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-code language-c\"><code>Serial.print(F(\"Temperature = \"));\nSerial.print(bme.temperature);\nSerial.println(F(\" *C\"));\n\nSerial.print(F(\"Pressure = \"));\nSerial.print(bme.pressure \/ 100.0);\nSerial.println(F(\" hPa\"));\n\nSerial.print(F(\"Humidity = \"));\nSerial.print(bme.humidity);\nSerial.println(F(\" %\"));\n\nSerial.print(F(\"Gas = \"));\nSerial.print(bme.gas_resistance \/ 1000.0);\nSerial.println(F(\" KOhms\"));\n\nSerial.print(F(\"Approx. Altitude = \"));\nSerial.print(bme.readAltitude(SEALEVELPRESSURE_HPA));\nSerial.println(F(\" m\"));<\/code><\/pre>\n\n\n\n<p class=\"rntbox rntclgray\">For more information about the library methods, take a look at the <a rel=\"noreferrer noopener\" href=\"https:\/\/adafruit.github.io\/Adafruit_BME680\/html\/class_adafruit___b_m_e680.html#aaae0839c68035001f491661cb2d012fc\" target=\"_blank\">Adafruit_BME<\/a><a href=\"https:\/\/adafruit.github.io\/Adafruit_BME680\/html\/class_adafruit___b_m_e680.html#aaae0839c68035001f491661cb2d012fc\" target=\"_blank\" rel=\"noreferrer noopener\">6<\/a><a rel=\"noreferrer noopener\" href=\"https:\/\/adafruit.github.io\/Adafruit_BME680\/html\/class_adafruit___b_m_e680.html#aaae0839c68035001f491661cb2d012fc\" target=\"_blank\">80 Class Reference<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"demonstration\">Demonstration<\/h2>\n\n\n\n<p>Upload the code to your Arduino board. Go to <strong>Tools <\/strong>&gt; <strong>Board <\/strong>and select the Arduino board you&#8217;re using. Go to <strong>Tools <\/strong>&gt; <strong>Port <\/strong>and select the port your board is connected to. Then, click the upload button.<\/p>\n\n\n\n<p>Open the Serial Monitor at a baud rate of 115200, press the on-board RST button. The sensor measurements will be displayed.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"669\" height=\"444\" src=\"https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2020\/07\/BME680-Arduino-IDE-Example-Display-Readings-Serial-Monitor.png?resize=669%2C444&#038;quality=100&#038;strip=all&#038;ssl=1\" alt=\"BME680 Arduino IDE Example Display Gas Temperature Humidity and Pressure Readings Serial Monitor\" class=\"wp-image-98117\" srcset=\"https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2020\/07\/BME680-Arduino-IDE-Example-Display-Readings-Serial-Monitor.png?w=669&amp;quality=100&amp;strip=all&amp;ssl=1 669w, https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2020\/07\/BME680-Arduino-IDE-Example-Display-Readings-Serial-Monitor.png?resize=300%2C199&amp;quality=100&amp;strip=all&amp;ssl=1 300w\" sizes=\"(max-width: 669px) 100vw, 669px\" \/><\/figure><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Wrapping Up <\/h2>\n\n\n\n<p>The BME680 sensor module is a 4-in-1 digital sensor that combines gas, pressure, temperature and humidity sensors. The BME680 contains a MOX sensor that senses the presence of most VOC gases. This sensor gives you a qualitative idea of the<strong> <\/strong>sum of VOCs\/contaminants in the surrounding air. For this reason, the BME680 can be used to monitor indoor air quality.<\/p>\n\n\n\n<p>We hope you&#8217;ve found this getting started guide useful. We have guides for other popular sensors:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"https:\/\/randomnerdtutorials.com\/bme280-sensor-arduino-pressure-temperature-humidity\/\"><strong>BME280 <\/strong>Sensor with Arduino (Pressure, Temperature, Humidity)<\/a><\/li><li><a href=\"https:\/\/randomnerdtutorials.com\/guide-for-ds18b20-temperature-sensor-with-arduino\/\"><strong>DS18B20 <\/strong>Temperature Sensor with Arduino<\/a><\/li><li><a href=\"https:\/\/randomnerdtutorials.com\/complete-guide-for-dht11dht22-humidity-and-temperature-sensor-with-arduino\/\"><strong>DHT11\/DHT22<\/strong> Humidity and Temperature Sensor With Arduino<\/a><\/li><li><a href=\"https:\/\/randomnerdtutorials.com\/arduino-lm35-lm335-lm34-temperature-sensor\/\"><strong>LM35<\/strong>, <strong>LM335<\/strong> and <strong>LM34 <\/strong>Temperature Sensors with Arduino<\/a><\/li><li><a href=\"https:\/\/randomnerdtutorials.com\/dht11-vs-dht22-vs-lm35-vs-ds18b20-vs-bme280-vs-bmp180\/\">DHT11 vs DHT22 vs LM35 vs DS18B20 vs BME280 vs BMP180<\/a><\/li><\/ul>\n\n\n\n<p>Learn more about the Arduino with our resources:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"https:\/\/randomnerdtutorials.com\/arduino-step-by-step-projects\/\">Arduino Step-by-step Projects (eBook)<\/a><\/li><li><span style=\"font-size: inherit; background-color: initial;\"><a href=\"https:\/\/randomnerdtutorials.com\/projects-arduino\/\">More Arduino Projects and Tutorials &#8230;<\/a><\/span><\/li><\/ul>\n\n\n\n<p>Thanks for reading.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>The BME680 is an environmental digital sensor that measures gas, pressure, humidity and temperature. In this guide you&#8217;ll learn how to use the BME680 sensor module with the Arduino board. &#8230; <\/p>\n<p class=\"read-more-container\"><a title=\"Guide for BME680 Environmental Sensor with Arduino (Gas, Temperature, Humidity, Pressure)\" class=\"read-more button\" href=\"https:\/\/randomnerdtutorials.com\/bme680-sensor-arduino-gas-temperature-humidity-pressure\/#more-98167\" aria-label=\"Read more about Guide for BME680 Environmental Sensor with Arduino (Gas, Temperature, Humidity, Pressure)\">CONTINUE READING \u00bb<\/a><\/p>\n","protected":false},"author":5,"featured_media":98140,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[303,2,267,302,245,264],"tags":[],"class_list":["post-98167","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-0-arduino","category-arduino","category-arduino-project","category-0-guide","category-arduino-ide","category-project"],"aioseo_notices":[],"jetpack_featured_media_url":"https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2020\/07\/Arduino-Board-BME680-Gas-sensor-humidity-barometric-pressure-ambient-temperature-gas-air-quality-Arduino-IDE.jpg?fit=1280%2C720&quality=100&strip=all&ssl=1","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/randomnerdtutorials.com\/wp-json\/wp\/v2\/posts\/98167","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/randomnerdtutorials.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/randomnerdtutorials.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/randomnerdtutorials.com\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/randomnerdtutorials.com\/wp-json\/wp\/v2\/comments?post=98167"}],"version-history":[{"count":0,"href":"https:\/\/randomnerdtutorials.com\/wp-json\/wp\/v2\/posts\/98167\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/randomnerdtutorials.com\/wp-json\/wp\/v2\/media\/98140"}],"wp:attachment":[{"href":"https:\/\/randomnerdtutorials.com\/wp-json\/wp\/v2\/media?parent=98167"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/randomnerdtutorials.com\/wp-json\/wp\/v2\/categories?post=98167"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/randomnerdtutorials.com\/wp-json\/wp\/v2\/tags?post=98167"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}