IOT

BMP180 Pressure Temperature Monitor on Thingspeak with ESP8266

In this project, BMP180 Barometric Pressure Sensor will be interfaced with NodeMCU ESP8266 and OLED Display. Temperature, Pressure, and Altitude values will be displayed on both the Serial Monitor and 0.96″ OLED Display. We will then publish these values via IoT Cloud to Thingspeak Server.

The Bosch BMP180 barometric pressure sensor is used for weather forecasting, detecting altitude, and measuring vertical velocity. It can measure ambient temperature, absolute and relative pressure, and estimated altitude.

The atmospheric pressure, commonly known as barometric pressure, is the force exerted by the weight of air on the surface of the Earth. Due to the fact that the air in the atmosphere has mass, gravity causes the weight of that column to apply pressure on the surface. The BMP180 provides pressure readings in SI units of Pascals. The pressure can also be measured in hectoPascals (hPa) or millimeters of mercury (mm of Hg).

In this IoT project, the BMP180 Barometric Pressure Sensor will be connected to the NodeMCU ESP8266-12E Board. We will display meteorological parameters such as Pressure, Temperature, and Altitude using a 0.96-inch I2C OLED Display. Then, we will transmit this data/parameters to Thingspeak Cloud Server over the internet.

Hardware Required

S.N.COMPONENTS NAMEDESCRIPTION
1NodeMCUESP8266-12E Board
2BMP180 SensorBMP180 Barometric Pressure Sensor from Bosch
3OLED Display0.96″ I2C OLED Display
4Connecting WiresJumper Wires
5Breadboard

BMP180 Barometric Pressure Sensor

The BMP180 Breakout is a barometric pressure sensor with an I2C (“Wire”) interface.

BMP180 Barometric Pressure Sensor

Barometric pressure sensors assess the surrounding air’s absolute pressure. This pressure changes depending on the climate and altitude. You can monitor weather changes, measure altitude, and perform any other jobs that require an accurate pressure reading, depending on how you interpret the data.

How Does Barometric Pressure Sensor BMP180 Operate?

The BMP180 is a pressure-detecting piezoresistive sensor. Piezoresistive sensors consist of a semiconducting material (often silicon) whose resistance varies when a mechanical force, such as atmospheric pressure, is applied.

Because temperature affects the density of gases like air, the BMP180 measures both pressure and temperature. At higher temperatures, the air is less dense and hence exerts less pressure on the sensor. At colder temperatures, the air is more thick and heavier, exerting greater pressure on the sensor. The sensor employs real-time temperature data to adjust pressure readings for variations in air density. The temperature reading is taken first, followed by the pressure reading.

BMP180 Pins

Pin NameDescription
VCCConnected to +5V
GNDConnected to ground.
SDASerial Data pin (I2C interface)
SCLSerial Clock pin (I2C interface)
3.3VIf +5V is not present. Can power module by connecting +3.3V to this pin.

On a PCB with a 3.3V regulator, I2C level shifter, and pull-up resistors on the I2C pins, the sensor is installed. This board is 5V compatible; a 3.3V regulator and an i2c level shifter circuit are included so this sensor can be securely used with 5V logic and power.

The Sensor has four pins, which are VIN, GND, SDA, and SCL. Connect the microcontroller’s VIN pin to the 5V/3.3V voltage pin, GND to ground, SCL to I2C Clock, and SDA to I2C Data.

BMP180 Module Features

  • Can measure temperature and altitude.
  • Pressure range: 300 to 1100hPa
  • High relative accuracy of ±0.12hPa
  • Can work on low voltages
  • 3.4Mhz I2C interface
  • Low power consumption (3uA)
  • Pressure conversion time: 5msec
  • Potable size

BMP180 Module Specifications

  • Operating voltage of BMP180: 1.3V – 3.6V
  • Input voltage of BMP180MODULE: 3.3V to 5.5V
  • Peak current: 1000uA
  • Consumes 0.1uA standby
  • Maximum voltage at SDA , SCL : VCC + 0.3V
  • Operating temperature: -40ºC to +80ºC

Interfacing BMP180 Sensor with NodeMCU ESP8266

Now let’s interface NodeMCU ESP8266 with the BMP180 Barometric Pressure Sensor.

Connect the Nodemcu ESP8266 VIN pin to the 3.3V voltage pin, GND to ground, SCL to D1, and SDA to D2.

Source Code for BMP180 & ESP8266

Here is a simple source code for integrating BMP180 and ESP8266 NodeMCU.

That requires a BMP180 Library. Download the BMP180 Library from the URL below, then import it into the Arduino IDE.

Download SFE_BMP180 Library

In the following code, be sure to include the alteration in altitude. Simply conduct a Google search to determine the altitude of your city.

#define ALTITUDE 1655.0 // Altitude of SparkFun’s HQ in Boulder, CO. in meters
#include <SFE_BMP180.h>
#include <Wire.h>

// You will need to create an SFE_BMP180 object, here called “pressure”:

SFE_BMP180 pressure;

#define ALTITUDE 1655.0 // Altitude of SparkFun’s HQ in Boulder, CO. in meters

void setup()
{
Serial.begin(9600);
Serial.println(“REBOOT”);

// Initialize the sensor (it is important to get calibration values stored on the device).

if (pressure.begin())
Serial.println(“BMP180 init success”);
else
{
// Oops, something went wrong, this is usually a connection problem,
// see the comments at the top of this sketch for the proper connections.

Serial.println(“BMP180 init fail\n\n”);
while(1); // Pause forever.
}
}

void loop()
{
char status;
double T,P,p0,a;

// Loop here getting pressure readings every 10 seconds.

// If you want sea-level-compensated pressure, as used in weather reports,
// you will need to know the altitude at which your measurements are taken.
// We’re using a constant called ALTITUDE in this sketch:

Serial.println();
Serial.print(“provided altitude: “);
Serial.print(ALTITUDE,0);
Serial.print(” meters, “);
Serial.print(ALTITUDE*3.28084,0);
Serial.println(” feet”);

// If you want to measure altitude, and not pressure, you will instead need
// to provide a known baseline pressure. This is shown at the end of the sketch.

// You must first get a temperature measurement to perform a pressure reading.

// Start a temperature measurement:
// If request is successful, the number of ms to wait is returned.
// If request is unsuccessful, 0 is returned.

status = pressure.startTemperature();
if (status != 0)
{
// Wait for the measurement to complete:
delay(status);

// Retrieve the completed temperature measurement:
// Note that the measurement is stored in the variable T.
// Function returns 1 if successful, 0 if failure.

status = pressure.getTemperature(T);
if (status != 0)
{
// Print out the measurement:
Serial.print(“temperature: “);
Serial.print(T,2);
Serial.print(” deg C, “);
Serial.print((9.0/5.0)*T+32.0,2);
Serial.println(” deg F”);

// Start a pressure measurement:
// The parameter is the oversampling setting, from 0 to 3 (highest res, longest wait).
// If request is successful, the number of ms to wait is returned.
// If request is unsuccessful, 0 is returned.

status = pressure.startPressure(3);
if (status != 0)
{
// Wait for the measurement to complete:
delay(status);

// Retrieve the completed pressure measurement:
// Note that the measurement is stored in the variable P.
// Note also that the function requires the previous temperature measurement (T).
// (If temperature is stable, you can do one temperature measurement for a number of pressure measurements.)
// Function returns 1 if successful, 0 if failure.

status = pressure.getPressure(P,T);
if (status != 0)
{
// Print out the measurement:
Serial.print(“absolute pressure: “);
Serial.print(P,2);
Serial.print(” mb, “);
Serial.print(P*0.0295333727,2);
Serial.println(” inHg”);

// The pressure sensor returns abolute pressure, which varies with altitude.
// To remove the effects of altitude, use the sealevel function and your current altitude.
// This number is commonly used in weather reports.
// Parameters: P = absolute pressure in mb, ALTITUDE = current altitude in m.
// Result: p0 = sea-level compensated pressure in mb

p0 = pressure.sealevel(P,ALTITUDE); // we’re at 1655 meters (Boulder, CO)
Serial.print(“relative (sea-level) pressure: “);
Serial.print(p0,2);
Serial.print(” mb, “);
Serial.print(p0*0.0295333727,2);
Serial.println(” inHg”);

// On the other hand, if you want to determine your altitude from the pressure reading,
// use the altitude function along with a baseline pressure (sea-level or other).
// Parameters: P = absolute pressure in mb, p0 = baseline pressure in mb.
// Result: a = altitude in m.

a = pressure.altitude(P,p0);
Serial.print(“computed altitude: “);
Serial.print(a,0);
Serial.print(” meters, “);
Serial.print(a*3.28084,0);
Serial.println(” feet”);
}
else Serial.println(“error retrieving pressure measurement\n”);
}
else Serial.println(“error starting pressure measurement\n”);
}
else Serial.println(“error retrieving temperature measurement\n”);
}
else Serial.println(“error starting temperature measurement\n”);

delay(5000); // Pause for 5 seconds.
}s

Once the code has been uploaded, the serial monitor can be used to view the following atmospheric parameters.

Interfacing BMP180 Sensor with NodeMCU ESP8266 & OLED Display

Add an additional OLED Display to the Circuit. The SSD1306 I2C OLED Display will be utilised. Connect its SDA and SCL pins to NodeMCU’s D2 and D1 pins. The circuit is illustrated below.

BMP180 ESP8266 OLED

Source Code for BMP180 & ESP8266 with OLED Display

You must include two more libraries for OLED Display. Obtain the library via the provided link.

1. Adafruit_SSD1306 : https://github.com/adafruit/Adafruit_SSD1306

2. Adafruit_GFX : https://github.com/adafruit/Adafruit-GFX-Library

#include <SFE_BMP180.h>
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

// You will need to create an SFE_BMP180 object, here called “pressure”:

SFE_BMP180 pressure;

#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
#define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

#define ALTITUDE 80.0 // Altitude of SparkFun’s HQ in Boulder, CO. in meters

void setup()
{
Serial.begin(115200); // open serial port, set the baud rate to 9600 bps
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); //initialize with the I2C addr 0x3C (128×64)
display.clearDisplay();
Serial.println(“REBOOT”);

// Initialize the sensor (it is important to get calibration values stored on the device).

if (pressure.begin())
{
Serial.println(“BMP180 init success”);

display.clearDisplay();
display.setCursor(0,0); //oled display
display.setTextSize(1);
display.setTextColor(WHITE);
display.println(“BMP180 init success”);
display.display();
delay(5000);
display.clearDisplay();
}
else
{
// Oops, something went wrong, this is usually a connection problem,
// see the comments at the top of this sketch for the proper connections.

Serial.println(“BMP180 init fail\n\n”);
display.clearDisplay();
display.setCursor(0,0); //oled display
display.setTextSize(1);
display.setTextColor(WHITE);
display.println(“BMP180 init fail”);
display.display();
delay(5000);
display.clearDisplay();
while(1); // Pause forever.
}
}

void loop()
{
char status;
double T,P,p0,a;

// Loop here getting pressure readings every 10 seconds.

// If you want sea-level-compensated pressure, as used in weather reports,
// you will need to know the altitude at which your measurements are taken.
// We’re using a constant called ALTITUDE in this sketch:

Serial.println();
Serial.print(“provided altitude: “);
Serial.print(ALTITUDE,0);
Serial.print(” meters, “);
Serial.print(ALTITUDE*3.28084,0);
Serial.println(” feet”);

// If you want to measure altitude, and not pressure, you will instead need
// to provide a known baseline pressure. This is shown at the end of the sketch.

// You must first get a temperature measurement to perform a pressure reading.

// Start a temperature measurement:
// If request is successful, the number of ms to wait is returned.
// If request is unsuccessful, 0 is returned.
display.clearDisplay();
status = pressure.startTemperature();
if (status != 0)
{
// Wait for the measurement to complete:
delay(status);

// Retrieve the completed temperature measurement:
// Note that the measurement is stored in the variable T.
// Function returns 1 if successful, 0 if failure.

status = pressure.getTemperature(T);
if (status != 0)
{
// Print out the measurement:
Serial.print(“temperature: “);
Serial.print(T,2);
Serial.print(” deg C, “);
Serial.print((9.0/5.0)*T+32.0,2);
Serial.println(” deg F”);

display.setCursor(0,0); //oled display
display.setTextSize(1);
display.setTextColor(WHITE);
display.print(“Temp: “);
display.print(T,2);
display.print(” C”);

display.display();

// Start a pressure measurement:
// The parameter is the oversampling setting, from 0 to 3 (highest res, longest wait).
// If request is successful, the number of ms to wait is returned.
// If request is unsuccessful, 0 is returned.

status = pressure.startPressure(3);
if (status != 0)
{
// Wait for the measurement to complete:
delay(status);

// Retrieve the completed pressure measurement:
// Note that the measurement is stored in the variable P.
// Note also that the function requires the previous temperature measurement (T).
// (If temperature is stable, you can do one temperature measurement for a number of pressure measurements.)
// Function returns 1 if successful, 0 if failure.

status = pressure.getPressure(P,T);
if (status != 0)
{
// Print out the measurement:
Serial.print(“absolute pressure: “);
Serial.print(P,2);
Serial.print(” mb, “);
Serial.print(P*0.0295333727,2);
Serial.println(” inHg”);

display.setCursor(0,15); //oled display
display.setTextSize(1);
display.setTextColor(WHITE);
display.print(“Ab. Pr.: “);
display.print(P*0.0295333727,2);
display.print(” inHg”);

display.display();

// The pressure sensor returns abolute pressure, which varies with altitude.
// To remove the effects of altitude, use the sealevel function and your current altitude.
// This number is commonly used in weather reports.
// Parameters: P = absolute pressure in mb, ALTITUDE = current altitude in m.
// Result: p0 = sea-level compensated pressure in mb

p0 = pressure.sealevel(P,ALTITUDE); // we’re at 1655 meters (Boulder, CO)
Serial.print(“relative (sea-level) pressure: “);
Serial.print(p0,2);
Serial.print(” mb, “);
Serial.print(p0*0.0295333727,2);
Serial.println(” inHg”);

display.setCursor(0,30); //oled display
display.setTextSize(1);
display.setTextColor(WHITE);
display.print(“Re. Pr.: “);
display.print(p0*0.0295333727,2);
display.print(” inHg”);

display.display();

// On the other hand, if you want to determine your altitude from the pressure reading,
// use the altitude function along with a baseline pressure (sea-level or other).
// Parameters: P = absolute pressure in mb, p0 = baseline pressure in mb.
// Result: a = altitude in m.

a = pressure.altitude(P,p0);
Serial.print(“computed altitude: “);
Serial.print(a,0);
Serial.print(” meters, “);
Serial.print(a*3.28084,0);
Serial.println(” feet”);

display.setCursor(0,45); //oled display
display.setTextSize(1);
display.setTextColor(WHITE);
display.print(“Altitude: “);
display.print(a,0);
display.print(” meter”);

display.display();
}
else Serial.println(“error retrieving pressure measurement\n”);
}
else Serial.println(“error starting pressure measurement\n”);
}
else Serial.println(“error retrieving temperature measurement\n”);
}
else Serial.println(“error starting temperature measurement\n”);

delay(5000); // Pause for 5 seconds.


}

Once the code has been uploaded, the OLED Display will display the following atmospheric parameters:

IoT Based BMP180 Pressure Temperature Monitor on Thingspeak with ESP8266

Now, let’s make additional code modifications to make the project IoT-based. To make the project IoT-based, we require a server where API data may be posted. I did so using Thingspeak Server.

ThingSpeak is an open-source Internet of Things application and API for storing and retrieving data from devices via the Internet or a local area network using the HTTP and MQTT protocols. Thingspeak facilitates the collection, storage, analysis, visualization, and action of sensor data.

To set up the Thingspeak Server, visit https://thingspeak.com/. Create an account or simply sign in if you created the account earlier. Then create a new channel.

BMP180 Thingspeak Setup

Source Code for BMP180 & ESP8266 on Thingspeak Server

Use the API key in the code that follows. Also, ensure that the Wifi SSID and password are updated. The code is then uploaded to the NodeMCU ESP8266 Board.

#include <ESP8266WiFi.h>
#include <SFE_BMP180.h>
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

// You will need to create an SFE_BMP180 object, here called “pressure”:

SFE_BMP180 pressure;

#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
#define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

#define ALTITUDE 80.0 // Altitude of SparkFun’s HQ in Boulder, CO. in meters

String apiKey = “14K8UL2QEK8BTHN6”; // Enter your Write API key from ThingSpeak
const char *ssid = “Alexahome”; // replace with your wifi ssid and wpa2 key
const char *pass = “12345678”;
const char* server = “api.thingspeak.com”;

WiFiClient client;


void setup()
{
Serial.begin(115200); // open serial port, set the baud rate to 9600 bps
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); //initialize with the I2C addr 0x3C (128×64)
display.clearDisplay();
delay(10);
Serial.println(“Connecting to “);
Serial.println(ssid);
display.clearDisplay();
display.setCursor(0,0); //oled display
display.setTextSize(1);
display.setTextColor(WHITE);
display.println(“Connecting to “);
display.println(ssid);
display.display();
WiFi.begin(ssid, pass);
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(“.”);
}
Serial.println(“”);
Serial.println(“WiFi connected”);

display.clearDisplay();
display.setCursor(0,0); //oled display
display.setTextSize(1);
display.setTextColor(WHITE);
display.println(“WiFi connected”);
display.display();
delay(3000);



Serial.println(“REBOOT”);

// Initialize the sensor (it is important to get calibration values stored on the device).

if (pressure.begin())
{
Serial.println(“BMP180 init success”);

display.clearDisplay();
display.setCursor(0,0); //oled display
display.setTextSize(1);
display.setTextColor(WHITE);
display.println(“BMP180 init success”);
display.display();
delay(5000);
display.clearDisplay();
}
else
{
// Oops, something went wrong, this is usually a connection problem,
// see the comments at the top of this sketch for the proper connections.

Serial.println(“BMP180 init fail\n\n”);
display.clearDisplay();
display.setCursor(0,0); //oled display
display.setTextSize(1);
display.setTextColor(WHITE);
display.println(“BMP180 init fail”);
display.display();
delay(5000);
display.clearDisplay();
while(1); // Pause forever.
}
}

void loop()
{
char status;
double T,P,p0,a;

// Loop here getting pressure readings every 10 seconds.

// If you want sea-level-compensated pressure, as used in weather reports,
// you will need to know the altitude at which your measurements are taken.
// We’re using a constant called ALTITUDE in this sketch:

Serial.println();
Serial.print(“provided altitude: “);
Serial.print(ALTITUDE,0);
Serial.print(” meters, “);
Serial.print(ALTITUDE*3.28084,0);
Serial.println(” feet”);

// If you want to measure altitude, and not pressure, you will instead need
// to provide a known baseline pressure. This is shown at the end of the sketch.

// You must first get a temperature measurement to perform a pressure reading.

// Start a temperature measurement:
// If request is successful, the number of ms to wait is returned.
// If request is unsuccessful, 0 is returned.
display.clearDisplay();
status = pressure.startTemperature();
if (status != 0)
{
// Wait for the measurement to complete:
delay(status);

// Retrieve the completed temperature measurement:
// Note that the measurement is stored in the variable T.
// Function returns 1 if successful, 0 if failure.

status = pressure.getTemperature(T);
if (status != 0)
{
// Print out the measurement:
Serial.print(“temperature: “);
Serial.print(T,2);
Serial.print(” deg C, “);
Serial.print((9.0/5.0)*T+32.0,2);
Serial.println(” deg F”);

display.setCursor(0,0); //oled display
display.setTextSize(1);
display.setTextColor(WHITE);
display.print(“Temp: “);
display.print(T,2);
display.print(” C”);

display.display();

// Start a pressure measurement:
// The parameter is the oversampling setting, from 0 to 3 (highest res, longest wait).
// If request is successful, the number of ms to wait is returned.
// If request is unsuccessful, 0 is returned.

status = pressure.startPressure(3);
if (status != 0)
{
// Wait for the measurement to complete:
delay(status);

// Retrieve the completed pressure measurement:
// Note that the measurement is stored in the variable P.
// Note also that the function requires the previous temperature measurement (T).
// (If temperature is stable, you can do one temperature measurement for a number of pressure measurements.)
// Function returns 1 if successful, 0 if failure.

status = pressure.getPressure(P,T);
if (status != 0)
{
// Print out the measurement:
Serial.print(“absolute pressure: “);
Serial.print(P,2);
Serial.print(” mb, “);
Serial.print(P*0.0295333727,2);
Serial.println(” inHg”);

display.setCursor(0,15); //oled display
display.setTextSize(1);
display.setTextColor(WHITE);
display.print(“Ab. Pr.: “);
display.print(P*0.0295333727,2);
display.print(” inHg”);

display.display();

// The pressure sensor returns abolute pressure, which varies with altitude.
// To remove the effects of altitude, use the sealevel function and your current altitude.
// This number is commonly used in weather reports.
// Parameters: P = absolute pressure in mb, ALTITUDE = current altitude in m.
// Result: p0 = sea-level compensated pressure in mb

p0 = pressure.sealevel(P,ALTITUDE); // we’re at 1655 meters (Boulder, CO)
Serial.print(“relative (sea-level) pressure: “);
Serial.print(p0,2);
Serial.print(” mb, “);
Serial.print(p0*0.0295333727,2);
Serial.println(” inHg”);

display.setCursor(0,30); //oled display
display.setTextSize(1);
display.setTextColor(WHITE);
display.print(“Re. Pr.: “);
display.print(p0*0.0295333727,2);
display.print(” inHg”);

display.display();

// On the other hand, if you want to determine your altitude from the pressure reading,
// use the altitude function along with a baseline pressure (sea-level or other).
// Parameters: P = absolute pressure in mb, p0 = baseline pressure in mb.
// Result: a = altitude in m.

a = pressure.altitude(P,p0);
Serial.print(“computed altitude: “);
Serial.print(a,0);
Serial.print(” meters, “);
Serial.print(a*3.28084,0);
Serial.println(” feet”);

display.setCursor(0,45); //oled display
display.setTextSize(1);
display.setTextColor(WHITE);
display.print(“Altitude: “);
display.print(a,0);
display.print(” meter”);

display.display();
}
else Serial.println(“error retrieving pressure measurement\n”);
}
else Serial.println(“error starting pressure measurement\n”);
}
else Serial.println(“error retrieving temperature measurement\n”);
}
else Serial.println(“error starting temperature measurement\n”);


if (client.connect(server, 80)) // “184.106.153.149” or api.thingspeak.com
{
String postStr = apiKey;
postStr += “&field1=”;
postStr += String(T,2);
postStr += “&field2=”;
postStr += String(P*0.0295333727,2);
postStr += “&field3=”;
postStr += String(p0*0.0295333727,2);
postStr += “&field4=”;
postStr += String(a,0);
postStr += “\r\n\r\n\r\n\r\n”;

client.print(“POST /update HTTP/1.1\n”);
client.print(“Host: api.thingspeak.com\n”);
client.print(“Connection: close\n”);
client.print(“X-THINGSPEAKAPIKEY: ” + apiKey + “\n”);
client.print(“Content-Type: application/x-www-form-urlencoded\n”);
client.print(“Content-Length: “);
client.print(postStr.length());
client.print(“\n\n”);
client.print(postStr);

Serial.println(“”);
Serial.println(“Data Send to Thingspeak”);
}
client.stop();
Serial.println(“Waiting…”);
Serial.println(“”);
Serial.println(“***************************************************”);


delay(5000); // Pause for 5 seconds.


}

BMP180 Pressure Temperature Data Monitoring on Thingspeak

The NodeMCU will attempt to connect to a WiFi network once the code has been uploaded, as illustrated below.

You may now access the Thingspeak Private view from anywhere in the world to monitor sensor data.

Conclusion
I hope all of you have understood how to interface BMP180 Barometric Pressure Sensor with NodeMCU ESP8266 & OLED Display. We MATHA ELECTRONICS will be back soon with more informative blogs soon.

Leave a Reply

Your email address will not be published.