废话,可以跳过
前段时间买了一个GY87_10轴陀螺仪模块,就是这个货
刚开始以为这个模块也就是把三个传感器集成在了一起, 结果买回来才发现QMC5883L是连接在MPU6050的备用iic上, 并不能直接使用,要先把备用iic连接到主iic上, 就是这样
这就引发了一个问题,我比较喜欢用dmp解算,因为6050自带的dmp航向角几乎很少偏移,就算一直转圈圈,偏移得也很少, 可dmp需要独占iic总线(dmp-mpu6050内部), 也就是两个只能二选一, 自己用融合算法之类的,都打不到dmp的效果,(不借助磁力计的情况下,yaw偏差都很大),所以才买了GY-95T九轴传感器
正文
买模块自带的arduino程序并不能用在esp32上,表面上看起来就只有串口初始化的差异,实际上坑有点多,比如温度一直不准, 自己照着说明书写的一个程序,花了我一晚上
废话不多说,上代码 硬件连接是10,和11 这个用的是串口直接输出数据
#include <Arduino.h>
typedef struct
{
int16_t roll;
int16_t pitch;
int16_t yaw;
uint8_t leve;
int16_t temp;
} gy;
// 定义 UART 对象,这里使用 UART2
HardwareSerial mySerial(2);
byte add = 0xa4;
byte len = 0, start_reg = 0;
unsigned char Re_buf[35], counter = 0;
unsigned char sign = 0;
gy my_95Q;
// 计算校验和
byte calculateChecksum(unsigned char *data, int length)
{
byte sum = 0;
for (int i = 0; i < length; i++)
{
sum += data[i];
}
return sum & 0xFF;
}
// 发送写寄存器指令
void writeRegister(byte reg, byte v