adxl345-sensor
Version:
A Node.js I2C module for the Analog Devices ADXL345 three-axis digital accelerometer
140 lines (117 loc) • 4.85 kB
Markdown
[<img src="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/adxl345-sensor.svg">](https://www.npmjs.com/package/adxl345-sensor)
[<img src="https://cdn-shop.adafruit.com/970x728/1231-00.jpg" width="150" align="right">](https://www.adafruit.com/product/1231)
Welcome to adxl345-sensor, a Node.js I2C module for the Analog Devices ADXL345 three-axis digital accelerometer. Adafruit sells a [ADXL345 breakout board](https://www.adafruit.com/product/1231) and [here is the datasheet](http://www.analog.com/static/imported-files/data_sheets/ADXL345.pdf).
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.
Since adxl345-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```
If pin ```SDO/ALT ADDRESS``` is HIGH the 7-bit I2C address is 0x1D. If pin ```SDO/ALT ADDRESS``` is LOW the 7-bit I2C address is 0x53. The [Adafruit ADXL345 breakout board](https://www.adafruit.com/product/1231) is configured for 0x53. This pin floats by default so if you are using another breakout board be sure to determine if you need to wire this pin yourself.
```
const ADXL345 = require('adxl345-sensor');
const adxl345 = new ADXL345(); // defaults to i2cBusNo 1, i2cAddress 0x53
// Read ADXL345 three-axis acceleration, repeat
//
const getAcceleration = () => {
adxl345.getAcceleration(true) // true for g-force units, else false for m/s²
.then((acceleration) => {
console.log(`acceleration = ${JSON.stringify(acceleration, null, 2)}`);
setTimeout(getAcceleration, 1000);
})
.catch((err) => {
console.log(`ADXL345 read error: ${err}`);
setTimeout(getAcceleration, 2000);
});
};
// Initialize the ADXL345 accelerometer
//
adxl345.init()
.then(() => {
console.log('ADXL345 initialization succeeded');
getAcceleration();
})
.catch((err) => console.error(`ADXL345 initialization failed: ${err} `));
```
```
> sudo node ./examples/example-simple.js
Found ADXL345 device id 0xe5 on bus i2c-1, address 0x53
ADXL345 initialization succeeded
acceleration = {
"x": 0,
"y": -0.004,
"z": 0.9520000000000001,
"units": "g"
}
```
```
const ADXL345 = require('adxl345-sensor');
// The ADXL345 constructor options are optional.
//
// ADXL345.I2C_ADDRESS_ALT_GROUNDED() = 0x53
// ADXL345.I2C_ADDRESS_ALT_HIGH() = 0x1D
//
const options = {
i2cBusNo : 1, // defaults to 1
i2cAddress : ADXL345.I2C_ADDRESS_ALT_GROUNDED() // defaults to 0x53
};
const adxl345 = new ADXL345(options);
// Read ADXL345 three-axis acceleration, repeat
//
const getAcceleration = () => {
adxl345.getAcceleration(true) // true for g-force units, else false for m/s²
.then((acceleration) => {
console.log(`acceleration = ${JSON.stringify(acceleration, null, 2)}`);
setTimeout(getAcceleration, 1000);
})
.catch((err) => {
console.log(`ADXL345 read error: ${err}`);
setTimeout(getAcceleration, 2000);
});
};
// Initialize and configure the ADXL345 accelerometer
//
adxl345.init()
.then(() => adxl345.setMeasurementRange(ADXL345.RANGE_2_G()))
.then(() => adxl345.setDataRate(ADXL345.DATARATE_100_HZ()))
.then(() => adxl345.setOffsetX(0)) // measure for your particular device
.then(() => adxl345.setOffsetY(0)) // measure for your particular device
.then(() => adxl345.setOffsetZ(0)) // measure for your particular device
.then(() => adxl345.getMeasurementRange())
.then((range) => {
console.log(`Measurement range: ${ADXL345.stringifyMeasurementRange(range)}`);
return adxl345.getDataRate();
})
.then((rate) => {
console.log(`Data rate: ${ADXL345.stringifyDataRate(rate)}`);
return adxl345.getOffsets();
})
.then((offsets) => {
console.log(`Offsets: ${JSON.stringify(offsets, null, 2)}`);
console.log('ADXL345 initialization succeeded');
getAcceleration();
})
.catch((err) => console.error(`ADXL345 initialization failed: ${err} `));
```
```
> sudo node ./examples/example.js
Found ADXL345 device id 0xe5 on bus i2c-1, address 0x53
Measurement range: RANGE_2_G
Data rate: DATARATE_100_HZ
Offsets: {
"x": 0,
"y": 0,
"z": 0
}
ADXL345 initialization succeeded
acceleration = {
"x": 0,
"y": 0,
"z": 0.9520000000000001,
"units": "g"
}
```
For I2C setup on a Raspberry Pi, take a look at my [pi-weather-station](https://github.com/skylarstein/pi-weather-station) project.