Created
October 23, 2017 17:02
-
-
Save seppestas/c140b16e2662a55fdcfe2f41e7256a66 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Module to talk to the SHT21 temperature and humidity sensor over I2C | |
var i2c = require('i2c'); | |
// Register addresses | |
const TRIGGER_T_MEASUREMENT_NO_HOLD = 0xF3; | |
const TRIGGER_RH_MEASUREMENT_NO_HOLD = 0xF5; | |
const WRITE_USER_REGISTER = 0xE6; | |
const READ_USER_REGISTER = 0xE7; | |
const SOFT_RESET = 0xFE; | |
const STATUS_BITS_MASK = 0x0003; | |
function SHT21(i2c_address, i2c_options) { | |
i2c_address = i2c_address || 0x40; | |
i2c_options = i2c_options || {}; | |
this.wire = new i2c(i2c_address, i2c_options); | |
} | |
function parseTemperature(data) { | |
var st = (data[0] << 8) + data[1]; | |
return 175.72 * st/(1<<16) - 46.85; | |
} | |
SHT21.prototype.readTemperature = function(cb) { | |
var wire = this.wire; | |
wire.writeByte(TRIGGER_T_MEASUREMENT_NO_HOLD, function(err) { | |
if (err) { | |
cb(err, null); | |
return; | |
} | |
setTimeout(function() { | |
wire.read(3, function(err, data) { | |
if (err) { | |
cb(err, null); | |
return; | |
} | |
cb(null, parseTemperature(data)); | |
}); | |
}, 100); | |
}); | |
}; | |
function parseHumidity(data) { | |
var srh = (data[0] << 8) + data[1]; | |
return 125 * srh/(1<<16) - 6; | |
} | |
SHT21.prototype.readHumidity = function(cb) { | |
var wire = this.wire; | |
wire.writeByte(TRIGGER_RH_MEASUREMENT_NO_HOLD, function(err) { | |
if (err) { | |
cb(err, null); | |
return; | |
} | |
setTimeout(function() { | |
wire.read(3, function(err, data) { | |
if (err) { | |
cb(err, null); | |
return; | |
} | |
cb(null, parseHumidity(data)); | |
}); | |
}, 50); | |
}); | |
}; | |
module.exports = SHT21; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment