bme280-sensor
Version:
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.
78 lines (60 loc) • 3.45 kB
Markdown
"https://img.shields.io/badge/Node.js-4.x%20through%207.x-brightgreen.svg">](https://nodejs.org) [<img src="https://img.shields.io/npm/v/bme280-sensor.svg">](https://www.npmjs.com/package/bme280-sensor) [](https://www.bithound.io/github/skylarstein/bme280-sensor)
[<img src="https://cdn-learn.adafruit.com/assets/assets/000/026/680/medium800/sensors_pinout.jpg" width="150" align="right">](https://www.adafruit.com/product/2652)
Welcome to bme280-sensor, a Node.js I2C module for the Bosch BME280 Humidity, Barometric Pressure, Temperature Sensor. Adafruit sells a [BME280 breakout board](https://www.adafruit.com/product/2652) and [here is the datasheet](http://www.adafruit.com/datasheets/BST-BME280_DS001-10.pdf).
If you are not interested in humidity, this module is also compatible with the lower cost [BMP280 Barometric Pressure and Temperature Sensor](https://www.adafruit.com/products/2651) which does not include a humidity sensor.
This module uses [i2c-bus](https://github.com/fivdi/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```
```
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 = () => {
bme280.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
//
bme280.init()
.then(() => {
console.log('BME280 initialization succeeded');
readSensorData();
})
.catch((err) => console.error(`BME280 initialization failed: ${err} `));
```
```
> 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
}
```
For I2C setup on a Raspberry Pi, take a look at my [pi-weather-station](https://github.com/skylarstein/pi-weather-station) project.
[<img src=