树莓派 连接 JY901(MPU9250) python 代码
先说BUG,最近要做项目需要树莓派和陀螺仪,资金充足的话肯定是买一个硬件卡尔曼滤波的传感器类似JY901模块,资金不足的就买MPU6050。
网上关于MPU6050在树莓派上的代码还能用,关于JY901的代码真的是千奇百怪,而且复制现象特别严重,有很多系统本身有问题,导致很多像我一样的新手在上面浪费了很多的时间。
本篇主要把这一个多星期折腾树莓派陀螺仪的经历总结一下,顺便帮助下其他像我一样的新手,把时间用在系统设计上。
网上的代码有 try except 判断,把运行时遇到的IOError全部判0处理,然后读出好像是陀螺仪旋转角度的数据,当然这样肯定是没有问题的,但是如果你拿到你的JY901模块用代码运行发现有大量的0数据出现,而且读出的数据压根跟陀螺仪旋转角度没有直接的关系。
那么我告诉你,你买的模块是错误的,仔细看下你的模块是不是每个边是不是4个引脚,看清模块上的芯片是不是MPU6050,用i2cdetect -y -1显示的硬件地址是不是0x68。
如果是我上面说的那三种情况,就不要瞎折腾了,你拿到的模块根本不是JY901,而是JY61,JY901使用MPU9250,而JY61用的是MPU6050,这里说下个人对这两模块认识到的区别:JY901可以修改I2C通讯地址,JY61不可以;JY901的I2C通讯地址初始化为0x50,JY61初始化地址是0x68。
一开始运行0数据特别少,后面0数据特别多,甚至都是0数据,是因为JY61模块默认是串口模式,用上位机选芯片型号JY61,既可以调成I2C工作模式,这样用网上关于树莓派 MPU6050的代码即可运行,数据稳定正常。
我就是正这个问题上纠结了一个多星期,严重的延后了我个人的工作计划,这个问题肯定绝大部分是我个人原因不够仔细导致的,但是还有一部分原因是因为某些店家,页面介绍,发给你的资料全部都是关于JY901,导致新手拿到传感器的时候先入为主,深深的记住了自己买的是JY901,当在树莓派上使用时出现了上面的这些问题,一直怀疑是自己代码的问题或者硬件电路的问题,一直谷歌百度解决各种莫名其妙的玄学问题。本人这一星期出现的问题有:1、运行 i2cdetect -y 1 有时候有显示硬件地址,有时候会消失,这也就是网上代码的IOError问题,就是因为I2c地址有时候找不到的原因导致的,解决办法就是用上位机选JY61芯片型号,改成I2C工作模式,就不会有I2C地址有时候会消失的这个问题了。2、上位机修改不了I2C地址, 归根揭底都是没弄对模块的问题,
同时还有一个注意的地方,因为树莓派在SDA和SCL引脚上有上拉电阻,所以在多I2C模块连接时不需要加上拉电阻。
========================================分割线===========================================
代码如下:
#!/usr/bin/python
import smbus
import math
import types
import ctypes
import time
import subprocess
bus = smbus.SMBus(1) # or bus = smbus.SMBus(1) for Revision 2 boards
addr1= 0x50
addr2 = 0x48
def calc_angle_value(x_angle,y_angle,z_angle):
x = ((x_angle[1] << 8) | x_angle[0])/32768 * 180
y = ((y_angle[1] << 8) | y_angle[0])/32768 * 180
z = ((z_angle[1] << 8) | z_angle[0])/32768 * 180
if(x >= 180):
x -= 360
if(y >= 180):
y -= 360
if(z >= 180):
z -= 360
return x,y,z
def ReadData(address):
x_angle = bus.read_i2c_block_data(address,0x3d,2)
y_angle = bus.read_i2c_block_data(address,0x3e,2)
z_angle = bus.read_i2c_block_data(address,0x3f,2)
x,y,z = calc_angle_value(x_angle,y_angle,z_angle)
return x,y,z
while(True):
try:
right_x,right_y,right_z = ReadData(addr1)
left_x,left_y,left_z = ReadData(addr2)
print("Right Data: {:.4} {:.4} {:.4}".format(right_x,right_y,right_z))
print("Left Data: {:.4} {:.4} {:.4}".format(left_x,left_y,left_z))
except ValueError:
continue
树莓派 连接 JY901(MPU9250) python 代码的更多相关文章
- python代码实现树莓派3b+驱动步进电机
python代码实现树莓派3b+驱动步进电机 之前买了个树莓派,刚买回来那会儿热情高涨,折腾了一段时间,然后就放那吃灰了.前几天忽然想起来这个东西了,决定再玩玩儿,于是就从某宝上购买了一套步进电机.驱 ...
- 在树莓派上读取土壤湿度传感器读书-python代码实现及常见问题(全面简单易懂)
本篇文章简单介绍了如何在树莓派上配置土壤湿度传感器以读取土壤湿度(以百分比的形式出现)及代码实现. 主要包含有以下4个模块: 一.土壤湿度传感器常见类型及介绍 二.实验所需设备 三.设备连线方式与代码 ...
- 在树莓派上读取DHT11温湿度传感器-python代码实现及常见问题(全面简单易懂)
最近由于自己的课题需要,想要用在树莓派上使用DHT11温湿度传感器来读取空气中温湿度,遇到了几个问题,解决之后也对之前的知识进行了回顾,总结,特整理如下,希望能给也在学习树莓派的小伙伴们带来一些帮助. ...
- 树莓派(Raspbian系统)中使用pyinstaller封装Python代码为可执行程序
一.前言 将做好的Python软件运行在树莓派上时,不想公开源码,就需要对文件进行封装(或称打包),本文主要介绍使用pyinstaller封装Python代码为可执行程序. Python是一个脚本语言 ...
- Python连接MySQL的实例代码
Python连接MySQL的实例代码 MySQLdb下载地址:http://sourceforge.net/projects/mysql-python/ 下载解压缩后放到%Python_HOME% ...
- 树莓派连接DHT11温湿度传感器(python)
介绍 DHT11作为一个廉价配件,同时包含了温度.湿度传感器,而且,编码使用也非常简单. 本文介绍如果在树莓派中使用 DHT11,代码是Python.如果有任何疑问,欢迎在下面留言. 接线 VCC接5 ...
- 通过python代码连接MySQL以及插入和显示数据
通过python代码连接MySQL以及插入和显示数据: 数据库huahui创建一个shibie的表,里面有两个varcahr(100)的字段,num和result. import pymysql im ...
- Python 代码风格
1 原则 在开始讨论Python社区所采用的具体标准或是由其他人推荐的建议之前,考虑一些总体原则非常重要. 请记住可读性标准的目标是提升可读性.这些规则存在的目的就是为了帮助人读写代码,而不是相反. ...
- 一个 11 行 Python 代码实现的神经网络
一个 11 行 Python 代码实现的神经网络 2015/12/02 · 实践项目 · 15 评论· 神经网络 分享到:18 本文由 伯乐在线 - 耶鲁怕冷 翻译,Namco 校稿.未经许可,禁止转 ...
随机推荐
- 单点登录(SSO)详解
背景 在企业发展初期,企业使用的系统很少,通常一个或者两个,每个系统都有自己的登录模块,运营人员每天用自己的账号登录,很方便.但随着企业的发展,用到的系统随之增多,运营人员在操作不同的系统时,需要多次 ...
- Hibernate的load和get方法的区别
这次我们聊一下Hibernate3.2 Session加载数据时get和load方法的区别,我总结的如下: 1. 对于get方法,hibernate会确认一下该id对应的数据是否存在,首先在sessi ...
- GO map
map是一种无序的基于key-value的数据结构,Go语言中的map是引用类型,必须初始化才能使用. map定义 语法:map[KeyType]ValueType KeyType:表示键的类型. V ...
- redis注册为window服务
打开redis安装路径并执行:redis-server --service-install redis.windows.conf 安装服务命令 执行完命令后打开电脑服务 此时服务还未启动,执行命令:r ...
- 记字符串转bigDecimal的一个坑
项目中一个地方用到了bigdecimal,之前是字符串转Double,处理之后再转成String,看着麻烦,给改成用bigdecimal计算字符串,但是偶尔会出现如下异常. 很是诧异,加了非空校验,怎 ...
- python:threading.Thread类的使用详解
Python Thread类表示在单独的控制线程中运行的活动.有两种方法可以指定这种活动: 1.给构造函数传递回调对象 mthread=threading.Thread(target=xxxx,arg ...
- 问题:Linux报swap空间占用过高,但物理内存还有空余
报错 收到报警,swap空间占用过高,登录到系统查看内存使用详情,看到物理内存还有很多未使用 问题分析 Swap配置对性能的影响分配太多的Swap空间会浪费磁盘空间,而Swap空间太少,则系统会发生错 ...
- opencv学习之路(32)、角点检测
一.角点检测的相关概念 二.Harris角点检测——cornerHarris() 参考网址: http://www.cnblogs.com/ronny/p/4009425.html #include ...
- Linux 系统调用(system call)
1 系统调用:(SYSTEM CALL) 操作系统(operating system)内核中有一组实现系统功能的过程,系统调用就是对上述过程的调用.程序员利用系统调用,向OS提出服务请求,由OS代为完 ...
- MySQL:Download Connector/Python
MySQL Connector / Python是用于Python平台和开发的标准化数据库驱动程序. 此外,MySQL Connector / Python 8.0支持使用MySQL Server 8 ...