Sign Up for Free

RunKit +

Try any Node.js package right in your browser

This is a playground to test code. It runs a full Node.js environment and already has all of npm’s 400,000 packages pre-installed, including bme280-sensor with all npm packages installed. Try it out:

var bme280Sensor = require("bme280-sensor")

This service is provided by RunKit and is not affiliated with npm, Inc or the package authors.

bme280-sensor v0.1.7

A Node.js I2C module for the BME280 Humidity, Barometric Pressure, and Temperature Sensor. Also includes support for the BMP280 Barometric Pressure and Temperature Sensor.


bitHound Overall Score

Welcome to bme280-sensor, a Node.js I2C module for the Bosch BME280 Humidity, Barometric Pressure, Temperature Sensor. Adafruit sells a BME280 breakout board and here is the datasheet.

If you are not interested in humidity, this module is also compatible with the lower cost BMP280 Barometric Pressure and Temperature Sensor which does not include a humidity sensor.

This module uses i2c-bus which should provide access with Node.js on Linux boards like the Raspberry Pi Zero, 1, 2, or 3, BeagleBone, BeagleBone Black, or Intel Edison.

Note: While the BME280/BMP280 device does report temperature, it is measured by the internal temperature sensor. This temperature value depends on the PCB temperature and sensor element self-heating. Therefore ambient temperature is typically reported above actual ambient temperature.

Since bme280-sensor needs to talk directly to the I2C bus and requires access to /dev/i2c, you will typically need run Node with elevated privileges or add your user account to the i2c group: $ sudo adduser $USER i2c

Example Code

const BME280 = require('bme280-sensor');

// The BME280 constructor options are optional.
const options = {
  i2cBusNo   : 1, // defaults to 1
  i2cAddress : BME280.BME280_DEFAULT_I2C_ADDRESS() // defaults to 0x77

const bme280 = new BME280(options);

// Read BME280 sensor data, repeat
const readSensorData = () => {
    .then((data) => {
      // temperature_C, pressure_hPa, and humidity are returned by default.
      // I'll also calculate some unit conversions for display purposes.
      data.temperature_F = BME280.convertCelciusToFahrenheit(data.temperature_C);
      data.pressure_inHg = BME280.convertHectopascalToInchesOfMercury(data.pressure_hPa);
      console.log(`data = ${JSON.stringify(data, null, 2)}`);
      setTimeout(readSensorData, 2000);
    .catch((err) => {
      console.log(`BME280 read error: ${err}`);
      setTimeout(readSensorData, 2000);

// Initialize the BME280 sensor
  .then(() => {
    console.log('BME280 initialization succeeded');
  .catch((err) => console.error(`BME280 initialization failed: ${err} `));

##Example Output

> sudo node example.js          
Found BME280 chip id 0x60 on bus i2c-1 address 0x77
BME280 initialization succeeded
data = {
  "temperature_C": 32.09,
  "humidity": 34.851083883116694,
  "pressure_hPa": 1010.918480644477,
  "temperature_F": 89.76200000000001,
  "pressure_inHg": 29.852410107059583

##Example Wiring

For I2C setup on a Raspberry Pi, take a look at my pi-weather-station project.

RunKit is a free, in-browser JavaScript dev environment for prototyping Node.js code, with every npm package installed. Sign up to share your code.
Sign Up for Free