【问题标题】:Raspberry pi pico with MPU6050 reading zeros带有 MPU6050 读数零的 Raspberry pi pico
【发布时间】:2022-11-22 13:29:45
【问题描述】:

所以我正在使用 raspberry pi pico 和 MPU6050 开发计步器,昨晚我的代码工作正常,所以我拔掉了 pico,然后我在今天早上把 pico 插回去,现在它显示为零。我根据这些连接配置了代码:

VCC 转 3v3

接地到接地

SCL 到 GP1

SDA 到 GP0

这是代码:

#import PIN and I2C from machine library 
from machine import Pin, I2C
import time

#Define I2C bus 
i2c = I2C(0, sda=machine.Pin(0), scl=machine.Pin(1))

#Device address on the I2C bus
MPU6050_ADDR = 0x68

#PWR_MGMT_1 memory address
MPU6050_PWR_MGMT_1 = 0x6B

#Accelerometer's high and low register for each axis
MPU6050_ACCEL_XOUT_H = 0x3B
MPU6050_ACCEL_XOUT_L = 0x3C
MPU6050_ACCEL_YOUT_H = 0x3D
MPU6050_ACCEL_YOUT_L = 0x3E
MPU6050_ACCEL_ZOUT_H = 0x3F
MPU6050_ACCEL_ZOUT_L = 0x40

#Accelerometer's LSB/g (least significant bits per gravitational force) sensitivity
MPU6050_LSBG = 16384.0

#Set all bits in the PWR_MGMT_1 register to 0
def mpu6050_init(i2c):
    i2c.writeto_mem(MPU6050_ADDR, MPU6050_PWR_MGMT_1, bytes([0])) #needs to be 0 to have device in 'awake' mode change to 1 for 'sleep' mode
    
#define x, y, and z values
def accel_x_value(h, l):
    if not h[0] & 0x80:
        return h[0] << 8 | l[0]
    return -((h[0] ^ 255) << 8) |  (l[0] ^ 255) + 1

def accel_y_value(h, l):
    if not h[0] & 0x80:
        return h[0] << 8 | l[0]
    return -((h[0] ^ 255) << 8) |  (l[0] ^ 255) + 1

def accel_z_value(h, l):
    if not h[0] & 0x80:
        return h[0] << 8 | l[0]
    return -((h[0] ^ 255) << 8) |  (l[0] ^ 255) + 1

#Get Accelerometer values
def get_accel_x(i2c):
    accel_x_h = i2c.readfrom_mem(MPU6050_ADDR, MPU6050_ACCEL_XOUT_H, 1)
    accel_x_l = i2c.readfrom_mem(MPU6050_ADDR, MPU6050_ACCEL_XOUT_L, 1)
    return accel_x_value(accel_x_h, accel_x_l) / MPU6050_LSBG        

def get_accel_y(i2c):
    accel_y_h = i2c.readfrom_mem(MPU6050_ADDR, MPU6050_ACCEL_YOUT_H, 1)
    accel_y_l = i2c.readfrom_mem(MPU6050_ADDR, MPU6050_ACCEL_YOUT_L, 1)
    return accel_y_value(accel_y_h, accel_y_l) / MPU6050_LSBG

def get_accel_z(i2c):
    accel_z_h = i2c.readfrom_mem(MPU6050_ADDR, MPU6050_ACCEL_ZOUT_H, 1)
    accel_z_l = i2c.readfrom_mem(MPU6050_ADDR, MPU6050_ACCEL_ZOUT_L, 1)
    return accel_z_value(accel_z_h, accel_z_l) / MPU6050_LSBG


steps = 0 #step counter
while True:
    if get_accel_x(i2c) > 0.6: #minimum x value for counter
        steps += 1
    elif get_accel_y(i2c) > 3: #minimum y value for counter
        steps += 1
    elif get_accel_z(i2c) > 3: #minimum z value for counter
        steps += 1
    print("\nsteps:", steps)
    print("Accelerometer:\t", get_accel_x(i2c), get_accel_y(i2c), get_accel_z(i2c), "g") 
#Print Accelerometer values (X,Y,Z)
    time.sleep(0.75) #Delay between values in seconds

首先我更换了硬件,我尝试了不同的 MPU6050 和新电线(我只有一个 pico,所以我不能尝试不同的)但我仍然得到相同的零错误。接下来,我尝试使用我找到的一些测试代码(来自本网站:https://www.hackster.io/mr-alam/how-to-use-i2c-pins-in-raspberry-pi-pico-i2c-scanner-code-8f489f)测试 MPU6050,结果它在两个 MPU6050 上都能正常工作,但仍然是相同的零错误。接下来我更改了引脚和代码以反映这一点,但仍然是相同的零错误。最后,我在网上寻求帮助,除了有人提到“将 PWR_MGMT_1 寄存器中的 SLEEP 位低位”(来自:MPU6050 only outputs 0x00 on I2C with MicroPython)之外,找不到任何有用的东西,但是我不知道那是什么意思,而且我没有足够的提到对那个问题发表评论,所以我不能问。

【问题讨论】:

  • 你可以用我的MPU6050 driver。它绝对有效。我为 RPi Pico 制作了它。
  • 就睡眠位而言,寄存器0x6B的第6位为睡眠位。通过将其设置为 0,您可以退出睡眠模式。我上面发布的驱动程序已经有一个用于所有选项的界面,包括启用/禁用睡眠。
  • 抱歉,我对 micropython 和 Thonny 还是有点菜鸟,所以我可能需要一些帮助。我下载并运行了 MPU6050.py 并将其上传到 pico,我知道这有点违背 GitHub 页面上的说明,但我不知道如何冻结代码或如何运行 .mpy 文件Thonny 说它无法识别 .mpy 文件。当我运行 .py 代码时,它只是在 shell 中创建了一个空行,所以我认为我运行的代码不正确,但我不知道如何让它工作。所以错误仍然存​​在,我仍然得到所有的零
  • 我不知道还能为你做什么。我给了你一个绝对有效的驱动程序,我的文档非常详尽。有字面上的复制/粘贴示例和解释段落。 .mpy 版本只是 .py 版本,编译为 .mpy。使用哪个并不重要,除非您关心少量的额外空间并且可能会稍微加快速度。如果是这样,请使用“.mpy”
  • 感谢您的帮助,我在过去几天尝试查找如何访问第 6 位,因为我已经使 0x6B 等于 0,我认为这会让它保持清醒。如上所述,我无法打开界面,所以我确信我做错了什么,再次感谢

标签: python micropython raspberry-pi-pico mpu6050


【解决方案1】:

我添加了这段代码来初始化 MPU6050:mpu6050_init(i2c) 到我的代码末尾(就在“steps = 0 #step counter”位之前)。这是在代码顶部附近调用一个函数来初始化电路板以退出睡眠模式,这就是导致设备进入“睡眠模式”的原因。

【讨论】:

    猜你喜欢
    • 2022-08-15
    • 2022-08-14
    • 2021-10-21
    • 1970-01-01
    • 2022-09-25
    • 2022-11-02
    • 1970-01-01
    • 2022-10-18
    • 2023-01-03
    相关资源
    最近更新 更多