在之前的博客中写过MPU6050模块。
(十四)树莓派3B+ wiringPi库的使用–硬件IIC驱动MPU6050
之前使用的wiringPi和C语言写的,现在使用Node.js操作一下。关于电路连接和MPU6050模块的介绍,这里不做说明,大家自行查看之前的文章或者百度。

树莓派驱动MPU6050

var i2c = require('i2c-bus');
// MPU6050 寄存器
var PWR_MGMT_1 = 0x6B,PWR_MGMT_2 = 0x6C,SMPLRT_DIV = 0x19;
var    CONFIG = 0x1A,GYRO_CONFIG = 0x1B,ACCEL_CONFIG = 0x1C,INT_ENABLE = 0x38;
// 加速度  16位数据  低8位是在高8位的基础上地址 +1
var ACCEL_XOUT_H = 0x3B,ACCEL_YOUT_H = 0x3D,ACCEL_ZOUT_H = 0x3F;
// 角速度  16位数据  低8位是在高8位的基础上地址 +1
var GYRO_XOUT_H = 0x43,GYRO_YOUT_H = 0x45,GYRO_ZOUT_H = 0x47;
// 当前温度寄存器
var TEMP_OUT = 0x41;
// 加速度计和陀螺仪输出值和实际值的换算比例  输出值/比例 = 实际值
var ACCEL_LSB_SENSITIVITY = 16384.0,   // 加速度计 16384LSB/gGYRO_LSB_SENSITIVITY = 16.4;      // 陀螺仪 16.4LSB%s// ±2g   ±4g   ±8g   ±16g
//16384  8192  4096  2048           LSB/g// ±250%s   ±500%s  ±1000%s   ±2000%s
// 131      65.5    32.8      16.4  LSB%sfunction mpu6050( i2cbus, mpuaddress ) {if (!(this instanceof mpu6050)) {return new mpu6050(i2cbus, mpuaddress);}this.address = mpuaddress;this.bus = i2c.openSync(i2cbus);// 内部20MHz时钟源 开启温度检测  关闭休眠this.bus.writeByteSync(this.address, PWR_MGMT_1, 0);// 采样分分频率 // SAMPLE_RATE = INTERNAL_SAMPLE_RATE / (1 + SMPLRT_DIV) where INTERNAL_SAMPLE_RATE = 1kHzthis.bus.writeByteSync(this.address, SMPLRT_DIV, 7); // 125Hz// 正常工作模式this.bus.writeByteSync(this.address, PWR_MGMT_2, 0);this.bus.writeByteSync(this.address, CONFIG, 0);// 陀螺仪设置  不自检  ±2000dpsthis.bus.writeByteSync(this.address, GYRO_CONFIG, 24);  // 24 -->  0x18// 加速度计设置 不自检 ±2gthis.bus.writeByteSync(this.address, ACCEL_CONFIG, 0); // 数据就绪中断this.bus.writeByteSync(this.address, INT_ENABLE, 1);
}// i2c读取mpu6050原始数据
mpu6050.prototype.read_raw_data = function (addr) {var high = this.bus.readByteSync(this.address, addr);var low = this.bus.readByteSync(this.address, addr+1);var value = (high << 8) + low; // 高8位 左移8位 组装成16位的数据if (value > 32768) {value = value - 65536;}return value;
};// 读取温度值
mpu6050.prototype.get_temp = function() {var value = this.read_raw_data(TEMP_OUT);var temp = 36.53 + value/340.0;  // 输出 ℃var mpu6050_temp = {temp:temp}return mpu6050_temp;
}// 读取角速度值
mpu6050.prototype.get_gyro_xyz = function() {var x = this.read_raw_data(GYRO_XOUT_H);var y = this.read_raw_data(GYRO_YOUT_H);var z = this.read_raw_data(GYRO_ZOUT_H);var gyro_xyz = {x:x,y:y,z:z}return gyro_xyz;
}// 读取加速度值
mpu6050.prototype.get_accel_xyz = function() {var x = this.read_raw_data(ACCEL_XOUT_H);var y = this.read_raw_data(ACCEL_YOUT_H);var z = this.read_raw_data(ACCEL_ZOUT_H);var accel_xyz = {x:x,y:y,z:z}return accel_xyz;
}mpu6050.prototype.get_roll_pitch_yaw = function( gyro_xyz, accel_xyz ) {var Ax = accel_xyz.x/ACCEL_LSB_SENSITIVITY;var Ay = accel_xyz.y/ACCEL_LSB_SENSITIVITY;var Az = accel_xyz.z/ACCEL_LSB_SENSITIVITY;var roll = Ax*-100;var pitch = Ay*-100;var yaw = Az*100;  // 这个是有问题的var roll_pitch_yaw = {roll: roll,   // 横滚角 pitch: pitch, // 俯仰角 yaw: yaw      // 航向角 }return roll_pitch_yaw;
}// 获取MPU6050数据
mpu6050.prototype.get_mpu6050Data = function( gyro_xyz, accel_xyz ) {var gyro_xyz = this.get_gyro_xyz();var accel_xyz = this.get_accel_xyz();var temp = this.get_temp();var roll_pitch_yaw = this.get_roll_pitch_yaw(gyro_xyz,accel_xyz);var mpu6050Data = {gyro_xyz: gyro_xyz,accel_xyz: accel_xyz,temp: temp,roll_pitch_yaw: roll_pitch_yaw,}return mpu6050Data;
}module.exports = mpu6050;

测试代码


var mpu6050 = require("./mpu6050");
var rpio = require('rpio'); // 引入rpio这个库 为了使用他的延时函数var address = 0x68; //MPU6050 address
var bus = 1; //i2c bus usedvar mpu6050 = new mpu6050( bus,address );
function update_telemetry() {var mpu6050Data = mpu6050.get_mpu6050Data();console.log(mpu6050Data);return mpu6050Data;
}
if ( mpu6050 ) {while(true){update_telemetry();rpio.msleep(100);}
}

输出结果

{gyro_xyz: { x: -20, y: 39, z: -22 },accel_xyz: { x: -112, y: -76, z: 17088 },temp: { temp: 31.353529411764708 },roll_pitch_yaw: { roll: 0.68359375, pitch: 0.4638671875, yaw: 104.296875 }
}

(二十四)树莓派3B+ Node.js驱动MPU6050相关推荐

  1. 二十六、深入Node.js中的文件系统fs模块

    @Author:Runsen @Date:2020/6/8 人生最重要的不是所站的位置,而是内心所朝的方向.只要我在每篇博文中写得自己体会,修炼身心:在每天的不断重复学习中,耐住寂寞,练就真功,不畏艰 ...

  2. 二十四、创建Node项目,深入Nodejs

    @Author:Runsen @Date:2019/12/05 作者介绍:Runsen目前大三下学期,专业化学工程与工艺,大学沉迷日语,Python, Java和一系列数据分析软件.导致翘课严重,专业 ...

  3. Docker最全教程之MySQL容器化 (二十四)

    Docker最全教程之MySQL容器化 (二十四) 原文:Docker最全教程之MySQL容器化 (二十四) 前言 MySQL是目前最流行的开源的关系型数据库,MySQL的容器化之前有朋友投稿并且写过 ...

  4. JavaWeb开发与代码的编写(二十四)

    JavaWeb开发与代码的编写(二十四) JNDI数据源的配置 数据源的由来 在Java开发中,使用JDBC操作数据库的四个步骤如下: ①加载数据库驱动程序(Class.forName("数 ...

  5. java从入门到精通二十四(三层架构完成增删改查)

    java从入门到精通二十四(三层架构完成增删改查) 前言 环境准备 创建web项目结构 导入依赖和配置文件 创建层次模型 实现查询 实现添加 实现修改 完成删除 做一个用户登录验证 会话技术 cook ...

  6. BetaFlight模块设计之二十四:transponder任务分析

    BetaFlight模块设计之二十四:transponder任务分析 transponder任务 配置情况 硬件配置 驱动配置 业务配置 初始化 MSP协议 三种IR transponder type ...

  7. 二十四、Struts2中的UI标签

    二十四.Struts2中的UI标签 Struts2中UI标签的优势: 数据回显 页面布局和排版(Freemark),struts2提供了一些常用的排版(主题:xhtml默认 simple ajax) ...

  8. python 分数序列求和公式_Python分数序列求和,编程练习题实例二十四

    本文是关于Python分数序列求和的应用练习,适合菜鸟练习使用,python大牛绕行哦. Python练习题问题如下: 问题简述:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13 要 ...

  9. 异常处理程序和软件异常——Windows核心编程学习手札之二十四

    异常处理程序和软件异常 --Windows核心编程学习手札之二十四 CPU负责捕捉无效内存访问和用0除一个数值这种错误,并相应引发一个异常作为对错误的反应,CPU引发的异常称为硬件异常(hardwar ...

最新文章

  1. html_5_小作业2_世纪佳缘注册页面
  2. 在Python中使用Seaborn和WordCloud可视化YouTube视频
  3. vscode中如何运行git
  4. 项目管理随感-项目管理是什么?
  5. R语言回归表达式中常用的符号
  6. javascript下的数值型比较真的没有那么简单
  7. 【原】[webkit移动开发笔记]之空链接是使用javascript:void(0)还是使用#none
  8. VBS 访问WMI读取IP地址,并将其设置为静态IP
  9. 有趣的视频 国外计算机课程
  10. net2.0如何修改用户密码的解决
  11. 用Excel和Python编程完成线性规划问题的求解
  12. 【字体分享】来一波免费的漂亮英文手写体(上)
  13. 微信+html5+播放音频+自动播放,html5音频实现微信语音播放效果
  14. android编程如何调整屏幕亮度,Android编程设置屏幕亮度的方法
  15. PowerApps社区计划
  16. 放弃OneNote,拥抱 Obsidian
  17. python中string什么意思_Python:string是什么意思
  18. Blender建模(二)
  19. 设计圈都这么卷的吗!看霜降海报哪家强
  20. 阿里云查找或修改对应实例的远程连接密码

热门文章

  1. 分享ThinVirt云桌面软件实现NVIDIA P40显卡为虚拟机分配vGPU过程
  2. 解决方案之华为手机本地和云照片彻底删除
  3. nginx+php-fpm的安装和配置
  4. asp.net831基于web的房屋出租管理系统#毕业设计
  5. C语言中char类型的符号问题
  6. 计算机死机造成桌面数据丢失,电脑突然死机,再重启桌面文件全没了
  7. 手机怎么投屏在电视上?
  8. 存款利率上限调整引爆价格战?业界称实属“过虑”
  9. 华为资深工程师为你深入讲解 Kubernetes及云原生应用
  10. Unity 【VRAndroid】打包问题错误