先说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 代码的更多相关文章

  1. python代码实现树莓派3b+驱动步进电机

    python代码实现树莓派3b+驱动步进电机 之前买了个树莓派,刚买回来那会儿热情高涨,折腾了一段时间,然后就放那吃灰了.前几天忽然想起来这个东西了,决定再玩玩儿,于是就从某宝上购买了一套步进电机.驱 ...

  2. 在树莓派上读取土壤湿度传感器读书-python代码实现及常见问题(全面简单易懂)

    本篇文章简单介绍了如何在树莓派上配置土壤湿度传感器以读取土壤湿度(以百分比的形式出现)及代码实现. 主要包含有以下4个模块: 一.土壤湿度传感器常见类型及介绍 二.实验所需设备 三.设备连线方式与代码 ...

  3. 在树莓派上读取DHT11温湿度传感器-python代码实现及常见问题(全面简单易懂)

    最近由于自己的课题需要,想要用在树莓派上使用DHT11温湿度传感器来读取空气中温湿度,遇到了几个问题,解决之后也对之前的知识进行了回顾,总结,特整理如下,希望能给也在学习树莓派的小伙伴们带来一些帮助. ...

  4. 树莓派(Raspbian系统)中使用pyinstaller封装Python代码为可执行程序

    一.前言 将做好的Python软件运行在树莓派上时,不想公开源码,就需要对文件进行封装(或称打包),本文主要介绍使用pyinstaller封装Python代码为可执行程序. Python是一个脚本语言 ...

  5. Python连接MySQL的实例代码

    Python连接MySQL的实例代码   MySQLdb下载地址:http://sourceforge.net/projects/mysql-python/ 下载解压缩后放到%Python_HOME% ...

  6. 树莓派连接DHT11温湿度传感器(python)

    介绍 DHT11作为一个廉价配件,同时包含了温度.湿度传感器,而且,编码使用也非常简单. 本文介绍如果在树莓派中使用 DHT11,代码是Python.如果有任何疑问,欢迎在下面留言. 接线 VCC接5 ...

  7. 通过python代码连接MySQL以及插入和显示数据

    通过python代码连接MySQL以及插入和显示数据: 数据库huahui创建一个shibie的表,里面有两个varcahr(100)的字段,num和result. import pymysql im ...

  8. Python 代码风格

    1 原则 在开始讨论Python社区所采用的具体标准或是由其他人推荐的建议之前,考虑一些总体原则非常重要. 请记住可读性标准的目标是提升可读性.这些规则存在的目的就是为了帮助人读写代码,而不是相反. ...

  9. 一个 11 行 Python 代码实现的神经网络

    一个 11 行 Python 代码实现的神经网络 2015/12/02 · 实践项目 · 15 评论· 神经网络 分享到:18 本文由 伯乐在线 - 耶鲁怕冷 翻译,Namco 校稿.未经许可,禁止转 ...

随机推荐

  1. Junit 之 与Spring集成

    使用 Spring 测试注释来进行常见的 Junit4 或者 TestNG 的单元测试,同时支持访问 Spring 的 beanFactory 和进行自动化的事务管理.一.spring测试注解标签1. ...

  2. centos7 源码安装php7

    因为php安装需要编译,所以服务器应该保证gcc和g++环境的安装 1. 首先释放安装包: tar -xvzf php-7.0.5.tar.gz cd php-7.0.5 2. 接下来进行参数配置,配 ...

  3. 【kafka学习之一】 kafka初识

    环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4一.kafka是什么? (1)kafka是一个高吞吐的分部式消息系统.( ...

  4. pycharm中不以pytest方式运行,以普通方式运行的方法

    问题: 在调试一个很简单的代码时无法输出结果,运行结果如下形式: 出现以上情况,主要是因为在运行时是以pytest方式运行的,要换回以普通方式去运行. 问题解决: 首先是红色圈圈里的白色三角形. 然后 ...

  5. Simple Factory Pattern

    Question: How do you achieve the functions of calculator by Object-Oriented ? Analysis: 1,The functi ...

  6. 20175208《Java程序设计》第五周学习总结

    教材学习内容总结 1.接口:1)接口声明: interface //接口的名字 2)接口体2.实现接口:类实现接口:一个类需要在类声明中使用关键字implements声明该类实现一个或多个接口.如果实 ...

  7. IP通信基础学习第六周(上)

    CSAM:冲突检测 链路:是指一条无源的点到点的物理线路段,且中间没有任何其它的交换结点. 数据链路:把实现相关规程的硬件和软件加到链路上. 数据链路层的功能:链路管理,信息的传输,流量与差错控制,异 ...

  8. java.sql.SQLException: ORA-28000: the account is locked

    解决方式:参考博客https://blog.csdn.net/java280580332/article/details/70756533

  9. Eureka服务端源码流程梳理

    一.简述 spring cloud三步走,一导包,二依赖,三配置为我们简化了太多东西,以至于很多东西知其然不知其所以然,了解底层实现之后对于一些问题我们也可以快速的定位问题所在. spring clo ...

  10. MySQL复制表-INSERT INTO SELECT

    基础table为: mysql> select * from staff; +----+----------+-------+ | id | name | slary | +----+----- ...