龙邱MPU9250传感器 | 使用ESP32 模块进行测试
Posted 卓晴
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了龙邱MPU9250传感器 | 使用ESP32 模块进行测试相关的知识,希望对你有一定的参考价值。
简 介: 利用ESP32 MicroPython对于来自于龙邱的MPU9250进行初步测试。
关键词
: MPU9250,I2C,ESP32,软件I2C
§01 MPU9250
手边存在几个上学期来自于 龙邱的MPU9250传感器 ,为了利用其今后做实验,使用ESP32 MicroPython实验板对其初步进行测试。
▲ 图1.1.0 MPU9250 模块
一、基本信息
根据 MPU9250 TB网页上 的介绍这个模块是一款九轴IMU。在芯片的丝印上显示 “MP92”字样。
1、芯片信息
MPU9250 九轴产品中文说明书 : https://max.book118.com/html/2017/0906/132114737.shtm 可以知道该模块的基本信息:
- 工作电压: 3.3V;
- 编程接口: SPI, I2C
2、模块接口
▲ 图1.1.1 模块接口
序号 | 名称 | 功能 |
---|---|---|
PIN1 | GND | 电源地 |
PIN2 | 3V3 | 3.3V电源 |
PIN3 | SCL/SCK | I2C/SPI 时钟信号 |
PIN4 | SDA/SDI | I2C数据信号;SPI数据输入 |
PIN5 | AD0/SDO | I2C地址选择(1101001);SPI数据输出 |
PIN6 | CS | 片选信号 |
PIN7 | INT1 | 终端数字输出信号 |
PIN8 | FSYNC | 数字同步输入帧,若不同接地 |
(1) I2C接口
-
I2C地址:
-
AD0=0
:1101000
AD0=1
:1101001
(2) SPI接口
▲ 图1.1.2 SPI 接口时序特性
下面是选择芯片不同的接口形式:
- nCS 接高电平: I2C总线;
- nCS接低电平:SPI 总线;
▲ 图1.1.3 两种不同接口的配置
▲ 图1.1.4 I2C总线使用模式
二、上电测试
1、接口上拉电阻
使用万用表测量模块的 CLK
,SDK
与3.3V
之间之间的电阻,为10k
Ω,这说明在模块中内部使用了R4,R5
(10k
Ω)使用了上拉电阻对于 SDK
, CLK
进行了偏置。
2、端口配置
-
MP9255模块端口:
-
A0
: GND
CS
: 3.3V
FSYNC
:GND
INT
:NULL
▲ 图1.2.1 配置模块端口
§02 ESP32测试
一、基本测试
1、管脚配置
根据 MicroPython ESP32手册 中关于 软件I2C配置,可以使用ESP32任意管脚作为I2C管脚。
根据 ESP32-S模块转接板设计与实现 对于ESP32转接模块描述,使用PIO的最右边两个管脚分别作为I2C关节。
-
ESP32I2C管脚:
-
SCL
:IO2
SDA
:IO15
▲ 图2.1.1 I2C管脚配置
◎ 注: 使用RXD2,TXD2作为I2C的 SCL,SDA会出现输出低电平的情况,原因不详。
▲ 图2.1.2 连接I2C引脚
2、扫描设备
扫描I2C设备,可以获得: 【104】: 0b1101000
from machine import Pin,Timer,SoftI2C
import time
import math
led0 = Pin(5, Pin.OUT)
led1 = Pin(18, Pin.OUT)
i2c = SoftI2C(scl=Pin(16), sda=Pin(17), freq=100000)
scan = i2c.scan()
print(scan)
print('Begin ...')
while True:
led0.on()
led1.off()
time.sleep_ms(200)
led0.off()
led1.on()
time.sleep_ms(200)
二、读取数据
在 MPU9250的详细功能 给出了MPU9250 界面读写的详细过程。 MPU9250 数据手册 下载链接。
#!/usr/local/bin/python
# -*- coding: gbk -*-
#============================================================
# TEST1.PY -- by Dr. ZhuoQing 2021-09-20
#
# Note:
#============================================================
from machine import Pin,Timer,SoftI2C
import time
import math
led0 = Pin(5, Pin.OUT)
led1 = Pin(17, Pin.OUT)
i2c = SoftI2C(scl=Pin(2), sda=Pin(15), freq=100000)
#------------------------------------------------------------
MPU9250_ADDRESS = 0x68
MAG_ADDRESS = 0x0c
GYRO_FULL_SCALE_250_DPS = 0x00
GYRO_FULL_SCALE_500_DPS = 0x08
GYRO_FULL_SCALE_1000_DPS = 0x10
GYRO_FULL_SCALE_2000_DPS = 0x18
ACC_FULL_SCALE_2_G = 0x00
ACC_FULL_SCALE_4_G = 0x08
ACC_FULL_SCALE_8_G = 0x10
ACC_FULL_SCALE_16_G = 0x18
#------------------------------------------------------------
def MPU9250Setup():
i2c.writeto_mem(MPU9250_ADDRESS, 27, bytearray(GYRO_FULL_SCALE_2000_DPS))
# Configure gyroscope range
i2c.writeto_mem(MPU9250_ADDRESS, 28, bytearray(ACC_FULL_SCALE_16_G))
# Configure accelerometer range
i2c.writeto_mem(MPU9250_ADDRESS, 0x37, bytearray(0x2))
# Set by pass mode for magnetometer
# time.sleep_ms(10)
# i2c.writeto_mem(MAG_ADDRESS, 0x0a, bytearray(0x16))
# Request first magnetometer single measurement
#------------------------------------------------------------
def bytes2short(b):
a = int.from_bytes(b, 'big', True)
if a > 0x7fff:
return -(0x10000 - a)
else: return a
def MPU9250read():
buf = bytearray(14)
buf = i2c.readfrom_mem(MPU9250_ADDRESS, 0x3b, 14)
ax = bytes2short(buf[0:2])
ay = bytes2short(buf[2:4])
az = bytes2short(buf[4:6])
gx = bytes2short(buf[8:10])
gy = bytes2short(buf[10:12])
gz = bytes2short(buf[12:14])
temp = bytes2short(buf[6:8])
return (ax,ay,az),(gx,gy,gz), temp
#------------------------------------------------------------
MPU9250Setup()
print(MPU9250read())
#------------------------------------------------------------
while True:
led0.on()
led1.off()
time.sleep_ms(200)
led0.off()
led1.on()
time.sleep_ms(200)
print(MPU9250read())
#------------------------------------------------------------
# END OF FILE : TEST1.PY
#============================================================
※ 测试结论 ※
测试了ESP32的 软件 I2C总线功能。并利用ESP32读取MPU9250 的加速度以及陀螺仪的数据。
遗留问题: 在读取磁力计数据的时候遇到了问题。无法正确访问磁力计的数据。
■ 相关文献链接:
- 龙邱的MPU9250传感器
- MPU9250 九轴产品中文说明书
- MicroPython ESP32手册
- ESP32-S模块转接板设计与实现
- MPU9250的详细功能
- MPU9250 数据手册
- MPU9250寄存器手册,英文原版
● 相关图表链接:
以上是关于龙邱MPU9250传感器 | 使用ESP32 模块进行测试的主要内容,如果未能解决你的问题,请参考以下文章
项目ES32获取mpu9250数据网页交互显示 (程序1) esp32获取mpu9250数据
MPU9250 卡在使用 WOM 的 ESP8266 的复位循环中