Last active
November 2, 2018 07:54
-
-
Save satakagi/857a0ed952a088636bdc00cee3b02c74 to your computer and use it in GitHub Desktop.
MPU-6050 driver for CHIRIMEN
This file contains 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
// MPU-6050 Driver for CHIRIMEN WebI2C | |
// based on http://www.widesnow.com/entry/2015/09/10/061128 | |
// https://www.invensense.com/wp-content/uploads/2015/02/MPU-6000-Register-Map1.pdf | |
// by Satoru Takagi | |
var MPU6050 = function(i2cPort,slaveAddress){ | |
this.i2cPort = i2cPort; | |
this.i2cSlave = null; | |
if ( slaveAddress ){ | |
this.slaveAddress = slaveAddress; | |
} else { | |
this.slaveAddress = 0x68; | |
} | |
}; | |
MPU6050.prototype = { | |
init: function(){ | |
return new Promise((resolve, reject)=>{ | |
this.i2cPort.open(this.slaveAddress).then(async (i2cSlave)=>{ | |
this.i2cSlave = i2cSlave; | |
// console.log("init ok:"+this.i2cSlave); | |
await this.i2cSlave.write8(0x6b,0x00); | |
console.log("init ok:"+this.i2cSlave); | |
resolve(); | |
},(err)=>{ | |
reject(err); | |
}); | |
}); | |
}, | |
readTemp: function(){ | |
return new Promise(async (resolve, reject)=>{ | |
if(this.i2cSlave == null){ | |
reject("i2cSlave Address does'nt yet open!"); | |
}else{ | |
var ans = await this.i2cSlave.read16(0x41); | |
console.log(ans); | |
// var data = ((MSB << 8) + LSB)/128.0; | |
var temp = ans / 340 + 36.53; | |
resolve(temp); | |
} | |
}); | |
}, | |
readAll: function(){ | |
return new Promise(async (resolve, reject)=>{ | |
if(this.i2cSlave == null){ | |
reject("i2cSlave Address does'nt yet open!"); | |
}else{ | |
var ans = await this.i2cSlave.read16(0x41); | |
console.log("tmpW:",ans); | |
var temp = this.getVal(ans) / 340 + 36.53; | |
ans = await this.i2cSlave.read16(0x43); | |
var rx = this.getVal(ans) / 131; | |
ans = await this.i2cSlave.read16(0x45); | |
var ry = this.getVal(ans) / 131; | |
ans = await this.i2cSlave.read16(0x47); | |
var rz = this.getVal(ans) / 131; | |
ans = await this.i2cSlave.read16(0x3b); | |
var gx = this.getVal(ans) / 16384; | |
ans = await this.i2cSlave.read16(0x3d); | |
var gy = this.getVal(ans) / 16384; | |
ans = await this.i2cSlave.read16(0x3f); | |
var gz = this.getVal(ans) / 16384; | |
// console.log("t:",temp," rxyz:",rz,ry,rz," gxyz:",gx,gy,gz); | |
resolve({ | |
temperature: temp, | |
gx: gx, | |
gy: gy, | |
gz: gz, | |
rx: rx, | |
ry: ry, | |
rz: rz | |
}); | |
} | |
}); | |
}, | |
wake: function(){ | |
return new Promise(async (resolve, reject)=>{ | |
if(this.i2cSlave == null){ | |
reject("i2cSlave Address does'nt yet open!"); | |
}else{ | |
await this.i2cSlave.write8(0x6b,0x00); | |
resolve(); | |
} | |
}); | |
}, | |
reset: function(){ // deep sleep? | |
return new Promise(async (resolve, reject)=>{ | |
if(this.i2cSlave == null){ | |
reject("i2cSlave Address does'nt yet open!"); | |
}else{ | |
await this.i2cSlave.write8(0x6b,0x80); | |
resolve(); | |
} | |
}); | |
}, | |
getVal: function( w ){ | |
var l = w >>> 8; | |
var b = w & 0xff; | |
var v = l + ( b << 8 ); | |
// console.log("Val:",w.toString(16),b.toString(16),l.toString(16),v.toString(16),b,l,v); | |
if ( v >= 0x8000 ){ | |
return ( - ((65535 - v ) + 1 ) ); | |
} else { | |
return(v); | |
} | |
} | |
}; |
This file contains 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
<!doctype html> | |
<html> | |
<head> | |
<meta charset="UTF-8" /> | |
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1"> | |
<title>i2c-DHT12</title> | |
<script src="../../polyfill/polyfill.js"></script> | |
<script src="../../driversD/i2c-MPU6050.js"></script> | |
<script src="./mainMpu.js"></script> | |
<style> | |
table,p { | |
color: blue; | |
text-align: center; | |
font-size: 24px; | |
} | |
img { | |
display: block; | |
margin-left: auto; | |
margin-right: auto; | |
} | |
</style> | |
</head> | |
<body> | |
<p id="head">MPU-6050</p> | |
<table> | |
<tr><td>temp</td><td id="temp"></td></tr> | |
<tr><td>Gx</td><td id="gx"></td></tr> | |
<tr><td>Gy</td><td id="gy"></td></tr> | |
<tr><td>Gz</td><td id="gz"></td></tr> | |
<tr><td>Rx</td><td id="rx"></td></tr> | |
<tr><td>Ry</td><td id="ry"></td></tr> | |
<tr><td>Rz</td><td id="rz"></td></tr> | |
</table> | |
</body> | |
</html> |
This file contains 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
"use strict"; | |
var head; | |
window.addEventListener( | |
"load", | |
function() { | |
head = document.querySelector("#head"); | |
mainFunction(); | |
}, | |
false | |
); | |
async function mainFunction() { | |
try { | |
var i2cAccess = await navigator.requestI2CAccess(); | |
var port = i2cAccess.ports.get(1); | |
var mpu6050 = new MPU6050(port, 0x68); | |
await mpu6050.init(); | |
while (1) { | |
var val = await mpu6050.readAll(); | |
// console.log('value:', value); | |
temp.innerHTML=val.temperature; | |
gx.innerHTML=val.gx; | |
gy.innerHTML=val.gy; | |
gz.innerHTML=val.gz; | |
rx.innerHTML=val.rx; | |
ry.innerHTML=val.ry; | |
rz.innerHTML=val.rz; | |
await sleep(1000); | |
} | |
} catch (error) { | |
console.error("error", error); | |
} | |
} | |
function sleep(ms) { | |
return new Promise(function(resolve) { | |
setTimeout(resolve, ms); | |
}); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment