BMP280 is a great beginner sensor for the ESP32 to start creating some cool projects. It can measure pressure and temperature accurately, note that pressure can be converted to altitude with the right calibration. This sensor can be used on drones, weather stations, and various other applications in real life due to its accuracy. It is also incredibly cheap and can be bought pre-soldered and ready to be plugged in here.
In this tutorial, we quickly show you how to set it up with the ESp32 which is a popular microcontroller. This will take only a few minutes.
-----
Before we get into it, consider subscribing or supporting the channel. Also, be sure to checkout our various stores to shop products for Raspberry Pi, Arduino, ESP32, and DIY electronics at ShillehTek!
Subscribe:
Support:
https://www.buymeacoffee.com/mmshilleh
Hire me at UpWork to build your IoT projects:
https://www.upwork.com/freelancers/~017060e77e9d8a1157
Visit ShillehTek Store for Arduino and Raspberry Pi Sensors and Pre-Soldered Components:
ShillehTek Website (Exclusive Discounts):
https://shillehtek.com/collections/all
ShillehTek Amazon Store:
ShillehTek Amazon Store - Canada
ShillehTek Amazon Store - Japan
Step 1-) Setup Physical ConnectionIn the boards manager in Arduino IDE, download the esp32 boards by Espressif Systems.
Followed by downloading the BMP280 library by Adafruit:
You should then connect to the board on your serial port and ESP32 Dev Module in the Tools > Board.
Step 3-) Run Example CodeAdafruit libraries come with amazing example code. To view the code in this tutorial go to File > Examples > Adafruit BMP280 Library > bmp280test
Here is the code for your reference.
/***************************************************************************
This is a library for the BMP280 humidity, temperature & pressure sensor
Designed specifically to work with the Adafruit BMP280 Breakout
----> http://www.adafruit.com/products/2651
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 andopen-source hardware by purchasing products
from Adafruit!
Written by Limor Fried & Kevin Townsend for Adafruit Industries.
BSD license, all text above must be included in any redistribution
***************************************************************************/
#include <Wire.h>
#include <SPI.h>
#include <Adafruit_BMP280.h>
#define BMP_SCK (13)
#define BMP_MISO (12)
#define BMP_MOSI (11)
#define BMP_CS (10)
Adafruit_BMP280 bmp; // I2C
//Adafruit_BMP280 bmp(BMP_CS); // hardware SPI
//Adafruit_BMP280 bmp(BMP_CS, BMP_MOSI, BMP_MISO, BMP_SCK);
void setup() {
Serial.begin(9600);
while ( !Serial ) delay(100); // wait for native usb
Serial.println(F("BMP280 test"));
unsigned status;
//status = bmp.begin(BMP280_ADDRESS_ALT, BMP280_CHIPID);
status = bmp.begin(0x76);
if (!status) {
Serial.println(F("Could not find a valid BMP280 sensor, check wiring or "
"try a different address!"));
Serial.print("SensorID was: 0x"); Serial.println(bmp.sensorID(),16);
Serial.print(" ID of 0xFF probably means a bad address, a BMP 180 or BMP 085\n");
Serial.print(" ID of 0x56-0x58 represents a BMP 280,\n");
Serial.print(" ID of 0x60 represents a BME 280.\n");
Serial.print(" ID of 0x61 represents a BME 680.\n");
while (1) delay(10);
}
/* Default settings from datasheet. */
bmp.setSampling(Adafruit_BMP280::MODE_NORMAL, /* Operating Mode. */
Adafruit_BMP280::SAMPLING_X2, /* Temp. oversampling */
Adafruit_BMP280::SAMPLING_X16, /* Pressure oversampling */
Adafruit_BMP280::FILTER_X16, /* Filtering. */
Adafruit_BMP280::STANDBY_MS_500); /* Standby time. */
}
void loop() {
Serial.print(F("Temperature = "));
Serial.print(bmp.readTemperature());
Serial.println(" *C");
Serial.print(F("Pressure = "));
Serial.print(bmp.readPressure());
Serial.println(" Pa");
Serial.print(F("Approx altitude = "));
Serial.print(bmp.readAltitude(1011.9)); /* Adjusted to local forecast! */
Serial.println(" m");
Serial.println();
delay(2000);
}
This will give you a test code to start getting values. Simply upload this to the board, but before you do make sure to add 0x76 for the I2C address.
status = bmp.begin(0x76);
Or else you will get a device not found error.
If you want to get accurate representations of altitude you need to google the sea level pressure in your area. My location is in Austin, TX I can get it from the following website https://w1.weather.gov/data/obhistory/KAUS.html
There should be similar websites in major cities.
Upload the code to your device and open the serial monitor with the correct baud rate to start seeing values.
Conclusion:If you have the proper physical connection and modified the code with the correct I2C address you should start seeing values in your serial monitor. You can adjust the example code accordingly! If you enjoy beginner tutorials and more advanced content please be sure to subscribe to the channel! Let me know if you have any questions, and stay tuned!
Comments