BMP180 BMP280

This bmp180 from Bosch is the best low-cost sensing solution for measuring barometric pressure and temperature. The sensor is soldered onto a PCB with a 3.3V regulator, I2C level shifter and pull-up resistors on the I2C pins. The BMP180 replaces the BMP085.


33 ₪


Specification

BMP180 is a Digital pressure sensor. In this tutorial we are interfacing BMP180 with ESP8266. Sensor have pressure range of 300 to 1100hPa and operate at 1.8V to 3.6V. It’s common application is Weather forecast.






How BMP180 used for weather forecast?

In order to understand the types of weather conditions generally associated with high and low pressure systems, we must think “vertically.” The motion of air in the atmosphere above our heads plays a large part in the weather we experience here at earth’s surface. Basically, air cools as it rises, which can cause water vapor in the air to condense into liquid water droplets, sometimes forming clouds and precipitation. On the other hand, sinking air is associated with warming and drying conditions. So the first important point to keep in mind is rising air = moistening, sinking air = drying. So what does this have to do with high and low pressure? Well, high pressure is associated with sinking air, and low pressure is associated with rising air. But why? The answer has to do with the typical air flow around high and low pressure. Physically, it seems to make sense to have air flow from high pressure to low pressure. For reasons I won’t get into in this post, the airflow (due to the Earth’s rotation and friction) is directed slightly inward toward the low pressure center, and slightly outward away from the high pressure center: The slightly inward moving air in low pressure causes air to converge and since it can’t move downward due to the surface, the air is forced upward, leading to condensation and precipitation as discussed earlier. The opposite occurs with high pressure. Air is moving away from the high pressure center at the surface (or “diverging”) so as a result, air from above must sink to take its place. The surface flow is accompanied by the opposite behavior at upper levels of the atmosphere, as depicted in this schematic diagram:





Circuit








Add Library





Code:

code
نسخ
اقتباس
عرض
تنزيل
	
								
/* * BMP180 Interface with ESP8266 Code Example * Hardware connections: NodeMCU BMP180 3.3V VIN GND GND D1 SCL D2 SDA (WARNING: do not connect + to 5V or the sensor will be damaged!) */ #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 in meters void setup() { Serial.begin(115200); // Initialize the sensor (it is important to get calibration values stored on the device). if (pressure.begin()) Serial.println("BMP180 init success"); else { 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 absolute pressure, which varies with altitude. // To remove the effects of altitude, use the sea level 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. }





سلة المشتريات افراغ السلة